AI-модель tududi задаётся явно, правило роутинга в bifrost убрано

- с tududi 1.3.1 модель берётся из LLM_MODEL, а не захардкожена — шлём
  deepseek/deepseek-v4-pro, Bifrost резолвит провайдера по префиксу
- ключ и base URL переведены на пару LLM_*, приоритетную над OPENAI_*
- routing_rules оставлен пустым массивом, а не удалён: при
  source_of_truth=config.json отсутствующая секция не трогает строки в config.db
This commit is contained in:
av
2026-08-06 10:00:47 +03:00
parent a09f3c629e
commit 85ebeb4197
2 changed files with 17 additions and 23 deletions
+10 -18
View File
@@ -16,11 +16,15 @@
thinking-mode gating, корректные reasoning-поля для v4-моделей issue #3139): thinking-mode gating, корректные reasoning-поля для v4-моделей issue #3139):
не нужны ни custom_provider_config, ни base_url (дефолт api.deepseek.com). не нужны ни custom_provider_config, ни base_url (дефолт api.deepseek.com).
Роутинг декларативно через governance.routing_rules (требует включённого Роутинг правилами больше не нужен: клиенты шлют имя модели с префиксом
config_store). tududi ходит на drop-in эндпоинт /openai и шлёт ЗАХАРДКОЖЕННОЕ провайдера (tududi deepseek/deepseek-v4-pro на drop-in эндпоинт /openai),
имя модели gpt-4o-mini «голым». Правило ловит его по cel и подменяет на Bifrost резолвит провайдера сам. Раньше здесь жило правило, подменявшее
реальную модель deepseek/deepseek-v4-pro. Фолбэка нет единственный провайдер. захардкоженное у tududi gpt-4o-mini; с tududi 1.3.1 модель задаётся переменной.
Чтобы сменить бэкенд-модель, правим ТОЛЬКО этот файл, конфиг tududi не трогаем.
routing_rules оставлен ПУСТЫМ МАССИВОМ, а не удалён: при source_of_truth=config.json
авторитетно перезаписываются только присутствующие секции, а отсутствующие
оставляют строки в config.db нетронутыми удали ключ, и старое правило
продолжило бы жить в БД (config.go, isGovernanceSectionPresent).
Эти Jinja-комментарии в готовый config.json не попадают (на выходе чистый JSON). #} Эти Jinja-комментарии в готовый config.json не попадают (на выходе чистый JSON). #}
{ {
@@ -49,18 +53,6 @@
"config": { "path": "/app/store/logs.db" } "config": { "path": "/app/store/logs.db" }
}, },
"governance": { "governance": {
"routing_rules": [ "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
}
]
} }
} }
+7 -5
View File
@@ -69,11 +69,13 @@ services:
- FF_ENABLE_MCP=true - FF_ENABLE_MCP=true
# AI-фичи через Bifrost (drop-in OpenAI-эндпоинт в общей сети — НЕ localhost, # AI-фичи через Bifrost (drop-in OpenAI-эндпоинт в общей сети — НЕ localhost,
# это сам контейнер). Модель у tududi захардкожена как gpt-4o-mini; Bifrost # это сам контейнер). С 1.3.1 модель задаётся переменной, а не захардкожена,
# по governance-правилу роутит её на deepseek-v4-pro. openai-node сам # поэтому шлём deepseek/deepseek-v4-pro сразу: Bifrost резолвит провайдера по
# подхватывает OPENAI_BASE_URL. # префиксу, и подменять модель governance-правилом больше не нужно.
- OPENAI_API_KEY={{ tududi_openai_api_key }} # Пара LLM_* имеет приоритет над устаревшей OPENAI_*, значения те же.
- OPENAI_BASE_URL=http://bifrost_app:8080/openai - LLM_API_KEY={{ tududi_openai_api_key }}
- LLM_BASE_URL=http://bifrost_app:8080/openai
- LLM_MODEL=deepseek/deepseek-v4-pro
networks: networks:
web_proxy_network: web_proxy_network: