feat: RouterAI as 3rd image fallback via /responses + image_generation

- app_settings: ROUTERAI_BASE_URL, ROUTERAI_API_KEY, ROUTERAI_IMAGE_MODEL
- config/index.js: routeraiBaseUrl, routeraiApiKey, routeraiImageModel
- covers.js: generateCoverViaRouterAI() через /responses endpoint
  Цепочка: aiguoguo → Nyxos → RouterAI → local SVG
This commit is contained in:
Ник (Claude)
2026-06-11 13:13:31 +03:00
parent 8e1b6e8cda
commit 2a61cc08c2
2 changed files with 43 additions and 2 deletions
+3
View File
@@ -70,6 +70,9 @@ async function reloadAi() {
config.ai.imageApiKey = pick('AI_IMAGE_API_KEY', 'AI_IMAGE_API_KEY', config.ai.apiKey);
config.ai.imageFallbackBaseUrl = (s['AI_IMAGE_FALLBACK_BASE_URL'] && s['AI_IMAGE_FALLBACK_BASE_URL'].trim()) || 'https://api.aiguoguo199.com/v1';
config.ai.imageFallbackApiKey = (s['AI_IMAGE_FALLBACK_API_KEY'] && s['AI_IMAGE_FALLBACK_API_KEY'].trim()) || config.ai.imageApiKey;
config.ai.routeraiBaseUrl = (s['ROUTERAI_BASE_URL'] || 'https://routerai.ru/api/v1').trim();
config.ai.routeraiApiKey = (s['ROUTERAI_API_KEY'] || '').trim() || null;
config.ai.routeraiImageModel = (s['ROUTERAI_IMAGE_MODEL'] || 'openai/gpt-5-image-mini').trim();
config.ai.imageModel = pick('AI_IMAGE_MODEL', 'AI_MODEL_IMAGE', 'gpt-image-2');
config.ai.imageModelViaResponses = pick('AI_IMAGE_MODEL_VIA_RESPONSES', 'AI_MODEL_IMAGE_VIA_RESPONSES', 'gpt-5.5');
config.ai.models.post = pick('AI_TEXT_MODEL_POST', 'AI_MODEL_POST', 'claude-haiku-4-5-20251001');