main
Backend Deploy 🚀 / build-and-deploy (push) Has been cancelled

This commit is contained in:
Harun CAN
2026-05-06 10:48:07 +02:00
parent 2d6f068363
commit a40619ef33
44 changed files with 4295 additions and 126 deletions
+59 -54
View File
@@ -257,6 +257,7 @@ IMPORTANT: Only output valid JSON, no markdown code blocks or other text.`;
prompt: string,
aspectRatio: '16:9' | '9:16' | '1:1' = '16:9',
isIllustration: boolean = false,
forceImagen: boolean = false,
): Promise<{ buffer: Buffer; mimeType: string } | null> {
if (!this.isAvailable()) {
throw new Error('Gemini AI is not available. Check your configuration.');
@@ -287,73 +288,77 @@ IMPORTANT: Only output valid JSON, no markdown code blocks or other text.`;
: `SUBJECT: ${prompt}\n\nINSTRUCTIONS: Generate a high-quality photorealistic cinematic image of the EXACT SUBJECT described above. Use professional lighting and make it highly detailed. Aspect ratio: ${aspectRatio} ${orientation}. DO NOT deviate from the SUBJECT.`;
// ── Katman 1: gemini-2.5-flash-image (Nano Banana) — 2 deneme ──
for (let attempt = 1; attempt <= 2; attempt++) {
try {
this.logger.log(`🔄 Katman 1 (deneme ${attempt}/2): ${primaryModel}`);
const result = await this.tryGenerateContentImage(
primaryModel,
enhancedPrompt,
);
if (result && result.buffer.length > 0) {
this.logger.log(
`✅ Görsel üretildi (${primaryModel}): ${(result.buffer.length / 1024).toFixed(1)} KB`,
if (!forceImagen) {
for (let attempt = 1; attempt <= 2; attempt++) {
try {
this.logger.log(`🔄 Katman 1 (deneme ${attempt}/2): ${primaryModel}`);
const result = await this.tryGenerateContentImage(
primaryModel,
enhancedPrompt,
);
return { buffer: result.buffer, mimeType: result.mimeType };
}
if (result && result.buffer.length > 0) {
this.logger.log(
`✅ Görsel üretildi (${primaryModel}): ${(result.buffer.length / 1024).toFixed(1)} KB`,
);
return { buffer: result.buffer, mimeType: result.mimeType };
}
const reason = result?.errorReason || 'null response';
this.logger.warn(
`⚠️ ${primaryModel} deneme ${attempt}: görsel döndürmedi (${reason})`,
);
if (
['IMAGE_OTHER', 'SAFETY', 'PROHIBITED_CONTENT'].includes(reason)
) {
const reason = result?.errorReason || 'null response';
this.logger.warn(
`🚫 Güvenlik/Politika filtresi tetiklendi (${reason}). Denemeler iptal ediliyor.`,
`⚠️ ${primaryModel} deneme ${attempt}: görsel döndürmedi (${reason})`,
);
break; // Fail fast for safety blocks
}
if (attempt < 2) await this.sleep(2000);
} catch (err1: any) {
this.logger.warn(
`⚠️ ${primaryModel} deneme ${attempt} hata: ${err1.message?.substring(0, 200)}`,
);
if (attempt < 2) await this.sleep(2000);
if (
['IMAGE_OTHER', 'SAFETY', 'PROHIBITED_CONTENT'].includes(reason)
) {
this.logger.warn(
`🚫 Güvenlik/Politika filtresi tetiklendi (${reason}). Denemeler iptal ediliyor.`,
);
break; // Fail fast for safety blocks
}
if (attempt < 2) await this.sleep(2000);
} catch (err1: any) {
this.logger.warn(
`⚠️ ${primaryModel} deneme ${attempt} hata: ${err1.message?.substring(0, 200)}`,
);
if (attempt < 2) await this.sleep(2000);
}
}
}
// ── Katman 2: gemini-3.1-flash-image-preview (Nano Banana 2) ──
try {
this.logger.log(`🔄 Katman 2: ${fallbackModel}`);
const result = await this.tryGenerateContentImage(
fallbackModel,
enhancedPrompt,
);
if (result && result.buffer.length > 0) {
this.logger.log(
`✅ Görsel üretildi (${fallbackModel}): ${(result.buffer.length / 1024).toFixed(1)} KB`,
if (!forceImagen) {
try {
this.logger.log(`🔄 Katman 2: ${fallbackModel}`);
const result = await this.tryGenerateContentImage(
fallbackModel,
enhancedPrompt,
);
return { buffer: result.buffer, mimeType: result.mimeType };
}
this.logger.warn(
`⚠️ ${fallbackModel}: görsel döndürmedi (${result?.errorReason || 'null response'})`,
);
if (
['IMAGE_OTHER', 'SAFETY', 'PROHIBITED_CONTENT'].includes(
result?.errorReason || '',
)
) {
if (result && result.buffer.length > 0) {
this.logger.log(
`✅ Görsel üretildi (${fallbackModel}): ${(result.buffer.length / 1024).toFixed(1)} KB`,
);
return { buffer: result.buffer, mimeType: result.mimeType };
}
this.logger.warn(
`🚫 Katman 2 Güvenlik/Politika filtresi tetiklendi. Katman 3'e geçiliyor.`,
`⚠️ ${fallbackModel}: görsel döndürmedi (${result?.errorReason || 'null response'})`,
);
if (
['IMAGE_OTHER', 'SAFETY', 'PROHIBITED_CONTENT'].includes(
result?.errorReason || '',
)
) {
this.logger.warn(
`🚫 Katman 2 Güvenlik/Politika filtresi tetiklendi. Katman 3'e geçiliyor.`,
);
}
} catch (err2: any) {
this.logger.warn(
`⚠️ ${fallbackModel} hata: ${err2.message?.substring(0, 200)}`,
);
}
} catch (err2: any) {
this.logger.warn(
`⚠️ ${fallbackModel} hata: ${err2.message?.substring(0, 200)}`,
);
}
// ── Katman 3: Imagen 4 Fast (generateImages API) ──