From 0065fde9de0a3f50832c39929fb429bc15cd4daf Mon Sep 17 00:00:00 2001 From: egerev Date: Thu, 9 Apr 2026 01:33:02 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20holistic=20review=20round=202=20?= =?UTF-8?q?=E2=80=94=20TreeNodeResponse,=20CLI=20ingest,=20citation=20vali?= =?UTF-8?q?dation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CRITICAL: Add from_attributes=True to TreeNodeResponse (ORM→Pydantic conversion) CRITICAL: Fix CLI ingest — /ingest/text path, 'text' field (was /ingest + content) HIGH: Citation validation now includes entity_id/claim_id from chunk-sourced evidence Co-Authored-By: Claude Opus 4.6 (1M context) --- packages/cli-go/internal/cmd/ingest.go | 4 ++-- packages/core/alayaos_core/schemas/tree.py | 4 +++- packages/core/alayaos_core/services/ask.py | 3 +++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/cli-go/internal/cmd/ingest.go b/packages/cli-go/internal/cmd/ingest.go index 73a342b..c1ec3b9 100644 --- a/packages/cli-go/internal/cmd/ingest.go +++ b/packages/cli-go/internal/cmd/ingest.go @@ -43,10 +43,10 @@ func doIngest(content, sourceType string) error { return err } body := map[string]string{ - "content": content, + "text": content, "source_type": sourceType, } - data, err := c.Post("/ingest", body) + data, err := c.Post("/ingest/text", body) if err != nil { return err } diff --git a/packages/core/alayaos_core/schemas/tree.py b/packages/core/alayaos_core/schemas/tree.py index bba2bab..e8953de 100644 --- a/packages/core/alayaos_core/schemas/tree.py +++ b/packages/core/alayaos_core/schemas/tree.py @@ -3,10 +3,12 @@ import uuid from datetime import datetime -from pydantic import BaseModel, field_validator +from pydantic import BaseModel, ConfigDict, field_validator class TreeNodeResponse(BaseModel): + model_config = ConfigDict(from_attributes=True) + id: uuid.UUID path: str node_type: str diff --git a/packages/core/alayaos_core/services/ask.py b/packages/core/alayaos_core/services/ask.py index f81a11c..ca5824b 100644 --- a/packages/core/alayaos_core/services/ask.py +++ b/packages/core/alayaos_core/services/ask.py @@ -96,8 +96,11 @@ async def ask( max_tokens=settings.ASK_MAX_OUTPUT_TOKENS, ) + # Collect valid IDs from all evidence (including chunk-sourced with entity_id/claim_id) valid_entity_ids = {u.source_id for u in evidence if u.source_type == "entity"} + valid_entity_ids |= {u.entity_id for u in evidence if u.entity_id is not None} valid_claim_ids = {u.source_id for u in evidence if u.source_type == "claim"} + valid_claim_ids |= {u.claim_id for u in evidence if u.claim_id is not None} validated_citations = [] for c in response.citations: if c.entity_id and c.entity_id not in valid_entity_ids: