Spaces:
Sleeping
Sleeping
| from pathlib import Path | |
| path = Path("app/generation/answer_service.py") | |
| text = path.read_text(encoding="utf-8-sig") | |
| text = text.replace("\ufeff", "") | |
| # 1. Ensure import exists | |
| if "from app.graph.graph_retrieval_fusion import fuse_retrieval_results_with_graph" not in text: | |
| text = "from app.graph.graph_retrieval_fusion import fuse_retrieval_results_with_graph\n" + text | |
| # 2. Ensure function signature supports graph retrieval | |
| text = text.replace( | |
| ''' use_graph: bool = True, | |
| graph_entity_limit: int = 8 | |
| ) -> Dict[str, Any]: | |
| ''', | |
| ''' use_graph: bool = True, | |
| graph_entity_limit: int = 8, | |
| use_graph_retrieval: bool = True, | |
| graph_retrieval_top_k: int = 5 | |
| ) -> Dict[str, Any]: | |
| ''' | |
| ) | |
| # 3. Insert fusion block after sourced_results is created | |
| target = ''' cleaned_results = clean_retrieved_results(retrieved_results) | |
| sourced_results = attach_source_ids(cleaned_results) | |
| citations = create_citation_objects(sourced_results) | |
| ''' | |
| replacement = ''' cleaned_results = clean_retrieved_results(retrieved_results) | |
| sourced_results = attach_source_ids(cleaned_results) | |
| fusion_result = fuse_retrieval_results_with_graph( | |
| document_id=document_id, | |
| query=query, | |
| retrieval_results=sourced_results, | |
| graph_entity_limit=graph_entity_limit, | |
| graph_top_k=graph_retrieval_top_k, | |
| final_top_k=max(top_k, graph_retrieval_top_k) | |
| ) if use_graph_retrieval else { | |
| "fused_results": sourced_results, | |
| "fusion_used": False, | |
| "reason": "Graph retrieval fusion disabled.", | |
| "graph_retrieval": {}, | |
| "normal_count": len(sourced_results), | |
| "graph_added_count": 0, | |
| "graph_supported_count": 0, | |
| "final_count": len(sourced_results) | |
| } | |
| sourced_results = fusion_result.get("fused_results", sourced_results) | |
| # Re-attach source IDs after fusion because graph-added chunks also need source IDs. | |
| sourced_results = attach_source_ids(sourced_results) | |
| citations = create_citation_objects(sourced_results) | |
| ''' | |
| if "fusion_result = fuse_retrieval_results_with_graph" not in text: | |
| if target in text: | |
| text = text.replace(target, replacement) | |
| print("Inserted fusion block.") | |
| else: | |
| print("ERROR: Could not find sourced_results block.") | |
| else: | |
| print("Fusion block already exists.") | |
| # 4. Ensure retrieval_fusion appears in final response | |
| if '"retrieval_fusion":' not in text: | |
| final_target = ''' "graph_context": graph_context, | |
| "citations": citations, | |
| ''' | |
| final_replacement = ''' "graph_context": graph_context, | |
| "retrieval_fusion": fusion_result if "fusion_result" in locals() else { | |
| "fusion_used": False, | |
| "reason": "Fusion result was not created." | |
| }, | |
| "citations": citations, | |
| ''' | |
| if final_target in text: | |
| text = text.replace(final_target, final_replacement) | |
| print("Inserted retrieval_fusion in final response.") | |
| else: | |
| print("ERROR: Could not find graph_context return block.") | |
| else: | |
| print("retrieval_fusion already exists in return.") | |
| path.write_text(text, encoding="utf-8") | |
| print("Phase 17 force patch completed.") | |