Skip to content

Release Notes: v0.16.0

Release Date: 2026-05-23

Highlights

  • Embeddings API: New EmbeddingProvider interface 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, user
  • EmbeddingResponse: Embedding data, model, usage statistics
  • EmbeddingData: Individual embedding with index and vector
  • EmbeddingUsage: Prompt tokens and total tokens
  • EmbeddingEncodingFormat: Constants for float and base64 formats

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

go get github.com/plexusone/omnillm-core@v0.16.0

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)
}

Documentation