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:
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user