Base starter module for the Embabel Agent Framework providing core dependencies for building agentic flows on the JVM with Spring Boot integration and GOAP-based intelligent path finding.
Type-safe LLM model identifiers and constants for various providers available through embabel-agent-api.
import com.embabel.agent.api.models.GeminiModels;
import com.embabel.agent.api.models.AnthropicModels;
import com.embabel.agent.api.models.OpenAiModels;
import com.embabel.agent.api.models.DeepSeekModels;
import com.embabel.agent.api.models.OllamaModels;
import com.embabel.agent.api.models.MistralAiModels;
import com.embabel.agent.api.models.GoogleGenAiModels;
import com.embabel.agent.api.models.LmStudioModels;
import com.embabel.agent.api.models.DockerLocalModels;import com.embabel.agent.api.models.GeminiModels
import com.embabel.agent.api.models.AnthropicModels
import com.embabel.agent.api.models.OpenAiModels
import com.embabel.agent.api.models.DeepSeekModels
import com.embabel.agent.api.models.OllamaModels
import com.embabel.agent.api.models.MistralAiModels
import com.embabel.agent.api.models.GoogleGenAiModels
import com.embabel.agent.api.models.LmStudioModels
import com.embabel.agent.api.models.DockerLocalModelspublic class GeminiModels {
// Gemini 3.0 Series
public static final Llm GEMINI_3_PRO_PREVIEW;
// Gemini 2.5 Series
public static final Llm GEMINI_2_5_PRO;
public static final Llm GEMINI_2_5_FLASH;
public static final Llm GEMINI_2_5_FLASH_LITE;
// Gemini 2.0 Series
public static final Llm GEMINI_2_0_FLASH;
public static final Llm GEMINI_2_0_FLASH_LITE;
// Embedding Models
public static final EmbeddingModel TEXT_EMBEDDING_004;
public static final EmbeddingModel DEFAULT_TEXT_EMBEDDING_MODEL;
}| Model | Use Case | Context Window | Speed |
|---|---|---|---|
| GEMINI_3_PRO_PREVIEW | Advanced reasoning, complex tasks | Large | Moderate |
| GEMINI_2_5_PRO | Production workloads, balanced | Very Large | Moderate |
| GEMINI_2_5_FLASH | Fast responses, simple tasks | Large | Fast |
| GEMINI_2_5_FLASH_LITE | Lightweight, high-throughput | Medium | Very Fast |
| GEMINI_2_0_FLASH | Legacy fast responses | Medium | Fast |
| GEMINI_2_0_FLASH_LITE | Legacy lightweight | Small | Very Fast |
import com.embabel.agent.api.models.GeminiModels;
import com.embabel.agent.api.llm.Ai;
public class MyAgent {
public Result process(Input input, Ai ai) {
return ai
.withLlm(GeminiModels.GEMINI_2_5_PRO)
.createObject("Process this input: " + input);
}
public Embedding embed(String text, Ai ai) {
return ai
.withEmbeddingModel(GeminiModels.TEXT_EMBEDDING_004)
.embed(text);
}
}spring:
ai:
gemini:
api-key: ${GOOGLE_STUDIO_API_KEY}Requires embabel-agent-starter-gemini dependency.
object AnthropicModels {
// Claude 3.7 Series
val CLAUDE_37_SONNET: Llm
// Claude 3.5 Series
val CLAUDE_35_HAIKU: Llm
// Claude 4.0 Series
val CLAUDE_40_OPUS: Llm
val CLAUDE_41_OPUS: Llm
// Claude 4.5 Series (Latest)
val CLAUDE_SONNET_4_5: Llm
val CLAUDE_HAIKU_4_5: Llm
}| Model | Use Case | Context Window | Speed |
|---|---|---|---|
| CLAUDE_SONNET_4_5 | Latest, most capable | Very Large | Moderate |
| CLAUDE_HAIKU_4_5 | Fast, lightweight | Large | Fast |
| CLAUDE_41_OPUS | Advanced reasoning | Very Large | Slower |
| CLAUDE_40_OPUS | Complex tasks | Large | Slow |
| CLAUDE_37_SONNET | Balanced performance | Large | Moderate |
| CLAUDE_35_HAIKU | Quick responses | Medium | Very Fast |
import com.embabel.agent.api.models.AnthropicModels
fun processWithClaude(input: Input, ai: Ai): Result {
return ai
.withLlm(AnthropicModels.CLAUDE_SONNET_4_5)
.createObject("Process this: $input")
}spring:
ai:
anthropic:
api-key: ${ANTHROPIC_API_KEY}Requires embabel-agent-starter-anthropic dependency.
object OpenAiModels {
// GPT-5 Series (Latest)
val GPT_5: Llm
val GPT_5_MINI: Llm
val GPT_5_NANO: Llm
// GPT-4.1 Series
val GPT_41: Llm
val GPT_41_MINI: Llm
val GPT_41_NANO: Llm
// Embedding Models
val TEXT_EMBEDDING_3_SMALL: EmbeddingModel
}| Model | Use Case | Context Window | Speed |
|---|---|---|---|
| GPT_5 | Most capable, latest | Very Large | Moderate |
| GPT_5_MINI | Balanced cost/performance | Large | Fast |
| GPT_5_NANO | Lightweight, high-throughput | Medium | Very Fast |
| GPT_41 | Previous generation, capable | Large | Moderate |
| GPT_41_MINI | Efficient, cost-effective | Medium | Fast |
| GPT_41_NANO | Ultra-fast responses | Small | Very Fast |
import com.embabel.agent.api.models.OpenAiModels
fun processWithGPT(input: Input, ai: Ai): Result {
return ai
.withLlm(OpenAiModels.GPT_5)
.createObject("Process: $input")
}spring:
ai:
openai:
api-key: ${OPENAI_API_KEY}Requires embabel-agent-starter-openai dependency.
object DeepSeekModels {
const val DEEPSEEK_CHAT = "deepseek-chat"
const val DEEPSEEK_REASONER = "deepseek-reasoner"
const val PROVIDER = "Deepseek"
}| Model | Use Case |
|---|---|
| DEEPSEEK_CHAT | General-purpose chat and completion |
| DEEPSEEK_REASONER | Advanced reasoning and complex problem-solving |
import com.embabel.agent.api.models.DeepSeekModels
fun processWithDeepSeek(input: Input, ai: Ai): Result {
return ai
.withLlm(DeepSeekModels.DEEPSEEK_CHAT)
.createObject("Analyze: $input")
}
fun complexReasoning(problem: Problem, ai: Ai): Solution {
return ai
.withLlm(DeepSeekModels.DEEPSEEK_REASONER)
.createObject("Solve this problem: $problem")
}object OllamaModels {
// Ollama-hosted local model constants
}import com.embabel.agent.api.models.OllamaModels
fun processLocally(input: Input, ai: Ai): Result {
return ai
.withLlm(OllamaModels.LLAMA3_2)
.createObject("Process: $input")
}spring:
ai:
ollama:
base-url: http://localhost:11434Requires embabel-agent-starter-ollama dependency and Ollama running locally.
object MistralAiModels {
// Mistral AI model constants
}import com.embabel.agent.api.models.MistralAiModels
fun processWithMistral(input: Input, ai: Ai): Result {
return ai
.withLlm(MistralAiModels.MISTRAL_LARGE)
.createObject("Process: $input")
}object GoogleGenAiModels {
// Google GenAI model constants
}object LmStudioModels {
// LM Studio model constants
}LM Studio uses the OpenAI-compatible client. Ensure your LM Studio server is running.
object DockerLocalModels {
// Docker-hosted model constants
}import com.embabel.agent.api.models.GeminiModels;
import com.embabel.agent.api.models.OpenAiModels;
import com.embabel.agent.api.llm.Ai;
import com.embabel.agent.api.llm.LlmOptions;
@Action
public Result intelligentRouting(ComplexInput input, Ai ai) {
// Use cheaper, faster model for simple classification
Category category = ai
.withLlm(GeminiModels.GEMINI_2_5_FLASH_LITE)
.createObject("Classify: " + input.getPreview(), Category.class);
// Use more capable model for complex processing
if (category.isComplex()) {
return ai
.withLlm(OpenAiModels.GPT_4_TURBO)
.createObject("Deep analysis: " + input.getFullContent(), Result.class);
} else {
return ai
.withLlm(GeminiModels.GEMINI_2_5_FLASH)
.createObject("Quick process: " + input.getFullContent(), Result.class);
}
}import com.embabel.agent.api.llm.LlmOptions;
@Action
public CreativeResult generateCreative(Prompt prompt, Ai ai) {
LlmOptions options = LlmOptions
.withModel(GeminiModels.GEMINI_2_5_PRO)
.withTemperature(0.9) // High temperature for creativity
.withMaxTokens(2000);
return ai
.withLlm(options)
.createObject("Generate creative content: " + prompt, CreativeResult.class);
}@Action
fun processWithOptions(input: Input, ai: Ai): Result {
val options = LlmOptions
.withModel(GeminiModels.GEMINI_2_5_PRO)
.withTemperature(0.2) // Low temperature for consistency
.withMaxTokens(1000)
return ai
.withLlm(options)
.createObject("Analyze: $input")
}Configure default models in application.yml:
embabel:
models:
default-llm: gpt-4.1-mini # Default LLM for all operations
default-embedding-model: text-embedding-3-small # Default embedding model@Action
public Result processWithDefault(Input input, Ai ai) {
// Uses default LLM configured in application.yml
return ai
.withDefaultLlm()
.createObject("Process: " + input);
}// Use fast, cheap models for simple tasks
GeminiModels.GEMINI_2_5_FLASH_LITE // Simple classification
GeminiModels.GEMINI_2_5_FLASH // Quick Q&A
// Use capable models for complex tasks
GeminiModels.GEMINI_2_5_PRO // Complex reasoning
OpenAiModels.GPT_4_TURBO // Advanced analysis// For sensitive data, use local models
OllamaModels.LLAMA3_2 // Local inference
LmStudioModels.LOCAL_MODEL // LM Studio hosted
DockerLocalModels.CONTAINER_MODEL // Docker container// Fastest models
GeminiModels.GEMINI_2_5_FLASH_LITE
GeminiModels.GEMINI_2_0_FLASH_LITE
// Moderate speed
GeminiModels.GEMINI_2_5_FLASH
OpenAiModels.GPT_3_5_TURBO
// More capable but slower
GeminiModels.GEMINI_2_5_PRO
OpenAiModels.GPT_4_TURBOUse multiple models for critical decisions:
import com.embabel.agent.api.consensus.ConsensusBuilder;
@Action
public Decision criticalDecision(Problem problem, Ai ai) {
return ConsensusBuilder
.forDecision(Decision.class)
.withModels(
GeminiModels.GEMINI_2_5_PRO,
OpenAiModels.GPT_4_TURBO,
AnthropicModels.CLAUDE_3_5_SONNET
)
.requireConsensus(0.67) // 2 out of 3 must agree
.execute(ai, "Decide on: " + problem);
}spring:
ai:
openai:
api-key: ${OPENAI_API_KEY}Requires embabel-agent-starter-openai dependency.
spring:
ai:
anthropic:
api-key: ${ANTHROPIC_API_KEY}Requires embabel-agent-starter-anthropic dependency.
spring:
ai:
gemini:
api-key: ${GOOGLE_STUDIO_API_KEY}Requires embabel-agent-starter-gemini dependency.
spring:
ai:
ollama:
base-url: http://localhost:11434Requires embabel-agent-starter-ollama dependency and Ollama running locally.
spring:
ai:
bedrock:
aws:
region: us-east-1
access-key: ${AWS_ACCESS_KEY_ID}
secret-key: ${AWS_SECRET_ACCESS_KEY}Requires embabel-agent-starter-bedrock dependency.
embabel:
agent:
platform:
models:
anthropic:
max-attempts: 10 # Maximum retry attempts
backoff-millis: 5000 # Initial backoff in milliseconds
backoff-multiplier: 5.0 # Backoff multiplier
backoff-max-interval: 180000 # Maximum backoff interval (3 minutes)
openai:
max-attempts: 10
backoff-millis: 5000
backoff-multiplier: 5.0
backoff-max-interval: 180000Delay = min(backoff-millis * (backoff-multiplier ^ attempt), backoff-max-interval)Example Retry Sequence:
tessl i tessl/maven-com-embabel-agent--embabel-agent-starter@0.3.1docs