fix: Remove nested objects from return_properties to fix gRPC serialization error

- Remove 'document' from Summary query return_properties
- Remove 'work' from Document query return_properties
- Nested objects (OBJECT datatype) cause gRPC proto serialization error
- Weaviate should return nested objects automatically without explicit request
- Fixes: 'proto: invalid type: map[string]interface {}' error
This commit is contained in:
2026-01-01 15:30:54 +01:00
parent 9c6ba3f4a1
commit f49279fee3

View File

@@ -340,7 +340,7 @@ def hierarchical_search(
limit=sections_limit, limit=sections_limit,
return_metadata=wvq.MetadataQuery(distance=True), return_metadata=wvq.MetadataQuery(distance=True),
return_properties=[ return_properties=[
"sectionPath", "title", "text", "level", "concepts", "document" "sectionPath", "title", "text", "level", "concepts"
], ],
) )
@@ -358,7 +358,12 @@ def hierarchical_search(
sections_data = [] sections_data = []
for summary_obj in summaries_result.objects: for summary_obj in summaries_result.objects:
props = summary_obj.properties props = summary_obj.properties
doc_obj = props.get("document", {}) if props.get("document") else {}
# Try to get document.sourceId if available (nested object might still be returned)
doc_obj = props.get("document")
source_id = ""
if doc_obj and isinstance(doc_obj, dict):
source_id = doc_obj.get("sourceId", "")
sections_data.append({ sections_data.append({
"section_path": props.get("sectionPath", ""), "section_path": props.get("sectionPath", ""),
@@ -366,7 +371,8 @@ def hierarchical_search(
"summary_text": props.get("text", ""), "summary_text": props.get("text", ""),
"level": props.get("level", 1), "level": props.get("level", 1),
"concepts": props.get("concepts", []), "concepts": props.get("concepts", []),
"document_source_id": doc_obj.get("sourceId", "") if isinstance(doc_obj, dict) else "", "document_source_id": source_id,
"summary_uuid": str(summary_obj.uuid), # Keep UUID for later retrieval if needed
"similarity": round((1 - summary_obj.metadata.distance) * 100, 1) if summary_obj.metadata and summary_obj.metadata.distance else 0, "similarity": round((1 - summary_obj.metadata.distance) * 100, 1) if summary_obj.metadata and summary_obj.metadata.distance else 0,
}) })
@@ -381,10 +387,11 @@ def hierarchical_search(
continue continue
# Query Document to get work metadata # Query Document to get work metadata
# Note: 'work' is a nested object, so we don't specify it in return_properties
# Weaviate should return it automatically
doc_result = doc_collection.query.fetch_objects( doc_result = doc_collection.query.fetch_objects(
filters=wvq.Filter.by_property("sourceId").equal(source_id), filters=wvq.Filter.by_property("sourceId").equal(source_id),
limit=1, limit=1,
return_properties=["work"],
) )
if doc_result.objects: if doc_result.objects: