Package com.tnsai.llm.routing
Class RoundRobinRouter
java.lang.Object
com.tnsai.llm.routing.RoundRobinRouter
- All Implemented Interfaces:
com.tnsai.llm.LLMClient,LLMRouter
Routes LLM requests using round-robin load distribution.
RoundRobinRouter distributes requests evenly across all providers, which is useful for:
- Staying under per-provider rate limits
- Distributing load across multiple accounts/endpoints
- A/B testing different models
Usage Example
// Distribute load across multiple providers
RoundRobinRouter router = RoundRobinRouter.of(
new OpenAIClient("gpt-4o"),
new AnthropicClient("claude-sonnet-4"),
new GroqClient("llama-3.3-70b")
);
// Requests are distributed 1 → 2 → 3 → 1 → 2 → ...
router.chat("Query 1"); // GPT-4o
router.chat("Query 2"); // Claude
router.chat("Query 3"); // Groq
router.chat("Query 4"); // GPT-4o again
Rate Limit Avoidance
// Use multiple OpenAI accounts to avoid rate limits
RoundRobinRouter router = RoundRobinRouter.of(
new OpenAIClient("gpt-4o", apiKey1),
new OpenAIClient("gpt-4o", apiKey2),
new OpenAIClient("gpt-4o", apiKey3)
);
// Requests are distributed across accounts
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classBuilder for RoundRobinRouter.Nested classes/interfaces inherited from interface com.tnsai.llm.routing.LLMRouter
LLMRouter.RoutingStats -
Method Summary
Modifier and TypeMethodDescriptionstatic RoundRobinRouter.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.intReturns the current rotation index.getModel()com.tnsai.llm.LLMClientReturns the currently selected/primary client.getStats()Returns routing statistics (calls per provider, failures, latencies).floatstatic RoundRobinRouterof(com.tnsai.llm.LLMClient... clients) Creates a RoundRobinRouter with the given clients.static RoundRobinRouterCreates a RoundRobinRouter 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 RoundRobinRouter with the given clients. -
of
Creates a RoundRobinRouter 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
-
getCurrentIndex
public int getCurrentIndex()Returns the current rotation index.
-