Package com.tnsai.llm.routing
Class FallbackRouter
java.lang.Object
com.tnsai.llm.routing.FallbackRouter
- All Implemented Interfaces:
com.tnsai.llm.LLMClient,LLMRouter
LLM router with automatic fallback on failure.
FallbackRouter provides resilience by automatically trying alternative LLM providers when the primary fails. This is essential for production systems where reliability is critical.
Fallback Behavior
- Try primary client (first in list)
- On failure, log error and try next client
- Continue until success or all clients exhausted
- Throw last exception if all fail
Usage Example
// Create router with ordered fallback chain
LLMRouter router = FallbackRouter.of(
new OpenAIClient("gpt-4o"), // Primary
new AnthropicClient("claude-sonnet-4"), // First fallback
new GroqClient("llama-3.3-70b") // Last resort
);
// Use like a normal LLMClient
ChatResponse response = router.chat("Hello, world!");
// Check which provider was actually used
System.out.println("Used: " + response.getModel());
With Capability Filter
// Only fallback to vision-capable models
FallbackRouter router = FallbackRouter.builder()
.addClient(new OpenAIClient("gpt-4o"))
.addClient(new GeminiClient("gemini-2.5-flash"))
.requireCapability(cap -> cap.supportsVision())
.build();
Monitoring
RoutingStats stats = router.getStats();
System.out.println("Total requests: " + stats.totalRequests());
System.out.println("Failures per provider: " + stats.failuresPerProvider());
- See Also:
-
Nested Class Summary
Nested ClassesNested classes/interfaces inherited from interface com.tnsai.llm.routing.LLMRouter
LLMRouter.RoutingStats -
Method Summary
Modifier and TypeMethodDescriptionstatic FallbackRouter.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.getModel()com.tnsai.llm.LLMClientReturns the currently selected/primary client.getStats()Returns routing statistics (calls per provider, failures, latencies).floatstatic FallbackRouterof(com.tnsai.llm.LLMClient... clients) Creates a FallbackRouter with the given clients.static FallbackRouterCreates a FallbackRouter 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 FallbackRouter with the given clients. The first client is the primary; others are fallbacks in order. -
of
Creates a FallbackRouter 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
-
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
-