Files
agent/app/modules/rag/explain/models.py

92 lines
2.6 KiB
Python

from __future__ import annotations
from typing import Any, Literal
from pydantic import BaseModel, ConfigDict, Field
class ExplainHints(BaseModel):
model_config = ConfigDict(extra="forbid")
paths: list[str] = Field(default_factory=list)
symbols: list[str] = Field(default_factory=list)
endpoints: list[str] = Field(default_factory=list)
commands: list[str] = Field(default_factory=list)
class ExplainIntent(BaseModel):
model_config = ConfigDict(extra="forbid")
raw_query: str
normalized_query: str
keywords: list[str] = Field(default_factory=list)
hints: ExplainHints = Field(default_factory=ExplainHints)
include_tests: bool = False
expected_entry_types: list[Literal["http", "cli"]] = Field(default_factory=list)
depth: Literal["high", "medium", "deep"] = "medium"
class CodeLocation(BaseModel):
model_config = ConfigDict(extra="forbid")
path: str
start_line: int | None = None
end_line: int | None = None
class LayeredRetrievalItem(BaseModel):
model_config = ConfigDict(extra="forbid")
source: str
content: str
layer: str
title: str
metadata: dict[str, Any] = Field(default_factory=dict)
score: float | None = None
location: CodeLocation | None = None
class TracePath(BaseModel):
model_config = ConfigDict(extra="forbid")
symbol_ids: list[str] = Field(default_factory=list)
score: float = 0.0
entrypoint_id: str | None = None
notes: list[str] = Field(default_factory=list)
class EvidenceItem(BaseModel):
model_config = ConfigDict(extra="forbid")
evidence_id: str
kind: Literal["entrypoint", "symbol", "edge", "excerpt"]
summary: str
location: CodeLocation | None = None
supports: list[str] = Field(default_factory=list)
class CodeExcerpt(BaseModel):
model_config = ConfigDict(extra="forbid")
evidence_id: str
symbol_id: str | None = None
title: str
path: str
start_line: int | None = None
end_line: int | None = None
content: str
focus: str = "overview"
class ExplainPack(BaseModel):
model_config = ConfigDict(extra="forbid")
intent: ExplainIntent
selected_entrypoints: list[LayeredRetrievalItem] = Field(default_factory=list)
seed_symbols: list[LayeredRetrievalItem] = Field(default_factory=list)
trace_paths: list[TracePath] = Field(default_factory=list)
evidence_index: dict[str, EvidenceItem] = Field(default_factory=dict)
code_excerpts: list[CodeExcerpt] = Field(default_factory=list)
missing: list[str] = Field(default_factory=list)
conflicts: list[str] = Field(default_factory=list)