fix: serialize UUID in pgvector data point payload

This commit is contained in:
Boris Arzentar 2024-11-07 11:36:31 +01:00
parent 758698a35b
commit 897bbac699
2 changed files with 8 additions and 5 deletions

View file

@ -8,7 +8,7 @@ from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker
from cognee.infrastructure.engine import DataPoint
from .serialize_datetime import serialize_datetime
from .serialize_data import serialize_data
from ..models.ScoredResult import ScoredResult
from ..vector_db_interface import VectorDBInterface
from ..embeddings.EmbeddingEngine import EmbeddingEngine
@ -113,7 +113,7 @@ class PGVectorAdapter(SQLAlchemyAdapter, VectorDBInterface):
PGVectorDataPoint(
id=data_point.id,
vector=data_vectors[data_index],
payload=serialize_datetime(data_point.model_dump()),
payload=serialize_data(data_point.model_dump()),
)
for (data_index, data_point) in enumerate(data_points)
]

View file

@ -1,12 +1,15 @@
from datetime import datetime
from uuid import UUID
def serialize_datetime(data):
def serialize_data(data):
"""Recursively convert datetime objects in dictionaries/lists to ISO format."""
if isinstance(data, dict):
return {key: serialize_datetime(value) for key, value in data.items()}
return {key: serialize_data(value) for key, value in data.items()}
elif isinstance(data, list):
return [serialize_datetime(item) for item in data]
return [serialize_data(item) for item in data]
elif isinstance(data, datetime):
return data.isoformat() # Convert datetime to ISO 8601 string
elif isinstance(data, UUID):
return str(data)
else:
return data