53 lines
1.7 KiB
Python
53 lines
1.7 KiB
Python
import pytest
|
|
|
|
from backend.app.services.adaptive_rag_service import AdaptiveRAGService
|
|
|
|
|
|
class _FakeContextCache:
|
|
async def get_session_messages(self, *, tenant_id: int, session_id: int):
|
|
if tenant_id == 1 and session_id == 1500000001:
|
|
return [
|
|
{"role": "user", "content": "上一轮问题"},
|
|
{"role": "assistant", "content": "上一轮回答"},
|
|
]
|
|
return []
|
|
|
|
@staticmethod
|
|
def messages_to_turns(messages):
|
|
turns = []
|
|
q = None
|
|
for row in messages:
|
|
role = row.get("role")
|
|
content = row.get("content")
|
|
if role == "user":
|
|
q = content
|
|
continue
|
|
if role == "assistant" and q:
|
|
turns.append({"question": q, "answer": content})
|
|
q = None
|
|
return turns
|
|
|
|
|
|
def test_external_session_id_stable():
|
|
sid1 = AdaptiveRAGService._external_session_id_from_key("feishu:oc_xxx:ou_yyy")
|
|
sid2 = AdaptiveRAGService._external_session_id_from_key("feishu:oc_xxx:ou_yyy")
|
|
assert sid1 == sid2
|
|
assert sid1 is not None
|
|
assert 1500000000 <= int(sid1) < 2000000000
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_load_recent_conversation_for_external_actor():
|
|
service = AdaptiveRAGService(db=None, tenant_id=1) # type: ignore[arg-type]
|
|
service.context_cache = _FakeContextCache() # type: ignore[assignment]
|
|
|
|
rows = await service._load_recent_conversation(
|
|
asked_by=None,
|
|
asked_via="feishu",
|
|
project_id=None,
|
|
session_id=None,
|
|
external_session_id=1500000001,
|
|
limit=10,
|
|
)
|
|
assert rows == [{"question": "上一轮问题", "answer": "上一轮回答"}]
|