claw-vector 0.1.0

The semantic memory engine for ClawDB — HNSW vector indexing and storage
Documentation
from __future__ import annotations

from unittest.mock import MagicMock, patch

import numpy as np
from fastapi.testclient import TestClient

from claw_vector_svc.config import Settings
from claw_vector_svc.main import create_app


def _mock_sentence_transformer() -> MagicMock:
    model = MagicMock()
    model.get_sentence_embedding_dimension.return_value = 16
    model.max_seq_length = 64
    model.encode.return_value = np.ones((1, 16), dtype="float32")
    return model


def test_http_embed_and_health_endpoints() -> None:
    settings = Settings(MODEL_NAME="test-model", DEVICE="cpu", MAX_BATCH_SIZE=4)
    with patch("claw_vector_svc.embedder.SentenceTransformer", return_value=_mock_sentence_transformer()):
        app = create_app(settings)
        with TestClient(app) as client:
            health = client.get("/health")
            ready = client.get("/ready")
            info = client.get("/model-info")
            embed = client.post("/embed", json={"texts": ["hello"], "normalize": True})
            metrics = client.get("/metrics")

    assert health.status_code == 200
    assert health.json()["ready"] is True
    assert ready.status_code == 200
    assert info.status_code == 200
    assert info.json()["model_name"] == "test-model"
    assert embed.status_code == 200
    assert len(embed.json()["vectors"]) == 1
    assert metrics.status_code == 200
    assert "claw_embed_requests_total" in metrics.text