File size: 1,425 Bytes
09572bd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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