Some checks failed
E2E Tests / e2e (push) Waiting to run
Tests unitaires / Web (Angular · vitest + couverture) (push) Successful in 26s
Build & Push Images / tests (push) Failing after 13s
Build & Push Images / build (brain) (push) Has been skipped
Build & Push Images / build (core) (push) Has been skipped
Build & Push Images / build (web) (push) Has been skipped
Build & Push Images / build-switcher (push) Has been skipped
Tests unitaires / Brain (Python · pytest + couverture) (push) Successful in 1m12s
Tests unitaires / Core (Java · mvn test + JaCoCo) (push) Failing after 1m28s
Mise en place de tests unitaires coté Python et Angular Mise en place de la couverture de test directement dans le workflow : le programme ne build pas si jamais un test échoue Passage en v0.16.2 en conséquence
55 lines
1.9 KiB
Python
55 lines
1.9 KiB
Python
"""Tests de la réécriture de question autonome (app.application.query_rewrite)."""
|
|
from __future__ import annotations
|
|
|
|
from app.application.query_rewrite import standalone_question
|
|
from app.domain.models import ChatMessage
|
|
|
|
|
|
class FakeLLM:
|
|
def __init__(self, response: str | None = None, exc: Exception | None = None) -> None:
|
|
self.response = response
|
|
self.exc = exc
|
|
self.called = False
|
|
|
|
async def generate(self, prompt, *, temperature=None, output_format=None) -> str:
|
|
self.called = True
|
|
if self.exc:
|
|
raise self.exc
|
|
return self.response
|
|
|
|
|
|
async def test_single_turn_returns_last_user_without_calling_llm():
|
|
llm = FakeLLM()
|
|
q = await standalone_question(llm, [ChatMessage(role="user", content="Qui est Strahd ?")])
|
|
assert q == "Qui est Strahd ?"
|
|
assert llm.called is False
|
|
|
|
|
|
async def test_multi_turn_uses_llm_rewrite_and_strips_quotes():
|
|
llm = FakeLLM(response='"Quelles sont les faiblesses de Strahd ?"')
|
|
msgs = [
|
|
ChatMessage(role="user", content="Qui est Strahd ?"),
|
|
ChatMessage(role="assistant", content="Un vampire."),
|
|
ChatMessage(role="user", content="Et ses faiblesses ?"),
|
|
]
|
|
assert await standalone_question(llm, msgs) == "Quelles sont les faiblesses de Strahd ?"
|
|
assert llm.called is True
|
|
|
|
|
|
async def test_llm_failure_falls_back_to_last_user():
|
|
llm = FakeLLM(exc=RuntimeError("LLM HS"))
|
|
msgs = [ChatMessage(role="user", content="A"), ChatMessage(role="user", content="B")]
|
|
assert await standalone_question(llm, msgs) == "B"
|
|
|
|
|
|
async def test_suspiciously_long_rewrite_falls_back():
|
|
llm = FakeLLM(response="x" * 500)
|
|
msgs = [ChatMessage(role="user", content="A"), ChatMessage(role="user", content="B")]
|
|
assert await standalone_question(llm, msgs) == "B"
|
|
|
|
|
|
async def test_empty_messages_returns_empty_string():
|
|
llm = FakeLLM()
|
|
assert await standalone_question(llm, []) == ""
|
|
assert llm.called is False
|