From 29b8ce6860849ba92953677d2b0d4a918f9d48b4 Mon Sep 17 00:00:00 2001 From: Daniel O'Connell Date: Mon, 2 Jun 2025 02:53:32 +0200 Subject: [PATCH] Fix search + proper integration tests --- requirements-api.txt | 3 +- requirements-common.txt | 4 +- run_celery_task.py | 9 + src/memory/api/MCP/tools.py | 151 ++- src/memory/api/app.py | 11 +- src/memory/api/search.py | 382 ------ src/memory/api/search/__init__.py | 4 + src/memory/api/search/bm25.py | 68 + src/memory/api/search/embeddings.py | 144 +++ src/memory/api/search/search.py | 94 ++ src/memory/api/search/utils.py | 134 ++ src/memory/common/collections.py | 1 + src/memory/common/db/models/source_item.py | 30 +- src/memory/common/db/models/source_items.py | 32 +- src/memory/common/embedding.py | 29 +- src/memory/common/extract.py | 32 +- src/memory/common/qdrant.py | 20 +- src/memory/common/summarizer.py | 2 + src/memory/workers/tasks/ebook.py | 1 + src/memory/workers/tasks/maintenance.py | 19 +- tests/conftest.py | 8 +- tests/data/code_complexity.jpg | Bin 0 -> 70186 bytes tests/data/contents.py | 249 ++++ tests/data/lang_timeline.png | Bin 0 -> 316651 bytes tests/integration/test_real_queries.py | 1118 +++++++++++++++++ .../common/db/models/test_source_item.py | 116 +- .../db/models/test_source_item_embeddings.py | 626 +++++++++ .../common/db/models/test_source_items.py | 4 +- 28 files changed, 2646 insertions(+), 645 deletions(-) delete mode 100644 src/memory/api/search.py create mode 100644 src/memory/api/search/__init__.py create mode 100644 src/memory/api/search/bm25.py create mode 100644 src/memory/api/search/embeddings.py create mode 100644 src/memory/api/search/search.py create mode 100644 src/memory/api/search/utils.py create mode 100644 tests/data/code_complexity.jpg create mode 100644 tests/data/contents.py create mode 100644 tests/data/lang_timeline.png create mode 100644 tests/integration/test_real_queries.py create mode 100644 tests/memory/common/db/models/test_source_item_embeddings.py diff --git a/requirements-api.txt b/requirements-api.txt index fa6732f..aba6011 100644 --- a/requirements-api.txt +++ b/requirements-api.txt @@ -3,4 +3,5 @@ uvicorn==0.29.0 python-jose==3.3.0 python-multipart==0.0.9 sqladmin -mcp==1.9.2 \ No newline at end of file +mcp==1.9.2 +bm25s[full]==0.2.13 \ No newline at end of file diff --git a/requirements-common.txt b/requirements-common.txt index dbf0da5..d07028b 100644 --- a/requirements-common.txt +++ b/requirements-common.txt @@ -6,5 +6,5 @@ dotenv==0.9.9 voyageai==0.3.2 qdrant-client==1.9.0 anthropic==0.18.1 - -bm25s[full]==0.2.13 \ No newline at end of file +# Pin the httpx version, as newer versions break the anthropic client +httpx==0.27.0 \ No newline at end of file diff --git a/run_celery_task.py b/run_celery_task.py index e9a13f2..146c230 100644 --- a/run_celery_task.py +++ b/run_celery_task.py @@ -38,6 +38,7 @@ from memory.workers.tasks.maintenance import ( CLEAN_COLLECTION, REINGEST_CHUNK, REINGEST_EMPTY_SOURCE_ITEMS, + REINGEST_ALL_EMPTY_SOURCE_ITEMS, REINGEST_ITEM, REINGEST_MISSING_CHUNKS, UPDATE_METADATA_FOR_ITEM, @@ -67,6 +68,7 @@ TASK_MAPPINGS = { "reingest_chunk": REINGEST_CHUNK, "reingest_item": REINGEST_ITEM, "reingest_empty_source_items": REINGEST_EMPTY_SOURCE_ITEMS, + "reingest_all_empty_source_items": REINGEST_ALL_EMPTY_SOURCE_ITEMS, "update_metadata_for_item": UPDATE_METADATA_FOR_ITEM, "update_metadata_for_source_items": UPDATE_METADATA_FOR_SOURCE_ITEMS, }, @@ -316,6 +318,13 @@ def maintenance_reingest_empty_source_items(ctx, item_type): execute_task(ctx, "maintenance", "reingest_empty_source_items", item_type=item_type) +@maintenance.command("reingest-all-empty-source-items") +@click.pass_context +def maintenance_reingest_all_empty_source_items(ctx): + """Reingest all empty source items.""" + execute_task(ctx, "maintenance", "reingest_all_empty_source_items") + + @maintenance.command("reingest-chunk") @click.option("--chunk-id", required=True, help="Chunk ID to reingest") @click.pass_context diff --git a/src/memory/api/MCP/tools.py b/src/memory/api/MCP/tools.py index 77ba76b..f68533c 100644 --- a/src/memory/api/MCP/tools.py +++ b/src/memory/api/MCP/tools.py @@ -15,14 +15,60 @@ from memory.common.db.connection import make_session from memory.common import extract from memory.common.db.models import AgentObservation -from memory.api.search import search, SearchFilters +from memory.api.search.search import search, SearchFilters from memory.common.formatters import observation from memory.workers.tasks.content_processing import process_content_item +from memory.common.collections import ALL_COLLECTIONS, OBSERVATION_COLLECTIONS logger = logging.getLogger(__name__) # Create MCP server instance -mcp = FastMCP("memory", stateless=True) +mcp = FastMCP("memory", stateless_http=True) + + +def filter_observation_source_ids( + tags: list[str] | None = None, observation_types: list[str] | None = None +): + if not tags and not observation_types: + return None + + with make_session() as session: + items_query = session.query(AgentObservation.id) + + if tags: + # Use PostgreSQL array overlap operator with proper array casting + items_query = items_query.filter( + AgentObservation.tags.op("&&")(sql_cast(tags, ARRAY(Text))), + ) + if observation_types: + items_query = items_query.filter( + AgentObservation.observation_type.in_(observation_types) + ) + source_ids = [item.id for item in items_query.all()] + + return source_ids + + +def filter_source_ids( + modalities: set[str], + tags: list[str] | None = None, +): + if not tags: + return None + + with make_session() as session: + items_query = session.query(SourceItem.id) + + if tags: + # Use PostgreSQL array overlap operator with proper array casting + items_query = items_query.filter( + SourceItem.tags.op("&&")(sql_cast(tags, ARRAY(Text))), + ) + if modalities: + items_query = items_query.filter(SourceItem.modality.in_(modalities)) + source_ids = [item.id for item in items_query.all()] + + return source_ids @mcp.tool() @@ -48,20 +94,6 @@ async def get_all_tags() -> list[str]: - Projects: "project:website-redesign" - Contexts: "context:work", "context:late-night" - Domains: "domain:finance" - - Example: - # Get all tags to ensure consistency - tags = await get_all_tags() - # Returns: ["ai-safety", "context:work", "functional-programming", - # "machine-learning", "project:thesis", ...] - - # Use to check if a topic has been discussed before - if "quantum-computing" in tags: - # Search for related observations - observations = await search_observations( - query="quantum computing", - tags=["quantum-computing"] - ) """ with make_session() as session: tags_query = session.query(func.unnest(SourceItem.tags)).distinct() @@ -93,26 +125,6 @@ async def get_all_subjects() -> list[str]: - "ai_beliefs", "ai_safety_beliefs" - "learning_preferences" - "communication_style" - - Example: - # Get all subjects to ensure consistency - subjects = await get_all_subjects() - # Returns: ["ai_safety_beliefs", "architecture_preferences", - # "programming_philosophy", "work_schedule", ...] - - # Use to check what we know about the user - if "programming_style" in subjects: - # Get all programming-related observations - observations = await search_observations( - query="programming", - subject="programming_style" - ) - - Best practices: - - Always check existing subjects before creating new ones - - Use snake_case for consistency - - Be specific but not too granular - - Group related observations under same subject """ with make_session() as session: return sorted( @@ -146,20 +158,6 @@ async def get_all_observation_types() -> list[str]: Returns: List of observation types that have actually been used in the system. - - Example: - # Check what types of observations exist - types = await get_all_observation_types() - # Returns: ["behavior", "belief", "contradiction", "preference"] - - # Use to analyze observation distribution - for obs_type in types: - observations = await search_observations( - query="", - observation_types=[obs_type], - limit=100 - ) - print(f"{obs_type}: {len(observations)} observations") """ with make_session() as session: return sorted( @@ -173,7 +171,11 @@ async def get_all_observation_types() -> list[str]: @mcp.tool() async def search_knowledge_base( - query: str, previews: bool = False, modalities: list[str] = [], limit: int = 10 + query: str, + previews: bool = False, + modalities: set[str] = set(), + tags: list[str] = [], + limit: int = 10, ) -> list[dict]: """ Search through the user's stored knowledge and content. @@ -283,14 +285,22 @@ async def search_knowledge_base( """ logger.info(f"MCP search for: {query}") + if not modalities: + modalities = set(ALL_COLLECTIONS.keys()) + modalities = set(modalities) & ALL_COLLECTIONS.keys() - OBSERVATION_COLLECTIONS + upload_data = extract.extract_text(query) results = await search( upload_data, previews=previews, modalities=modalities, limit=limit, - min_text_score=0.3, - min_multimodal_score=0.3, + min_text_score=0.4, + min_multimodal_score=0.25, + filters=SearchFilters( + tags=tags, + source_ids=filter_source_ids(tags=tags, modalities=modalities), + ), ) # Convert SearchResult objects to dictionaries for MCP @@ -456,12 +466,13 @@ async def observe( mime_type="text/plain", sha256=sha256(f"{content}{subject}{observation_type}".encode("utf-8")).digest(), inserted_at=datetime.now(timezone.utc), + modality="observation", ) try: with make_session() as session: process_content_item(observation, session) - if not observation.id: + if not cast(int | None, observation.id): raise ValueError("Observation not created") logger.info( @@ -600,24 +611,6 @@ async def search_observations( - Higher confidence observations are more reliable - Recent observations may override older ones on same topic """ - source_ids = None - if tags or observation_types: - with make_session() as session: - items_query = session.query(AgentObservation.id) - - if tags: - # Use PostgreSQL array overlap operator with proper array casting - items_query = items_query.filter( - AgentObservation.tags.op("&&")(sql_cast(tags, ARRAY(Text))), - ) - if observation_types: - items_query = items_query.filter( - AgentObservation.observation_type.in_(observation_types) - ) - source_ids = [item.id for item in items_query.all()] - if not source_ids: - return [] - semantic_text = observation.generate_semantic_text( subject=subject or "", observation_type="".join(observation_types or []), @@ -637,18 +630,24 @@ async def search_observations( extract.DataChunk(data=[temporal]), ], previews=True, - modalities=["semantic", "temporal"], + modalities={"semantic", "temporal"}, limit=limit, - min_text_score=0.8, filters=SearchFilters( subject=subject, confidence=min_confidence, tags=tags, observation_types=observation_types, - source_ids=source_ids, + source_ids=filter_observation_source_ids(tags=tags), ), + timeout=2, ) return [ - cast(dict, cast(dict, result.model_dump()).get("content")) for result in results + { + "content": r.content, + "tags": r.tags, + "created_at": r.created_at.isoformat() if r.created_at else None, + "metadata": r.metadata, + } + for r in results ] diff --git a/src/memory/api/app.py b/src/memory/api/app.py index 4f37c39..51a9d22 100644 --- a/src/memory/api/app.py +++ b/src/memory/api/app.py @@ -3,6 +3,7 @@ FastAPI application for the knowledge base. """ import contextlib +import os import pathlib import logging from typing import Annotated, Optional @@ -105,12 +106,16 @@ def get_file_by_path(path: str): return FileResponse(path=file_path, filename=file_path.name) -def main(): +def main(reload: bool = False): """Run the FastAPI server in debug mode with auto-reloading.""" import uvicorn uvicorn.run( - "memory.api.app:app", host="0.0.0.0", port=8000, reload=True, log_level="debug" + "memory.api.app:app", + host="0.0.0.0", + port=8000, + reload=reload, + log_level="debug", ) @@ -118,4 +123,4 @@ if __name__ == "__main__": from memory.common.qdrant import setup_qdrant setup_qdrant() - main() + main(os.getenv("RELOAD", "false") == "true") diff --git a/src/memory/api/search.py b/src/memory/api/search.py deleted file mode 100644 index 6b4b501..0000000 --- a/src/memory/api/search.py +++ /dev/null @@ -1,382 +0,0 @@ -""" -Search endpoints for the knowledge base API. -""" - -import asyncio -import base64 -from hashlib import sha256 -import io -import logging -from collections import defaultdict -from typing import Any, Callable, Optional, TypedDict, NotRequired - -import bm25s -import Stemmer -import qdrant_client -from PIL import Image -from pydantic import BaseModel -from qdrant_client.http import models as qdrant_models - -from memory.common import embedding, extract, qdrant, settings -from memory.common.collections import ( - ALL_COLLECTIONS, - MULTIMODAL_COLLECTIONS, - TEXT_COLLECTIONS, -) -from memory.common.db.connection import make_session -from memory.common.db.models import Chunk - -logger = logging.getLogger(__name__) - - -class AnnotatedChunk(BaseModel): - id: str - score: float - metadata: dict - preview: Optional[str | None] = None - - -class SourceData(BaseModel): - """Holds source item data to avoid SQLAlchemy session issues""" - - id: int - size: int | None - mime_type: str | None - filename: str | None - content: str | dict | None - content_length: int - - -class SearchResponse(BaseModel): - collection: str - results: list[dict] - - -class SearchResult(BaseModel): - id: int - size: int - mime_type: str - chunks: list[AnnotatedChunk] - content: Optional[str | dict] = None - filename: Optional[str] = None - - -class SearchFilters(TypedDict): - subject: NotRequired[str | None] - confidence: NotRequired[float] - tags: NotRequired[list[str] | None] - observation_types: NotRequired[list[str] | None] - source_ids: NotRequired[list[int] | None] - - -async def with_timeout( - call, timeout: int = 2 -) -> list[tuple[SourceData, AnnotatedChunk]]: - """ - Run a function with a timeout. - - Args: - call: The function to run - timeout: The timeout in seconds - """ - try: - return await asyncio.wait_for(call, timeout=timeout) - except TimeoutError: - logger.warning(f"Search timed out after {timeout}s") - return [] - except Exception as e: - logger.error(f"Search failed: {e}") - return [] - - -def annotated_chunk( - chunk: Chunk, search_result: qdrant_models.ScoredPoint, previews: bool -) -> tuple[SourceData, AnnotatedChunk]: - def serialize_item(item: bytes | str | Image.Image) -> str | None: - if not previews and not isinstance(item, str): - return None - if not previews and isinstance(item, str): - return item[:100] - - if isinstance(item, Image.Image): - buffer = io.BytesIO() - format = item.format or "PNG" - item.save(buffer, format=format) - mime_type = f"image/{format.lower()}" - return f"data:{mime_type};base64,{base64.b64encode(buffer.getvalue()).decode('utf-8')}" - elif isinstance(item, bytes): - return base64.b64encode(item).decode("utf-8") - elif isinstance(item, str): - return item - else: - raise ValueError(f"Unsupported item type: {type(item)}") - - metadata = search_result.payload or {} - metadata = { - k: v - for k, v in metadata.items() - if k not in ["content", "filename", "size", "content_type", "tags"] - } - - # Prefetch all needed source data while in session - source = chunk.source - source_data = SourceData( - id=source.id, - size=source.size, - mime_type=source.mime_type, - filename=source.filename, - content=source.display_contents, - content_length=len(source.content) if source.content else 0, - ) - - return source_data, AnnotatedChunk( - id=str(chunk.id), - score=search_result.score, - metadata=metadata, - preview=serialize_item(chunk.data[0]) if chunk.data else None, - ) - - -def group_chunks(chunks: list[tuple[SourceData, AnnotatedChunk]]) -> list[SearchResult]: - items = defaultdict(list) - source_lookup = {} - - for source, chunk in chunks: - items[source.id].append(chunk) - source_lookup[source.id] = source - - return [ - SearchResult( - id=source.id, - size=source.size or source.content_length, - mime_type=source.mime_type or "text/plain", - filename=source.filename - and source.filename.replace( - str(settings.FILE_STORAGE_DIR).lstrip("/"), "/files" - ), - content=source.content, - chunks=sorted(chunks, key=lambda x: x.score, reverse=True), - ) - for source_id, chunks in items.items() - for source in [source_lookup[source_id]] - ] - - -def query_chunks( - client: qdrant_client.QdrantClient, - upload_data: list[extract.DataChunk], - allowed_modalities: set[str], - embedder: Callable, - min_score: float = 0.0, - limit: int = 10, - filters: dict[str, Any] | None = None, -) -> dict[str, list[qdrant_models.ScoredPoint]]: - if not upload_data or not allowed_modalities: - return {} - - chunks = [chunk for chunk in upload_data if chunk.data] - if not chunks: - logger.error(f"No chunks to embed for {allowed_modalities}") - return {} - - logger.error(f"Embedding {len(chunks)} chunks for {allowed_modalities}") - for c in chunks: - logger.error(f"Chunk: {c.data}") - vectors = embedder([c.data for c in chunks], input_type="query") - - return { - collection: [ - r - for vector in vectors - for r in qdrant.search_vectors( - client=client, - collection_name=collection, - query_vector=vector, - limit=limit, - filter_params=filters, - ) - if r.score >= min_score - ] - for collection in allowed_modalities - } - - -async def search_bm25( - query: str, - modalities: list[str], - limit: int = 10, - filters: SearchFilters = SearchFilters(), -) -> list[tuple[SourceData, AnnotatedChunk]]: - with make_session() as db: - items_query = db.query(Chunk.id, Chunk.content).filter( - Chunk.collection_name.in_(modalities) - ) - if source_ids := filters.get("source_ids"): - items_query = items_query.filter(Chunk.source_id.in_(source_ids)) - items = items_query.all() - item_ids = { - sha256(item.content.lower().strip().encode("utf-8")).hexdigest(): item.id - for item in items - } - corpus = [item.content.lower().strip() for item in items] - - stemmer = Stemmer.Stemmer("english") - corpus_tokens = bm25s.tokenize(corpus, stopwords="en", stemmer=stemmer) - retriever = bm25s.BM25() - retriever.index(corpus_tokens) - - query_tokens = bm25s.tokenize(query, stemmer=stemmer) - results, scores = retriever.retrieve( - query_tokens, k=min(limit, len(corpus)), corpus=corpus - ) - - item_scores = { - item_ids[sha256(doc.encode("utf-8")).hexdigest()]: score - for doc, score in zip(results[0], scores[0]) - } - - with make_session() as db: - chunks = db.query(Chunk).filter(Chunk.id.in_(item_scores.keys())).all() - results = [] - for chunk in chunks: - # Prefetch all needed source data while in session - source = chunk.source - source_data = SourceData( - id=source.id, - size=source.size, - mime_type=source.mime_type, - filename=source.filename, - content=source.display_contents, - content_length=len(source.content) if source.content else 0, - ) - - annotated = AnnotatedChunk( - id=str(chunk.id), - score=item_scores[chunk.id], - metadata=source.as_payload(), - preview=None, - ) - results.append((source_data, annotated)) - - return results - - -async def search_embeddings( - data: list[extract.DataChunk], - previews: Optional[bool] = False, - modalities: set[str] = set(), - limit: int = 10, - min_score: float = 0.3, - filters: SearchFilters = SearchFilters(), - multimodal: bool = False, -) -> list[tuple[SourceData, AnnotatedChunk]]: - """ - Search across knowledge base using text query and optional files. - - Parameters: - - data: List of data to search in (e.g., text, images, files) - - previews: Whether to include previews in the search results - - modalities: List of modalities to search in (e.g., "text", "photo", "doc") - - limit: Maximum number of results - - min_score: Minimum score to include in the search results - - filters: Filters to apply to the search results - - multimodal: Whether to search in multimodal collections - """ - query_filters = { - "must": [ - {"key": "confidence", "range": {"gte": filters.get("confidence", 0.5)}}, - ], - } - if tags := filters.get("tags"): - query_filters["must"] += [{"key": "tags", "match": {"any": tags}}] - if observation_types := filters.get("observation_types"): - query_filters["must"] += [ - {"key": "observation_type", "match": {"any": observation_types}} - ] - - client = qdrant.get_qdrant_client() - results = query_chunks( - client, - data, - modalities, - embedding.embed_text if not multimodal else embedding.embed_mixed, - min_score=min_score, - limit=limit, - filters=query_filters, - ) - search_results = {k: results.get(k, []) for k in modalities} - - found_chunks = { - str(r.id): r for results in search_results.values() for r in results - } - with make_session() as db: - chunks = db.query(Chunk).filter(Chunk.id.in_(found_chunks.keys())).all() - return [ - annotated_chunk(chunk, found_chunks[str(chunk.id)], previews or False) - for chunk in chunks - ] - - -async def search( - data: list[extract.DataChunk], - previews: Optional[bool] = False, - modalities: list[str] = [], - limit: int = 10, - min_text_score: float = 0.3, - min_multimodal_score: float = 0.3, - filters: SearchFilters = {}, -) -> list[SearchResult]: - """ - Search across knowledge base using text query and optional files. - - Parameters: - - query: Optional text search query - - modalities: List of modalities to search in (e.g., "text", "photo", "doc") - - files: Optional files to include in the search context - - limit: Maximum number of results per modality - - Returns: - - List of search results sorted by score - """ - allowed_modalities = set(modalities or ALL_COLLECTIONS.keys()) - - text_embeddings_results = with_timeout( - search_embeddings( - data, - previews, - allowed_modalities & TEXT_COLLECTIONS, - limit, - min_text_score, - filters, - multimodal=False, - ) - ) - multimodal_embeddings_results = with_timeout( - search_embeddings( - data, - previews, - allowed_modalities & MULTIMODAL_COLLECTIONS, - limit, - min_multimodal_score, - filters, - multimodal=True, - ) - ) - bm25_results = with_timeout( - search_bm25( - " ".join([c for chunk in data for c in chunk.data if isinstance(c, str)]), - modalities, - limit=limit, - filters=filters, - ) - ) - - results = await asyncio.gather( - text_embeddings_results, - multimodal_embeddings_results, - bm25_results, - return_exceptions=False, - ) - - results = group_chunks([c for r in results for c in r]) - return sorted(results, key=lambda x: max(c.score for c in x.chunks), reverse=True) diff --git a/src/memory/api/search/__init__.py b/src/memory/api/search/__init__.py new file mode 100644 index 0000000..f3b1cf1 --- /dev/null +++ b/src/memory/api/search/__init__.py @@ -0,0 +1,4 @@ +from .search import search +from .utils import SearchResult, SearchFilters + +__all__ = ["search", "SearchResult", "SearchFilters"] diff --git a/src/memory/api/search/bm25.py b/src/memory/api/search/bm25.py new file mode 100644 index 0000000..9acb098 --- /dev/null +++ b/src/memory/api/search/bm25.py @@ -0,0 +1,68 @@ +""" +Search endpoints for the knowledge base API. +""" + +from hashlib import sha256 +import logging + +import bm25s +import Stemmer +from memory.api.search.utils import SourceData, AnnotatedChunk, SearchFilters + +from memory.common.db.connection import make_session +from memory.common.db.models import Chunk + +logger = logging.getLogger(__name__) + + +async def search_bm25( + query: str, + modalities: set[str], + limit: int = 10, + filters: SearchFilters = SearchFilters(), +) -> list[tuple[SourceData, AnnotatedChunk]]: + with make_session() as db: + items_query = db.query(Chunk.id, Chunk.content).filter( + Chunk.collection_name.in_(modalities) + ) + if source_ids := filters.get("source_ids"): + items_query = items_query.filter(Chunk.source_id.in_(source_ids)) + items = items_query.all() + item_ids = { + sha256(item.content.lower().strip().encode("utf-8")).hexdigest(): item.id + for item in items + } + corpus = [item.content.lower().strip() for item in items] + + stemmer = Stemmer.Stemmer("english") + corpus_tokens = bm25s.tokenize(corpus, stopwords="en", stemmer=stemmer) + retriever = bm25s.BM25() + retriever.index(corpus_tokens) + + query_tokens = bm25s.tokenize(query, stemmer=stemmer) + results, scores = retriever.retrieve( + query_tokens, k=min(limit, len(corpus)), corpus=corpus + ) + + item_scores = { + item_ids[sha256(doc.encode("utf-8")).hexdigest()]: score + for doc, score in zip(results[0], scores[0]) + } + + with make_session() as db: + chunks = db.query(Chunk).filter(Chunk.id.in_(item_scores.keys())).all() + results = [] + for chunk in chunks: + # Prefetch all needed source data while in session + source_data = SourceData.from_chunk(chunk) + + annotated = AnnotatedChunk( + id=str(chunk.id), + score=item_scores[chunk.id], + metadata=chunk.source.as_payload(), + preview=None, + search_method="bm25", + ) + results.append((source_data, annotated)) + + return results diff --git a/src/memory/api/search/embeddings.py b/src/memory/api/search/embeddings.py new file mode 100644 index 0000000..132b6bb --- /dev/null +++ b/src/memory/api/search/embeddings.py @@ -0,0 +1,144 @@ +import base64 +import io +import logging +from typing import Any, Callable, Optional + +import qdrant_client +from PIL import Image +from qdrant_client.http import models as qdrant_models + +from memory.common import embedding, extract, qdrant +from memory.common.db.connection import make_session +from memory.common.db.models import Chunk +from memory.api.search.utils import SourceData, AnnotatedChunk, SearchFilters + +logger = logging.getLogger(__name__) + + +def annotated_chunk( + chunk: Chunk, search_result: qdrant_models.ScoredPoint, previews: bool +) -> tuple[SourceData, AnnotatedChunk]: + def serialize_item(item: bytes | str | Image.Image) -> str | None: + if not previews and not isinstance(item, str): + return None + if not previews and isinstance(item, str): + return item[:100] + + if isinstance(item, Image.Image): + buffer = io.BytesIO() + format = item.format or "PNG" + item.save(buffer, format=format) + mime_type = f"image/{format.lower()}" + return f"data:{mime_type};base64,{base64.b64encode(buffer.getvalue()).decode('utf-8')}" + elif isinstance(item, bytes): + return base64.b64encode(item).decode("utf-8") + elif isinstance(item, str): + return item + else: + raise ValueError(f"Unsupported item type: {type(item)}") + + metadata = search_result.payload or {} + metadata = { + k: v + for k, v in metadata.items() + if k not in ["content", "filename", "size", "content_type", "tags"] + } + + # Prefetch all needed source data while in session + return SourceData.from_chunk(chunk), AnnotatedChunk( + id=str(chunk.id), + score=search_result.score, + metadata=metadata, + preview=serialize_item(chunk.data[0]) if chunk.data else None, + search_method="embeddings", + ) + + +def query_chunks( + client: qdrant_client.QdrantClient, + upload_data: list[extract.DataChunk], + allowed_modalities: set[str], + embedder: Callable, + min_score: float = 0.3, + limit: int = 10, + filters: dict[str, Any] | None = None, +) -> dict[str, list[qdrant_models.ScoredPoint]]: + if not upload_data or not allowed_modalities: + return {} + + chunks = [chunk for chunk in upload_data if chunk.data] + if not chunks: + logger.error(f"No chunks to embed for {allowed_modalities}") + return {} + + vectors = embedder(chunks, input_type="query") + + return { + collection: [ + r + for vector in vectors + for r in qdrant.search_vectors( + client=client, + collection_name=collection, + query_vector=vector, + limit=limit, + filter_params=filters, + ) + if r.score >= min_score + ] + for collection in allowed_modalities + } + + +async def search_embeddings( + data: list[extract.DataChunk], + previews: Optional[bool] = False, + modalities: set[str] = set(), + limit: int = 10, + min_score: float = 0.3, + filters: SearchFilters = SearchFilters(), + multimodal: bool = False, +) -> list[tuple[SourceData, AnnotatedChunk]]: + """ + Search across knowledge base using text query and optional files. + + Parameters: + - data: List of data to search in (e.g., text, images, files) + - previews: Whether to include previews in the search results + - modalities: List of modalities to search in (e.g., "text", "photo", "doc") + - limit: Maximum number of results + - min_score: Minimum score to include in the search results + - filters: Filters to apply to the search results + - multimodal: Whether to search in multimodal collections + """ + query_filters = {} + if confidence := filters.get("confidence"): + query_filters["must"] += [{"key": "confidence", "range": {"gte": confidence}}] + if tags := filters.get("tags"): + query_filters["must"] += [{"key": "tags", "match": {"any": tags}}] + if observation_types := filters.get("observation_types"): + query_filters["must"] += [ + {"key": "observation_type", "match": {"any": observation_types}} + ] + + client = qdrant.get_qdrant_client() + results = query_chunks( + client, + data, + modalities, + embedding.embed_text if not multimodal else embedding.embed_mixed, + min_score=min_score, + limit=limit, + filters=query_filters, + ) + search_results = {k: results.get(k, []) for k in modalities} + + found_chunks = { + str(r.id): r for results in search_results.values() for r in results + } + with make_session() as db: + chunks = db.query(Chunk).filter(Chunk.id.in_(found_chunks.keys())).all() + return [ + annotated_chunk(chunk, found_chunks[str(chunk.id)], previews or False) + for chunk in chunks + ] diff --git a/src/memory/api/search/search.py b/src/memory/api/search/search.py new file mode 100644 index 0000000..2e07d5d --- /dev/null +++ b/src/memory/api/search/search.py @@ -0,0 +1,94 @@ +""" +Search endpoints for the knowledge base API. +""" + +import asyncio +import logging +from typing import Optional + +from memory.api.search.embeddings import search_embeddings +from memory.api.search.bm25 import search_bm25 +from memory.api.search.utils import SearchFilters, SearchResult + +from memory.api.search.utils import group_chunks, with_timeout +from memory.common import extract +from memory.common.collections import ( + ALL_COLLECTIONS, + MULTIMODAL_COLLECTIONS, + TEXT_COLLECTIONS, +) + +logger = logging.getLogger(__name__) + + +async def search( + data: list[extract.DataChunk], + previews: Optional[bool] = False, + modalities: set[str] = set(), + limit: int = 10, + min_text_score: float = 0.4, + min_multimodal_score: float = 0.25, + filters: SearchFilters = {}, + timeout: int = 2, +) -> list[SearchResult]: + """ + Search across knowledge base using text query and optional files. + + Parameters: + - query: Optional text search query + - modalities: List of modalities to search in (e.g., "text", "photo", "doc") + - files: Optional files to include in the search context + - limit: Maximum number of results per modality + + Returns: + - List of search results sorted by score + """ + allowed_modalities = modalities & ALL_COLLECTIONS.keys() + + text_embeddings_results = with_timeout( + search_embeddings( + data, + previews, + allowed_modalities & TEXT_COLLECTIONS, + limit, + min_text_score, + filters, + multimodal=False, + ), + timeout, + ) + multimodal_embeddings_results = with_timeout( + search_embeddings( + data, + previews, + allowed_modalities & MULTIMODAL_COLLECTIONS, + limit, + min_multimodal_score, + filters, + multimodal=True, + ), + timeout, + ) + bm25_results = with_timeout( + search_bm25( + " ".join([c for chunk in data for c in chunk.data if isinstance(c, str)]), + modalities, + limit=limit, + filters=filters, + ), + timeout, + ) + + results = await asyncio.gather( + text_embeddings_results, + multimodal_embeddings_results, + bm25_results, + return_exceptions=False, + ) + text_results, multi_results, bm25_results = results + all_results = text_results + multi_results + if len(all_results) < limit: + all_results += bm25_results + + results = group_chunks(all_results, previews or False) + return sorted(results, key=lambda x: max(c.score for c in x.chunks), reverse=True) diff --git a/src/memory/api/search/utils.py b/src/memory/api/search/utils.py new file mode 100644 index 0000000..cf8fe20 --- /dev/null +++ b/src/memory/api/search/utils.py @@ -0,0 +1,134 @@ +import asyncio +from datetime import datetime +import logging +from collections import defaultdict +from typing import Optional, TypedDict, NotRequired + +from pydantic import BaseModel + +from memory.common import settings +from memory.common.db.models import Chunk + +logger = logging.getLogger(__name__) + + +class AnnotatedChunk(BaseModel): + id: str + score: float + metadata: dict + preview: Optional[str | None] = None + search_method: str | None = None + + +class SourceData(BaseModel): + """Holds source item data to avoid SQLAlchemy session issues""" + + id: int + size: int | None + mime_type: str | None + filename: str | None + content_length: int + contents: dict | None + created_at: datetime | None + + @staticmethod + def from_chunk(chunk: Chunk) -> "SourceData": + source = chunk.source + display_contents = source.display_contents or {} + return SourceData( + id=source.id, + size=source.size, + mime_type=source.mime_type, + filename=source.filename, + content_length=len(source.content) if source.content else 0, + contents=display_contents, + created_at=source.inserted_at, + ) + + +class SearchResponse(BaseModel): + collection: str + results: list[dict] + + +class SearchResult(BaseModel): + id: int + size: int + mime_type: str + chunks: list[AnnotatedChunk] + content: Optional[str | dict] = None + filename: Optional[str] = None + tags: list[str] | None = None + metadata: dict | None = None + created_at: datetime | None = None + + +class SearchFilters(TypedDict): + subject: NotRequired[str | None] + confidence: NotRequired[float] + tags: NotRequired[list[str] | None] + observation_types: NotRequired[list[str] | None] + source_ids: NotRequired[list[int] | None] + + +async def with_timeout( + call, timeout: int = 2 +) -> list[tuple[SourceData, AnnotatedChunk]]: + """ + Run a function with a timeout. + + Args: + call: The function to run + timeout: The timeout in seconds + """ + try: + return await asyncio.wait_for(call, timeout=timeout) + except TimeoutError: + logger.warning(f"Search timed out after {timeout}s") + return [] + except Exception as e: + logger.error(f"Search failed: {e}") + return [] + + +def group_chunks( + chunks: list[tuple[SourceData, AnnotatedChunk]], preview: bool = False +) -> list[SearchResult]: + items = defaultdict(list) + source_lookup = {} + + for source, chunk in chunks: + items[source.id].append(chunk) + source_lookup[source.id] = source + + def get_content(text: str | dict | None) -> str | dict | None: + if preview or not text or not isinstance(text, str) or len(text) < 250: + return text + + return text[:250] + "..." + + def make_result(source: SourceData, chunks: list[AnnotatedChunk]) -> SearchResult: + contents = source.contents or {} + tags = contents.pop("tags", []) + content = contents.pop("content", None) + + return SearchResult( + id=source.id, + size=source.size or source.content_length, + mime_type=source.mime_type or "text/plain", + filename=source.filename + and source.filename.replace( + str(settings.FILE_STORAGE_DIR).lstrip("/"), "/files" + ), + content=get_content(content), + tags=tags, + metadata=contents, + chunks=sorted(chunks, key=lambda x: x.score, reverse=True), + created_at=source.created_at, + ) + + return [ + make_result(source, chunks) + for source_id, chunks in items.items() + for source in [source_lookup[source_id]] + ] diff --git a/src/memory/common/collections.py b/src/memory/common/collections.py index f2aee53..98fc2cc 100644 --- a/src/memory/common/collections.py +++ b/src/memory/common/collections.py @@ -102,6 +102,7 @@ TEXT_COLLECTIONS = { MULTIMODAL_COLLECTIONS = { coll for coll, params in ALL_COLLECTIONS.items() if params.get("multimodal") } +OBSERVATION_COLLECTIONS = {"semantic", "temporal"} TYPES = { "doc": ["application/pdf", "application/docx", "application/msword"], diff --git a/src/memory/common/db/models/source_item.py b/src/memory/common/db/models/source_item.py index 56e9a44..798954e 100644 --- a/src/memory/common/db/models/source_item.py +++ b/src/memory/common/db/models/source_item.py @@ -84,7 +84,7 @@ def clean_filename(filename: str) -> str: def image_filenames(chunk_id: str, images: list[Image.Image]) -> list[str]: for i, image in enumerate(images): - if not image.filename: # type: ignore + if not getattr(image, "filename", None): # type: ignore filename = settings.CHUNK_STORAGE_DIR / f"{chunk_id}_{i}.{image.format}" # type: ignore image.save(filename) image.filename = str(filename) # type: ignore @@ -100,16 +100,6 @@ def add_pics(chunk: str, images: list[Image.Image]) -> list[extract.MulitmodalCh ] -def merge_metadata(*metadata: dict[str, Any]) -> dict[str, Any]: - final = {} - for m in metadata: - data = m.copy() - if tags := set(data.pop("tags", [])): - final["tags"] = tags | final.get("tags", set()) - final |= data - return final - - def chunk_mixed(content: str, image_paths: Sequence[str]) -> list[extract.DataChunk]: if not content.strip(): return [] @@ -241,14 +231,11 @@ class SourceItem(Base): return [chunk.id for chunk in self.chunks] def _chunk_contents(self) -> Sequence[extract.DataChunk]: - chunks: list[extract.DataChunk] = [] content = cast(str | None, self.content) if content: - chunks = [extract.DataChunk(data=[c]) for c in chunker.chunk_text(content)] - - if content and len(content) > chunker.DEFAULT_CHUNK_TOKENS * 2: - summary, tags = summarizer.summarize(content) - chunks.append(extract.DataChunk(data=[summary], metadata={"tags": tags})) + chunks = extract.extract_text(content) + else: + chunks = [] mime_type = cast(str | None, self.mime_type) if mime_type and mime_type.startswith("image/"): @@ -272,12 +259,14 @@ class SourceItem(Base): file_paths=image_names, collection_name=modality, embedding_model=collections.collection_model(modality, text, images), - item_metadata=merge_metadata(self.as_payload(), data.metadata, metadata), + item_metadata=extract.merge_metadata( + self.as_payload(), data.metadata, metadata + ), ) return chunk def data_chunks(self, metadata: dict[str, Any] = {}) -> Sequence[Chunk]: - return [self._make_chunk(data) for data in self._chunk_contents()] + return [self._make_chunk(data, metadata) for data in self._chunk_contents()] def as_payload(self) -> dict: return { @@ -291,4 +280,7 @@ class SourceItem(Base): return { "tags": self.tags, "size": self.size, + "content": self.content, + "filename": self.filename, + "mime_type": self.mime_type, } diff --git a/src/memory/common/db/models/source_items.py b/src/memory/common/db/models/source_items.py index 985a2a6..1b1dac5 100644 --- a/src/memory/common/db/models/source_items.py +++ b/src/memory/common/db/models/source_items.py @@ -33,7 +33,6 @@ from memory.common.db.models.source_item import ( SourceItem, Chunk, clean_filename, - merge_metadata, chunk_mixed, ) @@ -326,27 +325,24 @@ class BookSection(SourceItem): } return {k: v for k, v in vals.items() if v} - def data_chunks(self, metadata: dict[str, Any] = {}) -> Sequence[Chunk]: + def _chunk_contents(self) -> Sequence[extract.DataChunk]: content = cast(str, self.content.strip()) if not content: return [] if len([p for p in self.pages if p.strip()]) == 1: - return [ - self._make_chunk( - extract.DataChunk(data=[content]), metadata | {"type": "page"} - ) - ] + chunks = extract.extract_text(content, metadata={"type": "page"}) + if len(chunks) > 1: + chunks[-1].metadata["type"] = "summary" + return chunks summary, tags = summarizer.summarize(content) return [ - self._make_chunk( - extract.DataChunk(data=[content]), - merge_metadata(metadata, {"type": "section", "tags": tags}), + extract.DataChunk( + data=[content], metadata={"type": "section", "tags": tags} ), - self._make_chunk( - extract.DataChunk(data=[summary]), - merge_metadata(metadata, {"type": "summary", "tags": tags}), + extract.DataChunk( + data=[summary], metadata={"type": "summary", "tags": tags} ), ] @@ -596,7 +592,7 @@ class AgentObservation(SourceItem): ) semantic_chunk = extract.DataChunk( data=[semantic_text], - metadata=merge_metadata(metadata, {"embedding_type": "semantic"}), + metadata=extract.merge_metadata(metadata, {"embedding_type": "semantic"}), modality="semantic", ) @@ -609,7 +605,7 @@ class AgentObservation(SourceItem): ) temporal_chunk = extract.DataChunk( data=[temporal_text], - metadata=merge_metadata(metadata, {"embedding_type": "temporal"}), + metadata=extract.merge_metadata(metadata, {"embedding_type": "temporal"}), modality="temporal", ) @@ -617,14 +613,14 @@ class AgentObservation(SourceItem): self._make_chunk( extract.DataChunk( data=[i], - metadata=merge_metadata(metadata, {"embedding_type": "semantic"}), + metadata=extract.merge_metadata( + metadata, {"embedding_type": "semantic"} + ), modality="semantic", ) ) for i in [ self.content, - self.subject, - self.observation_type, self.evidence.get("quote", ""), ] if i diff --git a/src/memory/common/embedding.py b/src/memory/common/embedding.py index 44ae4ea..694d04d 100644 --- a/src/memory/common/embedding.py +++ b/src/memory/common/embedding.py @@ -1,5 +1,5 @@ import logging -from typing import Iterable, Literal, cast +from typing import Literal, cast import voyageai @@ -15,12 +15,22 @@ from memory.common.db.models import Chunk, SourceItem logger = logging.getLogger(__name__) +def as_string( + chunk: extract.MulitmodalChunk | list[extract.MulitmodalChunk], +) -> str: + if isinstance(chunk, str): + return chunk.strip() + if isinstance(chunk, list): + return "\n".join(as_string(i) for i in chunk).strip() + return "" + + def embed_chunks( chunks: list[list[extract.MulitmodalChunk]], model: str = settings.TEXT_EMBEDDING_MODEL, input_type: Literal["document", "query"] = "document", ) -> list[Vector]: - logger.debug(f"Embedding chunks: {model} - {str(chunks)[:100]} {len(chunks)}") + logger.debug(f"Embedding chunks: {model} - {str(chunks)} {len(chunks)}") vo = voyageai.Client() # type: ignore if model == settings.MIXED_EMBEDDING_MODEL: return vo.multimodal_embed( @@ -29,17 +39,18 @@ def embed_chunks( input_type=input_type, ).embeddings - texts = ["\n".join(i for i in c if isinstance(i, str)) for c in chunks] + texts = [as_string(c) for c in chunks] + logger.debug(f"Embedding texts: {texts}") return cast( list[Vector], vo.embed(texts, model=model, input_type=input_type).embeddings ) def break_chunk( - chunk: list[extract.MulitmodalChunk], chunk_size: int = DEFAULT_CHUNK_TOKENS + chunk: extract.DataChunk, chunk_size: int = DEFAULT_CHUNK_TOKENS ) -> list[extract.MulitmodalChunk]: result = [] - for c in chunk: + for c in chunk.data: if isinstance(c, str): result += chunk_text(c, chunk_size, OVERLAP_TOKENS) else: @@ -48,12 +59,12 @@ def break_chunk( def embed_text( - chunks: list[list[extract.MulitmodalChunk]], + chunks: list[extract.DataChunk], model: str = settings.TEXT_EMBEDDING_MODEL, input_type: Literal["document", "query"] = "document", chunk_size: int = DEFAULT_CHUNK_TOKENS, ) -> list[Vector]: - chunked_chunks = [break_chunk(chunk, chunk_size) for chunk in chunks] + chunked_chunks = [break_chunk(chunk, chunk_size) for chunk in chunks if chunk.data] if not any(chunked_chunks): return [] @@ -61,12 +72,12 @@ def embed_text( def embed_mixed( - items: list[list[extract.MulitmodalChunk]], + items: list[extract.DataChunk], model: str = settings.MIXED_EMBEDDING_MODEL, input_type: Literal["document", "query"] = "document", chunk_size: int = DEFAULT_CHUNK_TOKENS, ) -> list[Vector]: - chunked_chunks = [break_chunk(item, chunk_size) for item in items] + chunked_chunks = [break_chunk(item, chunk_size) for item in items if item.data] return embed_chunks(chunked_chunks, model, input_type) diff --git a/src/memory/common/extract.py b/src/memory/common/extract.py index 18880eb..3df07df 100644 --- a/src/memory/common/extract.py +++ b/src/memory/common/extract.py @@ -6,7 +6,7 @@ import tempfile from contextlib import contextmanager from typing import Any, Generator, Sequence, cast -from memory.common import chunker +from memory.common import chunker, summarizer import pymupdf # PyMuPDF import pypandoc from PIL import Image @@ -16,6 +16,16 @@ logger = logging.getLogger(__name__) MulitmodalChunk = Image.Image | str +def merge_metadata(*metadata: dict[str, Any]) -> dict[str, Any]: + final = {} + for m in metadata: + data = m.copy() + if tags := set(data.pop("tags", []) or []): + final["tags"] = tags | final.get("tags", set()) + final |= data + return final + + @dataclass class DataChunk: data: Sequence[MulitmodalChunk] @@ -109,7 +119,9 @@ def extract_image(content: bytes | str | pathlib.Path) -> list[DataChunk]: def extract_text( - content: bytes | str | pathlib.Path, chunk_size: int | None = None + content: bytes | str | pathlib.Path, + chunk_size: int | None = None, + metadata: dict[str, Any] = {}, ) -> list[DataChunk]: if isinstance(content, pathlib.Path): content = content.read_text() @@ -117,8 +129,20 @@ def extract_text( content = content.decode("utf-8") content = cast(str, content) - chunks = chunker.chunk_text(content, chunk_size or chunker.DEFAULT_CHUNK_TOKENS) - return [DataChunk(data=[c], mime_type="text/plain") for c in chunks if c.strip()] + chunks = [ + DataChunk(data=[c], modality="text", metadata=metadata) + for c in chunker.chunk_text(content, chunk_size or chunker.DEFAULT_CHUNK_TOKENS) + ] + if content and len(content) > chunker.DEFAULT_CHUNK_TOKENS * 2: + summary, tags = summarizer.summarize(content) + chunks.append( + DataChunk( + data=[summary], + metadata=merge_metadata(metadata, {"tags": tags}), + modality="text", + ) + ) + return chunks def extract_data_chunks( diff --git a/src/memory/common/qdrant.py b/src/memory/common/qdrant.py index 106ee22..5e0121e 100644 --- a/src/memory/common/qdrant.py +++ b/src/memory/common/qdrant.py @@ -3,7 +3,7 @@ from typing import Any, cast, Generator, Sequence import qdrant_client from qdrant_client.http import models as qdrant_models -from qdrant_client.http.exceptions import UnexpectedResponse +from qdrant_client.http.exceptions import UnexpectedResponse, ApiException from memory.common import settings from memory.common.collections import ALL_COLLECTIONS, Collection, DistanceType, Vector @@ -193,14 +193,18 @@ def delete_points( collection_name: Name of the collection ids: List of vector IDs to delete """ - client.delete( - collection_name=collection_name, - points_selector=qdrant_models.PointIdsList( - points=ids, # type: ignore - ), - ) + try: + client.delete( + collection_name=collection_name, + points_selector=qdrant_models.PointIdsList( + points=ids, # type: ignore + ), + ) - logger.debug(f"Deleted {len(ids)} vectors from {collection_name}") + logger.debug(f"Deleted {len(ids)} vectors from {collection_name}") + except (ApiException, UnexpectedResponse) as e: + logger.error(f"Error deleting points from {collection_name}: {e}") + raise IOError(f"Error deleting points from {collection_name}: {e}") def get_collection_info( diff --git a/src/memory/common/summarizer.py b/src/memory/common/summarizer.py index 8d6fff6..981ced6 100644 --- a/src/memory/common/summarizer.py +++ b/src/memory/common/summarizer.py @@ -1,5 +1,6 @@ import json import logging +import traceback from typing import Any from memory.common import settings, chunker @@ -131,6 +132,7 @@ def summarize(content: str, target_tokens: int | None = None) -> tuple[str, list summary = result.get("summary", "") tags = result.get("tags", []) except Exception as e: + traceback.print_exc() logger.error(f"Summarization failed: {e}") tokens = chunker.approx_token_count(summary) diff --git a/src/memory/workers/tasks/ebook.py b/src/memory/workers/tasks/ebook.py index 189f243..16cafdd 100644 --- a/src/memory/workers/tasks/ebook.py +++ b/src/memory/workers/tasks/ebook.py @@ -60,6 +60,7 @@ def section_processor( end_page=section.end_page, parent_section_id=None, # Will be set after flush content=content, + filename=book.file_path, size=len(content), mime_type="text/plain", sha256=create_content_hash( diff --git a/src/memory/workers/tasks/maintenance.py b/src/memory/workers/tasks/maintenance.py index 998de9b..c831b11 100644 --- a/src/memory/workers/tasks/maintenance.py +++ b/src/memory/workers/tasks/maintenance.py @@ -21,6 +21,7 @@ REINGEST_MISSING_CHUNKS = f"{MAINTENANCE_ROOT}.reingest_missing_chunks" REINGEST_CHUNK = f"{MAINTENANCE_ROOT}.reingest_chunk" REINGEST_ITEM = f"{MAINTENANCE_ROOT}.reingest_item" REINGEST_EMPTY_SOURCE_ITEMS = f"{MAINTENANCE_ROOT}.reingest_empty_source_items" +REINGEST_ALL_EMPTY_SOURCE_ITEMS = f"{MAINTENANCE_ROOT}.reingest_all_empty_source_items" UPDATE_METADATA_FOR_SOURCE_ITEMS = ( f"{MAINTENANCE_ROOT}.update_metadata_for_source_items" ) @@ -76,9 +77,9 @@ def reingest_chunk(chunk_id: str, collection: str): data = chunk.data if collection in collections.MULTIMODAL_COLLECTIONS: - vector = embedding.embed_mixed(data)[0] - elif len(data) == 1 and isinstance(data[0], str): - vector = embedding.embed_text([data[0]])[0] + vector = embedding.embed_mixed([data])[0] + elif collection in collections.TEXT_COLLECTIONS: + vector = embedding.embed_text([data])[0] else: raise ValueError(f"Unsupported data type for collection {collection}") @@ -123,7 +124,10 @@ def reingest_item(item_id: str, item_type: str): chunk_ids = [str(c.id) for c in item.chunks if c.id] if chunk_ids: client = qdrant.get_qdrant_client() - qdrant.delete_points(client, item.modality, chunk_ids) + try: + qdrant.delete_points(client, item.modality, chunk_ids) + except IOError as e: + logger.error(f"Error deleting chunks for {item_id}: {e}") for chunk in item.chunks: session.delete(chunk) @@ -151,6 +155,13 @@ def reingest_empty_source_items(item_type: str): return {"status": "success", "items": len(item_ids)} +@app.task(name=REINGEST_ALL_EMPTY_SOURCE_ITEMS) +def reingest_all_empty_source_items(): + logger.info("Reingesting all empty source items") + for item_type in SourceItem.registry._class_registry.keys(): + reingest_empty_source_items.delay(item_type) # type: ignore + + def check_batch(batch: Sequence[Chunk]) -> dict: client = qdrant.get_qdrant_client() by_collection = defaultdict(list) diff --git a/tests/conftest.py b/tests/conftest.py index aae9b51..e90eec2 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -234,8 +234,10 @@ def mock_voyage_client(): def embeder(chunks, *args, **kwargs): return Mock(embeddings=[[0.1] * 1024] * len(chunks)) + real_client = voyageai.Client with patch.object(voyageai, "Client", autospec=True) as mock_client: client = mock_client() + client.real_client = real_client client.embed = embeder client.multimodal_embed = embeder yield client @@ -251,7 +253,7 @@ def mock_openai_client(): choices=[ Mock( message=Mock( - content='{"summary": "test", "tags": ["tag1", "tag2"]}' + content='{"summary": "test summary", "tags": ["tag1", "tag2"]}' ) ) ] @@ -267,7 +269,9 @@ def mock_anthropic_client(): client.messages = Mock() client.messages.create = Mock( return_value=Mock( - content=[Mock(text='{"summary": "test", "tags": ["tag1", "tag2"]}')] + content=[ + Mock(text='{"summary": "test summary", "tags": ["tag1", "tag2"]}') + ] ) ) yield client diff --git a/tests/data/code_complexity.jpg b/tests/data/code_complexity.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0d0cb0ea4cb61a990a616529fba755f7ea9e8491 GIT binary patch literal 70186 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⪚2Z29qoJ~)Q)@|Jh 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 Y70HnGnU`<>0D@L^`UVI80IVPX*@DD$ng9R* literal 0 HcmV?d00001 diff --git a/tests/data/contents.py b/tests/data/contents.py new file mode 100644 index 0000000..44ce152 --- /dev/null +++ b/tests/data/contents.py @@ -0,0 +1,249 @@ +import hashlib +import pathlib +from bs4 import BeautifulSoup +from markdownify import markdownify +from PIL import Image + +DATA_DIR = pathlib.Path(__file__).parent + +SAMPLE_HTML = f""" + + +

The Evolution of Programming Languages

+ +

Programming languages have undergone tremendous evolution since the early days of computing. + From the machine code and assembly languages of the 1940s to the high-level, expressive languages + we use today, each generation has built upon the lessons learned from its predecessors. Languages + like FORTRAN and COBOL pioneered the concept of human-readable code, while later innovations like + object-oriented programming in languages such as Smalltalk and C++ revolutionized how we structure + and organize our programs.

+ + Timeline of programming language evolution + +

The rise of functional programming paradigms has brought mathematical rigor and immutability + to the forefront of software development. Languages like Haskell, Lisp, and more recently Rust + and Elm have demonstrated the power of pure functions and type systems in creating more reliable + and maintainable code. These paradigms emphasize the elimination of side effects and the treatment + of computation as the evaluation of mathematical functions.

+ patch +

Modern development has also seen the emergence of domain-specific languages and the resurgence + of interest in memory safety. The advent of languages like Python and JavaScript has democratized + programming by lowering the barrier to entry, while systems languages like Rust have proven that + performance and safety need not be mutually exclusive. The ongoing development of WebAssembly + promises to bring high-performance computing to web browsers in ways previously unimaginable.

+ + Visual representation of code complexity over time + +

Looking toward the future, we see emerging trends in quantum programming languages, AI-assisted + code generation, and the continued evolution toward more expressive type systems. The challenge + for tomorrow's language designers will be balancing expressiveness with simplicity, performance + with safety, and innovation with backward compatibility. As computing continues to permeate every + aspect of human life, the languages we use to command these machines will undoubtedly continue + to evolve and shape the digital landscape.

+ +

The emergence of cloud computing and distributed systems has also driven new paradigms in + language design. Languages like Go and Elixir have been specifically crafted to excel in + concurrent and distributed environments, while the rise of microservices has renewed interest + in polyglot programming approaches. These developments reflect a broader shift toward languages + that are not just powerful tools for individual developers, but robust foundations for building + scalable, resilient systems that can handle the demands of modern internet-scale applications.

+ +

Perhaps most intriguingly, the intersection of programming languages with artificial intelligence + is opening entirely new frontiers. Differentiable programming languages are enabling new forms of + machine learning research, while large language models are beginning to reshape how we think about + code generation and developer tooling. As we stand on the brink of an era where AI systems may + become active participants in the programming process itself, the very nature of what constitutes + a programming language—and who or what programs in it—may be fundamentally transformed.

+ + +""" +SECOND_PAGE = """ +
+

The Impact of Open Source on Language Development

+ +

The open source movement has fundamentally transformed how programming languages are developed, + distributed, and evolved. Unlike the proprietary languages of earlier decades, modern language + development often occurs in public repositories where thousands of contributors can participate + in the design process. Languages like Python, JavaScript, and Rust have benefited enormously + from this collaborative approach, with their ecosystems growing rapidly through community-driven + package managers and extensive third-party libraries.

+ +

This democratization of language development has led to faster innovation cycles and more + responsive adaptation to developer needs. When a language feature proves problematic or a new + paradigm emerges, open source languages can quickly incorporate changes through their community + governance processes. The result has been an unprecedented period of language experimentation + and refinement, where ideas can be tested, refined, and adopted across multiple language + communities simultaneously.

+ +

Furthermore, the open source model has enabled the rise of domain-specific languages that + might never have been commercially viable under traditional development models. From specialized + query languages for databases to configuration management tools, the low barrier to entry for + language creation has fostered an explosion of linguistic diversity in computing, each tool + optimized for specific problem domains and user communities.

+ +

The collaborative nature of open source development has also revolutionized language tooling + and developer experience. Modern languages benefit from rich ecosystems of editors, debuggers, + profilers, and static analysis tools, all developed by passionate communities who understand + the daily challenges faced by practitioners. This has created a virtuous cycle where better + tooling attracts more developers, who in turn contribute improvements that make the language + even more accessible and powerful.

+ +

Version control systems like Git have enabled unprecedented transparency in language evolution, + allowing developers to trace the reasoning behind every design decision through detailed commit + histories and issue discussions. This historical record serves not only as documentation but as + a learning resource for future language designers, helping them understand the trade-offs and + considerations that shaped successful language features.

+ +

The economic implications of open source language development cannot be overstated. By removing + licensing barriers and vendor lock-in, open source languages have democratized access to powerful + programming tools across the globe. This has enabled innovation in regions and sectors that might + otherwise have been excluded from the software revolution, fostering a truly global community of + software creators and problem solvers.

+
+""" + +CHUNKS: list[str] = [ + """The Evolution of Programming Languages +====================================== +Programming languages have undergone tremendous evolution since the early days of computing. + From the machine code and assembly languages of the 1940s to the high\\-level, expressive languages + we use today, each generation has built upon the lessons learned from its predecessors. Languages + like FORTRAN and COBOL pioneered the concept of human\\-readable code, while later innovations like + object\\-oriented programming in languages such as Smalltalk and C\\+\\+ revolutionized how we structure + and organize our programs. +![Timeline of programming language evolution](/Users/dan/code/memory/tests/data/lang_timeline.png) +The rise of functional programming paradigms has brought mathematical rigor and immutability + to the forefront of software development. Languages like Haskell, Lisp, and more recently Rust + and Elm have demonstrated the power of pure functions and type systems in creating more reliable + and maintainable code. These paradigms emphasize the elimination of side effects and the treatment + of computation as the evaluation of mathematical functions. +Modern development has also seen the emergence of domain\\-specific languages and the resurgence + of interest in memory safety. The advent of languages like Python and JavaScript has democratized + programming by lowering the barrier to entry, while systems languages like Rust have proven that + performance and safety need not be mutually exclusive. The ongoing development of WebAssembly + promises to bring high\\-performance computing to web browsers in ways previously unimaginable. +![Visual representation of code complexity over time](/Users/dan/code/memory/tests/data/code_complexity.jpg) +Looking toward the future, we see emerging trends in quantum programming languages, AI\\-assisted + code generation, and the continued evolution toward more expressive type systems. The challenge + for tomorrow's language designers will be balancing expressiveness with simplicity, performance + with safety, and innovation with backward compatibility. As computing continues to permeate every + aspect of human life, the languages we use to command these machines will undoubtedly continue + to evolve and shape the digital landscape.""", + """ +As computing continues to permeate every + aspect of human life, the languages we use to command these machines will undoubtedly continue + to evolve and shape the digital landscape. +The emergence of cloud computing and distributed systems has also driven new paradigms in + language design. Languages like Go and Elixir have been specifically crafted to excel in + concurrent and distributed environments, while the rise of microservices has renewed interest + in polyglot programming approaches. These developments reflect a broader shift toward languages + that are not just powerful tools for individual developers, but robust foundations for building + scalable, resilient systems that can handle the demands of modern internet\\-scale applications. +Perhaps most intriguingly, the intersection of programming languages with artificial intelligence + is opening entirely new frontiers. Differentiable programming languages are enabling new forms of + machine learning research, while large language models are beginning to reshape how we think about + code generation and developer tooling. As we stand on the brink of an era where AI systems may + become active participants in the programming process itself, the very nature of what constitutes + a programming language—and who or what programs in it—may be fundamentally transformed.""", +] +TWO_PAGE_CHUNKS: list[str] = [ + """ +The Evolution of Programming Languages +====================================== +Programming languages have undergone tremendous evolution since the early days of computing. + From the machine code and assembly languages of the 1940s to the high\-level, expressive languages + we use today, each generation has built upon the lessons learned from its predecessors. Languages + like FORTRAN and COBOL pioneered the concept of human\-readable code, while later innovations like + object\-oriented programming in languages such as Smalltalk and C\+\+ revolutionized how we structure + and organize our programs. +![Timeline of programming language evolution](/Users/dan/code/memory/tests/data/lang_timeline.png) +The rise of functional programming paradigms has brought mathematical rigor and immutability + to the forefront of software development. Languages like Haskell, Lisp, and more recently Rust + and Elm have demonstrated the power of pure functions and type systems in creating more reliable + and maintainable code. These paradigms emphasize the elimination of side effects and the treatment + of computation as the evaluation of mathematical functions. +Modern development has also seen the emergence of domain\-specific languages and the resurgence + of interest in memory safety. The advent of languages like Python and JavaScript has democratized + programming by lowering the barrier to entry, while systems languages like Rust have proven that + performance and safety need not be mutually exclusive. The ongoing development of WebAssembly + promises to bring high\-performance computing to web browsers in ways previously unimaginable. +![Visual representation of code complexity over time](/Users/dan/code/memory/tests/data/code_complexity.jpg) +Looking toward the future, we see emerging trends in quantum programming languages, AI\-assisted + code generation, and the continued evolution toward more expressive type systems. The challenge + for tomorrow's language designers will be balancing expressiveness with simplicity, performance + with safety, and innovation with backward compatibility. As computing continues to permeate every + aspect of human life, the languages we use to command these machines will undoubtedly continue + to evolve and shape the digital landscape. +""", + """ +As computing continues to permeate every + aspect of human life, the languages we use to command these machines will undoubtedly continue + to evolve and shape the digital landscape. +The emergence of cloud computing and distributed systems has also driven new paradigms in + language design. Languages like Go and Elixir have been specifically crafted to excel in + concurrent and distributed environments, while the rise of microservices has renewed interest + in polyglot programming approaches. These developments reflect a broader shift toward languages + that are not just powerful tools for individual developers, but robust foundations for building + scalable, resilient systems that can handle the demands of modern internet\-scale applications. +Perhaps most intriguingly, the intersection of programming languages with artificial intelligence + is opening entirely new frontiers. Differentiable programming languages are enabling new forms of + machine learning research, while large language models are beginning to reshape how we think about + code generation and developer tooling. As we stand on the brink of an era where AI systems may + become active participants in the programming process itself, the very nature of what constitutes + a programming language—and who or what programs in it—may be fundamentally transformed. +The Impact of Open Source on Language Development +------------------------------------------------- +The open source movement has fundamentally transformed how programming languages are developed, + distributed, and evolved. Unlike the proprietary languages of earlier decades, modern language + development often occurs in public repositories where thousands of contributors can participate + in the design process. Languages like Python, JavaScript, and Rust have benefited enormously + from this collaborative approach, with their ecosystems growing rapidly through community\-driven + package managers and extensive third\-party libraries. +This democratization of language development has led to faster innovation cycles and more + responsive adaptation to developer needs. When a language feature proves problematic or a new + paradigm emerges, open source languages can quickly incorporate changes through their community + governance processes. The result has been an unprecedented period of language experimentation + and refinement, where ideas can be tested, refined, and adopted across multiple language + communities simultaneously.""", + """ +The result has been an unprecedented period of language experimentation + and refinement, where ideas can be tested, refined, and adopted across multiple language + communities simultaneously. +Furthermore, the open source model has enabled the rise of domain\-specific languages that + might never have been commercially viable under traditional development models. From specialized + query languages for databases to configuration management tools, the low barrier to entry for + language creation has fostered an explosion of linguistic diversity in computing, each tool + optimized for specific problem domains and user communities. +The collaborative nature of open source development has also revolutionized language tooling + and developer experience. Modern languages benefit from rich ecosystems of editors, debuggers, + profilers, and static analysis tools, all developed by passionate communities who understand + the daily challenges faced by practitioners. This has created a virtuous cycle where better + tooling attracts more developers, who in turn contribute improvements that make the language + even more accessible and powerful. +Version control systems like Git have enabled unprecedented transparency in language evolution, + allowing developers to trace the reasoning behind every design decision through detailed commit + histories and issue discussions. This historical record serves not only as documentation but as + a learning resource for future language designers, helping them understand the trade\-offs and + considerations that shaped successful language features. +The economic implications of open source language development cannot be overstated. By removing + licensing barriers and vendor lock\-in, open source languages have democratized access to powerful + programming tools across the globe. This has enabled innovation in regions and sectors that might + otherwise have been excluded from the software revolution, fostering a truly global community of + software creators and problem solvers. +""", +] + +SAMPLE_MARKDOWN = markdownify(SAMPLE_HTML) +SAMPLE_TEXT = BeautifulSoup(SAMPLE_HTML, "html.parser").get_text() +SECOND_PAGE_MARKDOWN = markdownify(SECOND_PAGE) +SECOND_PAGE_TEXT = BeautifulSoup(SECOND_PAGE, "html.parser").get_text() + + +def image_hash(image: Image.Image) -> str: + return hashlib.sha256(image.tobytes()).hexdigest() + + +LANG_TIMELINE = Image.open(DATA_DIR / "lang_timeline.png") +CODE_COMPLEXITY = Image.open(DATA_DIR / "code_complexity.jpg") +LANG_TIMELINE_HASH = image_hash(LANG_TIMELINE) +CODE_COMPLEXITY_HASH = image_hash(CODE_COMPLEXITY) diff --git a/tests/data/lang_timeline.png b/tests/data/lang_timeline.png new file mode 100644 index 0000000000000000000000000000000000000000..5201eb9a71642cc033f05eeee933a2f2b693aef4 GIT binary patch literal 316651 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 FTm9zg+uftn1f0izqt;f1_p&_T0NF$kV~VcN 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 list[tuple[float, str]]: + results = qdrant_tools.search_vectors(qdrant, search_type, vector) + return [ + (round(i.score, 4), chunk_map[str(i.id)].content) + for i in sorted(results, key=lambda x: x.score, reverse=True) + ][:4] + + for query, expected in EXPECTED_OBSERVATION_RESULTS.items(): + search_vector = embed_text( + [extract.DataChunk(data=[query])], input_type="query" + )[0] + semantic_results = get_top(search_vector, "semantic") + temporal_results = get_top(search_vector, "temporal") + assert semantic_results == expected["semantic"] + assert temporal_results == expected["temporal"] diff --git a/tests/memory/common/db/models/test_source_item.py b/tests/memory/common/db/models/test_source_item.py index 5e12a6c..3759ce2 100644 --- a/tests/memory/common/db/models/test_source_item.py +++ b/tests/memory/common/db/models/test_source_item.py @@ -1,23 +1,17 @@ from sqlalchemy.orm import Session -from unittest.mock import patch, Mock +from unittest.mock import patch from typing import cast import pytest from PIL import Image -from datetime import datetime from memory.common import settings, chunker, extract -from memory.common.db.models.sources import Book from memory.common.db.models.source_items import ( Chunk, MailMessage, - EmailAttachment, - BookSection, - BlogPost, ) from memory.common.db.models.source_item import ( SourceItem, image_filenames, add_pics, - merge_metadata, clean_filename, ) @@ -56,114 +50,6 @@ def test_clean_filename(input_filename, expected): assert clean_filename(input_filename) == expected -@pytest.mark.parametrize( - "dicts,expected", - [ - # Empty input - ([], {}), - # Single dict without tags - ([{"key": "value"}], {"key": "value"}), - # Single dict with tags as list - ( - [{"key": "value", "tags": ["tag1", "tag2"]}], - {"key": "value", "tags": {"tag1", "tag2"}}, - ), - # Single dict with tags as set - ( - [{"key": "value", "tags": {"tag1", "tag2"}}], - {"key": "value", "tags": {"tag1", "tag2"}}, - ), - # Multiple dicts without tags - ( - [{"key1": "value1"}, {"key2": "value2"}], - {"key1": "value1", "key2": "value2"}, - ), - # Multiple dicts with non-overlapping tags - ( - [ - {"key1": "value1", "tags": ["tag1"]}, - {"key2": "value2", "tags": ["tag2"]}, - ], - {"key1": "value1", "key2": "value2", "tags": {"tag1", "tag2"}}, - ), - # Multiple dicts with overlapping tags - ( - [ - {"key1": "value1", "tags": ["tag1", "tag2"]}, - {"key2": "value2", "tags": ["tag2", "tag3"]}, - ], - {"key1": "value1", "key2": "value2", "tags": {"tag1", "tag2", "tag3"}}, - ), - # Overlapping keys - later dict wins - ( - [ - {"key": "value1", "other": "data1"}, - {"key": "value2", "another": "data2"}, - ], - {"key": "value2", "other": "data1", "another": "data2"}, - ), - # Mixed tags types (list and set) - ( - [ - {"key1": "value1", "tags": ["tag1", "tag2"]}, - {"key2": "value2", "tags": {"tag3", "tag4"}}, - ], - { - "key1": "value1", - "key2": "value2", - "tags": {"tag1", "tag2", "tag3", "tag4"}, - }, - ), - # Empty tags - ( - [{"key": "value", "tags": []}, {"key2": "value2", "tags": []}], - {"key": "value", "key2": "value2"}, - ), - # None values - ( - [{"key1": None, "key2": "value"}, {"key3": None}], - {"key1": None, "key2": "value", "key3": None}, - ), - # Complex nested structures - ( - [ - {"nested": {"inner": "value1"}, "list": [1, 2, 3], "tags": ["tag1"]}, - {"nested": {"inner": "value2"}, "list": [4, 5], "tags": ["tag2"]}, - ], - {"nested": {"inner": "value2"}, "list": [4, 5], "tags": {"tag1", "tag2"}}, - ), - # Boolean and numeric values - ( - [ - {"bool": True, "int": 42, "float": 3.14, "tags": ["numeric"]}, - {"bool": False, "int": 100}, - ], - {"bool": False, "int": 100, "float": 3.14, "tags": {"numeric"}}, - ), - # Three or more dicts - ( - [ - {"a": 1, "tags": ["t1"]}, - {"b": 2, "tags": ["t2", "t3"]}, - {"c": 3, "a": 10, "tags": ["t3", "t4"]}, - ], - {"a": 10, "b": 2, "c": 3, "tags": {"t1", "t2", "t3", "t4"}}, - ), - # Dict with only tags - ([{"tags": ["tag1", "tag2"]}], {"tags": {"tag1", "tag2"}}), - # Empty dicts - ([{}, {}], {}), - # Mix of empty and non-empty dicts - ( - [{}, {"key": "value", "tags": ["tag"]}, {}], - {"key": "value", "tags": {"tag"}}, - ), - ], -) -def test_merge_metadata(dicts, expected): - assert merge_metadata(*dicts) == expected - - def test_image_filenames_with_existing_filenames(tmp_path): """Test image_filenames when images already have filenames""" chunk_id = "test_chunk_123" diff --git a/tests/memory/common/db/models/test_source_item_embeddings.py b/tests/memory/common/db/models/test_source_item_embeddings.py new file mode 100644 index 0000000..4fa92dd --- /dev/null +++ b/tests/memory/common/db/models/test_source_item_embeddings.py @@ -0,0 +1,626 @@ +import hashlib +from datetime import datetime +from typing import Sequence, cast +from unittest.mock import ANY, Mock, call + +import pymupdf # PyMuPDF +import pytest + +from memory.common import settings +from memory.common.db.models.source_item import Chunk, SourceItem +from memory.common.db.models.source_items import ( + AgentObservation, + BlogPost, + BookSection, + Comic, + EmailAttachment, + ForumPost, + MailMessage, +) +from memory.common.db.models.sources import Book +from memory.common.embedding import embed_source_item +from memory.common.extract import page_to_image +from tests.data.contents import ( + CHUNKS, + LANG_TIMELINE_HASH, + SAMPLE_MARKDOWN, + SAMPLE_TEXT, + image_hash, +) + + +def compare_chunks( + chunks: Sequence[Chunk], + expected: Sequence[tuple[str | None, list[str], dict]], +): + data = [ + (c.content, [image_hash(i) for i in c.images], c.item_metadata) for c in chunks + ] + assert data == expected + + +def test_base_source_item_text_embeddings(mock_voyage_client): + item = SourceItem( + id=1, + content=SAMPLE_MARKDOWN, + mime_type="text/html", + modality="text", + sha256=hashlib.sha256(SAMPLE_MARKDOWN.encode("utf-8")).hexdigest(), + size=len(SAMPLE_MARKDOWN), + tags=["bla"], + ) + metadata = item.as_payload() + metadata["tags"] = {"bla"} + expected = [ + (CHUNKS[0].strip(), cast(list[str], []), metadata), + (CHUNKS[1].strip(), cast(list[str], []), metadata), + ("test summary", [], metadata | {"tags": {"tag1", "tag2", "bla"}}), + ] + + mock_voyage_client.embed = Mock(return_value=Mock(embeddings=[[0.1] * 1024] * 3)) + mock_voyage_client.multimodal_embed = Mock( + return_value=Mock(embeddings=[[0.1] * 1024] * 3) + ) + compare_chunks(item.data_chunks(), expected) + compare_chunks(embed_source_item(item), expected) + + assert mock_voyage_client.embed.call_count == 1 + assert not mock_voyage_client.multimodal_embed.call_count + + assert mock_voyage_client.embed.call_args == call( + [CHUNKS[0].strip(), CHUNKS[1].strip(), "test summary"], + model=settings.TEXT_EMBEDDING_MODEL, + input_type="document", + ) + + +def test_base_source_item_mixed_embeddings(mock_voyage_client): + item = SourceItem( + id=1, + content=SAMPLE_MARKDOWN, + filename=DATA_DIR / "lang_timeline.png", + mime_type="image/png", + modality="photo", + sha256=hashlib.sha256(SAMPLE_MARKDOWN.encode("utf-8")).hexdigest(), + size=len(SAMPLE_MARKDOWN), + tags=["bla"], + ) + metadata = item.as_payload() + metadata["tags"] = {"bla"} + expected = [ + (CHUNKS[0].strip(), [], metadata), + (CHUNKS[1].strip(), [], metadata), + ("test summary", [], metadata | {"tags": {"tag1", "tag2", "bla"}}), + (None, [LANG_TIMELINE_HASH], {"size": 3465, "source_id": 1, "tags": {"bla"}}), + ] + + mock_voyage_client.embed = Mock(return_value=Mock(embeddings=[[0.1] * 1024] * 3)) + mock_voyage_client.multimodal_embed = Mock( + return_value=Mock(embeddings=[[0.1] * 1024] * 3) + ) + compare_chunks(item.data_chunks(), expected) + compare_chunks(embed_source_item(item), expected) + + assert mock_voyage_client.embed.call_count == 1 + assert mock_voyage_client.multimodal_embed.call_count == 1 + + assert mock_voyage_client.embed.call_args == call( + [CHUNKS[0].strip(), CHUNKS[1].strip(), "test summary"], + model=settings.TEXT_EMBEDDING_MODEL, + input_type="document", + ) + assert mock_voyage_client.multimodal_embed.call_args == call( + [[ANY]], + model=settings.MIXED_EMBEDDING_MODEL, + input_type="document", + ) + assert [ + image_hash(i) for i in mock_voyage_client.multimodal_embed.call_args[0][0][0] + ] == [LANG_TIMELINE_HASH] + + +def test_mail_message_embeddings(mock_voyage_client): + item = MailMessage( + id=1, + content=SAMPLE_MARKDOWN, + mime_type="text/html", + modality="text", + sha256=hashlib.sha256(SAMPLE_MARKDOWN.encode("utf-8")).hexdigest(), + size=len(SAMPLE_MARKDOWN), + tags=["bla"], + message_id="123", + subject="Test Subject", + sender="test@example.com", + recipients=["test@example.com"], + folder="INBOX", + sent_at=datetime(2025, 1, 1, 12, 0, 0), + ) + metadata = item.as_payload() + metadata["tags"] = {"bla", "test@example.com"} + expected = [ + (CHUNKS[0].strip(), [], metadata), + (CHUNKS[1].strip(), [], metadata), + ( + "test summary", + [], + metadata | {"tags": {"tag1", "tag2", "bla", "test@example.com"}}, + ), + ] + + mock_voyage_client.embed = Mock(return_value=Mock(embeddings=[[0.1] * 1024] * 3)) + mock_voyage_client.multimodal_embed = Mock( + return_value=Mock(embeddings=[[0.1] * 1024] * 3) + ) + compare_chunks(item.data_chunks(), expected) + compare_chunks(embed_source_item(item), expected) + + assert mock_voyage_client.embed.call_count == 1 + assert not mock_voyage_client.multimodal_embed.call_count + + assert mock_voyage_client.embed.call_args == call( + [CHUNKS[0].strip(), CHUNKS[1].strip(), "test summary"], + model=settings.TEXT_EMBEDDING_MODEL, + input_type="document", + ) + + +def test_email_attachment_embeddings_text(mock_voyage_client): + item = EmailAttachment( + id=1, + content=SAMPLE_MARKDOWN, + mime_type="text/html", + modality="text", + sha256=hashlib.sha256(SAMPLE_MARKDOWN.encode("utf-8")).hexdigest(), + size=len(SAMPLE_MARKDOWN), + tags=["bla"], + ) + metadata = item.as_payload() + metadata["tags"] = {"bla"} + expected = [ + (CHUNKS[0].strip(), cast(list[str], []), metadata), + (CHUNKS[1].strip(), cast(list[str], []), metadata), + ( + "test summary", + [], + metadata | {"tags": {"tag1", "tag2", "bla"}}, + ), + ] + + mock_voyage_client.embed = Mock(return_value=Mock(embeddings=[[0.1] * 1024] * 3)) + mock_voyage_client.multimodal_embed = Mock( + return_value=Mock(embeddings=[[0.1] * 1024] * 3) + ) + compare_chunks(item.data_chunks(), expected) + compare_chunks(embed_source_item(item), expected) + + assert mock_voyage_client.embed.call_count == 1 + assert not mock_voyage_client.multimodal_embed.call_count + + assert mock_voyage_client.embed.call_args == call( + [CHUNKS[0].strip(), CHUNKS[1].strip(), "test summary"], + model=settings.TEXT_EMBEDDING_MODEL, + input_type="document", + ) + + +def test_email_attachment_embeddings_photo(mock_voyage_client): + item = EmailAttachment( + id=1, + content=SAMPLE_MARKDOWN, + filename=DATA_DIR / "lang_timeline.png", + mime_type="image/png", + modality="photo", + sha256=hashlib.sha256(SAMPLE_MARKDOWN.encode("utf-8")).hexdigest(), + size=len(SAMPLE_MARKDOWN), + tags=["bla"], + ) + metadata = item.as_payload() + metadata["tags"] = {"bla"} + expected = [ + (None, [LANG_TIMELINE_HASH], metadata), + ] + + mock_voyage_client.embed = Mock(return_value=Mock(embeddings=[[0.1] * 1024] * 3)) + mock_voyage_client.multimodal_embed = Mock( + return_value=Mock(embeddings=[[0.1] * 1024] * 3) + ) + compare_chunks(item.data_chunks(), expected) + compare_chunks(embed_source_item(item), expected) + + assert mock_voyage_client.embed.call_count == 0 + assert mock_voyage_client.multimodal_embed.call_count == 1 + + assert mock_voyage_client.multimodal_embed.call_args == call( + [[ANY]], + model=settings.MIXED_EMBEDDING_MODEL, + input_type="document", + ) + assert [ + image_hash(i) for i in mock_voyage_client.multimodal_embed.call_args[0][0][0] + ] == [LANG_TIMELINE_HASH] + + +def test_email_attachment_embeddings_pdf(mock_voyage_client): + item = EmailAttachment( + id=1, + content=SAMPLE_MARKDOWN, + filename=DATA_DIR / "regulamin.pdf", + mime_type="application/pdf", + modality="doc", + sha256=hashlib.sha256(SAMPLE_MARKDOWN.encode("utf-8")).hexdigest(), + size=len(SAMPLE_MARKDOWN), + tags=["bla"], + ) + metadata = item.as_payload() + metadata["tags"] = {"bla"} + with pymupdf.open(item.filename) as pdf: + expected = [ + ( + None, + [image_hash(page_to_image(page))], + metadata + | { + "page": page.number, + "width": page.rect.width, + "height": page.rect.height, + }, + ) + for page in pdf.pages() + ] + + mock_voyage_client.embed = Mock(return_value=Mock(embeddings=[[0.1] * 1024] * 3)) + mock_voyage_client.multimodal_embed = Mock( + return_value=Mock(embeddings=[[0.1] * 1024] * 3) + ) + compare_chunks(item.data_chunks(), expected) + compare_chunks(embed_source_item(item), expected) + + assert mock_voyage_client.embed.call_count == 0 + assert mock_voyage_client.multimodal_embed.call_count == 1 + + assert mock_voyage_client.multimodal_embed.call_args == call( + [[ANY], [ANY]], + model=settings.MIXED_EMBEDDING_MODEL, + input_type="document", + ) + assert [ + [image_hash(a) for a in i] + for i in mock_voyage_client.multimodal_embed.call_args[0][0] + ] == [page for _, page, _ in expected] + + +def test_email_attachment_embeddings_comic(mock_voyage_client): + item = Comic( + id=1, + content=SAMPLE_MARKDOWN, + filename=DATA_DIR / "lang_timeline.png", + mime_type="image/png", + modality="comic", + sha256=hashlib.sha256(SAMPLE_MARKDOWN.encode("utf-8")).hexdigest(), + size=len(SAMPLE_MARKDOWN), + tags=["bla"], + title="The Evolution of Programming Languages", + author="John Doe", + published=datetime(2025, 1, 1, 12, 0, 0), + volume="1", + issue="1", + page=1, + ) + metadata = item.as_payload() + metadata["tags"] = {"bla"} + expected = [ + ( + "The Evolution of Programming Languages by John Doe", + [LANG_TIMELINE_HASH], + metadata, + ), + ] + + mock_voyage_client.embed = Mock(return_value=Mock(embeddings=[[0.1] * 1024] * 3)) + mock_voyage_client.multimodal_embed = Mock( + return_value=Mock(embeddings=[[0.1] * 1024] * 3) + ) + compare_chunks(item.data_chunks(), expected) + compare_chunks(embed_source_item(item), expected) + + assert mock_voyage_client.embed.call_count == 0 + assert mock_voyage_client.multimodal_embed.call_count == 1 + + assert mock_voyage_client.multimodal_embed.call_args == call( + [["The Evolution of Programming Languages by John Doe", ANY]], + model=settings.MIXED_EMBEDDING_MODEL, + input_type="document", + ) + assert ( + image_hash(mock_voyage_client.multimodal_embed.call_args[0][0][0][1]) + == LANG_TIMELINE_HASH + ) + + +def test_book_section_embeddings_single_page(mock_voyage_client): + item = BookSection( + id=1, + content=SAMPLE_MARKDOWN, + mime_type="text/html", + modality="text", + sha256=hashlib.sha256(SAMPLE_MARKDOWN.encode("utf-8")).hexdigest(), + size=len(SAMPLE_MARKDOWN), + tags=["bla"], + book_id=1, + section_title="The Evolution of Programming Languages", + section_number=1, + section_level=1, + start_page=1, + end_page=1, + pages=[SAMPLE_TEXT], + book=Book( + id=1, + title="Programming Languages", + author="John Doe", + published=datetime(2025, 1, 1, 12, 0, 0), + ), + ) + metadata = item.as_payload() + metadata["tags"] = {"bla"} + expected = [ + (CHUNKS[0].strip(), cast(list[str], []), metadata | {"type": "page"}), + (CHUNKS[1].strip(), cast(list[str], []), metadata | {"type": "page"}), + ( + "test summary", + [], + metadata | {"tags": {"tag1", "tag2", "bla"}, "type": "summary"}, + ), + ] + + mock_voyage_client.embed = Mock(return_value=Mock(embeddings=[[0.1] * 1024] * 3)) + mock_voyage_client.multimodal_embed = Mock( + return_value=Mock(embeddings=[[0.1] * 1024] * 3) + ) + compare_chunks(item.data_chunks(), expected) + compare_chunks(embed_source_item(item), expected) + + assert mock_voyage_client.embed.call_count == 1 + assert not mock_voyage_client.multimodal_embed.call_count + + assert mock_voyage_client.embed.call_args == call( + [CHUNKS[0].strip(), CHUNKS[1].strip(), "test summary"], + model=settings.TEXT_EMBEDDING_MODEL, + input_type="document", + ) + + +def test_book_section_embeddings_multiple_pages(mock_voyage_client): + item = BookSection( + id=1, + content=SAMPLE_MARKDOWN + "\n\n" + SECOND_PAGE, + mime_type="text/html", + modality="text", + sha256=hashlib.sha256(SAMPLE_MARKDOWN.encode("utf-8")).hexdigest(), + size=len(SAMPLE_MARKDOWN), + tags=["bla"], + book_id=1, + section_title="The Evolution of Programming Languages", + section_number=1, + section_level=1, + start_page=1, + end_page=2, + pages=[SAMPLE_TEXT, SECOND_PAGE_TEXT], + book=Book( + id=1, + title="Programming Languages", + author="John Doe", + published=datetime(2025, 1, 1, 12, 0, 0), + ), + ) + metadata = item.as_payload() + metadata["tags"] = {"bla", "tag1", "tag2"} + expected = [ + (item.content.strip(), cast(list[str], []), metadata | {"type": "section"}), + ("test summary", [], metadata | {"type": "summary"}), + ] + + mock_voyage_client.embed = Mock(return_value=Mock(embeddings=[[0.1] * 1024] * 3)) + mock_voyage_client.multimodal_embed = Mock( + return_value=Mock(embeddings=[[0.1] * 1024] * 3) + ) + compare_chunks(item.data_chunks(), expected) + compare_chunks(embed_source_item(item), expected) + + assert mock_voyage_client.embed.call_count == 1 + assert not mock_voyage_client.multimodal_embed.call_count + + assert mock_voyage_client.embed.call_args == call( + [item.content.strip(), "test summary"], + model=settings.TEXT_EMBEDDING_MODEL, + input_type="document", + ) + + +@pytest.mark.parametrize( + "class_, modality", + ( + (BlogPost, "blog"), + (ForumPost, "forum"), + ), +) +def test_post_embeddings_single_page(mock_voyage_client, class_, modality): + item = class_( + id=1, + content=SAMPLE_MARKDOWN, + mime_type="text/html", + modality=modality, + sha256=hashlib.sha256(SAMPLE_MARKDOWN.encode("utf-8")).hexdigest(), + size=len(SAMPLE_MARKDOWN), + tags=["bla"], + images=[LANG_TIMELINE.filename, CODE_COMPLEXITY.filename], # type: ignore + ) + metadata = item.as_payload() + metadata["tags"] = {"bla", "tag1", "tag2"} + expected = [ + (item.content.strip(), [LANG_TIMELINE_HASH, CODE_COMPLEXITY_HASH], metadata), + ] + + mock_voyage_client.embed = Mock(return_value=Mock(embeddings=[[0.1] * 1024] * 3)) + mock_voyage_client.multimodal_embed = Mock( + return_value=Mock(embeddings=[[0.1] * 1024] * 3) + ) + compare_chunks(item.data_chunks(), expected) + compare_chunks(embed_source_item(item), expected) + + assert not mock_voyage_client.embed.call_count + assert mock_voyage_client.multimodal_embed.call_count == 1 + + assert mock_voyage_client.multimodal_embed.call_args == call( + [[item.content.strip(), ANY, ANY]], + model=settings.MIXED_EMBEDDING_MODEL, + input_type="document", + ) + assert [ + image_hash(i) + for i in mock_voyage_client.multimodal_embed.call_args[0][0][0][1:] + ] == [LANG_TIMELINE_HASH, CODE_COMPLEXITY_HASH] + + +@pytest.mark.parametrize( + "class_, modality", + ( + (BlogPost, "blog"), + (ForumPost, "forum"), + ), +) +def test_post_embeddings_multi_page(mock_voyage_client, class_, modality): + item = class_( + id=1, + content=SAMPLE_MARKDOWN + "\n\n" + SECOND_PAGE_MARKDOWN, + mime_type="text/html", + modality=modality, + sha256=hashlib.sha256(SAMPLE_MARKDOWN.encode("utf-8")).hexdigest(), + size=len(SAMPLE_MARKDOWN + SECOND_PAGE_MARKDOWN), + tags=["bla"], + images=[LANG_TIMELINE.filename, CODE_COMPLEXITY.filename], # type: ignore + ) + metadata = item.as_payload() + metadata["tags"] = {"bla", "tag1", "tag2"} + + all_contents = ( + item.content.strip(), + [LANG_TIMELINE_HASH, CODE_COMPLEXITY_HASH], + metadata, + ) + first_chunk = ( + TWO_PAGE_CHUNKS[0].strip(), + [LANG_TIMELINE_HASH, CODE_COMPLEXITY_HASH], + metadata, + ) + second_chunk = (TWO_PAGE_CHUNKS[1].strip(), [], metadata) + third_chunk = (TWO_PAGE_CHUNKS[2].strip(), [], metadata) + summary = ("test summary", [], metadata) + + mock_voyage_client.embed = Mock(return_value=Mock(embeddings=[[0.1] * 1024] * 3)) + mock_voyage_client.multimodal_embed = Mock( + return_value=Mock(embeddings=[[0.1] * 1024] * 3) + ) + compare_chunks( + item.data_chunks(), + [all_contents, first_chunk, second_chunk, third_chunk, summary], + ) + # embed_source_item first does text embedding, then mixed embedding + # so the order of chunks is different than in data_chunks() + compare_chunks( + embed_source_item(item), + [ + second_chunk, + third_chunk, + summary, + all_contents, + first_chunk, + ], + ) + + assert mock_voyage_client.embed.call_count == 1 + assert mock_voyage_client.multimodal_embed.call_count == 1 + + assert mock_voyage_client.embed.call_args == call( + [ + TWO_PAGE_CHUNKS[1].strip(), + TWO_PAGE_CHUNKS[2].strip(), + "test summary", + ], + model=settings.TEXT_EMBEDDING_MODEL, + input_type="document", + ) + assert mock_voyage_client.multimodal_embed.call_args == call( + [[item.content.strip(), ANY, ANY], [TWO_PAGE_CHUNKS[0].strip(), ANY, ANY]], + model=settings.MIXED_EMBEDDING_MODEL, + input_type="document", + ) + assert [ + image_hash(i) + for i in mock_voyage_client.multimodal_embed.call_args[0][0][0][1:] + ] == [LANG_TIMELINE_HASH, CODE_COMPLEXITY_HASH] + assert [ + image_hash(i) + for i in mock_voyage_client.multimodal_embed.call_args[0][0][1][1:] + ] == [LANG_TIMELINE_HASH, CODE_COMPLEXITY_HASH] + + +def test_agent_observation_embeddings(mock_voyage_client): + item = AgentObservation( + id=1, + content="The user thinks that all men must die.", + mime_type="text/html", + modality="observation", + sha256=hashlib.sha256(SAMPLE_MARKDOWN.encode("utf-8")).hexdigest(), + size=len(SAMPLE_MARKDOWN), + tags=["bla"], + observation_type="belief", + subject="humans", + confidence=0.8, + evidence={ + "quote": "All humans are mortal.", + "source": "https://en.wikipedia.org/wiki/Human", + }, + agent_model="gpt-4o", + inserted_at=datetime(2025, 1, 1, 12, 0, 0), + ) + metadata = item.as_payload() + metadata["tags"] = {"bla"} + expected = [ + ( + "Subject: humans | Type: belief | Observation: The user thinks that all men must die. | Quote: All humans are mortal.", + [], + metadata | {"embedding_type": "semantic"}, + ), + ( + "Time: 12:00 on Wednesday (afternoon) | Subject: humans | Observation: The user thinks that all men must die. | Confidence: 0.8", + [], + metadata | {"embedding_type": "temporal"}, + ), + ( + "The user thinks that all men must die.", + [], + metadata | {"embedding_type": "semantic"}, + ), + ("All humans are mortal.", [], metadata | {"embedding_type": "semantic"}), + ] + + mock_voyage_client.embed = Mock(return_value=Mock(embeddings=[[0.1] * 1024] * 3)) + mock_voyage_client.multimodal_embed = Mock( + return_value=Mock(embeddings=[[0.1] * 1024] * 3) + ) + compare_chunks(item.data_chunks(), expected) + compare_chunks(embed_source_item(item), expected) + + assert mock_voyage_client.embed.call_count == 1 + assert not mock_voyage_client.multimodal_embed.call_count + + assert mock_voyage_client.embed.call_args == call( + [ + "Subject: humans | Type: belief | Observation: The user thinks that all men must die. | Quote: All humans are mortal.", + "Time: 12:00 on Wednesday (afternoon) | Subject: humans | Observation: The user thinks that all men must die. | Confidence: 0.8", + "The user thinks that all men must die.", + "All humans are mortal.", + ], + model=settings.TEXT_EMBEDDING_MODEL, + input_type="document", + ) diff --git a/tests/memory/common/db/models/test_source_items.py b/tests/memory/common/db/models/test_source_items.py index 1a1bf55..aacd0c9 100644 --- a/tests/memory/common/db/models/test_source_items.py +++ b/tests/memory/common/db/models/test_source_items.py @@ -14,7 +14,6 @@ from memory.common.db.models.source_items import ( BlogPost, AgentObservation, ) -from memory.common.db.models.source_item import merge_metadata @pytest.fixture @@ -356,7 +355,8 @@ def test_book_section_data_chunks(pages, expected_chunks): chunks = book_section.data_chunks() expected = [ - (c, merge_metadata(book_section.as_payload(), m)) for c, m in expected_chunks + (c, extract.merge_metadata(book_section.as_payload(), m)) + for c, m in expected_chunks ] assert [(c.content, c.item_metadata) for c in chunks] == expected for c in chunks: