File size: 1,682 Bytes
6198b6f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
def get_best_free_openrouter(models):
    # Filter free models
    free_models = [m for m in models if "free" in m["name"].lower()]

    if not free_models:
        return None

    # Sort by score (highest first)
    free_models.sort(key=lambda x: x.get("score", 0), reverse=True)

    return free_models[0]


def get_best_hf_model(models):
    if not models:
        return None

    # Sort by score
    models.sort(key=lambda x: x.get("score", 0), reverse=True)

    return models[0]

def get_best_free_model(models):
    free_models = [m for m in models if "free" in m["name"].lower()]

    if not free_models:
        return None

    free_models.sort(key=lambda x: x.get("score", 0), reverse=True)
    return free_models[0]

def detect_category(model_name):
    name = model_name.lower()

    if "code" in name or "coder" in name:
        return "coding"
    elif "vision" in name or "clip" in name:
        return "vision"
    elif "embed" in name:
        return "embedding"
    elif "chat" in name or "gpt" in name:
        return "chat"
    else:
        return "general"
    
def get_top_models_by_category(models, category="chat", top_n=3):
    filtered = []

    for m in models:
        if detect_category(m["name"]) == category:
            filtered.append(m)

    if not filtered:
        return []

    filtered.sort(key=lambda x: x.get("score", 0), reverse=True)

    return filtered[:top_n]

# HF FOCUSED ->
def get_trending_models(models, top_n=5):
    if not models:
        return []

    # sort by downloads + likes combo
    models.sort(
        key=lambda x: (x.get("downloads", 0) + x.get("likes", 0)),
        reverse=True
    )

    return models[:top_n]