| def get_best_free_openrouter(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 get_best_hf_model(models): |
| if not models: |
| return None |
|
|
| |
| 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] |
|
|
| |
| def get_trending_models(models, top_n=5): |
| if not models: |
| return [] |
|
|
| |
| models.sort( |
| key=lambda x: (x.get("downloads", 0) + x.get("likes", 0)), |
| reverse=True |
| ) |
|
|
| return models[:top_n] |