fix(agent): purge les api_base LLM obsoletes (Mistral/Cohere /v2)
Un api_base stocke (ex. https://api.mistral.ai/v2) ecrasait l'URL par defaut corrigee et faisait echouer le test de connexion. Desormais: normalisation a l'ecriture (une base egale au defaut n'est pas stockee), possibilite de vider le champ (api_base='' vs None), et migration 14 qui efface les bases obsoletes/redondantes dans user_llm_keys et llm_config. Tests de non-regression ajoutes.
This commit is contained in:
@@ -106,6 +106,50 @@ def test_llm_client_openai_compatible_bases(client):
|
||||
assert PROVIDERS["sensenova"][0].endswith("/compatible-mode/v1")
|
||||
|
||||
|
||||
def test_user_llm_key_api_base_normalization(client):
|
||||
"""A stored api_base equal to the provider default is not persisted as an
|
||||
override, so a corrected provider URL always takes effect."""
|
||||
from app.services.llm_config import get_user_llm_key, upsert_user_llm_key
|
||||
|
||||
uid = _admin_id()
|
||||
# default base → stored as empty (no override)
|
||||
upsert_user_llm_key(uid, "mistral", api_key="sk-test",
|
||||
api_base="https://api.mistral.ai/v1")
|
||||
assert get_user_llm_key(uid, "mistral")["api_base"] == ""
|
||||
# custom base → kept
|
||||
upsert_user_llm_key(uid, "mistral", api_base="https://proxy.example.com/v1")
|
||||
assert get_user_llm_key(uid, "mistral")["api_base"] == "https://proxy.example.com/v1"
|
||||
# api_base="" resets the override, api_base=None keeps it
|
||||
upsert_user_llm_key(uid, "mistral", api_base="")
|
||||
assert get_user_llm_key(uid, "mistral")["api_base"] == ""
|
||||
upsert_user_llm_key(uid, "mistral", api_base="https://proxy.example.com/v1")
|
||||
upsert_user_llm_key(uid, "mistral", default_model="mistral-large-latest")
|
||||
assert get_user_llm_key(uid, "mistral")["api_base"] == "https://proxy.example.com/v1"
|
||||
|
||||
|
||||
def test_migration_clears_stale_llm_api_bases(client):
|
||||
"""Migration 14 clears legacy/incorrect api_base values so the corrected
|
||||
provider default applies (e.g. Mistral `/v2` → `/v1`)."""
|
||||
from app.db import get_conn
|
||||
from app.migrations import _migration_fix_llm_api_bases
|
||||
from app.services.llm_config import get_user_llm_key, upsert_user_llm_key
|
||||
|
||||
uid = _admin_id()
|
||||
upsert_user_llm_key(uid, "mistral", api_key="sk-test")
|
||||
with get_conn() as conn:
|
||||
conn.execute(
|
||||
"UPDATE user_llm_keys SET api_base='https://api.mistral.ai/v2' "
|
||||
"WHERE user_id=? AND provider='mistral'",
|
||||
(uid,),
|
||||
)
|
||||
conn.commit()
|
||||
assert get_user_llm_key(uid, "mistral")["api_base"] == "https://api.mistral.ai/v2"
|
||||
with get_conn() as conn:
|
||||
_migration_fix_llm_api_bases(conn)
|
||||
conn.commit()
|
||||
assert get_user_llm_key(uid, "mistral")["api_base"] == ""
|
||||
|
||||
|
||||
def test_llm_client_offline_no_credentials(client):
|
||||
from app.services.llm_client import LLMClient
|
||||
llm = LLMClient(provider="openai", api_key="")
|
||||
|
||||
Reference in New Issue
Block a user