Files
wehub-resource-sync c889a57b6b
Test Suites / Build CI Environment (push) Has been cancelled
Test Suites / Basic Tests (push) Has been cancelled
Test Suites / End-to-End Tests (push) Has been cancelled
Test Suites / CLI Tests (push) Has been cancelled
Test Suites / Slow End-to-End Tests (push) Has been cancelled
Test Suites / Graph Database Tests (push) Has been cancelled
Test Suites / Vector DB Tests (push) Has been cancelled
Test Suites / Temporal Graph Test (push) Has been cancelled
Test Suites / Search Test on Different DBs (push) Has been cancelled
Test Suites / Example Tests (push) Has been cancelled
Test Suites / Notebook Tests (push) Has been cancelled
Test Suites / OS and Python Tests Ubuntu (push) Has been cancelled
Test Suites / OS and Python Tests Extended (push) Has been cancelled
Test Suites / LLM Test Suite (push) Has been cancelled
Test Suites / S3 File Storage Test (push) Has been cancelled
Test Suites / Run Integration Tests (push) Has been cancelled
Test Suites / MCP Tests (push) Has been cancelled
Test Suites / Docker Compose Test (push) Has been cancelled
Test Suites / Docker CI test (push) Has been cancelled
Test Suites / Relational DB Migration Tests (push) Has been cancelled
Test Suites / Distributed Cognee Test (push) Has been cancelled
Test Suites / DB Examples Tests (push) Has been cancelled
Test Suites / Test Completion Status (push) Has been cancelled
Test Suites / Claude Code Review (push) Has been cancelled
Test Suites / basic checks (push) Has been cancelled
build | Build and Push Cognee MCP Docker Image to dockerhub / docker-build-and-push (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
build | Build and Push Docker Image to dockerhub / docker-build-and-push (push) Has been cancelled
Weighted Edges Tests / Test Weighted Edges Core Functionality (3.11) (push) Has been cancelled
Weighted Edges Tests / Test Weighted Edges Core Functionality (3.12) (push) Has been cancelled
Weighted Edges Tests / Test Weighted Edges with Different Graph Databases (kuzu, kuzu) (push) Has been cancelled
Weighted Edges Tests / Test Weighted Edges with Different Graph Databases (neo4j, neo4j) (push) Has been cancelled
Weighted Edges Tests / Test Weighted Edges Examples (push) Has been cancelled
Weighted Edges Tests / Code Quality for Weighted Edges (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:02:24 +08:00

88 lines
2.5 KiB
Python

from dataclasses import dataclass, field
from enum import Enum
from typing import List, Optional
from pydantic import BaseModel
from cognee.modules.graph.cognee_graph.CogneeGraphElements import Edge
class DecompositionMode(str, Enum):
"""Supported decomposition execution modes."""
ANSWER_PER_SUBQUERY = "answer_per_subquery"
COMBINED_TRIPLETS_CONTEXT = "combined_triplets_context"
class QueryDecomposition(BaseModel):
"""Structured decomposition output."""
subqueries: List[str]
@dataclass
class SubqueryRunState:
"""State collected for one decomposed subquery."""
query: str
edges: List[Edge] = field(default_factory=list)
context: str = ""
answer: str = ""
@dataclass
class DecompositionRunState:
"""State collected for one decomposed retrieval run."""
original_query: str
subqueries: List[SubqueryRunState] = field(default_factory=list)
merged_edges: List[Edge] = field(default_factory=list)
final_context: Optional[str] = None
def normalize_subqueries(original_query: str, subqueries: Optional[List[str]]) -> List[str]:
"""Clean and bound decomposed subqueries."""
normalized_queries: List[str] = []
for subquery in subqueries or []:
cleaned_query = subquery.strip()
if not cleaned_query or cleaned_query in normalized_queries:
continue
normalized_queries.append(cleaned_query)
if len(normalized_queries) >= 5:
break
if normalized_queries:
return normalized_queries
fallback_query = original_query.strip()
return [fallback_query or original_query]
def merge_deduplicated_edges(edge_batches: List[List[Edge]]) -> List[Edge]:
"""Merge edge batches using identity-based deduplication."""
merged_edges: List[Edge] = []
seen_ids: set[int] = set()
for edge_batch in edge_batches:
for edge in edge_batch:
edge_id = id(edge)
if edge_id in seen_ids:
continue
merged_edges.append(edge)
seen_ids.add(edge_id)
return merged_edges
def build_subquery_answer_context(state: DecompositionRunState) -> str:
"""Build the final context from ordered subquery answers."""
sections: List[str] = []
for index, subquery_state in enumerate(state.subqueries, start=1):
sections.append(
f"Subquery {index}: {subquery_state.query}\n"
f"Subquery {index} Answer:\n{subquery_state.answer}"
)
return "Question decomposition results:\n\n" + "\n\n".join(sections)