Skip to content

Commit 4aae18d

Browse files
Fix confidence score fallback in RAGService and update test cases for accuracy
1 parent 4269230 commit 4aae18d

3 files changed

Lines changed: 18 additions & 10 deletions

File tree

app/models.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from typing import Optional
2+
from sqlmodel import SQLModel, Field
3+
4+
class FAQItem(SQLModel, table=True):
5+
__table_args__ = {"extend_existing": True}
6+
id: Optional[int] = Field(default=None, primary_key=True)
7+
question: str
8+
answer: str

app/services/rag_engine.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,6 @@ def search(self, query: str, threshold: float = 0.45) -> Dict:
156156
# Fallback sous le seuil
157157
return {
158158
"answer": None,
159-
"confidence": similarity,
159+
"confidence": 0.0,
160160
"matched_question": metadata["original_question"],
161161
}

tests/test_retrieval.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,32 +28,32 @@ def test_rag_search_nominal(session: Session):
2828
# Recharger le moteur RAG (synchronisation avec la DB)
2929
engine = RAGService()
3030
engine.reload_from_db(session)
31-
# MOCKER la collection ChromaDB pour éviter le TypeError.
3231
engine.collection = MagicMock()
3332
engine.collection.query.return_value = {
3433
"ids": [["1"]],
35-
"distances": [[0.1]], # Doit être un float, pas un Mock
34+
"distances": [[0.1]],
3635
"metadatas": [[{
3736
"answer": "Allez sur la page inscription.",
38-
"question": "Comment créer un compte ?"
37+
"original_question": "Comment créer un compte ?"
3938
}]],
4039
}
41-
# Tester une recherche pertinente
40+
# Test
4241
result = engine.search("créer compte utilisateur")
43-
# Le score devrait être élevé car la question est proche
44-
assert result["confidence"] > 0.0
45-
assert result["answer"] == "Allez sur la page inscription."
42+
assert result["confidence"] > 0.8
43+
assert "inscription" in result["answer"]
4644

4745
def test_rag_search_no_match(session: Session):
4846
"""Vérifie le comportement quand rien ne correspond."""
4947
engine = RAGService()
5048
engine.reload_from_db(session)
51-
# MOCKER la collection pour simuler une distance élevée (pas de match).
5249
engine.collection = MagicMock()
5350
engine.collection.query.return_value = {
5451
"ids": [["1"]],
5552
"distances": [[1.5]],
56-
"metadatas": [[{"answer": "Réponse non pertinente"}]]
53+
"metadatas": [[{
54+
"answer": "Réponse non pertinente",
55+
"original_question": "Question non pertinente"
56+
}]]
5757
}
5858
result = engine.search("Une question qui n'a aucun sens ici")
5959
assert result["answer"] is None

0 commit comments

Comments
 (0)