feat(ai): section Fournisseur & modele compacte + correctifs menus @/ (#82, BUG-007, BUG-008)
Refonte de la section Fournisseur & modele de l'assistant : capacites regroupees dans une bulle d'information (survol/clic/appui long) au lieu d'une liste permanente, et liste de modeles avec recherche. Correctifs : detection Unicode + filtrage insensible aux accents des commandes / et mentions @, navigation clavier fiable, et prise en compte du contexte ad-hoc en mode General cote backend.
This commit is contained in:
@@ -747,6 +747,56 @@ class TestBooksLMChatModes:
|
||||
assert resp.status_code in (200, 500), f"unexpected {resp.status_code}: {resp.text[:200]}"
|
||||
assert resp.status_code != 422
|
||||
|
||||
def test_general_chat_includes_adhoc_files(self, bookslm_client, monkeypatch):
|
||||
"""`@` ad-hoc files must be read even in General mode (BUG-008)."""
|
||||
import backend.bookslm_routes as routes
|
||||
|
||||
captured = {}
|
||||
|
||||
async def fake_stream(messages, **kwargs):
|
||||
captured["messages"] = messages
|
||||
yield "ok"
|
||||
|
||||
monkeypatch.setattr(routes, "stream_completion", fake_stream)
|
||||
monkeypatch.setattr(routes, "_resolve_provider_name", lambda requested: "deepseek")
|
||||
|
||||
token, _ = _login_bookslm(bookslm_client)
|
||||
resp = bookslm_client.post(
|
||||
"/api/ai/bookslm/chat",
|
||||
json={
|
||||
"mode": "general",
|
||||
"vault": "TestVault",
|
||||
"extra_files": ["notes/note1.md"],
|
||||
"message": "Résume",
|
||||
},
|
||||
headers={"Authorization": f"Bearer {token}"},
|
||||
)
|
||||
assert resp.status_code == 200, resp.text[:200]
|
||||
system_prompt = captured["messages"][0]["content"]
|
||||
assert "First note content" in system_prompt, "ad-hoc file content missing from prompt"
|
||||
|
||||
def test_general_chat_without_adhoc_ignores_vault(self, bookslm_client, monkeypatch):
|
||||
"""General mode without ad-hoc context stays vault-independent."""
|
||||
import backend.bookslm_routes as routes
|
||||
|
||||
captured = {}
|
||||
|
||||
async def fake_stream(messages, **kwargs):
|
||||
captured["messages"] = messages
|
||||
yield "ok"
|
||||
|
||||
monkeypatch.setattr(routes, "stream_completion", fake_stream)
|
||||
monkeypatch.setattr(routes, "_resolve_provider_name", lambda requested: "deepseek")
|
||||
|
||||
token, _ = _login_bookslm(bookslm_client)
|
||||
resp = bookslm_client.post(
|
||||
"/api/ai/bookslm/chat",
|
||||
json={"mode": "general", "vault": "UnknownVault", "message": "Bonjour"},
|
||||
headers={"Authorization": f"Bearer {token}"},
|
||||
)
|
||||
assert resp.status_code == 200, resp.text[:200]
|
||||
assert captured["messages"][0]["content"]
|
||||
|
||||
|
||||
# ── Tool-calling agent endpoint ───────────────────────────────────────
|
||||
|
||||
|
||||
Reference in New Issue
Block a user