from __future__ import annotations
import inspect
from typing import get_type_hints
from unittest.mock import Mock
from extraction.schemas.models import FieldType, MemoryTypeSchema, SchemaField
from extraction.schemas.registry import SchemaRegistry
from extraction.tools import Extractor
from server.memory_service import MemoryService
def test_write_api_initialization_does_not_claim_legacy_tool_fallback():
source = inspect.getsource(MemoryService.get_write_api)
assert "legacy tools" not in source
assert "tool_schemas" not in source
def test_extractor_schema_registry_annotation_is_explicit_extension_point():
hints = get_type_hints(Extractor.__init__)
assert hints["schema_registry"] == SchemaRegistry | None
def test_extractor_accepts_custom_schema_registry_for_custom_memory_type(tmp_path):
registry = SchemaRegistry(str(tmp_path))
registry.register(
MemoryTypeSchema(
memory_type="project",
description="Extract project details.",
directory="ctx://{{ account_id }}/users/{{ user_id }}/memories/projects",
filename_template="{{ project_name }}",
operation_mode="upsert",
fields=[
SchemaField("project_name", FieldType.STRING, required=True),
SchemaField("abstract", FieldType.STRING, required=True),
SchemaField("overview", FieldType.STRING, required=True),
SchemaField("content", FieldType.STRING, required=True),
SchemaField("confidence", FieldType.NUMBER, required=True),
],
)
)
extractor = Extractor(Mock(), schema_registry=registry)
assert [tool["name"] for tool in extractor._extraction_tools] == ["extract_project"]