Фиксация изменений

This commit is contained in:
2026-03-05 11:03:17 +03:00
parent 1ef0b4d68c
commit 417b8b6f72
261 changed files with 8215 additions and 332 deletions

View File

@@ -0,0 +1,72 @@
from __future__ import annotations
from app.modules.rag.intent_router_v2.classifier import IntentClassifierV2
from app.modules.rag.intent_router_v2.conversation_policy import ConversationPolicy
from app.modules.rag.intent_router_v2.evidence_policy_factory import EvidencePolicyFactory
from app.modules.rag.intent_router_v2.graph_id_resolver import GraphIdResolver
from app.modules.rag.intent_router_v2.logger import IntentRouterLogger
from app.modules.rag.intent_router_v2.models import ConversationState, IntentRouterResult, RepoContext
from app.modules.rag.intent_router_v2.query_plan_builder import QueryPlanBuilder
from app.modules.rag.intent_router_v2.retrieval_spec_factory import RetrievalSpecFactory
class IntentRouterV2:
def __init__(
self,
classifier: IntentClassifierV2 | None = None,
conversation_policy: ConversationPolicy | None = None,
query_plan_builder: QueryPlanBuilder | None = None,
retrieval_factory: RetrievalSpecFactory | None = None,
evidence_factory: EvidencePolicyFactory | None = None,
graph_resolver: GraphIdResolver | None = None,
logger: IntentRouterLogger | None = None,
) -> None:
self._classifier = classifier or IntentClassifierV2()
self._conversation_policy = conversation_policy or ConversationPolicy()
self._query_plan_builder = query_plan_builder or QueryPlanBuilder()
self._retrieval_factory = retrieval_factory or RetrievalSpecFactory()
self._evidence_factory = evidence_factory or EvidencePolicyFactory()
self._graph_resolver = graph_resolver or GraphIdResolver()
self._logger = logger or IntentRouterLogger()
def route(
self,
user_query: str,
conversation_state: ConversationState | None = None,
repo_context: RepoContext | None = None,
) -> IntentRouterResult:
state = conversation_state or ConversationState()
context = repo_context or RepoContext()
self._logger.log_request(user_query, state, context)
decision = self._classifier.classify(user_query, state)
intent, conversation_mode = self._conversation_policy.resolve(decision, user_query, state)
query_plan = self._query_plan_builder.build(
user_query,
state,
continue_mode=conversation_mode == "CONTINUE",
conversation_mode=conversation_mode,
intent=intent,
)
result = IntentRouterResult(
intent=intent,
graph_id=self._graph_resolver.resolve(intent),
conversation_mode=conversation_mode,
query_plan=query_plan,
retrieval_spec=self._retrieval_factory.build(
intent,
query_plan.anchors,
context,
raw_query=query_plan.raw,
conversation_state=state,
conversation_mode=conversation_mode,
sub_intent=query_plan.sub_intent,
),
evidence_policy=self._evidence_factory.build(
intent,
sub_intent=query_plan.sub_intent,
negations=query_plan.negations,
has_user_anchor=any(anchor.source == "user_text" for anchor in query_plan.anchors),
),
)
self._logger.log_result(result)
return result