Package com.tnsai.llm.routing
Class CostBasedRouter
java.lang.Object
com.tnsai.llm.routing.CostBasedRouter
- All Implemented Interfaces:
com.tnsai.llm.LLMClient,LLMRouter
Routes LLM requests to the cheapest viable provider.
CostBasedRouter optimizes for cost by selecting the cheapest model that meets the capability requirements. This can reduce LLM costs by up to 85% for simple queries by routing them to cheaper models.
Cost Optimization Strategy
- Filter clients by capability requirements
- Sort by input cost (cheapest first)
- Try cheapest client, fallback on failure
Usage Example
// Create router with multiple price tiers
CostBasedRouter router = CostBasedRouter.builder()
.addClient(new OpenAIClient("gpt-4o-mini")) // $0.15/1M input
.addClient(new GroqClient("llama-3.3-70b")) // $0.59/1M input
.addClient(new OpenAIClient("gpt-4o")) // $2.50/1M input
.addClient(new AnthropicClient("claude-sonnet-4")) // $3.00/1M input
.build();
// Simple queries go to cheapest model (gpt-4o-mini)
router.chat("What is 2+2?");
// Complex queries that fail on cheap models fallback to expensive ones
router.chat("Analyze this complex code...");
With Capability Filter
// Find cheapest vision model
CostBasedRouter router = CostBasedRouter.builder()
.addClient(new OpenAIClient("gpt-4o-mini")) // Has vision, cheap
.addClient(new OpenAIClient("gpt-4o")) // Has vision
.addClient(new GroqClient("llama-3.3-70b")) // No vision
.requireCapability(cap -> cap.supportsVision())
.build();
// Automatically filters to vision-capable models, selects cheapest
Cost Tracking
// After running queries
CostBasedRouter.CostStats stats = router.getCostStats();
System.out.println("Estimated total cost: $" + stats.totalEstimatedCost());
System.out.println("Cost per provider: " + stats.costPerProvider());
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classBuilder for CostBasedRouter.static final recordCost statistics.Nested classes/interfaces inherited from interface com.tnsai.llm.routing.LLMRouter
LLMRouter.RoutingStats -
Method Summary
Modifier and TypeMethodDescriptionstatic CostBasedRouter.Builderbuilder()Returns a builder for configuring the router.com.tnsai.llm.ChatResponsechat(String message, Optional<String> systemPrompt, Optional<List<Map<String, Object>>> history, Optional<List<Map<String, Object>>> tools) Routes a chat request to the appropriate client.com.tnsai.llm.LLMCapabilitiesList<com.tnsai.llm.LLMClient> Returns all registered LLM clients.Returns cost statistics.getModel()com.tnsai.llm.LLMClientReturns the currently selected/primary client.getStats()Returns routing statistics (calls per provider, failures, latencies).floatstatic CostBasedRouterof(com.tnsai.llm.LLMClient... clients) Creates a CostBasedRouter with the given clients.voidResets routing statistics.Optional<com.tnsai.llm.LLMClient> selectByCapability(Predicate<com.tnsai.llm.LLMCapabilities> filter) Selects a client that matches the given capability predicate.streamChat(String message, Optional<String> systemPrompt, Optional<List<Map<String, Object>>> history, Optional<List<Map<String, Object>>> tools) Stream<com.tnsai.llm.ChatChunk> streamChatWithSpec(String message, Optional<String> systemPrompt, Optional<List<Map<String, Object>>> history, Optional<List<Map<String, Object>>> tools) Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface com.tnsai.llm.LLMClient
chat, chat, chat, chat, chat, getProviderName, getTopP, listModels, streamChat, streamChat, streamChatWithHandler, streamChatWithHandler, streamChatWithSpec
-
Method Details
-
of
Creates a CostBasedRouter with the given clients. -
builder
Returns a builder for configuring the router. -
getClients
Description copied from interface:LLMRouterReturns all registered LLM clients.- Specified by:
getClientsin interfaceLLMRouter
-
getPrimaryClient
public com.tnsai.llm.LLMClient getPrimaryClient()Description copied from interface:LLMRouterReturns the currently selected/primary client.- Specified by:
getPrimaryClientin interfaceLLMRouter
-
selectByCapability
public Optional<com.tnsai.llm.LLMClient> selectByCapability(Predicate<com.tnsai.llm.LLMCapabilities> filter) Description copied from interface:LLMRouterSelects a client that matches the given capability predicate.- Specified by:
selectByCapabilityin interfaceLLMRouter- Parameters:
filter- Predicate to filter by capabilities- Returns:
- The first matching client, or empty if none match
-
getModel
- Specified by:
getModelin interfacecom.tnsai.llm.LLMClient
-
getTemperature
public float getTemperature()- Specified by:
getTemperaturein interfacecom.tnsai.llm.LLMClient
-
getMaxTokens
- Specified by:
getMaxTokensin interfacecom.tnsai.llm.LLMClient
-
getCapabilities
public com.tnsai.llm.LLMCapabilities getCapabilities()- Specified by:
getCapabilitiesin interfacecom.tnsai.llm.LLMClient
-
chat
public com.tnsai.llm.ChatResponse chat(String message, Optional<String> systemPrompt, Optional<List<Map<String, Object>>> history, Optional<List<Map<String, Object>>> tools) Description copied from interface:LLMRouterRoutes a chat request to the appropriate client.The routing decision depends on the implementation:
- FallbackRouter: Uses primary, falls back on error
- CostBasedRouter: Selects cheapest viable option
- LatencyBasedRouter: Selects fastest option
-
streamChat
public Stream<String> streamChat(String message, Optional<String> systemPrompt, Optional<List<Map<String, Object>>> history, Optional<List<Map<String, Object>>> tools) - Specified by:
streamChatin interfacecom.tnsai.llm.LLMClient
-
streamChatWithSpec
public Stream<com.tnsai.llm.ChatChunk> streamChatWithSpec(String message, Optional<String> systemPrompt, Optional<List<Map<String, Object>>> history, Optional<List<Map<String, Object>>> tools) - Specified by:
streamChatWithSpecin interfacecom.tnsai.llm.LLMClient
-
getCostStats
Returns cost statistics. -
getStats
Description copied from interface:LLMRouterReturns routing statistics (calls per provider, failures, latencies). -
resetStats
public void resetStats()Description copied from interface:LLMRouterResets routing statistics.- Specified by:
resetStatsin interfaceLLMRouter
-