CtrlK
CommunityDocumentationLog inGet started
Tessl Logo

tessl/maven-com-embabel-agent--embabel-agent-test-support

Multi-module test support framework for Embabel Agent applications providing integration testing, mock AI services, and test configuration utilities

Overview
Eval results
Files

fake-embedding-model.mddocs/api/

FakeEmbeddingModel API

Complete API reference for FakeEmbeddingModel - a fake implementation of Spring AI's EmbeddingModel interface for testing.

Overview

FakeEmbeddingModel generates random embeddings for testing without requiring API keys or making real API calls. Implements Spring AI's EmbeddingModel interface.

Module: embabel-agent-test-common Package: com.embabel.common.test.ai Language: Kotlin (Java-compatible)

Imports

Kotlin

import com.embabel.common.test.ai.FakeEmbeddingModel

Java

import com.embabel.common.test.ai.FakeEmbeddingModel;

Class Definition

FakeEmbeddingModel

/**
 * Fake embedding model that implements Spring AI's EmbeddingModel interface
 * for testing purposes. Generates random embeddings without making actual API calls.
 *
 * @property dimensions The dimension size of generated embedding vectors (default: 1536)
 */
data class FakeEmbeddingModel(
    val dimensions: Int = 1536
) : EmbeddingModel

Parameters:

  • dimensions - The size of generated embedding vectors (default: 1536)

Default Dimensions:

  • 1536: OpenAI text-embedding-ada-002
  • 768: BERT and similar models
  • 384: Sentence transformers (all-MiniLM-L6-v2)

Usage:

// Default dimensions (1536)
val model = FakeEmbeddingModel()

// Custom dimensions
val model384 = FakeEmbeddingModel(dimensions = 384)
val model768 = FakeEmbeddingModel(dimensions = 768)

Methods

embed (Document)

Generate a random embedding for a single document.

override fun embed(document: Document): FloatArray

Parameters:

  • document - The Spring AI Document to embed

Returns: FloatArray - Random embedding vector of specified dimensions

Usage (Kotlin):

val model = FakeEmbeddingModel(dimensions = 768)
val document = Document("Sample text for embedding")
val embedding = model.embed(document)
// Returns a random FloatArray of size 768

Usage (Java):

FakeEmbeddingModel model = new FakeEmbeddingModel(768);
Document document = new Document("Sample text for embedding");
float[] embedding = model.embed(document);
// Returns a random float[] of size 768

embed (List of Texts)

Generate random embeddings for multiple text inputs.

override fun embed(texts: List<String>): MutableList<FloatArray>

Parameters:

  • texts - List of text strings to embed

Returns: MutableList<FloatArray> - List of random embeddings, one for each input text

Usage (Kotlin):

val model = FakeEmbeddingModel()
val texts = listOf(
    "First document",
    "Second document",
    "Third document"
)
val embeddings = model.embed(texts)
// Returns a list of 3 random embeddings, each of size 1536

Usage (Java):

FakeEmbeddingModel model = new FakeEmbeddingModel(1536);
List<String> texts = List.of(
    "First document",
    "Second document",
    "Third document"
);
List<float[]> embeddings = model.embed(texts);
// Returns a list of 3 random embeddings

call (EmbeddingRequest)

Process an EmbeddingRequest and return an EmbeddingResponse with random embeddings.

override fun call(request: EmbeddingRequest): EmbeddingResponse

Parameters:

  • request - The Spring AI EmbeddingRequest containing inputs to embed

Returns: EmbeddingResponse - Response containing random embeddings for each input

Usage (Kotlin):

val model = FakeEmbeddingModel(dimensions = 384)
val request = EmbeddingRequest(
    listOf("query 1", "query 2"),
    null  // options
)
val response = model.call(request)

// Access embeddings from response
val embeddings = response.results
println("Generated ${embeddings.size} embeddings")
embeddings.forEach { embedding ->
    println("Embedding index: ${embedding.index}, dims: ${embedding.output.size}")
}

Usage (Java):

FakeEmbeddingModel model = new FakeEmbeddingModel(384);
EmbeddingRequest request = new EmbeddingRequest(
    List.of("query 1", "query 2"),
    null  // options
);
EmbeddingResponse response = model.call(request);

// Access embeddings from response
List<Embedding> embeddings = response.getResults();
System.out.println("Generated " + embeddings.size() + " embeddings");

Complete Examples

Example 1: Basic Embedding

@Test
fun `test basic embedding`() {
    val model = FakeEmbeddingModel(dimensions = 512)
    val document = Document("Test content")

    val embedding = model.embed(document)

    assertEquals(512, embedding.size)
    assertTrue(embedding.all { it.isFinite() })
}

Example 2: Batch Embedding

@Test
fun `test batch embedding`() {
    val model = FakeEmbeddingModel()
    val texts = listOf("doc 1", "doc 2", "doc 3")

    val embeddings = model.embed(texts)

    assertEquals(3, embeddings.size)
    embeddings.forEach { embedding ->
        assertEquals(1536, embedding.size)
    }
}

Example 3: Integration with Service

@Test
fun `test embedding service`() {
    val embeddingModel = FakeEmbeddingModel(dimensions = 768)
    val service = MyEmbeddingService(embeddingModel)

    val result = service.processDocument(Document("test"))

    assertNotNull(result)
    assertEquals(768, result.embedding.size)
}

Example 4: Using EmbeddingRequest

@Test
fun `test with embedding request`() {
    val model = FakeEmbeddingModel(dimensions = 384)
    val request = EmbeddingRequest(
        listOf("text 1", "text 2"),
        null
    )

    val response = model.call(request)

    assertEquals(2, response.results.size)
    response.results.forEach {
        assertEquals(384, it.output.size)
    }
}

Example 5: Testing Different Dimensions

@Test
fun `test with different dimension sizes`() {
    val model384 = FakeEmbeddingModel(dimensions = 384)
    val model768 = FakeEmbeddingModel(dimensions = 768)
    val model1536 = FakeEmbeddingModel(dimensions = 1536)

    val text = "sample text"
    val doc = Document(text)

    assertEquals(384, model384.embed(doc).size)
    assertEquals(768, model768.embed(doc).size)
    assertEquals(1536, model1536.embed(doc).size)
}

Example 6: Spring Configuration

@TestConfiguration
class TestConfig {
    @Bean
    fun embeddingModel(): EmbeddingModel {
        return FakeEmbeddingModel(dimensions = 768)
    }
}

@SpringBootTest
class EmbeddingIntegrationTest {

    @Autowired
    private lateinit var embeddingModel: EmbeddingModel

    @Test
    fun `test with Spring bean`() {
        val embedding = embeddingModel.embed(Document("test"))
        assertNotNull(embedding)
    }
}

Spring AI Types Reference

These types are from the Spring AI framework:

Document

/**
 * Document representation in Spring AI
 */
class Document(
    val content: String,
    val metadata: Map<String, Any> = emptyMap()
)

EmbeddingRequest

/**
 * Request for embedding operations
 */
class EmbeddingRequest(
    val inputs: List<String>,
    val options: EmbeddingOptions?
)

EmbeddingResponse

/**
 * Response from embedding operations
 */
class EmbeddingResponse(
    val results: List<Embedding>
)

Embedding

/**
 * Individual embedding result
 */
class Embedding(
    val output: FloatArray,
    val index: Int
)

EmbeddingModel

/**
 * Spring AI's embedding model interface
 */
interface EmbeddingModel {
    fun embed(document: Document): FloatArray
    fun embed(texts: List<String>): MutableList<FloatArray>
    fun call(request: EmbeddingRequest): EmbeddingResponse
}

Important Notes

Random Embeddings

  • The model generates random embeddings using generateRandomFloatArray from com.embabel.common.util
  • Each call to embed() or call() generates new random values
  • Embeddings are not deterministic - same input produces different embeddings each time
  • Suitable for testing code structure and flow, NOT for testing semantic similarity

When to Use

✓ Testing embedding storage and retrieval ✓ Testing vector database integrations ✓ Testing document processing pipelines ✓ Testing code that uses embeddings without needing real API ✓ Testing with different embedding dimensions

✗ Testing semantic similarity or quality ✗ Testing actual embedding model behavior ✗ Production use

Common Dimension Sizes

ModelDimensionsUse Case
OpenAI ada-0021536Default, general purpose
BERT base768NLP tasks
Sentence transformers384Efficient embeddings
CustomAnyMatch your specific model

Related APIs

  • Test Configuration API - Spring test setup with fake embeddings
  • Testing Embeddings Guide - Guide for embedding tests
  • Fake AI Services Module - Module overview

See Also

  • Spring AI Documentation - Spring AI framework docs
  • Testing Patterns - Common testing patterns
tessl i tessl/maven-com-embabel-agent--embabel-agent-test-support@0.3.0

docs

api

fake-embedding-model.md

stubbing.md

test-configuration-beans.md

verification.md

index.md

tile.json