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]