Files
pet-project-server/files/bifrost/config.template.json
T
av 5cd66d01bc
Linting / YAML Lint (push) Has been cancelled
Linting / Ansible Lint (push) Has been cancelled
Tududi: add task tracke application
2026-07-04 16:56:01 +03:00

72 lines
3.6 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{# Конфиг Bifrost ИСТОЧНИК ПРАВДЫ. Рендерится в config_dir/config.json (app-dir
Bifrost смонтирован на /app/data), Bifrost читает его при старте.
source_of_truth=config.json: на каждом старте секции этого файла авторитетно
перезаписывают состояние в config.db (git выигрывает у правок через UI).
Раскладка каталогов (по требованию «конфиги/данные раздельно»):
- config_dir -> /app/data : сам config.json (app-dir Bifrost по умолчанию);
- data_dir -> /app/store : config.db + logs.db (пути заданы явно ниже).
Несекретные настройки (base URL провайдера, имя модели) заданы здесь прямо
строками они больше нигде не переиспользуются. Секреты (ключ DeepSeek,
encryption_key) рендерятся строками из vars/secrets.yml, поэтому готовый
config.json секретный файл (плейбук пишет его на 0600).
Провайдер deepseek заведён как КАСТОМНЫЙ OpenAI-совместимый
(base_provider_type=openai + network_config.base_url) нативного провайдера
deepseek у Bifrost нет. ВАЖНО: Bifrost сам дописывает к base_url путь
/v1/chat/completions, поэтому base_url задаём БЕЗ хвостового /v1.
Роутинг декларативно через governance.routing_rules (требует включённого
config_store). tududi ходит на drop-in эндпоинт /openai и шлёт ЗАХАРДКОЖЕННОЕ
имя модели gpt-4o-mini «голым». Правило ловит его по cel и подменяет на
реальную модель deepseek/deepseek-v4-pro. Фолбэка нет единственный провайдер.
Чтобы сменить бэкенд-модель, правим ТОЛЬКО этот файл, конфиг tududi не трогаем.
Эти Jinja-комментарии в готовый config.json не попадают (на выходе чистый JSON). #}
{
"$schema": "https://www.getbifrost.ai/schema",
"encryption_key": {{ bifrost_encryption_key | to_json }},
"client": {
"enable_logging": true
},
"providers": {
"deepseek": {
"keys": [
{ "name": "deepseek-primary", "value": {{ bifrost_deepseek_api_key | to_json }}, "models": ["*"], "weight": 1.0 }
],
"network_config": { "base_url": "https://api.deepseek.com", "max_retries": 2 },
"custom_provider_config": {
"base_provider_type": "openai",
"allowed_requests": { "chat_completion": true, "chat_completion_stream": true }
}
}
},
"config_store": {
"enabled": true,
"type": "sqlite",
"config": { "path": "/app/store/config.db" },
"source_of_truth": "config.json"
},
"logs_store": {
"enabled": true,
"type": "sqlite",
"config": { "path": "/app/store/logs.db" }
},
"governance": {
"routing_rules": [
{
"id": "tududi-gpt4omini-to-deepseek-pro",
"name": "Tududi gpt-4o-mini -> DeepSeek v4 Pro",
"enabled": true,
"cel_expression": "model == 'gpt-4o-mini'",
"targets": [
{ "provider": "deepseek", "model": "deepseek-v4-pro", "weight": 1 }
],
"scope": "global",
"priority": 0
}
]
}
}