File size: 1,569 Bytes
9118d44 3a74ace 9118d44 3a74ace 9118d44 3a74ace 9118d44 3a74ace 9118d44 269019f 9118d44 3a74ace 9118d44 274e9c9 9118d44 3a74ace 9118d44 3a74ace 9118d44 3a74ace 9118d44 3a74ace | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | # instance_provider.py
import os
from typing import List, Optional
from pydantic_ai.models.openai import OpenAIModel
from pydantic_ai.providers.openai import OpenAIProvider
from dotenv import load_dotenv
load_dotenv()
class InstanceProvider:
"""Manages multiple Groq API instances with simple rotation"""
def __init__(self):
self.instances: List[OpenAIModel] = []
self.current_index = 0
self._initialize_instances()
def _initialize_instances(self):
"""Load all API keys and create instances"""
api_keys = os.getenv("GROQ_API_KEYS", "").split(",")
base_url = os.getenv("GROQ_OPENAI_URL")
model_name = os.getenv("GROQ_LLM_MODEL")
for key in api_keys:
key = key.strip()
if key:
self.instances.append(
OpenAIModel(
model_name,
provider=OpenAIProvider(
base_url=base_url,
api_key=key
)
)
)
def get_next_instance(self) -> Optional[OpenAIModel]:
"""Get next instance in rotation"""
if not self.instances:
return None
instance = self.instances[self.current_index]
self.current_index = (self.current_index + 1) % len(self.instances)
return instance
def get_total_instances(self) -> int:
"""Return total number of instances available"""
return len(self.instances) |