Team Ai
Apppublic

kyorlin2001/code-analysis-tool

sourceHugging Faceapache-2.0updated 6mo agoView on Hugging Face
0likes
answer_merger.py75 linesDownload Raw Back to rag
1from __future__ import annotations2 3from dataclasses import dataclass, field4 5from models.rag_result import RagResult6 7 8@dataclass9class MergedAnswer:10    """11    Combined output from the deterministic analyzer and the RAG layer.12    """13 14    summary: str15    findings: list[dict] = field(default_factory=list)16    recommendations: list[str] = field(default_factory=list)17    rag_answer: str | None = None18    rag_suggestions: list[str] = field(default_factory=list)19    rag_citations: list[dict] = field(default_factory=list)20    rag_follow_up_questions: list[str] = field(default_factory=list)21    rag_notes: list[str] = field(default_factory=list)22 23 24class AnswerMerger:25    """26    Merges existing analysis output with RAG-generated insights.27    """28 29    def merge(30        self,31        summary: str,32        findings: list[dict],33        recommendations: list[str],34        rag_result: RagResult | None = None,35    ) -> MergedAnswer:36        if rag_result is None:37            return MergedAnswer(38                summary=summary,39                findings=list(findings),40                recommendations=list(recommendations),41            )42 43        merged_summary = self._append_rag_summary(summary, rag_result)44 45        merged_recommendations = list(recommendations)46        for suggestion in rag_result.suggestions:47            if suggestion not in merged_recommendations:48                merged_recommendations.append(suggestion)49 50        return MergedAnswer(51            summary=merged_summary,52            findings=list(findings),53            recommendations=merged_recommendations,54            rag_answer=rag_result.answer,55            rag_suggestions=list(rag_result.suggestions),56            rag_citations=list(rag_result.citations),57            rag_follow_up_questions=list(rag_result.follow_up_questions),58            rag_notes=list(rag_result.notes),59        )60 61    def _append_rag_summary(self, summary: str, rag_result: RagResult) -> str:62        parts = [summary]63 64        if rag_result.answer:65            parts.append("")66            parts.append("RAG Insight:")67            parts.append(rag_result.answer)68 69        if rag_result.notes:70            parts.append("")71            parts.append("RAG Notes:")72            for note in rag_result.notes:73                parts.append(f"- {note}")74 75        return "\n".join(parts)