Tududi: add task tracke application
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
{# Конфиг 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
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user