From 39c1fbb1bee3725da18b035fcb0d4160064effbf Mon Sep 17 00:00:00 2001 From: Jun Siang Cheah Date: Sun, 6 Apr 2025 13:57:54 +0100 Subject: [PATCH] chutes: list free models --- README.md | 22 +++++++++---- src/pull_available_models.py | 63 ++++++++++++++++++++++++++++++++---- 2 files changed, 73 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 058ae78..17fc357 100644 --- a/README.md +++ b/README.md @@ -246,12 +246,22 @@ This lists various services that provide free access or credits towards API-base Phi-4 Phi-4-mini-instruct Phi-4-multimodal-instruct - - Chutes - Distributed, decentralized crypto-based compute. Data is sent to individual hosts. - Various open models - - Cloudflare Workers AI10,000 neurons/dayDeepSeek R1 Distill Qwen 32B +ChutesDistributed, decentralized crypto-based compute. Data is sent to individual hosts.DeepHermes 3 Llama 3 8B Preview +DeepSeek V3 0324 +DeepSeek V3 Base +Dolphin 3.0 Mistral 24B +Dolphin 3.0 R1 Mistral 24B +Gemma 3 12B Instruct +Gemma 3 1B Instruct +Gemma 3 4B Instruct +Llama 4 Maverick 17B 128E Instruct FP8 +Llama 4 Scout 17B 16E Instruct +Mistral Small 3.1 24B Instruct 2503 +OlympicCoder 32B +OlympicCoder 7B +Qwen 2.5 VL 32B Instruct +Reka Flash 3 +Cloudflare Workers AI10,000 neurons/dayDeepSeek R1 Distill Qwen 32B Deepseek Coder 6.7B Base (AWQ) Deepseek Coder 6.7B Instruct (AWQ) Deepseek Math 7B Instruct diff --git a/src/pull_available_models.py b/src/pull_available_models.py index d44b2fd..6343728 100644 --- a/src/pull_available_models.py +++ b/src/pull_available_models.py @@ -247,6 +247,20 @@ MODEL_TO_NAME_MAPPING = { "@cf/meta/llama-4-scout-17b-16e-instruct": "Llama 4 Scout Instruct", "meta-llama/llama-4-scout:free": "Llama 4 Scout", "meta-llama/llama-4-maverick:free": "Llama 4 Maverick", + "rekaai/reka-flash-3": "Reka Flash 3", + "cognitivecomputations/dolphin3.0-mistral-24b": "Dolphin 3.0 Mistral 24B", + "unsloth/gemma-3-12b-it": "Gemma 3 12B Instruct", + "chutesai/llama-4-maverick-17b-128e-instruct-fp8": "Llama 4 Maverick 17B 128E Instruct FP8", + "unsloth/gemma-3-1b-it": "Gemma 3 1B Instruct", + "deepseek-ai/deepseek-v3-base": "DeepSeek V3 Base", + "unsloth/gemma-3-4b-it": "Gemma 3 4B Instruct", + "open-r1/olympiccoder-32b": "OlympicCoder 32B", + "chutesai/llama-4-scout-17b-16e-instruct": "Llama 4 Scout 17B 16E Instruct", + "cognitivecomputations/dolphin3.0-r1-mistral-24b": "Dolphin 3.0 R1 Mistral 24B", + "open-r1/olympiccoder-7b": "OlympicCoder 7B", + "nousresearch/deephermes-3-llama-3-8b-preview": "DeepHermes 3 Llama 3 8B Preview", + "chutesai/mistral-small-3.1-24b-instruct-2503": "Mistral Small 3.1 24B Instruct 2503", + "qwen/qwen2.5-vl-32b-instruct": "Qwen 2.5 VL 32B Instruct", } @@ -808,6 +822,35 @@ ONLY OUTPUT JSON!""", return ret_models +def fetch_chutes_models(logger): + logger.info("Fetching Chutes models...") + r = requests.get( + "https://api.chutes.ai/chutes/?include_public=true&limit=1000", + headers={ + "Content-Type": "application/json", + }, + ) + r.raise_for_status() + models = r.json()["items"] + logger.info(f"Fetched {len(models)} models from Chutes") + + # Filter for free models based on per_million_token price + free_models = [] + for model in models: + price_info = model.get("current_estimated_price", {}) + # Check if per_million_tokens field exists and is set to 0 for USD + if (price_info.get("per_million_tokens", {}).get("usd", 1) == 0): + model_name = model.get("name", "Unknown model") + free_models.append({ + "id": model_name, + "name": get_model_name(model_name), + "description": model.get("tagline", "") + }) + + logger.info(f"Found {len(free_models)} free models from Chutes") + return sorted(free_models, key=lambda x: x["name"]) + + def get_human_limits(model): if "limits" not in model: return "" @@ -827,6 +870,7 @@ def main(): # lambda_logger = create_logger("Lambda Labs") samba_logger = create_logger("SambaNova") scaleway_logger = create_logger("Scaleway") + chutes_logger = create_logger("Chutes") fetch_concurrently = os.getenv("FETCH_CONCURRENTLY", "false").lower() == "true" @@ -841,6 +885,7 @@ def main(): executor.submit(fetch_github_models, github_logger), executor.submit(fetch_samba_models, samba_logger), executor.submit(fetch_scaleway_models, scaleway_logger), + executor.submit(fetch_chutes_models, chutes_logger), ] ( gemini_models, @@ -851,6 +896,7 @@ def main(): github_models, samba_models, scaleway_models, + chutes_models, ) = [f.result() for f in futures] # Fetch groq models after others complete @@ -865,6 +911,7 @@ def main(): # lambda_models = fetch_lambda_models(lambda_logger) samba_models = fetch_samba_models(samba_logger) scaleway_models = fetch_scaleway_models(scaleway_logger) + chutes_models = fetch_chutes_models(chutes_logger) groq_models = fetch_groq_models(groq_logger) table = """ @@ -1040,12 +1087,16 @@ def main(): table += "" table += "\n" - table += """ - - - - - """ + for idx, model in enumerate(chutes_models): + table += "" + if idx == 0: + table += '" + table += '' + table += f"" + table += "" + table += "\n" for idx, model in enumerate(cloudflare_models): table += ""
ChutesDistributed, decentralized crypto-based compute. Data is sent to individual hosts.Various open models
' + table += 'Chutes' + table += "Distributed, decentralized crypto-based compute. Data is sent to individual hosts.{model['name']}