Package com.tnsai.llm.routing
Class LatencyBasedRouter
java.lang.Object
com.tnsai.llm.routing.LatencyBasedRouter
- All Implemented Interfaces:
com.tnsai.llm.LLMClient,LLMRouter
Routes LLM requests to the fastest available provider.
LatencyBasedRouter optimizes for response time by selecting the provider with the lowest latency. It learns from actual response times and adapts routing decisions based on measured performance.
Latency Optimization Strategy
- Initially uses estimated latency from capabilities
- Tracks actual latency per provider
- Routes to provider with lowest moving average
- Falls back on failure, updates latency data
Usage Example
// Create router optimizing for speed
LatencyBasedRouter router = LatencyBasedRouter.builder()
.addClient(new GroqClient("llama-3.3-70b")) // ~100ms TTFT
.addClient(new OpenAIClient("gpt-4o-mini")) // ~300ms TTFT
.addClient(new AnthropicClient("claude-sonnet-4")) // ~600ms TTFT
.build();
// Routes to Groq (fastest) automatically
ChatResponse response = router.chat("Quick question");
// If Groq slows down, router adapts and switches
Adaptive Routing
// Router learns from actual performance
for (int i = 0; i < 100; i++) {
router.chat("Test query " + i);
}
// After warmup, routing is based on actual measured latency
LatencyBasedRouter.LatencyStats stats = router.getLatencyStats();
System.out.println("Avg latency per provider: " + stats.avgLatencyPerProvider());
System.out.println("Fastest provider: " + stats.fastestProvider());
With Latency Threshold
// Only use providers with acceptable latency
LatencyBasedRouter router = LatencyBasedRouter.builder()
.addClient(new GroqClient("llama-3.3-70b"))
.addClient(new OpenAIClient("gpt-4o"))
.maxLatencyMs(500) // Exclude providers slower than 500ms
.build();
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classBuilder for LatencyBasedRouter.static final recordLatency statistics.Nested classes/interfaces inherited from interface com.tnsai.llm.routing.LLMRouter
LLMRouter.RoutingStats -
Method Summary
Modifier and TypeMethodDescriptionstatic LatencyBasedRouter.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 latency statistics.getModel()com.tnsai.llm.LLMClientReturns the currently selected/primary client.getStats()Returns routing statistics (calls per provider, failures, latencies).floatstatic LatencyBasedRouterof(com.tnsai.llm.LLMClient... clients) Creates a LatencyBasedRouter 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 LatencyBasedRouter 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
-
getLatencyStats
Returns latency 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
-