AI-модуль
AIService — мультипровайдер с fallback chain и бюджет-контролем
Весь AI в проекте идёт через один сервис — src/lib/ai/service.ts. Прямые вызовы SDK провайдеров запрещены.
Использование
import { aiService } from "@/lib/ai/service";
const { result, model, cause, promptVersion } = await aiService.generate({
type: "SCENARIO", // SHORT_TZ | REVISION_PARSE | COMPLETENESS_CHECK | CONTENT_MAKER
task, userId, companyId,
});Типы генераций
| Тип | Что делает |
|---|---|
SCENARIO | Полный сценарий ролика по задаче (scene plan, voiceover, чеклист продакшена) |
SHORT_TZ | Короткое ТЗ из полного |
REVISION_PARSE | Структурирование текста правок клиента |
COMPLETENESS_CHECK | Проверка полноты задачи (хватает ли материалов) |
CONTENT_MAKER | Структура контент-конструктора |
Fallback chain
Gemini (primary) → OpenAI (backup) → Template (детерминированный текст)- Провайдеры и их порядок хранятся в БД (
AIProviderConfig): модель, apiKey,isPrimary,fallbackOrder,isEnabled. - Если провайдер падает или отключён — запрос уходит к следующему.
Template— последний рубеж: генерирует текст по структуре задачи без внешнего API, система никогда не остаётся без ответа.
Код провайдеров: src/lib/ai/providers/ (gemini.ts, openai.ts, template.ts, фабрика в index.ts). Промпты собираются в src/lib/ai/prompts.ts.
Бюджет
AISystemConfig задаёт месячный лимит в USD и порог (по умолчанию 80%):
- каждый вызов пишется в
AIUsageLog(токены, стоимость, кэш); - при достижении порога система автоматически переключается на Template;
- повторные одинаковые запросы отдаются из кэша (по
inputHash).
Admin UI — /ai
Доступ только super_admin (permission admin.manage_ai_budget):
- добавление/редактирование провайдеров, тест соединения;
- месячный бюджет и статус системы (последняя ошибка/успех);
- графики usage и затрат.
API: /api/ai/config, /api/ai/providers, /api/ai/usage — см. API Reference.