CtrlK
CommunityDocumentationLog inGet started
Tessl Logo

tessl/maven-com-embabel-agent--embabel-agent-common

Common AI framework utilities for the Embabel Agent system including LLM configuration, output converters, prompt contributors, and embedding service abstractions.

Overview
Eval results
Files

model-metadata.mddocs/supporting/

Model Metadata

Interfaces and classes for representing AI model metadata including provider information, model types, pricing, and knowledge cutoff dates.

Core Interfaces

ModelMetadata

Base interface for all AI model metadata with JSON serialization support.

interface ModelMetadata {
    val name: String
    val provider: String
    val type: ModelType
}

enum class ModelType {
    LLM,
    EMBEDDING
}

LlmMetadata

Metadata specific to language models.

interface LlmMetadata : ModelMetadata {
    val knowledgeCutoffDate: LocalDate?
    val pricingModel: PricingModel?

    companion object {
        @JvmStatic
        operator fun invoke(
            name: String,
            provider: String,
            knowledgeCutoffDate: LocalDate? = null,
            pricingModel: PricingModel? = null
        ): LlmMetadata

        @JvmStatic
        @JvmOverloads
        fun create(
            name: String,
            provider: String,
            knowledgeCutoffDate: LocalDate? = null,
            pricingModel: PricingModel? = null
        ): LlmMetadata
    }
}

Basic Usage:

import java.time.LocalDate

// Create LLM metadata
val llmMeta = LlmMetadata(
    name = "gpt-4",
    provider = "openai",
    knowledgeCutoffDate = LocalDate.of(2023, 4, 1),
    pricingModel = PricingModel.usdPer1MTokens(30.0, 60.0)
)

// Minimal properties
val simpleMeta = LlmMetadata(
    name = "llama-3",
    provider = "meta"
)

EmbeddingServiceMetadata

Metadata for embedding services.

interface EmbeddingServiceMetadata : ModelMetadata {
    companion object {
        @JvmStatic
        operator fun invoke(
            name: String,
            provider: String
        ): EmbeddingServiceMetadata

        @JvmStatic
        fun create(
            name: String,
            provider: String
        ): EmbeddingServiceMetadata
    }
}

Usage:

val embeddingMeta = EmbeddingServiceMetadata(
    name = "text-embedding-ada-002",
    provider = "openai"
)

AiModel Wrapper

Generic wrapper combining model instance with metadata.

interface AiModel<M> : ModelMetadata, HasInfoString {
    val model: M

    fun infoString(verbose: Boolean?, indent: Int): String
}

Usage:

class MyLlmModel(
    override val name: String,
    override val provider: String,
    override val model: ChatModel
) : AiModel<ChatModel> {
    override val type = ModelType.LLM
}

val llm = MyLlmModel(
    name = "gpt-4",
    provider = "openai",
    model = springAiChatModel
)

val info = llm.infoString(verbose = false, indent = 0)

Pricing Integration

LlmMetadata integrates with the pricing system for cost calculation.

val metadata = LlmMetadata(
    name = "gpt-4-turbo",
    provider = "openai",
    pricingModel = PricingModel.usdPer1MTokens(10.0, 30.0)
)

metadata.pricingModel?.let { pricing ->
    val cost = pricing.costOf(inputTokens = 1000, outputTokens = 500)
    println("Cost: $$cost")
}

JSON Serialization

Model metadata supports JSON serialization with type information preserved.

import com.fasterxml.jackson.databind.ObjectMapper

val mapper = ObjectMapper()

// Serialize
val json = mapper.writeValueAsString(llmMetadata)

// Deserialize with type information
val deserialized = mapper.readValue(json, ModelMetadata::class.java)

Design Patterns

  • Interface Segregation: Separate interfaces for LLM and embedding metadata
  • Factory Pattern: Companion object factory methods for convenient creation
  • Generic Wrapper: AiModel<M> wraps any model type while preserving metadata uniformity
tessl i tessl/maven-com-embabel-agent--embabel-agent-common@0.3.1

docs

index.md

quick-reference.md

README.md

tile.json