diff --git a/src/services/aiUsage.js b/src/services/aiUsage.js index 0fbf3b3..3b4222c 100644 --- a/src/services/aiUsage.js +++ b/src/services/aiUsage.js @@ -30,8 +30,9 @@ const TEXT_PRICES_USD_PER_1M = { // USD за 1 картинку (приблизительно — aiguoguo не публикует точно). const IMAGE_PRICES_USD = { + 'gpt-image-2': 0.04, // новая модель, ориентировочно как gpt-image-1 'gpt-image-1': 0.04, - 'gpt-image-1-mini': 0.01, // оценка, поправь после первого месяца использования + 'gpt-image-1-mini': 0.01, 'dall-e-3': 0.04, 'dall-e-2': 0.02, }; diff --git a/src/services/covers.js b/src/services/covers.js index 84f240e..ec982dc 100644 --- a/src/services/covers.js +++ b/src/services/covers.js @@ -278,6 +278,7 @@ async function generateCoverViaImageGenerations({ prompt }) { prompt: prompt.slice(0, 4000), n: 1, size: '1024x1024', + response_format: 'url', // рекомендовано провайдером: url быстрее чем b64 (~5MB) }, { headers: { Authorization: `Bearer ${config.ai.imageApiKey}` }, @@ -308,14 +309,13 @@ async function generateCoverViaImageGenerations({ prompt }) { requestType: 'image', model, imageCount: 1, durationMs: Date.now() - started, succeeded: true, }).catch(() => {}); - // b64_json или url - const b64 = item.b64_json; - if (b64) return { bytes: Buffer.from(b64, 'base64'), format: 'png' }; + // Приоритет: url (быстро) → b64_json (fallback для старых моделей) if (item.url) { const r = await axios.get(item.url, { responseType: 'arraybuffer', timeout: 60_000 }); return { bytes: Buffer.from(r.data), format: 'png' }; } - throw new Error('No b64_json or url in response'); + if (item.b64_json) return { bytes: Buffer.from(item.b64_json, 'base64'), format: 'png' }; + throw new Error('No url or b64_json in response'); } /**