claw-vector 0.1.2

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

from unittest.mock import MagicMock, patch

import blake3
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,
        CLAW_VECTOR_API_KEYS=blake3.blake3(b"valid-key").hexdigest(),
    )
    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")
            headers = {"X-Claw-Api-Key": "valid-key"}
            info = client.get("/model-info", headers=headers)
            embed = client.post(
                "/embed",
                json={"texts": ["hello"], "normalize": True},
                headers=headers,
            )
            metrics = client.get("/metrics", headers=headers)

    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