Release Notes: v0.16.0¶
Release Date: 2026-05-23
Highlights¶
- Embeddings API: New
EmbeddingProviderinterface for text-to-vector conversion, enabling semantic search and RAG workflows
New Features¶
EmbeddingProvider Interface¶
A new dedicated interface for embedding providers, separate from the chat completion providers:
type EmbeddingProvider interface {
CreateEmbedding(ctx context.Context, req *EmbeddingRequest) (*EmbeddingResponse, error)
Close() error
Name() string
}
Embedding Types¶
Unified request/response types for embeddings:
EmbeddingRequest: Model, input texts, encoding format, dimensions, userEmbeddingResponse: Embedding data, model, usage statisticsEmbeddingData: Individual embedding with index and vectorEmbeddingUsage: Prompt tokens and total tokensEmbeddingEncodingFormat: Constants forfloatandbase64formats
OpenAI Embedding Support¶
Full OpenAI embeddings API implementation:
embeddingProvider, err := omnillm.GetEmbeddingProvider(
omnillm.ProviderNameOpenAI,
omnillm.ProviderConfig{APIKey: apiKey},
)
if err != nil {
log.Fatal(err)
}
defer embeddingProvider.Close()
resp, err := embeddingProvider.CreateEmbedding(ctx, &provider.EmbeddingRequest{
Model: "text-embedding-3-small",
Input: []string{"Hello world", "How are you?"},
})
Supported models:
text-embedding-3-small(1536 dimensions, configurable)text-embedding-3-large(3072 dimensions, configurable)text-embedding-ada-002(1536 dimensions, fixed)
Embedding Provider Registry¶
Separate registry for embedding providers with priority-based registration:
// List available embedding providers
providers := omnillm.ListEmbeddingProviders()
// Get a provider instance
provider, err := omnillm.GetEmbeddingProvider(name, config)
// Register custom embedding providers
omnillm.RegisterEmbeddingProvider(name, factory, priority)
Use Cases¶
The embeddings API enables:
- Semantic Search: Find documents by meaning, not just keywords
- RAG (Retrieval-Augmented Generation): Enhance LLM responses with relevant context
- Similarity Matching: Cluster or compare text content
- Classification: Use embeddings as features for ML models
Installation¶
Example¶
package main
import (
"context"
"fmt"
"log"
"github.com/plexusone/omnillm-core"
"github.com/plexusone/omnillm-core/provider"
)
func main() {
embeddingProvider, err := omnillm.GetEmbeddingProvider(
omnillm.ProviderNameOpenAI,
omnillm.ProviderConfig{APIKey: "your-api-key"},
)
if err != nil {
log.Fatal(err)
}
defer embeddingProvider.Close()
resp, err := embeddingProvider.CreateEmbedding(context.Background(), &provider.EmbeddingRequest{
Model: "text-embedding-3-small",
Input: []string{
"The quick brown fox jumps over the lazy dog",
"A fast auburn fox leaps above a sleepy canine",
},
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("Created %d embeddings\n", len(resp.Data))
fmt.Printf("Dimensions: %d\n", len(resp.Data[0].Embedding))
fmt.Printf("Tokens used: %d\n", resp.Usage.TotalTokens)
}