64 lines
1.7 KiB
Python
64 lines
1.7 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import asdict, dataclass, field
|
|
from typing import Any, Dict, List, Optional
|
|
|
|
|
|
@dataclass
|
|
class CodeFunctionEvidence:
|
|
node_id: str
|
|
name: str
|
|
qualified_name: str
|
|
file: str
|
|
start_line: Optional[int] = None
|
|
end_line: Optional[int] = None
|
|
signature: str = ""
|
|
summary: str = ""
|
|
logic_flow: str = ""
|
|
code_snippet: str = ""
|
|
calls: List[str] = field(default_factory=list)
|
|
called_by: List[str] = field(default_factory=list)
|
|
includes: List[str] = field(default_factory=list)
|
|
embedding_model: str = ""
|
|
embedding_dim: int = 0
|
|
embedding_available: bool = True
|
|
raw: Dict[str, Any] = field(default_factory=dict)
|
|
|
|
def to_dict(self) -> Dict[str, Any]:
|
|
return asdict(self)
|
|
|
|
|
|
@dataclass
|
|
class CodeSearchHit:
|
|
evidence: CodeFunctionEvidence
|
|
similarity: float
|
|
distance: float
|
|
rank: int
|
|
|
|
def to_dict(self) -> Dict[str, Any]:
|
|
data = self.evidence.to_dict()
|
|
data.update(
|
|
{
|
|
"similarity": self.similarity,
|
|
"distance": self.distance,
|
|
"rank": self.rank,
|
|
}
|
|
)
|
|
return data
|
|
|
|
|
|
@dataclass
|
|
class CodeGraphContext:
|
|
node_id: str
|
|
callers: List[CodeFunctionEvidence] = field(default_factory=list)
|
|
callees: List[CodeFunctionEvidence] = field(default_factory=list)
|
|
call_chains: List[str] = field(default_factory=list)
|
|
|
|
def to_dict(self) -> Dict[str, Any]:
|
|
return {
|
|
"node_id": self.node_id,
|
|
"callers": [item.to_dict() for item in self.callers],
|
|
"callees": [item.to_dict() for item in self.callees],
|
|
"call_chains": self.call_chains,
|
|
}
|