Multi-module test support framework for Embabel Agent applications providing integration testing, mock AI services, and test configuration utilities
Complete API reference for FakeEmbeddingModel - a fake implementation of Spring AI's EmbeddingModel interface for testing.
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)
import com.embabel.common.test.ai.FakeEmbeddingModelimport com.embabel.common.test.ai.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
) : EmbeddingModelParameters:
dimensions - The size of generated embedding vectors (default: 1536)Default Dimensions:
Usage:
// Default dimensions (1536)
val model = FakeEmbeddingModel()
// Custom dimensions
val model384 = FakeEmbeddingModel(dimensions = 384)
val model768 = FakeEmbeddingModel(dimensions = 768)Generate a random embedding for a single document.
override fun embed(document: Document): FloatArrayParameters:
document - The Spring AI Document to embedReturns: 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 768Usage (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 768Generate random embeddings for multiple text inputs.
override fun embed(texts: List<String>): MutableList<FloatArray>Parameters:
texts - List of text strings to embedReturns: 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 1536Usage (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 embeddingsProcess an EmbeddingRequest and return an EmbeddingResponse with random embeddings.
override fun call(request: EmbeddingRequest): EmbeddingResponseParameters:
request - The Spring AI EmbeddingRequest containing inputs to embedReturns: 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");@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() })
}@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)
}
}@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)
}@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)
}
}@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)
}@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)
}
}These types are from the Spring AI framework:
/**
* Document representation in Spring AI
*/
class Document(
val content: String,
val metadata: Map<String, Any> = emptyMap()
)/**
* Request for embedding operations
*/
class EmbeddingRequest(
val inputs: List<String>,
val options: EmbeddingOptions?
)/**
* Response from embedding operations
*/
class EmbeddingResponse(
val results: List<Embedding>
)/**
* Individual embedding result
*/
class Embedding(
val output: FloatArray,
val index: Int
)/**
* 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
}generateRandomFloatArray from com.embabel.common.utilembed() or call() generates new random values✓ 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
| Model | Dimensions | Use Case |
|---|---|---|
| OpenAI ada-002 | 1536 | Default, general purpose |
| BERT base | 768 | NLP tasks |
| Sentence transformers | 384 | Efficient embeddings |
| Custom | Any | Match your specific model |