Рефакторинг

This commit is contained in:
2026-03-12 23:33:51 +03:00
parent 9066c292de
commit 15586f9a8c
133 changed files with 1011 additions and 894 deletions
@@ -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
@@ -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 = "Где тесты для НесуществующийКласс?"
@@ -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",
@@ -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,
@@ -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