import random def build_provider_index(providers: list) -> dict: return {p.name: p for p in providers} def build_model_index(providers: list) -> dict: """Build {slot: [(provider_name, actual_model_id), ...]} from providers.""" index = {} for p in providers: for slot, model in p.get_model_list(): index.setdefault(slot, []).append((p.name, model)) return index def get_shuffled_combos(index: dict, slot: str) -> list: """Get shuffled (provider_name, actual_model_id) list for a slot.""" candidates = list(index.get(slot, [])) random.shuffle(candidates) return candidates def build_providers(keys: dict): from .providers import GroqProvider, G4FProvider, NvidiaNimProvider, LLM7Provider, GeminiProvider, SambanovaProvider, DeepSeekProvider ps = [] if keys.get('groq'): ps.append(GroqProvider(keys['groq'])) if keys.get('groq2'): ps.append(GroqProvider(keys['groq2'], name='groq2')) ps.append(G4FProvider()) if keys.get('gemini'): ps.append(GeminiProvider(keys['gemini'])) if keys.get('nvidia_nim'): ps.append(NvidiaNimProvider(keys['nvidia_nim'])) if keys.get('llm7'): ps.append(LLM7Provider(keys['llm7'])) if keys.get('sambanova'): ps.append(SambanovaProvider(keys['sambanova'])) if keys.get('deepseek'): ps.append(DeepSeekProvider(keys['deepseek'])) return ps