Рефакторинг
This commit is contained in:
+1
-1
@@ -4,7 +4,7 @@ from datetime import datetime
|
||||
from difflib import get_close_matches
|
||||
from time import perf_counter
|
||||
|
||||
from app.modules.rag.intent_router_v2 import ConversationState, IntentRouterV2
|
||||
from app.modules.agent.intent_router_v2 import ConversationState, IntentRouterV2
|
||||
from tests.pipeline_setup.suite_02_pipeline.pipeline_intent_rag.helpers.diagnostics import (
|
||||
apply_retrieval_report,
|
||||
assign_repo_scope,
|
||||
|
||||
@@ -3,9 +3,9 @@ from __future__ import annotations
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
|
||||
from app.modules.agent.code_qa_runtime import CodeQaRuntimeExecutor
|
||||
from app.modules.agent.runtime import AgentRuntimeExecutor
|
||||
from app.modules.agent.llm import AgentLlmService
|
||||
from app.modules.agent.prompt_loader import PromptLoader
|
||||
from app.modules.agent.llm.prompt_loader import PromptLoader
|
||||
from app.modules.shared.gigachat.client import GigaChatClient
|
||||
from app.modules.shared.gigachat.settings import GigaChatSettings
|
||||
from app.modules.shared.gigachat.token_provider import GigaChatTokenProvider
|
||||
@@ -23,7 +23,7 @@ class PipelineRuntime:
|
||||
self._writer = ArtifactWriter(self._config.test_results_dir, test_name=self._config.test_name, run_started_at=self._started_at)
|
||||
self._rag_adapter = None
|
||||
self._session_resolver = None
|
||||
self._executor: CodeQaRuntimeExecutor | None = None
|
||||
self._executor: AgentRuntimeExecutor | None = None
|
||||
|
||||
@property
|
||||
def artifact_path(self) -> Path:
|
||||
@@ -107,9 +107,9 @@ class PipelineRuntime:
|
||||
self._session_resolver = RagSessionResolver(config=self._config, repository=repository)
|
||||
return self._rag_adapter, self._session_resolver
|
||||
|
||||
def _executor_instance(self) -> CodeQaRuntimeExecutor:
|
||||
def _executor_instance(self) -> AgentRuntimeExecutor:
|
||||
if self._executor is None:
|
||||
self._executor = CodeQaRuntimeExecutor(_build_llm())
|
||||
self._executor = AgentRuntimeExecutor(_build_llm())
|
||||
return self._executor
|
||||
|
||||
|
||||
|
||||
+7
-8
@@ -6,17 +6,17 @@ from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
from app.modules.rag.code_qa_pipeline import (
|
||||
from app.modules.agent.runtime.steps.context import (
|
||||
CodeChunkItem,
|
||||
CodeQAPipelineRunner,
|
||||
EvidenceBundle,
|
||||
RetrievalRequest,
|
||||
RetrievalResult,
|
||||
build_retrieval_request,
|
||||
build_retrieval_result,
|
||||
)
|
||||
from app.modules.rag.code_qa_pipeline.evidence_gate import evaluate_evidence
|
||||
from app.modules.rag.code_qa_pipeline.retrieval_request_builder import build_retrieval_request
|
||||
from app.modules.rag.code_qa_pipeline.retrieval_result_builder import build_retrieval_result
|
||||
from app.modules.rag.intent_router_v2 import ConversationState, IntentRouterV2
|
||||
from app.modules.agent.runtime.steps.gates.pre.evidence_gate import evaluate_evidence
|
||||
from app.modules.agent.runtime.legacy_pipeline import CodeQAPipelineRunner
|
||||
from app.modules.agent.intent_router_v2 import ConversationState, IntentRouterV2
|
||||
from tests.unit_tests.rag.intent_router_testkit import repo_context
|
||||
|
||||
_TEST_ROOT = Path(__file__).resolve().parent
|
||||
@@ -133,8 +133,7 @@ def test_evidence_gate_find_tests_insufficient() -> None:
|
||||
|
||||
def test_diagnostics_report_has_failure_reasons() -> None:
|
||||
"""Diagnostics report includes machine-readable failure reasons."""
|
||||
from app.modules.rag.code_qa_pipeline.diagnostics import build_diagnostics_report
|
||||
from app.modules.rag.code_qa_pipeline.evidence_bundle_builder import build_evidence_bundle
|
||||
from app.modules.agent.runtime.steps.context import build_diagnostics_report, build_evidence_bundle
|
||||
|
||||
router = _make_router()
|
||||
text = "Где тесты для НесуществующийКласс?"
|
||||
|
||||
+15
-12
@@ -2,11 +2,14 @@ from __future__ import annotations
|
||||
|
||||
import json
|
||||
|
||||
from app.modules.agent.code_qa_runtime.post_gate import CodeQaPostEvidenceGate
|
||||
from app.modules.agent.code_qa_runtime.prompt_payload_builder import CodeQaPromptPayloadBuilder
|
||||
from app.modules.rag.code_qa_pipeline.answer_synthesis import build_answer_synthesis_input
|
||||
from app.modules.rag.code_qa_pipeline.contracts import CodeChunkItem, EvidenceBundle
|
||||
from app.modules.rag.code_qa_pipeline.retrieval_result_builder import build_retrieval_result
|
||||
from app.modules.agent.runtime.steps.gates.post.post_gate import RuntimePostEvidenceGate
|
||||
from app.modules.agent.runtime.steps.generation.prompt_payload_builder import RuntimePromptPayloadBuilder
|
||||
from app.modules.agent.runtime.steps.context import (
|
||||
build_answer_synthesis_input,
|
||||
build_retrieval_result,
|
||||
CodeChunkItem,
|
||||
EvidenceBundle,
|
||||
)
|
||||
|
||||
|
||||
def test_retrieval_result_separates_semantic_hints_and_relations() -> None:
|
||||
@@ -109,7 +112,7 @@ def test_prompt_payload_builder_adds_explain_constraints() -> None:
|
||||
),
|
||||
)
|
||||
payload = json.loads(
|
||||
CodeQaPromptPayloadBuilder().build(
|
||||
RuntimePromptPayloadBuilder().build(
|
||||
user_query="Explain RuntimeManager",
|
||||
synthesis_input=synthesis,
|
||||
evidence_pack=bundle,
|
||||
@@ -143,7 +146,7 @@ def test_prompt_payload_builder_adds_trace_flow_constraints() -> None:
|
||||
),
|
||||
)
|
||||
payload = json.loads(
|
||||
CodeQaPromptPayloadBuilder().build(
|
||||
RuntimePromptPayloadBuilder().build(
|
||||
user_query="Trace RuntimeManager",
|
||||
synthesis_input=synthesis,
|
||||
evidence_pack=EvidenceBundle(resolved_sub_intent="TRACE_FLOW", resolved_target="RuntimeManager"),
|
||||
@@ -175,7 +178,7 @@ def test_post_gate_rejects_vague_explain_without_concrete_facts() -> None:
|
||||
}
|
||||
],
|
||||
)
|
||||
result = CodeQaPostEvidenceGate().validate(
|
||||
result = RuntimePostEvidenceGate().validate(
|
||||
answer="RuntimeManager имеет responsibilities и управляет системой.",
|
||||
answer_mode="normal",
|
||||
degraded_message="",
|
||||
@@ -209,7 +212,7 @@ def test_post_gate_accepts_explain_with_method_alias_and_call() -> None:
|
||||
}
|
||||
],
|
||||
)
|
||||
result = CodeQaPostEvidenceGate().validate(
|
||||
result = RuntimePostEvidenceGate().validate(
|
||||
answer="RuntimeManager запускает работу через метод start(), а затем вызывает record() у TraceService.",
|
||||
answer_mode="normal",
|
||||
degraded_message="",
|
||||
@@ -236,7 +239,7 @@ def test_post_gate_requires_architecture_relations() -> None:
|
||||
}
|
||||
],
|
||||
)
|
||||
gate = CodeQaPostEvidenceGate()
|
||||
gate = RuntimePostEvidenceGate()
|
||||
vague = gate.validate(
|
||||
answer="RuntimeManager и TraceService образуют центральный компонент runtime.",
|
||||
answer_mode="normal",
|
||||
@@ -270,7 +273,7 @@ def test_post_gate_rejects_architecture_with_retrieval_labels() -> None:
|
||||
}
|
||||
],
|
||||
)
|
||||
result = CodeQaPostEvidenceGate().validate(
|
||||
result = RuntimePostEvidenceGate().validate(
|
||||
answer="RuntimeManager связан с dataflow_slice и строит вокруг него архитектуру.",
|
||||
answer_mode="normal",
|
||||
degraded_message="",
|
||||
@@ -300,7 +303,7 @@ def test_post_gate_trace_flow_requires_sequence_and_blocks_overclaim() -> None:
|
||||
},
|
||||
],
|
||||
)
|
||||
gate = CodeQaPostEvidenceGate()
|
||||
gate = RuntimePostEvidenceGate()
|
||||
vague = gate.validate(
|
||||
answer="RuntimeManager инициализирует службы и полностью восстанавливается.",
|
||||
answer_mode="normal",
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@ from __future__ import annotations
|
||||
from dataclasses import dataclass
|
||||
from datetime import datetime
|
||||
|
||||
from app.modules.rag.intent_router_v2.models import (
|
||||
from app.modules.agent.intent_router_v2.models import (
|
||||
CodeRetrievalFilters,
|
||||
EvidencePolicy,
|
||||
IntentRouterResult,
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@ from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from app.modules.rag.intent_router_v2 import ConversationState, IntentRouterV2
|
||||
from app.modules.agent.intent_router_v2 import ConversationState, IntentRouterV2
|
||||
from tests.pipeline_setup.suite_02_pipeline.pipeline_intent_rag.helpers.phrases_loader import PhraseCatalogLoader
|
||||
from tests.unit_tests.rag.intent_router_testkit import repo_context
|
||||
|
||||
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
{"case_id": "code-open-context-file", "text": "Открой файл src/mail_order_bot/context.py", "mode": "router_only", "run_started_at": "2026-03-12T23:12:21", "rag_session_id": "849fc2c9-e17c-4034-b3b5-2e13d535bb94", "expected_intent": "CODE_QA", "actual_intent": "CODE_QA", "graph_id": "CodeQAGraph", "conversation_mode": "START", "query": "Открой файл src/mail_order_bot/context.py", "symbol_resolution": {"status": "not_requested", "resolved_symbol": null, "alternatives": [], "confidence": 0.0}, "rag_count": 0, "rag_rows": [], "llm_answer": null, "summary": {"router": {"intent": "CODE_QA", "sub_intent": "OPEN_FILE", "confidence": null}, "retrieval": {"profile": "code", "layers_hit": [], "evidence_sufficient": false}, "llm": {"answer_status": "partial", "groundedness": "not_applicable"}}, "diagnostics": {"router_plan": {"intent": "CODE_QA", "sub_intent": "OPEN_FILE", "graph_id": "CodeQAGraph", "retrieval_profile": "code", "conversation_mode": "START", "layers": ["C0_SOURCE_CHUNKS"], "symbol_kind_hint": "unknown", "symbol_candidates": [], "keyword_hints": [], "path_hints": ["src/mail_order_bot/context.py"], "path_scope": ["src/mail_order_bot/context.py"], "doc_scope_hints": [], "retrieval_constraints": {"include_globs": ["src/mail_order_bot/context.py"], "exclude_globs": ["tests/**", "**/test_*.py", "**/*_test.py"], "prefer_globs": [], "test_file_globs": [], "test_symbol_patterns": [], "max_candidates": 20, "fuzzy_symbol_search": {"enabled": false, "max_distance": 2, "top_k": 5}}}, "execution": {"executed_layers": [], "retrieval_mode_by_layer": {}, "top_k_by_layer": {}, "filters_by_layer": {}, "repo_scope": {"repo_id": null, "workspace_id": null}}, "retrieval": null, "constraint_violations": [], "timings_ms": {"router": 0, "symbol_resolution": 0, "retrieval_total": 0, "retrieval_by_layer": {}, "merge_rank": 0, "prompt_build": 0, "llm_call": 0}, "prompt": null, "router": {"conversation_mode": "START", "keyword_hints": [], "path_scope": ["src/mail_order_bot/context.py"]}, "llm": {"used_evidence_count": 0, "missing_evidence_reason": null}}, "run_info": {"case_id": "code-open-context-file", "mode": "router_only", "run_started_at": "2026-03-12T23:12:21", "rag_session_id": "849fc2c9-e17c-4034-b3b5-2e13d535bb94", "expected_intent": "CODE_QA", "actual_intent": "CODE_QA", "graph_id": "CodeQAGraph", "conversation_mode": "START"}, "input_request": {"text": "Открой файл src/mail_order_bot/context.py", "normalized_query": "Открой файл src/mail_order_bot/context.py"}, "steps": [{"step": "intent_router", "input": {"query": "Открой файл src/mail_order_bot/context.py"}, "output": {"intent": "CODE_QA", "graph_id": "CodeQAGraph", "conversation_mode": "START", "query": "Открой файл src/mail_order_bot/context.py"}, "diagnostics": {"router_plan": {"intent": "CODE_QA", "sub_intent": "OPEN_FILE", "graph_id": "CodeQAGraph", "retrieval_profile": "code", "conversation_mode": "START", "layers": ["C0_SOURCE_CHUNKS"], "symbol_kind_hint": "unknown", "symbol_candidates": [], "keyword_hints": [], "path_hints": ["src/mail_order_bot/context.py"], "path_scope": ["src/mail_order_bot/context.py"], "doc_scope_hints": [], "retrieval_constraints": {"include_globs": ["src/mail_order_bot/context.py"], "exclude_globs": ["tests/**", "**/test_*.py", "**/*_test.py"], "prefer_globs": [], "test_file_globs": [], "test_symbol_patterns": [], "max_candidates": 20, "fuzzy_symbol_search": {"enabled": false, "max_distance": 2, "top_k": 5}}}, "timings_ms": {"router": 0}}}]}
|
||||
{"case_id": "code-explain-context-class", "text": "Объясни как работает класс Context", "mode": "router_only", "run_started_at": "2026-03-12T23:12:21", "rag_session_id": "849fc2c9-e17c-4034-b3b5-2e13d535bb94", "expected_intent": "CODE_QA", "actual_intent": "CODE_QA", "graph_id": "CodeQAGraph", "conversation_mode": "START", "query": "Объясни как работает класс Context", "symbol_resolution": {"status": "pending", "resolved_symbol": null, "alternatives": ["Context"], "confidence": 0.0}, "rag_count": 0, "rag_rows": [], "llm_answer": null, "summary": {"router": {"intent": "CODE_QA", "sub_intent": "EXPLAIN", "confidence": null}, "retrieval": {"profile": "code", "layers_hit": [], "evidence_sufficient": false}, "llm": {"answer_status": "partial", "groundedness": "not_applicable"}}, "diagnostics": {"router_plan": {"intent": "CODE_QA", "sub_intent": "EXPLAIN", "graph_id": "CodeQAGraph", "retrieval_profile": "code", "conversation_mode": "START", "layers": ["C1_SYMBOL_CATALOG", "C0_SOURCE_CHUNKS", "C4_SEMANTIC_ROLES", "C2_DEPENDENCY_GRAPH", "C3_ENTRYPOINTS"], "symbol_kind_hint": "class", "symbol_candidates": ["Context"], "keyword_hints": ["Context"], "path_hints": [], "path_scope": [], "doc_scope_hints": [], "retrieval_constraints": {"include_globs": ["src/**"], "exclude_globs": ["tests/**", "**/test_*.py", "**/*_test.py"], "prefer_globs": [], "test_file_globs": [], "test_symbol_patterns": [], "max_candidates": 20, "fuzzy_symbol_search": {"enabled": true, "max_distance": 2, "top_k": 5}}}, "execution": {"executed_layers": [], "retrieval_mode_by_layer": {}, "top_k_by_layer": {}, "filters_by_layer": {}, "repo_scope": {"repo_id": null, "workspace_id": null}}, "retrieval": null, "constraint_violations": [], "timings_ms": {"router": 0, "symbol_resolution": 0, "retrieval_total": 0, "retrieval_by_layer": {}, "merge_rank": 0, "prompt_build": 0, "llm_call": 0}, "prompt": null, "router": {"conversation_mode": "START", "keyword_hints": ["Context"], "path_scope": []}, "llm": {"used_evidence_count": 0, "missing_evidence_reason": null}}, "run_info": {"case_id": "code-explain-context-class", "mode": "router_only", "run_started_at": "2026-03-12T23:12:21", "rag_session_id": "849fc2c9-e17c-4034-b3b5-2e13d535bb94", "expected_intent": "CODE_QA", "actual_intent": "CODE_QA", "graph_id": "CodeQAGraph", "conversation_mode": "START"}, "input_request": {"text": "Объясни как работает класс Context", "normalized_query": "Объясни как работает класс Context"}, "steps": [{"step": "intent_router", "input": {"query": "Объясни как работает класс Context"}, "output": {"intent": "CODE_QA", "graph_id": "CodeQAGraph", "conversation_mode": "START", "query": "Объясни как работает класс Context"}, "diagnostics": {"router_plan": {"intent": "CODE_QA", "sub_intent": "EXPLAIN", "graph_id": "CodeQAGraph", "retrieval_profile": "code", "conversation_mode": "START", "layers": ["C1_SYMBOL_CATALOG", "C0_SOURCE_CHUNKS", "C4_SEMANTIC_ROLES", "C2_DEPENDENCY_GRAPH", "C3_ENTRYPOINTS"], "symbol_kind_hint": "class", "symbol_candidates": ["Context"], "keyword_hints": ["Context"], "path_hints": [], "path_scope": [], "doc_scope_hints": [], "retrieval_constraints": {"include_globs": ["src/**"], "exclude_globs": ["tests/**", "**/test_*.py", "**/*_test.py"], "prefer_globs": [], "test_file_globs": [], "test_symbol_patterns": [], "max_candidates": 20, "fuzzy_symbol_search": {"enabled": true, "max_distance": 2, "top_k": 5}}}, "timings_ms": {"router": 0}}}]}
|
||||
{"case_id": "code-explain-excel-parser", "text": "Объясни класс ExcelFileParcer", "mode": "router_only", "run_started_at": "2026-03-12T23:12:21", "rag_session_id": "849fc2c9-e17c-4034-b3b5-2e13d535bb94", "expected_intent": "CODE_QA", "actual_intent": "CODE_QA", "graph_id": "CodeQAGraph", "conversation_mode": "START", "query": "Объясни класс ExcelFileParcer", "symbol_resolution": {"status": "pending", "resolved_symbol": null, "alternatives": ["ExcelFileParcer"], "confidence": 0.0}, "rag_count": 0, "rag_rows": [], "llm_answer": null, "summary": {"router": {"intent": "CODE_QA", "sub_intent": "EXPLAIN", "confidence": null}, "retrieval": {"profile": "code", "layers_hit": [], "evidence_sufficient": false}, "llm": {"answer_status": "partial", "groundedness": "not_applicable"}}, "diagnostics": {"router_plan": {"intent": "CODE_QA", "sub_intent": "EXPLAIN", "graph_id": "CodeQAGraph", "retrieval_profile": "code", "conversation_mode": "START", "layers": ["C1_SYMBOL_CATALOG", "C0_SOURCE_CHUNKS", "C4_SEMANTIC_ROLES", "C2_DEPENDENCY_GRAPH", "C3_ENTRYPOINTS"], "symbol_kind_hint": "class", "symbol_candidates": ["ExcelFileParcer"], "keyword_hints": ["ExcelFileParcer"], "path_hints": [], "path_scope": [], "doc_scope_hints": [], "retrieval_constraints": {"include_globs": ["src/**"], "exclude_globs": ["tests/**", "**/test_*.py", "**/*_test.py"], "prefer_globs": [], "test_file_globs": [], "test_symbol_patterns": [], "max_candidates": 20, "fuzzy_symbol_search": {"enabled": true, "max_distance": 2, "top_k": 5}}}, "execution": {"executed_layers": [], "retrieval_mode_by_layer": {}, "top_k_by_layer": {}, "filters_by_layer": {}, "repo_scope": {"repo_id": null, "workspace_id": null}}, "retrieval": null, "constraint_violations": [], "timings_ms": {"router": 0, "symbol_resolution": 0, "retrieval_total": 0, "retrieval_by_layer": {}, "merge_rank": 0, "prompt_build": 0, "llm_call": 0}, "prompt": null, "router": {"conversation_mode": "START", "keyword_hints": ["ExcelFileParcer"], "path_scope": []}, "llm": {"used_evidence_count": 0, "missing_evidence_reason": null}}, "run_info": {"case_id": "code-explain-excel-parser", "mode": "router_only", "run_started_at": "2026-03-12T23:12:21", "rag_session_id": "849fc2c9-e17c-4034-b3b5-2e13d535bb94", "expected_intent": "CODE_QA", "actual_intent": "CODE_QA", "graph_id": "CodeQAGraph", "conversation_mode": "START"}, "input_request": {"text": "Объясни класс ExcelFileParcer", "normalized_query": "Объясни класс ExcelFileParcer"}, "steps": [{"step": "intent_router", "input": {"query": "Объясни класс ExcelFileParcer"}, "output": {"intent": "CODE_QA", "graph_id": "CodeQAGraph", "conversation_mode": "START", "query": "Объясни класс ExcelFileParcer"}, "diagnostics": {"router_plan": {"intent": "CODE_QA", "sub_intent": "EXPLAIN", "graph_id": "CodeQAGraph", "retrieval_profile": "code", "conversation_mode": "START", "layers": ["C1_SYMBOL_CATALOG", "C0_SOURCE_CHUNKS", "C4_SEMANTIC_ROLES", "C2_DEPENDENCY_GRAPH", "C3_ENTRYPOINTS"], "symbol_kind_hint": "class", "symbol_candidates": ["ExcelFileParcer"], "keyword_hints": ["ExcelFileParcer"], "path_hints": [], "path_scope": [], "doc_scope_hints": [], "retrieval_constraints": {"include_globs": ["src/**"], "exclude_globs": ["tests/**", "**/test_*.py", "**/*_test.py"], "prefer_globs": [], "test_file_globs": [], "test_symbol_patterns": [], "max_candidates": 20, "fuzzy_symbol_search": {"enabled": true, "max_distance": 2, "top_k": 5}}}, "timings_ms": {"router": 0}}}]}
|
||||
{"case_id": "code-find-tests-for-context", "text": "Где тесты для Context?", "mode": "router_only", "run_started_at": "2026-03-12T23:12:21", "rag_session_id": "849fc2c9-e17c-4034-b3b5-2e13d535bb94", "expected_intent": "CODE_QA", "actual_intent": "CODE_QA", "graph_id": "CodeQAGraph", "conversation_mode": "START", "query": "Где тесты для Context?", "symbol_resolution": {"status": "pending", "resolved_symbol": null, "alternatives": ["Context"], "confidence": 0.0}, "rag_count": 0, "rag_rows": [], "llm_answer": null, "summary": {"router": {"intent": "CODE_QA", "sub_intent": "FIND_TESTS", "confidence": null}, "retrieval": {"profile": "code", "layers_hit": [], "evidence_sufficient": false}, "llm": {"answer_status": "partial", "groundedness": "not_applicable"}}, "diagnostics": {"router_plan": {"intent": "CODE_QA", "sub_intent": "FIND_TESTS", "graph_id": "CodeQAGraph", "retrieval_profile": "code", "conversation_mode": "START", "layers": ["C1_SYMBOL_CATALOG", "C2_DEPENDENCY_GRAPH", "C0_SOURCE_CHUNKS"], "symbol_kind_hint": "class", "symbol_candidates": ["Context"], "keyword_hints": ["Context"], "path_hints": [], "path_scope": [], "doc_scope_hints": [], "retrieval_constraints": {"include_globs": ["src/**", "tests/**", "**/test_*.py", "**/*_test.py", "**/conftest.py"], "exclude_globs": [], "prefer_globs": ["tests/**", "**/test_*.py", "**/*_test.py"], "test_file_globs": ["tests/**", "**/test_*.py", "**/*_test.py", "**/conftest.py"], "test_symbol_patterns": ["test_context", "TestContext", "Context"], "max_candidates": 20, "fuzzy_symbol_search": {"enabled": true, "max_distance": 2, "top_k": 5}}}, "execution": {"executed_layers": [], "retrieval_mode_by_layer": {}, "top_k_by_layer": {}, "filters_by_layer": {}, "repo_scope": {"repo_id": null, "workspace_id": null}}, "retrieval": null, "constraint_violations": [], "timings_ms": {"router": 0, "symbol_resolution": 0, "retrieval_total": 0, "retrieval_by_layer": {}, "merge_rank": 0, "prompt_build": 0, "llm_call": 0}, "prompt": null, "router": {"conversation_mode": "START", "keyword_hints": ["Context"], "path_scope": []}, "llm": {"used_evidence_count": 0, "missing_evidence_reason": null}}, "run_info": {"case_id": "code-find-tests-for-context", "mode": "router_only", "run_started_at": "2026-03-12T23:12:21", "rag_session_id": "849fc2c9-e17c-4034-b3b5-2e13d535bb94", "expected_intent": "CODE_QA", "actual_intent": "CODE_QA", "graph_id": "CodeQAGraph", "conversation_mode": "START"}, "input_request": {"text": "Где тесты для Context?", "normalized_query": "Где тесты для Context?"}, "steps": [{"step": "intent_router", "input": {"query": "Где тесты для Context?"}, "output": {"intent": "CODE_QA", "graph_id": "CodeQAGraph", "conversation_mode": "START", "query": "Где тесты для Context?"}, "diagnostics": {"router_plan": {"intent": "CODE_QA", "sub_intent": "FIND_TESTS", "graph_id": "CodeQAGraph", "retrieval_profile": "code", "conversation_mode": "START", "layers": ["C1_SYMBOL_CATALOG", "C2_DEPENDENCY_GRAPH", "C0_SOURCE_CHUNKS"], "symbol_kind_hint": "class", "symbol_candidates": ["Context"], "keyword_hints": ["Context"], "path_hints": [], "path_scope": [], "doc_scope_hints": [], "retrieval_constraints": {"include_globs": ["src/**", "tests/**", "**/test_*.py", "**/*_test.py", "**/conftest.py"], "exclude_globs": [], "prefer_globs": ["tests/**", "**/test_*.py", "**/*_test.py"], "test_file_globs": ["tests/**", "**/test_*.py", "**/*_test.py", "**/conftest.py"], "test_symbol_patterns": ["test_context", "TestContext", "Context"], "max_candidates": 20, "fuzzy_symbol_search": {"enabled": true, "max_distance": 2, "top_k": 5}}}, "timings_ms": {"router": 0}}}]}
|
||||
{"case_id": "code-exclude-tests-context", "text": "Не про тесты, а про прод код Context", "mode": "router_only", "run_started_at": "2026-03-12T23:12:21", "rag_session_id": "849fc2c9-e17c-4034-b3b5-2e13d535bb94", "expected_intent": "CODE_QA", "actual_intent": "CODE_QA", "graph_id": "CodeQAGraph", "conversation_mode": "START", "query": "Не про тесты, а про прод код Context", "symbol_resolution": {"status": "pending", "resolved_symbol": null, "alternatives": ["Context"], "confidence": 0.0}, "rag_count": 0, "rag_rows": [], "llm_answer": null, "summary": {"router": {"intent": "CODE_QA", "sub_intent": "EXPLAIN", "confidence": null}, "retrieval": {"profile": "code", "layers_hit": [], "evidence_sufficient": false}, "llm": {"answer_status": "partial", "groundedness": "not_applicable"}}, "diagnostics": {"router_plan": {"intent": "CODE_QA", "sub_intent": "EXPLAIN", "graph_id": "CodeQAGraph", "retrieval_profile": "code", "conversation_mode": "START", "layers": ["C1_SYMBOL_CATALOG", "C0_SOURCE_CHUNKS", "C4_SEMANTIC_ROLES", "C2_DEPENDENCY_GRAPH", "C3_ENTRYPOINTS"], "symbol_kind_hint": "class", "symbol_candidates": ["Context"], "keyword_hints": ["Context"], "path_hints": [], "path_scope": [], "doc_scope_hints": [], "retrieval_constraints": {"include_globs": ["src/**"], "exclude_globs": ["tests/**", "**/test_*.py", "**/*_test.py"], "prefer_globs": [], "test_file_globs": [], "test_symbol_patterns": [], "max_candidates": 20, "fuzzy_symbol_search": {"enabled": true, "max_distance": 2, "top_k": 5}}}, "execution": {"executed_layers": [], "retrieval_mode_by_layer": {}, "top_k_by_layer": {}, "filters_by_layer": {}, "repo_scope": {"repo_id": null, "workspace_id": null}}, "retrieval": null, "constraint_violations": [], "timings_ms": {"router": 0, "symbol_resolution": 0, "retrieval_total": 0, "retrieval_by_layer": {}, "merge_rank": 0, "prompt_build": 0, "llm_call": 0}, "prompt": null, "router": {"conversation_mode": "START", "keyword_hints": ["Context"], "path_scope": []}, "llm": {"used_evidence_count": 0, "missing_evidence_reason": null}}, "run_info": {"case_id": "code-exclude-tests-context", "mode": "router_only", "run_started_at": "2026-03-12T23:12:21", "rag_session_id": "849fc2c9-e17c-4034-b3b5-2e13d535bb94", "expected_intent": "CODE_QA", "actual_intent": "CODE_QA", "graph_id": "CodeQAGraph", "conversation_mode": "START"}, "input_request": {"text": "Не про тесты, а про прод код Context", "normalized_query": "Не про тесты, а про прод код Context"}, "steps": [{"step": "intent_router", "input": {"query": "Не про тесты, а про прод код Context"}, "output": {"intent": "CODE_QA", "graph_id": "CodeQAGraph", "conversation_mode": "START", "query": "Не про тесты, а про прод код Context"}, "diagnostics": {"router_plan": {"intent": "CODE_QA", "sub_intent": "EXPLAIN", "graph_id": "CodeQAGraph", "retrieval_profile": "code", "conversation_mode": "START", "layers": ["C1_SYMBOL_CATALOG", "C0_SOURCE_CHUNKS", "C4_SEMANTIC_ROLES", "C2_DEPENDENCY_GRAPH", "C3_ENTRYPOINTS"], "symbol_kind_hint": "class", "symbol_candidates": ["Context"], "keyword_hints": ["Context"], "path_hints": [], "path_scope": [], "doc_scope_hints": [], "retrieval_constraints": {"include_globs": ["src/**"], "exclude_globs": ["tests/**", "**/test_*.py", "**/*_test.py"], "prefer_globs": [], "test_file_globs": [], "test_symbol_patterns": [], "max_candidates": 20, "fuzzy_symbol_search": {"enabled": true, "max_distance": 2, "top_k": 5}}}, "timings_ms": {"router": 0}}}]}
|
||||
{"case_id": "code-open-abstract-task", "text": "Покажи файл src/mail_order_bot/task_processor/abstract_task.py", "mode": "router_only", "run_started_at": "2026-03-12T23:12:21", "rag_session_id": "849fc2c9-e17c-4034-b3b5-2e13d535bb94", "expected_intent": "CODE_QA", "actual_intent": "CODE_QA", "graph_id": "CodeQAGraph", "conversation_mode": "START", "query": "Покажи файл src/mail_order_bot/task_processor/abstract_task.py", "symbol_resolution": {"status": "not_requested", "resolved_symbol": null, "alternatives": [], "confidence": 0.0}, "rag_count": 0, "rag_rows": [], "llm_answer": null, "summary": {"router": {"intent": "CODE_QA", "sub_intent": "OPEN_FILE", "confidence": null}, "retrieval": {"profile": "code", "layers_hit": [], "evidence_sufficient": false}, "llm": {"answer_status": "partial", "groundedness": "not_applicable"}}, "diagnostics": {"router_plan": {"intent": "CODE_QA", "sub_intent": "OPEN_FILE", "graph_id": "CodeQAGraph", "retrieval_profile": "code", "conversation_mode": "START", "layers": ["C0_SOURCE_CHUNKS"], "symbol_kind_hint": "unknown", "symbol_candidates": [], "keyword_hints": [], "path_hints": ["src/mail_order_bot/task_processor/abstract_task.py"], "path_scope": ["src/mail_order_bot/task_processor/abstract_task.py"], "doc_scope_hints": [], "retrieval_constraints": {"include_globs": ["src/mail_order_bot/task_processor/abstract_task.py"], "exclude_globs": ["tests/**", "**/test_*.py", "**/*_test.py"], "prefer_globs": [], "test_file_globs": [], "test_symbol_patterns": [], "max_candidates": 20, "fuzzy_symbol_search": {"enabled": false, "max_distance": 2, "top_k": 5}}}, "execution": {"executed_layers": [], "retrieval_mode_by_layer": {}, "top_k_by_layer": {}, "filters_by_layer": {}, "repo_scope": {"repo_id": null, "workspace_id": null}}, "retrieval": null, "constraint_violations": [], "timings_ms": {"router": 0, "symbol_resolution": 0, "retrieval_total": 0, "retrieval_by_layer": {}, "merge_rank": 0, "prompt_build": 0, "llm_call": 0}, "prompt": null, "router": {"conversation_mode": "START", "keyword_hints": [], "path_scope": ["src/mail_order_bot/task_processor/abstract_task.py"]}, "llm": {"used_evidence_count": 0, "missing_evidence_reason": null}}, "run_info": {"case_id": "code-open-abstract-task", "mode": "router_only", "run_started_at": "2026-03-12T23:12:21", "rag_session_id": "849fc2c9-e17c-4034-b3b5-2e13d535bb94", "expected_intent": "CODE_QA", "actual_intent": "CODE_QA", "graph_id": "CodeQAGraph", "conversation_mode": "START"}, "input_request": {"text": "Покажи файл src/mail_order_bot/task_processor/abstract_task.py", "normalized_query": "Покажи файл src/mail_order_bot/task_processor/abstract_task.py"}, "steps": [{"step": "intent_router", "input": {"query": "Покажи файл src/mail_order_bot/task_processor/abstract_task.py"}, "output": {"intent": "CODE_QA", "graph_id": "CodeQAGraph", "conversation_mode": "START", "query": "Покажи файл src/mail_order_bot/task_processor/abstract_task.py"}, "diagnostics": {"router_plan": {"intent": "CODE_QA", "sub_intent": "OPEN_FILE", "graph_id": "CodeQAGraph", "retrieval_profile": "code", "conversation_mode": "START", "layers": ["C0_SOURCE_CHUNKS"], "symbol_kind_hint": "unknown", "symbol_candidates": [], "keyword_hints": [], "path_hints": ["src/mail_order_bot/task_processor/abstract_task.py"], "path_scope": ["src/mail_order_bot/task_processor/abstract_task.py"], "doc_scope_hints": [], "retrieval_constraints": {"include_globs": ["src/mail_order_bot/task_processor/abstract_task.py"], "exclude_globs": ["tests/**", "**/test_*.py", "**/*_test.py"], "prefer_globs": [], "test_file_globs": [], "test_symbol_patterns": [], "max_candidates": 20, "fuzzy_symbol_search": {"enabled": false, "max_distance": 2, "top_k": 5}}}, "timings_ms": {"router": 0}}}]}
|
||||
{"case_id": "code-explain-handle-errors", "text": "Теперь объясни функцию handle_errors", "mode": "router_only", "run_started_at": "2026-03-12T23:12:21", "rag_session_id": "849fc2c9-e17c-4034-b3b5-2e13d535bb94", "expected_intent": "CODE_QA", "actual_intent": "CODE_QA", "graph_id": "CodeQAGraph", "conversation_mode": "START", "query": "Теперь объясни функцию handle_errors", "symbol_resolution": {"status": "pending", "resolved_symbol": null, "alternatives": ["handle_errors"], "confidence": 0.0}, "rag_count": 0, "rag_rows": [], "llm_answer": null, "summary": {"router": {"intent": "CODE_QA", "sub_intent": "EXPLAIN", "confidence": null}, "retrieval": {"profile": "code", "layers_hit": [], "evidence_sufficient": false}, "llm": {"answer_status": "partial", "groundedness": "not_applicable"}}, "diagnostics": {"router_plan": {"intent": "CODE_QA", "sub_intent": "EXPLAIN", "graph_id": "CodeQAGraph", "retrieval_profile": "code", "conversation_mode": "START", "layers": ["C1_SYMBOL_CATALOG", "C0_SOURCE_CHUNKS", "C4_SEMANTIC_ROLES", "C2_DEPENDENCY_GRAPH", "C3_ENTRYPOINTS"], "symbol_kind_hint": "function", "symbol_candidates": ["handle_errors"], "keyword_hints": ["handle_errors"], "path_hints": [], "path_scope": [], "doc_scope_hints": [], "retrieval_constraints": {"include_globs": ["src/**"], "exclude_globs": ["tests/**", "**/test_*.py", "**/*_test.py"], "prefer_globs": [], "test_file_globs": [], "test_symbol_patterns": [], "max_candidates": 20, "fuzzy_symbol_search": {"enabled": true, "max_distance": 2, "top_k": 5}}}, "execution": {"executed_layers": [], "retrieval_mode_by_layer": {}, "top_k_by_layer": {}, "filters_by_layer": {}, "repo_scope": {"repo_id": null, "workspace_id": null}}, "retrieval": null, "constraint_violations": [], "timings_ms": {"router": 0, "symbol_resolution": 0, "retrieval_total": 0, "retrieval_by_layer": {}, "merge_rank": 0, "prompt_build": 0, "llm_call": 0}, "prompt": null, "router": {"conversation_mode": "START", "keyword_hints": ["handle_errors"], "path_scope": []}, "llm": {"used_evidence_count": 0, "missing_evidence_reason": null}}, "run_info": {"case_id": "code-explain-handle-errors", "mode": "router_only", "run_started_at": "2026-03-12T23:12:21", "rag_session_id": "849fc2c9-e17c-4034-b3b5-2e13d535bb94", "expected_intent": "CODE_QA", "actual_intent": "CODE_QA", "graph_id": "CodeQAGraph", "conversation_mode": "START"}, "input_request": {"text": "Теперь объясни функцию handle_errors", "normalized_query": "Теперь объясни функцию handle_errors"}, "steps": [{"step": "intent_router", "input": {"query": "Теперь объясни функцию handle_errors"}, "output": {"intent": "CODE_QA", "graph_id": "CodeQAGraph", "conversation_mode": "START", "query": "Теперь объясни функцию handle_errors"}, "diagnostics": {"router_plan": {"intent": "CODE_QA", "sub_intent": "EXPLAIN", "graph_id": "CodeQAGraph", "retrieval_profile": "code", "conversation_mode": "START", "layers": ["C1_SYMBOL_CATALOG", "C0_SOURCE_CHUNKS", "C4_SEMANTIC_ROLES", "C2_DEPENDENCY_GRAPH", "C3_ENTRYPOINTS"], "symbol_kind_hint": "function", "symbol_candidates": ["handle_errors"], "keyword_hints": ["handle_errors"], "path_hints": [], "path_scope": [], "doc_scope_hints": [], "retrieval_constraints": {"include_globs": ["src/**"], "exclude_globs": ["tests/**", "**/test_*.py", "**/*_test.py"], "prefer_globs": [], "test_file_globs": [], "test_symbol_patterns": [], "max_candidates": 20, "fuzzy_symbol_search": {"enabled": true, "max_distance": 2, "top_k": 5}}}, "timings_ms": {"router": 0}}}]}
|
||||
{"case_id": "docs-about-readme-deploy", "text": "Что сказано в README_DEPLOY.md?", "mode": "router_only", "run_started_at": "2026-03-12T23:12:21", "rag_session_id": "849fc2c9-e17c-4034-b3b5-2e13d535bb94", "expected_intent": "DOCS_QA", "actual_intent": "DOCS_QA", "graph_id": "DocsQAGraph", "conversation_mode": "START", "query": "Что сказано в README_DEPLOY.md?", "symbol_resolution": {"status": "not_requested", "resolved_symbol": null, "alternatives": [], "confidence": 0.0}, "rag_count": 0, "rag_rows": [], "llm_answer": null, "summary": {"router": {"intent": "DOCS_QA", "sub_intent": "EXPLAIN", "confidence": null}, "retrieval": {"profile": "docs", "layers_hit": [], "evidence_sufficient": false}, "llm": {"answer_status": "partial", "groundedness": "not_applicable"}}, "diagnostics": {"router_plan": {"intent": "DOCS_QA", "sub_intent": "EXPLAIN", "graph_id": "DocsQAGraph", "retrieval_profile": "docs", "conversation_mode": "START", "layers": ["D3_SECTION_INDEX", "D2_FACT_INDEX"], "symbol_kind_hint": "unknown", "symbol_candidates": [], "keyword_hints": ["README_DEPLOY.md", "readme_deploy.md", "deploy", "deployment", "docker", "compose", "env", "config", "production", "ci/cd"], "path_hints": ["README_DEPLOY.md"], "path_scope": ["README_DEPLOY.md"], "doc_scope_hints": ["README_DEPLOY.md", "README*", "docs/**", "**/*.md"], "retrieval_constraints": {"include_globs": ["README_DEPLOY.md", "docs/**", "README*", "**/*.md"], "exclude_globs": [".venv/**", "node_modules/**", "**/*.bin", "**/*.png", "**/*.jpg"], "prefer_globs": [], "test_file_globs": [], "test_symbol_patterns": [], "max_candidates": 20, "fuzzy_symbol_search": {"enabled": true, "max_distance": 2, "top_k": 5}}}, "execution": {"executed_layers": [], "retrieval_mode_by_layer": {}, "top_k_by_layer": {}, "filters_by_layer": {}, "repo_scope": {"repo_id": null, "workspace_id": null}}, "retrieval": null, "constraint_violations": [], "timings_ms": {"router": 0, "symbol_resolution": 0, "retrieval_total": 0, "retrieval_by_layer": {}, "merge_rank": 0, "prompt_build": 0, "llm_call": 0}, "prompt": null, "router": {"conversation_mode": "START", "keyword_hints": ["README_DEPLOY.md", "readme_deploy.md", "deploy", "deployment", "docker", "compose", "env", "config", "production", "ci/cd"], "path_scope": ["README_DEPLOY.md"]}, "llm": {"used_evidence_count": 0, "missing_evidence_reason": null}}, "run_info": {"case_id": "docs-about-readme-deploy", "mode": "router_only", "run_started_at": "2026-03-12T23:12:21", "rag_session_id": "849fc2c9-e17c-4034-b3b5-2e13d535bb94", "expected_intent": "DOCS_QA", "actual_intent": "DOCS_QA", "graph_id": "DocsQAGraph", "conversation_mode": "START"}, "input_request": {"text": "Что сказано в README_DEPLOY.md?", "normalized_query": "Что сказано в README_DEPLOY.md?"}, "steps": [{"step": "intent_router", "input": {"query": "Что сказано в README_DEPLOY.md?"}, "output": {"intent": "DOCS_QA", "graph_id": "DocsQAGraph", "conversation_mode": "START", "query": "Что сказано в README_DEPLOY.md?"}, "diagnostics": {"router_plan": {"intent": "DOCS_QA", "sub_intent": "EXPLAIN", "graph_id": "DocsQAGraph", "retrieval_profile": "docs", "conversation_mode": "START", "layers": ["D3_SECTION_INDEX", "D2_FACT_INDEX"], "symbol_kind_hint": "unknown", "symbol_candidates": [], "keyword_hints": ["README_DEPLOY.md", "readme_deploy.md", "deploy", "deployment", "docker", "compose", "env", "config", "production", "ci/cd"], "path_hints": ["README_DEPLOY.md"], "path_scope": ["README_DEPLOY.md"], "doc_scope_hints": ["README_DEPLOY.md", "README*", "docs/**", "**/*.md"], "retrieval_constraints": {"include_globs": ["README_DEPLOY.md", "docs/**", "README*", "**/*.md"], "exclude_globs": [".venv/**", "node_modules/**", "**/*.bin", "**/*.png", "**/*.jpg"], "prefer_globs": [], "test_file_globs": [], "test_symbol_patterns": [], "max_candidates": 20, "fuzzy_symbol_search": {"enabled": true, "max_distance": 2, "top_k": 5}}}, "timings_ms": {"router": 0}}}]}
|
||||
{"case_id": "docs-generic-question", "text": "Что сказано в документации по деплою?", "mode": "router_only", "run_started_at": "2026-03-12T23:12:21", "rag_session_id": "849fc2c9-e17c-4034-b3b5-2e13d535bb94", "expected_intent": "DOCS_QA", "actual_intent": "DOCS_QA", "graph_id": "DocsQAGraph", "conversation_mode": "START", "query": "Что сказано в документации по деплою?", "symbol_resolution": {"status": "not_requested", "resolved_symbol": null, "alternatives": [], "confidence": 0.0}, "rag_count": 0, "rag_rows": [], "llm_answer": null, "summary": {"router": {"intent": "DOCS_QA", "sub_intent": "EXPLAIN", "confidence": null}, "retrieval": {"profile": "docs", "layers_hit": [], "evidence_sufficient": false}, "llm": {"answer_status": "partial", "groundedness": "not_applicable"}}, "diagnostics": {"router_plan": {"intent": "DOCS_QA", "sub_intent": "EXPLAIN", "graph_id": "DocsQAGraph", "retrieval_profile": "docs", "conversation_mode": "START", "layers": ["D1_MODULE_CATALOG", "D2_FACT_INDEX", "D3_SECTION_INDEX", "D4_POLICY_INDEX"], "symbol_kind_hint": "unknown", "symbol_candidates": [], "keyword_hints": ["documentation", "docs"], "path_hints": [], "path_scope": [], "doc_scope_hints": ["README*", "docs/**", "**/*.md"], "retrieval_constraints": {"include_globs": ["docs/**", "README*", "**/*.md"], "exclude_globs": [".venv/**", "node_modules/**", "**/*.bin", "**/*.png", "**/*.jpg"], "prefer_globs": [], "test_file_globs": [], "test_symbol_patterns": [], "max_candidates": 20, "fuzzy_symbol_search": {"enabled": true, "max_distance": 2, "top_k": 5}}}, "execution": {"executed_layers": [], "retrieval_mode_by_layer": {}, "top_k_by_layer": {}, "filters_by_layer": {}, "repo_scope": {"repo_id": null, "workspace_id": null}}, "retrieval": null, "constraint_violations": [], "timings_ms": {"router": 0, "symbol_resolution": 0, "retrieval_total": 0, "retrieval_by_layer": {}, "merge_rank": 0, "prompt_build": 0, "llm_call": 0}, "prompt": null, "router": {"conversation_mode": "START", "keyword_hints": ["documentation", "docs"], "path_scope": []}, "llm": {"used_evidence_count": 0, "missing_evidence_reason": null}}, "run_info": {"case_id": "docs-generic-question", "mode": "router_only", "run_started_at": "2026-03-12T23:12:21", "rag_session_id": "849fc2c9-e17c-4034-b3b5-2e13d535bb94", "expected_intent": "DOCS_QA", "actual_intent": "DOCS_QA", "graph_id": "DocsQAGraph", "conversation_mode": "START"}, "input_request": {"text": "Что сказано в документации по деплою?", "normalized_query": "Что сказано в документации по деплою?"}, "steps": [{"step": "intent_router", "input": {"query": "Что сказано в документации по деплою?"}, "output": {"intent": "DOCS_QA", "graph_id": "DocsQAGraph", "conversation_mode": "START", "query": "Что сказано в документации по деплою?"}, "diagnostics": {"router_plan": {"intent": "DOCS_QA", "sub_intent": "EXPLAIN", "graph_id": "DocsQAGraph", "retrieval_profile": "docs", "conversation_mode": "START", "layers": ["D1_MODULE_CATALOG", "D2_FACT_INDEX", "D3_SECTION_INDEX", "D4_POLICY_INDEX"], "symbol_kind_hint": "unknown", "symbol_candidates": [], "keyword_hints": ["documentation", "docs"], "path_hints": [], "path_scope": [], "doc_scope_hints": ["README*", "docs/**", "**/*.md"], "retrieval_constraints": {"include_globs": ["docs/**", "README*", "**/*.md"], "exclude_globs": [".venv/**", "node_modules/**", "**/*.bin", "**/*.png", "**/*.jpg"], "prefer_globs": [], "test_file_globs": [], "test_symbol_patterns": [], "max_candidates": 20, "fuzzy_symbol_search": {"enabled": true, "max_distance": 2, "top_k": 5}}}, "timings_ms": {"router": 0}}}]}
|
||||
{"case_id": "docs-open-readme-ref", "text": "Что про это в docs и README?", "mode": "router_only", "run_started_at": "2026-03-12T23:12:21", "rag_session_id": "849fc2c9-e17c-4034-b3b5-2e13d535bb94", "expected_intent": "DOCS_QA", "actual_intent": "DOCS_QA", "graph_id": "DocsQAGraph", "conversation_mode": "START", "query": "Что про это в docs и README?", "symbol_resolution": {"status": "not_requested", "resolved_symbol": null, "alternatives": [], "confidence": 0.0}, "rag_count": 0, "rag_rows": [], "llm_answer": null, "summary": {"router": {"intent": "DOCS_QA", "sub_intent": "EXPLAIN", "confidence": null}, "retrieval": {"profile": "docs", "layers_hit": [], "evidence_sufficient": false}, "llm": {"answer_status": "partial", "groundedness": "not_applicable"}}, "diagnostics": {"router_plan": {"intent": "DOCS_QA", "sub_intent": "EXPLAIN", "graph_id": "DocsQAGraph", "retrieval_profile": "docs", "conversation_mode": "START", "layers": ["D1_MODULE_CATALOG", "D2_FACT_INDEX", "D3_SECTION_INDEX", "D4_POLICY_INDEX"], "symbol_kind_hint": "unknown", "symbol_candidates": [], "keyword_hints": ["docs", "README"], "path_hints": [], "path_scope": [], "doc_scope_hints": ["README*", "docs/**", "**/*.md", "README"], "retrieval_constraints": {"include_globs": ["docs/**", "README*", "**/*.md"], "exclude_globs": [".venv/**", "node_modules/**", "**/*.bin", "**/*.png", "**/*.jpg"], "prefer_globs": [], "test_file_globs": [], "test_symbol_patterns": [], "max_candidates": 20, "fuzzy_symbol_search": {"enabled": true, "max_distance": 2, "top_k": 5}}}, "execution": {"executed_layers": [], "retrieval_mode_by_layer": {}, "top_k_by_layer": {}, "filters_by_layer": {}, "repo_scope": {"repo_id": null, "workspace_id": null}}, "retrieval": null, "constraint_violations": [], "timings_ms": {"router": 0, "symbol_resolution": 0, "retrieval_total": 0, "retrieval_by_layer": {}, "merge_rank": 0, "prompt_build": 0, "llm_call": 0}, "prompt": null, "router": {"conversation_mode": "START", "keyword_hints": ["docs", "README"], "path_scope": []}, "llm": {"used_evidence_count": 0, "missing_evidence_reason": null}}, "run_info": {"case_id": "docs-open-readme-ref", "mode": "router_only", "run_started_at": "2026-03-12T23:12:21", "rag_session_id": "849fc2c9-e17c-4034-b3b5-2e13d535bb94", "expected_intent": "DOCS_QA", "actual_intent": "DOCS_QA", "graph_id": "DocsQAGraph", "conversation_mode": "START"}, "input_request": {"text": "Что про это в docs и README?", "normalized_query": "Что про это в docs и README?"}, "steps": [{"step": "intent_router", "input": {"query": "Что про это в docs и README?"}, "output": {"intent": "DOCS_QA", "graph_id": "DocsQAGraph", "conversation_mode": "START", "query": "Что про это в docs и README?"}, "diagnostics": {"router_plan": {"intent": "DOCS_QA", "sub_intent": "EXPLAIN", "graph_id": "DocsQAGraph", "retrieval_profile": "docs", "conversation_mode": "START", "layers": ["D1_MODULE_CATALOG", "D2_FACT_INDEX", "D3_SECTION_INDEX", "D4_POLICY_INDEX"], "symbol_kind_hint": "unknown", "symbol_candidates": [], "keyword_hints": ["docs", "README"], "path_hints": [], "path_scope": [], "doc_scope_hints": ["README*", "docs/**", "**/*.md", "README"], "retrieval_constraints": {"include_globs": ["docs/**", "README*", "**/*.md"], "exclude_globs": [".venv/**", "node_modules/**", "**/*.bin", "**/*.png", "**/*.jpg"], "prefer_globs": [], "test_file_globs": [], "test_symbol_patterns": [], "max_candidates": 20, "fuzzy_symbol_search": {"enabled": true, "max_distance": 2, "top_k": 5}}}, "timings_ms": {"router": 0}}}]}
|
||||
Reference in New Issue
Block a user