Back to Repositories

Testing Embeddings Generation API Integration in private-gpt

This test suite validates the embeddings generation functionality in the private-gpt API, focusing on the proper handling of text-to-vector transformations. The tests ensure the embeddings endpoint correctly processes input text and returns valid vector representations.

Test Coverage Overview

The test suite covers the core embeddings generation endpoint functionality.

Key areas tested include:
  • POST request handling for /v1/embeddings endpoint
  • Request body validation with EmbeddingsBody model
  • Response structure validation using EmbeddingsResponse model
  • Vector embedding generation verification

Implementation Analysis

The implementation utilizes FastAPI’s TestClient for HTTP request simulation and response validation. The test employs a structured approach with model-based request/response handling, demonstrating clean separation of concerns and type safety through Pydantic models.

Notable patterns include:
  • Direct endpoint testing with TestClient
  • Model-driven request/response validation
  • Structured assertion flow

Technical Details

Testing tools and components:
  • FastAPI TestClient for HTTP request simulation
  • Pydantic models for request/response validation
  • Python’s built-in assertion framework
  • EmbeddingsBody and EmbeddingsResponse custom models

Best Practices Demonstrated

The test implementation showcases several testing best practices for API validation.

Key practices include:
  • Isolated test scope with clear purpose
  • Strong type checking through Pydantic models
  • Multiple assertion levels for comprehensive validation
  • Clean and maintainable test structure

zylon-ai/private-gpt

tests/server/embeddings/test_embedding_routes.py

            
from fastapi.testclient import TestClient

from private_gpt.server.embeddings.embeddings_router import (
    EmbeddingsBody,
    EmbeddingsResponse,
)


def test_embeddings_generation(test_client: TestClient) -> None:
    body = EmbeddingsBody(input="Embed me")
    response = test_client.post("/v1/embeddings", json=body.model_dump())

    assert response.status_code == 200
    embedding_response = EmbeddingsResponse.model_validate(response.json())
    assert len(embedding_response.data) > 0
    assert len(embedding_response.data[0].embedding) > 0