Files
agent/tests/pipeline_setup_v2/runtime/code_qa_eval_adapter.py
T
2026-03-12 16:55:23 +03:00

57 lines
2.3 KiB
Python

from __future__ import annotations
from app.modules.agent.code_qa_runtime import CodeQaRuntimeExecutor
from app.modules.rag.contracts.enums import RagLayer
from app.modules.rag.intent_router_v2 import RepoContext
from tests.pipeline_setup_v2.core.models import ExecutionPayload, V2Case
class CodeQaEvalAdapter:
def __init__(self) -> None:
self._executor = CodeQaRuntimeExecutor(llm=None)
def execute(self, case: V2Case, rag_session_id: str | None) -> ExecutionPayload:
if not rag_session_id:
raise ValueError(f"Case '{case.case_id}' requires rag_session_id or repo_path")
result = self._executor.execute(user_query=case.query, rag_session_id=rag_session_id)
route_result = result.router_result
route = result.diagnostics.router_result
details = {
"case_id": case.case_id,
"query": case.query,
"rag_session_id": rag_session_id,
"actual": {
"intent": route.get("intent"),
"sub_intent": route.get("sub_intent"),
"graph_id": route.get("graph_id"),
"conversation_mode": route.get("conversation_mode"),
"rag_count": len(result.retrieval_result.code_chunks) if result.retrieval_result else 0,
"llm_answer": "",
"answer_mode": result.answer_mode,
"path_scope": tuple(route.get("path_scope") or []),
"symbol_candidates": tuple(route_result.query_plan.symbol_candidates or []) if route_result else (),
"layers": tuple(route.get("layers") or []),
},
"timings_ms": result.diagnostics.timings_ms,
}
actual = dict(details["actual"])
return ExecutionPayload(actual=actual, details=details)
def _repo_context() -> RepoContext:
return RepoContext(
languages=["python"],
available_domains=["CODE", "DOCS"],
available_layers=[
RagLayer.CODE_ENTRYPOINTS,
RagLayer.CODE_SYMBOL_CATALOG,
RagLayer.CODE_DEPENDENCY_GRAPH,
RagLayer.CODE_SEMANTIC_ROLES,
RagLayer.CODE_SOURCE_CHUNKS,
RagLayer.DOCS_MODULE_CATALOG,
RagLayer.DOCS_FACT_INDEX,
RagLayer.DOCS_SECTION_INDEX,
RagLayer.DOCS_POLICY_INDEX,
],
)