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] |