diff --git a/.github/workflows/refresh_model_profiles.yml b/.github/workflows/refresh_model_profiles.yml index 5c71d5ed60b..802af3c3dc1 100644 --- a/.github/workflows/refresh_model_profiles.yml +++ b/.github/workflows/refresh_model_profiles.yml @@ -36,28 +36,7 @@ jobs: - name: "🔄 Refresh profiles" working-directory: libs/model-profiles - run: | - declare -A PROVIDERS=( - [anthropic]=anthropic - [deepseek]=deepseek - [fireworks]=fireworks-ai - [groq]=groq - [huggingface]=huggingface - [mistralai]=mistral - [openai]=openai - [openrouter]=openrouter - [perplexity]=perplexity - [xai]=xai - ) - - for partner in "${!PROVIDERS[@]}"; do - provider="${PROVIDERS[$partner]}" - data_dir="../../libs/partners/${partner}/langchain_${partner//-/_}/data" - echo "--- Refreshing ${partner} (provider: ${provider}) ---" - echo y | uv run langchain-profiles refresh \ - --provider "$provider" \ - --data-dir "$data_dir" - done + run: make refresh-profiles - name: "🔑 Generate GitHub App token" id: app-token diff --git a/libs/model-profiles/Makefile b/libs/model-profiles/Makefile index 29988f3fc80..4a0d23bab22 100644 --- a/libs/model-profiles/Makefile +++ b/libs/model-profiles/Makefile @@ -1,4 +1,4 @@ -.PHONY: all format lint type test tests integration_tests help extended_tests +.PHONY: all format lint type test tests integration_tests help extended_tests refresh-profiles # Default target executed when no arguments are given to make. all: help @@ -6,6 +6,37 @@ all: help .EXPORT_ALL_VARIABLES: UV_FROZEN = true +###################### +# MODEL PROFILE REFRESH +###################### + +# Provider map: partner directory name -> models.dev provider ID. +# Used by .github/workflows/refresh_model_profiles.yml via `make refresh-profiles`. +PROFILE_PROVIDERS := \ + anthropic=anthropic \ + deepseek=deepseek \ + fireworks=fireworks-ai \ + groq=groq \ + huggingface=huggingface \ + mistralai=mistral \ + openai=openai \ + openrouter=openrouter \ + perplexity=perplexity \ + xai=xai + +# Refresh model profiles for all supported partners in libs/partners/. +# Requires network access, so UV_FROZEN is overridden for this target. +refresh-profiles: + @for entry in $(PROFILE_PROVIDERS); do \ + partner=$${entry%%=*}; \ + provider=$${entry##*=}; \ + data_dir="../partners/$${partner}/langchain_$${partner//-/_}/data"; \ + echo "--- Refreshing $${partner} (provider: $${provider}) ---"; \ + echo y | UV_FROZEN=false uv run langchain-profiles refresh \ + --provider "$${provider}" \ + --data-dir "$${data_dir}"; \ + done + # Define a variable for the test file path. TEST_FILE ?= tests/unit_tests/ @@ -66,3 +97,4 @@ help: @echo 'test - run unit tests' @echo 'tests - run unit tests' @echo 'test TEST_FILE= - run all tests in file' + @echo 'refresh-profiles - refresh model profiles for all supported partners' diff --git a/libs/model-profiles/langchain_model_profiles/cli.py b/libs/model-profiles/langchain_model_profiles/cli.py index fbdc0c7ee53..58be483edf0 100644 --- a/libs/model-profiles/langchain_model_profiles/cli.py +++ b/libs/model-profiles/langchain_model_profiles/cli.py @@ -106,6 +106,11 @@ def _model_data_to_profile(model_data: dict[str, Any]) -> dict[str, Any]: output_modalities = modalities.get("output") or [] profile = { + "name": model_data.get("name"), + "status": model_data.get("status"), + "release_date": model_data.get("release_date"), + "last_updated": model_data.get("last_updated"), + "open_weights": model_data.get("open_weights"), "max_input_tokens": limit.get("context"), "max_output_tokens": limit.get("output"), "text_inputs": "text" in input_modalities, @@ -121,6 +126,8 @@ def _model_data_to_profile(model_data: dict[str, Any]) -> dict[str, Any]: "tool_calling": model_data.get("tool_call"), "tool_choice": model_data.get("tool_choice"), "structured_output": model_data.get("structured_output"), + "attachment": model_data.get("attachment"), + "temperature": model_data.get("temperature"), "image_url_inputs": model_data.get("image_url_inputs"), "image_tool_message": model_data.get("image_tool_message"), "pdf_tool_message": model_data.get("pdf_tool_message"), diff --git a/libs/model-profiles/tests/unit_tests/test_cli.py b/libs/model-profiles/tests/unit_tests/test_cli.py index 6c962acff6b..6c265d37acc 100644 --- a/libs/model-profiles/tests/unit_tests/test_cli.py +++ b/libs/model-profiles/tests/unit_tests/test_cli.py @@ -272,6 +272,70 @@ def test_refresh_generates_sorted_profiles( assert model_ids == sorted(model_ids), f"Profile keys are not sorted: {model_ids}" +def test_model_data_to_profile_captures_all_models_dev_fields() -> None: + """Test that all models.dev fields are captured in the profile.""" + model_data = { + "id": "claude-opus-4-6", + "name": "Claude Opus 4.6", + "status": "deprecated", + "release_date": "2025-06-01", + "last_updated": "2025-07-01", + "open_weights": False, + "reasoning": True, + "tool_call": True, + "tool_choice": True, + "structured_output": True, + "attachment": True, + "temperature": True, + "limit": {"context": 200000, "output": 64000}, + "modalities": { + "input": ["text", "image", "pdf"], + "output": ["text"], + }, + } + profile = _model_data_to_profile(model_data) + + # Metadata + assert profile["name"] == "Claude Opus 4.6" + assert profile["status"] == "deprecated" + assert profile["release_date"] == "2025-06-01" + assert profile["last_updated"] == "2025-07-01" + assert profile["open_weights"] is False + + # Limits + assert profile["max_input_tokens"] == 200000 + assert profile["max_output_tokens"] == 64000 + + # Capabilities + assert profile["reasoning_output"] is True + assert profile["tool_calling"] is True + assert profile["tool_choice"] is True + assert profile["structured_output"] is True + assert profile["attachment"] is True + + # Modalities + assert profile["text_inputs"] is True + assert profile["image_inputs"] is True + assert profile["pdf_inputs"] is True + assert profile["text_outputs"] is True + + +def test_model_data_to_profile_omits_absent_fields() -> None: + """Test that fields not present in source data are omitted (not None).""" + minimal = { + "modalities": {"input": ["text"], "output": ["text"]}, + "limit": {"context": 8192, "output": 4096}, + } + profile = _model_data_to_profile(minimal) + + assert "status" not in profile + assert "family" not in profile + assert "knowledge_cutoff" not in profile + assert "cost_input" not in profile + assert "interleaved" not in profile + assert None not in profile.values() + + def test_model_data_to_profile_text_modalities() -> None: """Test that text input/output modalities are correctly mapped.""" # Model with text in both input and output diff --git a/libs/model-profiles/uv.lock b/libs/model-profiles/uv.lock index 69c56174145..92ae25886a4 100644 --- a/libs/model-profiles/uv.lock +++ b/libs/model-profiles/uv.lock @@ -459,7 +459,7 @@ wheels = [ [[package]] name = "langchain" -version = "1.2.10" +version = "1.2.12" source = { editable = "../langchain_v1" } dependencies = [ { name = "langchain-core" }, @@ -491,7 +491,7 @@ requires-dist = [ { name = "langchain-perplexity", marker = "extra == 'perplexity'" }, { name = "langchain-together", marker = "extra == 'together'" }, { name = "langchain-xai", marker = "extra == 'xai'" }, - { name = "langgraph", specifier = ">=1.0.8,<1.1.0" }, + { name = "langgraph", specifier = ">=1.1.1,<1.2.0" }, { name = "pydantic", specifier = ">=2.7.4,<3.0.0" }, ] provides-extras = ["community", "anthropic", "openai", "azure-ai", "google-vertexai", "google-genai", "fireworks", "ollama", "together", "mistralai", "huggingface", "groq", "aws", "deepseek", "xai", "perplexity"] @@ -527,7 +527,7 @@ typing = [ [[package]] name = "langchain-core" -version = "1.2.17" +version = "1.2.18" source = { editable = "../core" } dependencies = [ { name = "jsonpatch" }, @@ -655,7 +655,7 @@ typing = [ [[package]] name = "langchain-openai" -version = "1.1.10" +version = "1.1.11" source = { editable = "../partners/openai" } dependencies = [ { name = "langchain-core" }, @@ -666,7 +666,7 @@ dependencies = [ [package.metadata] requires-dist = [ { name = "langchain-core", editable = "../core" }, - { name = "openai", specifier = ">=2.20.0,<3.0.0" }, + { name = "openai", specifier = ">=2.26.0,<3.0.0" }, { name = "tiktoken", specifier = ">=0.7.0,<1.0.0" }, ] @@ -705,7 +705,7 @@ typing = [ [[package]] name = "langgraph" -version = "1.0.10rc1" +version = "1.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "langchain-core" }, @@ -715,9 +715,9 @@ dependencies = [ { name = "pydantic" }, { name = "xxhash" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/59/33/34c8ab47938ac2ac6df1d2696e28b6000e98c2a783b89655fe2261b7f93b/langgraph-1.0.10rc1.tar.gz", hash = "sha256:4042dc1f33297ccbd593bddc5a4e77dc7e0f37c7ac19d48551c53a22287bacaa", size = 511667, upload-time = "2026-02-26T20:13:38.38Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6d/1a/6dbad0c87fb39a58e5ced85297511cc4bcad06cc420b20898eecafece2a2/langgraph-1.1.1.tar.gz", hash = "sha256:cd6282efc657c955b41bff6bd9693de58137ad18f7e7f16b4d17c7d2118d53e1", size = 544040, upload-time = "2026-03-11T22:14:47.845Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/df/61/b6e7fd50c70116369874d681e3aa14bf32adbdde6c05014e5260c081452f/langgraph-1.0.10rc1-py3-none-any.whl", hash = "sha256:10750c035cc48b6809a4657ad0c9fd63fb6ee47dd2f1f2a57adb940381d096e5", size = 160950, upload-time = "2026-02-26T20:13:37.223Z" }, + { url = "https://files.pythonhosted.org/packages/dc/c1/572187bb61a534050ef2d5030e7abe46b19694ec106604fe12ddcb8672c7/langgraph-1.1.1-py3-none-any.whl", hash = "sha256:d0cc8d347131cbfc010e65aad9b0f1afbd0e151f470c288bec1f3df8336c50c6", size = 167502, upload-time = "2026-03-11T22:14:46.121Z" }, ] [[package]] @@ -908,7 +908,7 @@ wheels = [ [[package]] name = "openai" -version = "2.21.0" +version = "2.26.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, @@ -920,9 +920,9 @@ dependencies = [ { name = "tqdm" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/92/e5/3d197a0947a166649f566706d7a4c8f7fe38f1fa7b24c9bcffe4c7591d44/openai-2.21.0.tar.gz", hash = "sha256:81b48ce4b8bbb2cc3af02047ceb19561f7b1dc0d4e52d1de7f02abfd15aa59b7", size = 644374, upload-time = "2026-02-14T00:12:01.577Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/91/2a06c4e9597c338cac1e5e5a8dd6f29e1836fc229c4c523529dca387fda8/openai-2.26.0.tar.gz", hash = "sha256:b41f37c140ae0034a6e92b0c509376d907f3a66109935fba2c1b471a7c05a8fb", size = 666702, upload-time = "2026-03-05T23:17:35.874Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cc/56/0a89092a453bb2c676d66abee44f863e742b2110d4dbb1dbcca3f7e5fc33/openai-2.21.0-py3-none-any.whl", hash = "sha256:0bc1c775e5b1536c294eded39ee08f8407656537ccc71b1004104fe1602e267c", size = 1103065, upload-time = "2026-02-14T00:11:59.603Z" }, + { url = "https://files.pythonhosted.org/packages/c6/2e/3f73e8ca53718952222cacd0cf7eecc9db439d020f0c1fe7ae717e4e199a/openai-2.26.0-py3-none-any.whl", hash = "sha256:6151bf8f83802f036117f06cc8a57b3a4da60da9926826cc96747888b57f394f", size = 1136409, upload-time = "2026-03-05T23:17:34.072Z" }, ] [[package]] diff --git a/libs/partners/anthropic/langchain_anthropic/data/_profiles.py b/libs/partners/anthropic/langchain_anthropic/data/_profiles.py index a589bc2018d..4572689141b 100644 --- a/libs/partners/anthropic/langchain_anthropic/data/_profiles.py +++ b/libs/partners/anthropic/langchain_anthropic/data/_profiles.py @@ -17,6 +17,10 @@ from typing import Any _PROFILES: dict[str, dict[str, Any]] = { "claude-3-5-haiku-20241022": { + "name": "Claude Haiku 3.5", + "release_date": "2024-10-22", + "last_updated": "2024-10-22", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 8192, "text_inputs": True, @@ -30,12 +34,18 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_tool_message": True, "image_tool_message": True, "structured_output": False, }, "claude-3-5-haiku-latest": { + "name": "Claude Haiku 3.5 (latest)", + "release_date": "2024-10-22", + "last_updated": "2024-10-22", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 8192, "text_inputs": True, @@ -49,12 +59,18 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_tool_message": True, "image_tool_message": True, "structured_output": False, }, "claude-3-5-sonnet-20240620": { + "name": "Claude Sonnet 3.5", + "release_date": "2024-06-20", + "last_updated": "2024-06-20", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 8192, "text_inputs": True, @@ -68,12 +84,18 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_tool_message": True, "image_tool_message": True, "structured_output": False, }, "claude-3-5-sonnet-20241022": { + "name": "Claude Sonnet 3.5 v2", + "release_date": "2024-10-22", + "last_updated": "2024-10-22", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 8192, "text_inputs": True, @@ -87,12 +109,18 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_tool_message": True, "image_tool_message": True, "structured_output": False, }, "claude-3-7-sonnet-20250219": { + "name": "Claude Sonnet 3.7", + "release_date": "2025-02-19", + "last_updated": "2025-02-19", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 64000, "text_inputs": True, @@ -106,12 +134,18 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_tool_message": True, "image_tool_message": True, "structured_output": False, }, "claude-3-7-sonnet-latest": { + "name": "Claude Sonnet 3.7 (latest)", + "release_date": "2025-02-19", + "last_updated": "2025-02-19", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 64000, "text_inputs": True, @@ -125,12 +159,18 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_tool_message": True, "image_tool_message": True, "structured_output": False, }, "claude-3-haiku-20240307": { + "name": "Claude Haiku 3", + "release_date": "2024-03-13", + "last_updated": "2024-03-13", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 4096, "text_inputs": True, @@ -144,12 +184,18 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_tool_message": True, "image_tool_message": True, "structured_output": False, }, "claude-3-opus-20240229": { + "name": "Claude Opus 3", + "release_date": "2024-02-29", + "last_updated": "2024-02-29", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 4096, "text_inputs": True, @@ -163,12 +209,18 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_tool_message": True, "image_tool_message": True, "structured_output": False, }, "claude-3-sonnet-20240229": { + "name": "Claude Sonnet 3", + "release_date": "2024-03-04", + "last_updated": "2024-03-04", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 4096, "text_inputs": True, @@ -182,12 +234,18 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_tool_message": True, "image_tool_message": True, "structured_output": False, }, "claude-haiku-4-5": { + "name": "Claude Haiku 4.5 (latest)", + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 64000, "text_inputs": True, @@ -201,12 +259,18 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_tool_message": True, "image_tool_message": True, "structured_output": False, }, "claude-haiku-4-5-20251001": { + "name": "Claude Haiku 4.5", + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 64000, "text_inputs": True, @@ -220,12 +284,18 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_tool_message": True, "image_tool_message": True, "structured_output": False, }, "claude-opus-4-0": { + "name": "Claude Opus 4 (latest)", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 32000, "text_inputs": True, @@ -239,12 +309,18 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_tool_message": True, "image_tool_message": True, "structured_output": False, }, "claude-opus-4-1": { + "name": "Claude Opus 4.1 (latest)", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 32000, "text_inputs": True, @@ -258,12 +334,18 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_tool_message": True, "image_tool_message": True, "structured_output": True, }, "claude-opus-4-1-20250805": { + "name": "Claude Opus 4.1", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 32000, "text_inputs": True, @@ -277,12 +359,18 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_tool_message": True, "image_tool_message": True, "structured_output": False, }, "claude-opus-4-20250514": { + "name": "Claude Opus 4", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 32000, "text_inputs": True, @@ -296,12 +384,18 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_tool_message": True, "image_tool_message": True, "structured_output": False, }, "claude-opus-4-5": { + "name": "Claude Opus 4.5 (latest)", + "release_date": "2025-11-24", + "last_updated": "2025-11-24", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 64000, "text_inputs": True, @@ -315,12 +409,18 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_tool_message": True, "image_tool_message": True, "structured_output": False, }, "claude-opus-4-5-20251101": { + "name": "Claude Opus 4.5", + "release_date": "2025-11-01", + "last_updated": "2025-11-01", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 64000, "text_inputs": True, @@ -334,12 +434,18 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_tool_message": True, "image_tool_message": True, "structured_output": False, }, "claude-opus-4-6": { + "name": "Claude Opus 4.6", + "release_date": "2026-02-05", + "last_updated": "2026-02-05", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 128000, "text_inputs": True, @@ -353,12 +459,18 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_tool_message": True, "image_tool_message": True, "structured_output": False, }, "claude-sonnet-4-0": { + "name": "Claude Sonnet 4 (latest)", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 64000, "text_inputs": True, @@ -372,12 +484,18 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_tool_message": True, "image_tool_message": True, "structured_output": False, }, "claude-sonnet-4-20250514": { + "name": "Claude Sonnet 4", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 64000, "text_inputs": True, @@ -391,12 +509,18 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_tool_message": True, "image_tool_message": True, "structured_output": False, }, "claude-sonnet-4-5": { + "name": "Claude Sonnet 4.5 (latest)", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 64000, "text_inputs": True, @@ -410,12 +534,18 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_tool_message": True, "image_tool_message": True, "structured_output": True, }, "claude-sonnet-4-5-20250929": { + "name": "Claude Sonnet 4.5", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 64000, "text_inputs": True, @@ -429,12 +559,18 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_tool_message": True, "image_tool_message": True, "structured_output": False, }, "claude-sonnet-4-6": { + "name": "Claude Sonnet 4.6", + "release_date": "2026-02-17", + "last_updated": "2026-02-17", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 64000, "text_inputs": True, @@ -448,6 +584,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_tool_message": True, "image_tool_message": True, diff --git a/libs/partners/deepseek/langchain_deepseek/data/_profiles.py b/libs/partners/deepseek/langchain_deepseek/data/_profiles.py index 2da3ac16d1c..6ede10c153b 100644 --- a/libs/partners/deepseek/langchain_deepseek/data/_profiles.py +++ b/libs/partners/deepseek/langchain_deepseek/data/_profiles.py @@ -17,6 +17,10 @@ from typing import Any _PROFILES: dict[str, dict[str, Any]] = { "deepseek-chat": { + "name": "DeepSeek Chat", + "release_date": "2025-12-01", + "last_updated": "2026-02-28", + "open_weights": True, "max_input_tokens": 128000, "max_output_tokens": 8192, "text_inputs": True, @@ -29,8 +33,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": True, + "temperature": True, }, "deepseek-reasoner": { + "name": "DeepSeek Reasoner", + "release_date": "2025-12-01", + "last_updated": "2026-02-28", + "open_weights": True, "max_input_tokens": 128000, "max_output_tokens": 64000, "text_inputs": True, @@ -43,5 +53,7 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": True, + "temperature": True, }, } diff --git a/libs/partners/fireworks/langchain_fireworks/data/_profiles.py b/libs/partners/fireworks/langchain_fireworks/data/_profiles.py index e170da2cc0f..271a5e9ef75 100644 --- a/libs/partners/fireworks/langchain_fireworks/data/_profiles.py +++ b/libs/partners/fireworks/langchain_fireworks/data/_profiles.py @@ -17,6 +17,10 @@ from typing import Any _PROFILES: dict[str, dict[str, Any]] = { "accounts/fireworks/models/deepseek-v3p1": { + "name": "DeepSeek V3.1", + "release_date": "2025-08-21", + "last_updated": "2025-08-21", + "open_weights": True, "max_input_tokens": 163840, "max_output_tokens": 163840, "text_inputs": True, @@ -29,8 +33,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "accounts/fireworks/models/deepseek-v3p2": { + "name": "DeepSeek V3.2", + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "open_weights": True, "max_input_tokens": 160000, "max_output_tokens": 160000, "text_inputs": True, @@ -43,8 +53,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "accounts/fireworks/models/glm-4p5": { + "name": "GLM 4.5", + "release_date": "2025-07-29", + "last_updated": "2025-07-29", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 131072, "text_inputs": True, @@ -57,8 +73,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "accounts/fireworks/models/glm-4p5-air": { + "name": "GLM 4.5 Air", + "release_date": "2025-08-01", + "last_updated": "2025-08-01", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 131072, "text_inputs": True, @@ -71,8 +93,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "accounts/fireworks/models/glm-4p7": { + "name": "GLM 4.7", + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "open_weights": True, "max_input_tokens": 198000, "max_output_tokens": 198000, "text_inputs": True, @@ -85,8 +113,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "accounts/fireworks/models/glm-5": { + "name": "GLM 5", + "release_date": "2026-02-11", + "last_updated": "2026-02-11", + "open_weights": True, "max_input_tokens": 202752, "max_output_tokens": 131072, "text_inputs": True, @@ -99,8 +133,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "accounts/fireworks/models/gpt-oss-120b": { + "name": "GPT OSS 120B", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 32768, "text_inputs": True, @@ -113,8 +153,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "accounts/fireworks/models/gpt-oss-20b": { + "name": "GPT OSS 20B", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 32768, "text_inputs": True, @@ -127,8 +173,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "accounts/fireworks/models/kimi-k2-instruct": { + "name": "Kimi K2 Instruct", + "release_date": "2025-07-11", + "last_updated": "2025-07-11", + "open_weights": True, "max_input_tokens": 128000, "max_output_tokens": 16384, "text_inputs": True, @@ -141,8 +193,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "accounts/fireworks/models/kimi-k2-thinking": { + "name": "Kimi K2 Thinking", + "release_date": "2025-11-06", + "last_updated": "2025-11-06", + "open_weights": True, "max_input_tokens": 256000, "max_output_tokens": 256000, "text_inputs": True, @@ -155,8 +213,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "accounts/fireworks/models/kimi-k2p5": { + "name": "Kimi K2.5", + "release_date": "2026-01-27", + "last_updated": "2026-01-27", + "open_weights": True, "max_input_tokens": 256000, "max_output_tokens": 256000, "text_inputs": True, @@ -169,8 +233,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "accounts/fireworks/models/minimax-m2p1": { + "name": "MiniMax-M2.1", + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "open_weights": True, "max_input_tokens": 200000, "max_output_tokens": 200000, "text_inputs": True, @@ -183,8 +253,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "accounts/fireworks/models/minimax-m2p5": { + "name": "MiniMax-M2.5", + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "open_weights": True, "max_input_tokens": 196608, "max_output_tokens": 196608, "text_inputs": True, @@ -197,5 +273,7 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, } diff --git a/libs/partners/groq/langchain_groq/data/_profiles.py b/libs/partners/groq/langchain_groq/data/_profiles.py index c8e31e8a38a..a3eb8ac0dd7 100644 --- a/libs/partners/groq/langchain_groq/data/_profiles.py +++ b/libs/partners/groq/langchain_groq/data/_profiles.py @@ -17,6 +17,11 @@ from typing import Any _PROFILES: dict[str, dict[str, Any]] = { "deepseek-r1-distill-llama-70b": { + "name": "DeepSeek R1 Distill Llama 70B", + "status": "deprecated", + "release_date": "2025-01-20", + "last_updated": "2025-01-20", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 8192, "text_inputs": True, @@ -29,8 +34,15 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "gemma2-9b-it": { + "name": "Gemma 2 9B", + "status": "deprecated", + "release_date": "2024-06-27", + "last_updated": "2024-06-27", + "open_weights": True, "max_input_tokens": 8192, "max_output_tokens": 8192, "text_inputs": True, @@ -43,8 +55,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "llama-3.1-8b-instant": { + "name": "Llama 3.1 8B Instant", + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 131072, "text_inputs": True, @@ -57,8 +75,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "llama-3.3-70b-versatile": { + "name": "Llama 3.3 70B Versatile", + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 32768, "text_inputs": True, @@ -71,8 +95,15 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "llama-guard-3-8b": { + "name": "Llama Guard 3 8B", + "status": "deprecated", + "release_date": "2024-07-23", + "last_updated": "2024-07-23", + "open_weights": True, "max_input_tokens": 8192, "max_output_tokens": 8192, "text_inputs": True, @@ -85,8 +116,15 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": False, + "attachment": False, + "temperature": True, }, "llama3-70b-8192": { + "name": "Llama 3 70B", + "status": "deprecated", + "release_date": "2024-04-18", + "last_updated": "2024-04-18", + "open_weights": True, "max_input_tokens": 8192, "max_output_tokens": 8192, "text_inputs": True, @@ -99,8 +137,15 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "llama3-8b-8192": { + "name": "Llama 3 8B", + "status": "deprecated", + "release_date": "2024-04-18", + "last_updated": "2024-04-18", + "open_weights": True, "max_input_tokens": 8192, "max_output_tokens": 8192, "text_inputs": True, @@ -113,8 +158,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "meta-llama/llama-4-maverick-17b-128e-instruct": { + "name": "Llama 4 Maverick 17B", + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 8192, "text_inputs": True, @@ -128,8 +179,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "meta-llama/llama-4-scout-17b-16e-instruct": { + "name": "Llama 4 Scout 17B", + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 8192, "text_inputs": True, @@ -143,8 +200,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "meta-llama/llama-guard-4-12b": { + "name": "Llama Guard 4 12B", + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 1024, "text_inputs": True, @@ -157,8 +220,15 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": False, + "attachment": False, + "temperature": True, }, "mistral-saba-24b": { + "name": "Mistral Saba 24B", + "status": "deprecated", + "release_date": "2025-02-06", + "last_updated": "2025-02-06", + "open_weights": False, "max_input_tokens": 32768, "max_output_tokens": 32768, "text_inputs": True, @@ -171,8 +241,15 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "moonshotai/kimi-k2-instruct": { + "name": "Kimi K2 Instruct", + "status": "deprecated", + "release_date": "2025-07-14", + "last_updated": "2025-07-14", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 16384, "text_inputs": True, @@ -185,8 +262,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "moonshotai/kimi-k2-instruct-0905": { + "name": "Kimi K2 Instruct 0905", + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "open_weights": True, "max_input_tokens": 262144, "max_output_tokens": 16384, "text_inputs": True, @@ -200,8 +283,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "openai/gpt-oss-120b": { + "name": "GPT OSS 120B", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 65536, "text_inputs": True, @@ -215,8 +304,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "openai/gpt-oss-20b": { + "name": "GPT OSS 20B", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 65536, "text_inputs": True, @@ -230,8 +325,15 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "qwen-qwq-32b": { + "name": "Qwen QwQ 32B", + "status": "deprecated", + "release_date": "2024-11-27", + "last_updated": "2024-11-27", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 16384, "text_inputs": True, @@ -244,8 +346,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "qwen/qwen3-32b": { + "name": "Qwen3 32B", + "release_date": "2024-12-23", + "last_updated": "2024-12-23", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 16384, "text_inputs": True, @@ -258,5 +366,7 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, } diff --git a/libs/partners/huggingface/langchain_huggingface/data/_profiles.py b/libs/partners/huggingface/langchain_huggingface/data/_profiles.py index 79435997ac9..ab04aa6801b 100644 --- a/libs/partners/huggingface/langchain_huggingface/data/_profiles.py +++ b/libs/partners/huggingface/langchain_huggingface/data/_profiles.py @@ -17,6 +17,10 @@ from typing import Any _PROFILES: dict[str, dict[str, Any]] = { "MiniMaxAI/MiniMax-M2.1": { + "name": "MiniMax-M2.1", + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "open_weights": True, "max_input_tokens": 204800, "max_output_tokens": 131072, "text_inputs": True, @@ -29,8 +33,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "MiniMaxAI/MiniMax-M2.5": { + "name": "MiniMax-M2.5", + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "open_weights": True, "max_input_tokens": 204800, "max_output_tokens": 131072, "text_inputs": True, @@ -43,8 +53,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "Qwen/Qwen3-235B-A22B-Thinking-2507": { + "name": "Qwen3-235B-A22B-Thinking-2507", + "release_date": "2025-07-25", + "last_updated": "2025-07-25", + "open_weights": True, "max_input_tokens": 262144, "max_output_tokens": 131072, "text_inputs": True, @@ -57,8 +73,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "Qwen/Qwen3-Coder-480B-A35B-Instruct": { + "name": "Qwen3-Coder-480B-A35B-Instruct", + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "open_weights": True, "max_input_tokens": 262144, "max_output_tokens": 66536, "text_inputs": True, @@ -71,8 +93,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "Qwen/Qwen3-Coder-Next": { + "name": "Qwen3-Coder-Next", + "release_date": "2026-02-03", + "last_updated": "2026-02-03", + "open_weights": True, "max_input_tokens": 262144, "max_output_tokens": 65536, "text_inputs": True, @@ -85,8 +113,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "Qwen/Qwen3-Embedding-4B": { + "name": "Qwen 3 Embedding 4B", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "open_weights": True, "max_input_tokens": 32000, "max_output_tokens": 2048, "text_inputs": True, @@ -99,8 +133,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": False, + "attachment": False, + "temperature": False, }, "Qwen/Qwen3-Embedding-8B": { + "name": "Qwen 3 Embedding 8B", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", + "open_weights": True, "max_input_tokens": 32000, "max_output_tokens": 4096, "text_inputs": True, @@ -113,8 +153,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": False, + "attachment": False, + "temperature": False, }, "Qwen/Qwen3-Next-80B-A3B-Instruct": { + "name": "Qwen3-Next-80B-A3B-Instruct", + "release_date": "2025-09-11", + "last_updated": "2025-09-11", + "open_weights": True, "max_input_tokens": 262144, "max_output_tokens": 66536, "text_inputs": True, @@ -127,8 +173,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "Qwen/Qwen3-Next-80B-A3B-Thinking": { + "name": "Qwen3-Next-80B-A3B-Thinking", + "release_date": "2025-09-11", + "last_updated": "2025-09-11", + "open_weights": True, "max_input_tokens": 262144, "max_output_tokens": 131072, "text_inputs": True, @@ -141,8 +193,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "Qwen/Qwen3.5-397B-A17B": { + "name": "Qwen3.5-397B-A17B", + "release_date": "2026-02-01", + "last_updated": "2026-02-01", + "open_weights": True, "max_input_tokens": 262144, "max_output_tokens": 32768, "text_inputs": True, @@ -155,8 +213,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": True, + "temperature": True, }, "XiaomiMiMo/MiMo-V2-Flash": { + "name": "MiMo-V2-Flash", + "release_date": "2025-12-16", + "last_updated": "2025-12-16", + "open_weights": True, "max_input_tokens": 262144, "max_output_tokens": 4096, "text_inputs": True, @@ -169,8 +233,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "deepseek-ai/DeepSeek-R1-0528": { + "name": "DeepSeek-R1-0528", + "release_date": "2025-05-28", + "last_updated": "2025-05-28", + "open_weights": True, "max_input_tokens": 163840, "max_output_tokens": 163840, "text_inputs": True, @@ -183,8 +253,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "deepseek-ai/DeepSeek-V3.2": { + "name": "DeepSeek-V3.2", + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "open_weights": True, "max_input_tokens": 163840, "max_output_tokens": 65536, "text_inputs": True, @@ -197,8 +273,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "moonshotai/Kimi-K2-Instruct": { + "name": "Kimi-K2-Instruct", + "release_date": "2025-07-14", + "last_updated": "2025-07-14", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 16384, "text_inputs": True, @@ -211,8 +293,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "moonshotai/Kimi-K2-Instruct-0905": { + "name": "Kimi-K2-Instruct-0905", + "release_date": "2025-09-04", + "last_updated": "2025-09-04", + "open_weights": True, "max_input_tokens": 262144, "max_output_tokens": 16384, "text_inputs": True, @@ -225,8 +313,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "moonshotai/Kimi-K2-Thinking": { + "name": "Kimi-K2-Thinking", + "release_date": "2025-11-06", + "last_updated": "2025-11-06", + "open_weights": True, "max_input_tokens": 262144, "max_output_tokens": 262144, "text_inputs": True, @@ -239,8 +333,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "moonshotai/Kimi-K2.5": { + "name": "Kimi-K2.5", + "release_date": "2026-01-01", + "last_updated": "2026-01-01", + "open_weights": True, "max_input_tokens": 262144, "max_output_tokens": 262144, "text_inputs": True, @@ -253,8 +353,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": True, + "temperature": True, }, "zai-org/GLM-4.7": { + "name": "GLM-4.7", + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "open_weights": True, "max_input_tokens": 204800, "max_output_tokens": 131072, "text_inputs": True, @@ -267,8 +373,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "zai-org/GLM-4.7-Flash": { + "name": "GLM-4.7-Flash", + "release_date": "2025-08-08", + "last_updated": "2025-08-08", + "open_weights": True, "max_input_tokens": 200000, "max_output_tokens": 128000, "text_inputs": True, @@ -281,8 +393,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "zai-org/GLM-5": { + "name": "GLM-5", + "release_date": "2026-02-11", + "last_updated": "2026-02-11", + "open_weights": True, "max_input_tokens": 202752, "max_output_tokens": 131072, "text_inputs": True, @@ -295,5 +413,7 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, } diff --git a/libs/partners/mistralai/langchain_mistralai/data/_profiles.py b/libs/partners/mistralai/langchain_mistralai/data/_profiles.py index d0b68d2b7f9..d83d55ab0a0 100644 --- a/libs/partners/mistralai/langchain_mistralai/data/_profiles.py +++ b/libs/partners/mistralai/langchain_mistralai/data/_profiles.py @@ -17,6 +17,10 @@ from typing import Any _PROFILES: dict[str, dict[str, Any]] = { "codestral-latest": { + "name": "Codestral (latest)", + "release_date": "2024-05-29", + "last_updated": "2025-01-04", + "open_weights": True, "max_input_tokens": 256000, "max_output_tokens": 4096, "text_inputs": True, @@ -29,8 +33,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "devstral-2512": { + "name": "Devstral 2", + "release_date": "2025-12-09", + "last_updated": "2025-12-09", + "open_weights": True, "max_input_tokens": 262144, "max_output_tokens": 262144, "text_inputs": True, @@ -43,8 +53,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "devstral-medium-2507": { + "name": "Devstral Medium", + "release_date": "2025-07-10", + "last_updated": "2025-07-10", + "open_weights": True, "max_input_tokens": 128000, "max_output_tokens": 128000, "text_inputs": True, @@ -57,8 +73,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "devstral-medium-latest": { + "name": "Devstral 2 (latest)", + "release_date": "2025-12-02", + "last_updated": "2025-12-02", + "open_weights": True, "max_input_tokens": 262144, "max_output_tokens": 262144, "text_inputs": True, @@ -71,8 +93,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "devstral-small-2505": { + "name": "Devstral Small 2505", + "release_date": "2025-05-07", + "last_updated": "2025-05-07", + "open_weights": True, "max_input_tokens": 128000, "max_output_tokens": 128000, "text_inputs": True, @@ -85,8 +113,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "devstral-small-2507": { + "name": "Devstral Small", + "release_date": "2025-07-10", + "last_updated": "2025-07-10", + "open_weights": True, "max_input_tokens": 128000, "max_output_tokens": 128000, "text_inputs": True, @@ -99,8 +133,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "labs-devstral-small-2512": { + "name": "Devstral Small 2", + "release_date": "2025-12-09", + "last_updated": "2025-12-09", + "open_weights": True, "max_input_tokens": 256000, "max_output_tokens": 256000, "text_inputs": True, @@ -113,8 +153,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "magistral-medium-latest": { + "name": "Magistral Medium (latest)", + "release_date": "2025-03-17", + "last_updated": "2025-03-20", + "open_weights": True, "max_input_tokens": 128000, "max_output_tokens": 16384, "text_inputs": True, @@ -127,8 +173,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "magistral-small": { + "name": "Magistral Small", + "release_date": "2025-03-17", + "last_updated": "2025-03-17", + "open_weights": True, "max_input_tokens": 128000, "max_output_tokens": 128000, "text_inputs": True, @@ -141,8 +193,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "ministral-3b-latest": { + "name": "Ministral 3B (latest)", + "release_date": "2024-10-01", + "last_updated": "2024-10-04", + "open_weights": True, "max_input_tokens": 128000, "max_output_tokens": 128000, "text_inputs": True, @@ -155,8 +213,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "ministral-8b-latest": { + "name": "Ministral 8B (latest)", + "release_date": "2024-10-01", + "last_updated": "2024-10-04", + "open_weights": True, "max_input_tokens": 128000, "max_output_tokens": 128000, "text_inputs": True, @@ -169,8 +233,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "mistral-embed": { + "name": "Mistral Embed", + "release_date": "2023-12-11", + "last_updated": "2023-12-11", + "open_weights": False, "max_input_tokens": 8000, "max_output_tokens": 3072, "text_inputs": True, @@ -183,8 +253,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": False, + "attachment": False, + "temperature": False, }, "mistral-large-2411": { + "name": "Mistral Large 2.1", + "release_date": "2024-11-01", + "last_updated": "2024-11-04", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 16384, "text_inputs": True, @@ -197,8 +273,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "mistral-large-2512": { + "name": "Mistral Large 3", + "release_date": "2024-11-01", + "last_updated": "2025-12-02", + "open_weights": True, "max_input_tokens": 262144, "max_output_tokens": 262144, "text_inputs": True, @@ -211,8 +293,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": True, + "temperature": True, }, "mistral-large-latest": { + "name": "Mistral Large (latest)", + "release_date": "2024-11-01", + "last_updated": "2025-12-02", + "open_weights": True, "max_input_tokens": 262144, "max_output_tokens": 262144, "text_inputs": True, @@ -225,8 +313,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": True, + "temperature": True, }, "mistral-medium-2505": { + "name": "Mistral Medium 3", + "release_date": "2025-05-07", + "last_updated": "2025-05-07", + "open_weights": False, "max_input_tokens": 131072, "max_output_tokens": 131072, "text_inputs": True, @@ -239,8 +333,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": True, + "temperature": True, }, "mistral-medium-2508": { + "name": "Mistral Medium 3.1", + "release_date": "2025-08-12", + "last_updated": "2025-08-12", + "open_weights": False, "max_input_tokens": 262144, "max_output_tokens": 262144, "text_inputs": True, @@ -253,8 +353,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": True, + "temperature": True, }, "mistral-medium-latest": { + "name": "Mistral Medium (latest)", + "release_date": "2025-05-07", + "last_updated": "2025-05-10", + "open_weights": True, "max_input_tokens": 128000, "max_output_tokens": 16384, "text_inputs": True, @@ -267,8 +373,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "mistral-nemo": { + "name": "Mistral Nemo", + "release_date": "2024-07-01", + "last_updated": "2024-07-01", + "open_weights": True, "max_input_tokens": 128000, "max_output_tokens": 128000, "text_inputs": True, @@ -281,8 +393,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "mistral-small-2506": { + "name": "Mistral Small 3.2", + "release_date": "2025-06-20", + "last_updated": "2025-06-20", + "open_weights": True, "max_input_tokens": 128000, "max_output_tokens": 16384, "text_inputs": True, @@ -295,8 +413,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "mistral-small-latest": { + "name": "Mistral Small (latest)", + "release_date": "2024-09-01", + "last_updated": "2024-09-04", + "open_weights": True, "max_input_tokens": 128000, "max_output_tokens": 16384, "text_inputs": True, @@ -309,8 +433,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "open-mistral-7b": { + "name": "Mistral 7B", + "release_date": "2023-09-27", + "last_updated": "2023-09-27", + "open_weights": True, "max_input_tokens": 8000, "max_output_tokens": 8000, "text_inputs": True, @@ -323,8 +453,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "open-mixtral-8x22b": { + "name": "Mixtral 8x22B", + "release_date": "2024-04-17", + "last_updated": "2024-04-17", + "open_weights": True, "max_input_tokens": 64000, "max_output_tokens": 64000, "text_inputs": True, @@ -337,8 +473,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "open-mixtral-8x7b": { + "name": "Mixtral 8x7B", + "release_date": "2023-12-11", + "last_updated": "2023-12-11", + "open_weights": True, "max_input_tokens": 32000, "max_output_tokens": 32000, "text_inputs": True, @@ -351,8 +493,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "pixtral-12b": { + "name": "Pixtral 12B", + "release_date": "2024-09-01", + "last_updated": "2024-09-01", + "open_weights": True, "max_input_tokens": 128000, "max_output_tokens": 128000, "text_inputs": True, @@ -365,8 +513,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": True, + "temperature": True, }, "pixtral-large-latest": { + "name": "Pixtral Large (latest)", + "release_date": "2024-11-01", + "last_updated": "2024-11-04", + "open_weights": True, "max_input_tokens": 128000, "max_output_tokens": 128000, "text_inputs": True, @@ -379,5 +533,7 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": True, + "temperature": True, }, } diff --git a/libs/partners/openai/langchain_openai/data/_profiles.py b/libs/partners/openai/langchain_openai/data/_profiles.py index a24883aa683..909f5813b2f 100644 --- a/libs/partners/openai/langchain_openai/data/_profiles.py +++ b/libs/partners/openai/langchain_openai/data/_profiles.py @@ -17,6 +17,10 @@ from typing import Any _PROFILES: dict[str, dict[str, Any]] = { "codex-mini-latest": { + "name": "Codex Mini", + "release_date": "2025-05-16", + "last_updated": "2025-05-16", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 100000, "text_inputs": True, @@ -29,6 +33,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": True, + "temperature": False, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -36,6 +42,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "gpt-3.5-turbo": { + "name": "GPT-3.5-turbo", + "release_date": "2023-03-01", + "last_updated": "2023-11-06", + "open_weights": False, "max_input_tokens": 16385, "max_output_tokens": 4096, "text_inputs": True, @@ -49,6 +59,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": False, "structured_output": False, + "attachment": False, + "temperature": True, "image_url_inputs": False, "pdf_inputs": False, "pdf_tool_message": False, @@ -56,6 +68,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "gpt-4": { + "name": "GPT-4", + "release_date": "2023-11-06", + "last_updated": "2024-04-09", + "open_weights": False, "max_input_tokens": 8192, "max_output_tokens": 8192, "text_inputs": True, @@ -69,6 +85,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": False, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -76,6 +94,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "gpt-4-turbo": { + "name": "GPT-4 Turbo", + "release_date": "2023-11-06", + "last_updated": "2024-04-09", + "open_weights": False, "max_input_tokens": 128000, "max_output_tokens": 4096, "text_inputs": True, @@ -89,6 +111,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": False, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -96,6 +120,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "gpt-4.1": { + "name": "GPT-4.1", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "open_weights": False, "max_input_tokens": 1047576, "max_output_tokens": 32768, "text_inputs": True, @@ -109,6 +137,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -116,6 +146,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "gpt-4.1-mini": { + "name": "GPT-4.1 mini", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "open_weights": False, "max_input_tokens": 1047576, "max_output_tokens": 32768, "text_inputs": True, @@ -129,6 +163,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -136,6 +172,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "gpt-4.1-nano": { + "name": "GPT-4.1 nano", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "open_weights": False, "max_input_tokens": 1047576, "max_output_tokens": 32768, "text_inputs": True, @@ -149,6 +189,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -156,6 +198,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "gpt-4o": { + "name": "GPT-4o", + "release_date": "2024-05-13", + "last_updated": "2024-08-06", + "open_weights": False, "max_input_tokens": 128000, "max_output_tokens": 16384, "text_inputs": True, @@ -169,6 +215,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -176,6 +224,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "gpt-4o-2024-05-13": { + "name": "GPT-4o (2024-05-13)", + "release_date": "2024-05-13", + "last_updated": "2024-05-13", + "open_weights": False, "max_input_tokens": 128000, "max_output_tokens": 4096, "text_inputs": True, @@ -189,6 +241,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -196,6 +250,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "gpt-4o-2024-08-06": { + "name": "GPT-4o (2024-08-06)", + "release_date": "2024-08-06", + "last_updated": "2024-08-06", + "open_weights": False, "max_input_tokens": 128000, "max_output_tokens": 16384, "text_inputs": True, @@ -209,6 +267,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -216,6 +276,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "gpt-4o-2024-11-20": { + "name": "GPT-4o (2024-11-20)", + "release_date": "2024-11-20", + "last_updated": "2024-11-20", + "open_weights": False, "max_input_tokens": 128000, "max_output_tokens": 16384, "text_inputs": True, @@ -229,6 +293,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -236,6 +302,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "gpt-4o-mini": { + "name": "GPT-4o mini", + "release_date": "2024-07-18", + "last_updated": "2024-07-18", + "open_weights": False, "max_input_tokens": 128000, "max_output_tokens": 16384, "text_inputs": True, @@ -249,6 +319,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -256,6 +328,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "gpt-5": { + "name": "GPT-5", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "open_weights": False, "max_input_tokens": 272000, "max_output_tokens": 128000, "text_inputs": True, @@ -269,6 +345,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": False, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -276,6 +354,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "gpt-5-chat-latest": { + "name": "GPT-5 Chat (latest)", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "open_weights": False, "max_input_tokens": 272000, "max_output_tokens": 128000, "text_inputs": True, @@ -289,6 +371,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": False, "structured_output": True, + "attachment": True, + "temperature": True, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -296,6 +380,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "gpt-5-codex": { + "name": "GPT-5-Codex", + "release_date": "2025-09-15", + "last_updated": "2025-09-15", + "open_weights": False, "max_input_tokens": 272000, "max_output_tokens": 128000, "text_inputs": True, @@ -309,6 +397,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": False, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -316,6 +406,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "gpt-5-mini": { + "name": "GPT-5 Mini", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "open_weights": False, "max_input_tokens": 272000, "max_output_tokens": 128000, "text_inputs": True, @@ -329,6 +423,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": False, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -336,6 +432,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "gpt-5-nano": { + "name": "GPT-5 Nano", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "open_weights": False, "max_input_tokens": 272000, "max_output_tokens": 128000, "text_inputs": True, @@ -349,6 +449,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": False, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -356,6 +458,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "gpt-5-pro": { + "name": "GPT-5 Pro", + "release_date": "2025-10-06", + "last_updated": "2025-10-06", + "open_weights": False, "max_input_tokens": 272000, "max_output_tokens": 272000, "text_inputs": True, @@ -369,6 +475,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": False, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -376,6 +484,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "gpt-5.1": { + "name": "GPT-5.1", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "open_weights": False, "max_input_tokens": 272000, "max_output_tokens": 128000, "text_inputs": True, @@ -389,6 +501,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": False, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -396,6 +510,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "gpt-5.1-chat-latest": { + "name": "GPT-5.1 Chat", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "open_weights": False, "max_input_tokens": 272000, "max_output_tokens": 16384, "text_inputs": True, @@ -409,6 +527,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": False, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -416,6 +536,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "gpt-5.1-codex": { + "name": "GPT-5.1 Codex", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "open_weights": False, "max_input_tokens": 272000, "max_output_tokens": 128000, "text_inputs": True, @@ -429,6 +553,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": False, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -436,6 +562,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "gpt-5.1-codex-max": { + "name": "GPT-5.1 Codex Max", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "open_weights": False, "max_input_tokens": 272000, "max_output_tokens": 128000, "text_inputs": True, @@ -449,6 +579,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": False, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -456,6 +588,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "gpt-5.1-codex-mini": { + "name": "GPT-5.1 Codex mini", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "open_weights": False, "max_input_tokens": 272000, "max_output_tokens": 128000, "text_inputs": True, @@ -469,6 +605,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": False, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -476,6 +614,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "gpt-5.2": { + "name": "GPT-5.2", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "open_weights": False, "max_input_tokens": 272000, "max_output_tokens": 128000, "text_inputs": True, @@ -489,6 +631,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": False, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -496,6 +640,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "gpt-5.2-chat-latest": { + "name": "GPT-5.2 Chat", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "open_weights": False, "max_input_tokens": 272000, "max_output_tokens": 16384, "text_inputs": True, @@ -509,6 +657,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": False, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -516,6 +666,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "gpt-5.2-codex": { + "name": "GPT-5.2 Codex", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "open_weights": False, "max_input_tokens": 400000, "max_output_tokens": 128000, "text_inputs": True, @@ -530,12 +684,18 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": False, "image_url_inputs": True, "pdf_tool_message": True, "image_tool_message": True, "tool_choice": True, }, "gpt-5.2-pro": { + "name": "GPT-5.2 Pro", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "open_weights": False, "max_input_tokens": 272000, "max_output_tokens": 128000, "text_inputs": True, @@ -549,6 +709,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": False, + "attachment": True, + "temperature": False, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -556,6 +718,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "gpt-5.3-codex": { + "name": "GPT-5.3 Codex", + "release_date": "2026-02-05", + "last_updated": "2026-02-05", + "open_weights": False, "max_input_tokens": 400000, "max_output_tokens": 128000, "text_inputs": True, @@ -570,12 +736,18 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": False, "image_url_inputs": True, "pdf_tool_message": True, "image_tool_message": True, "tool_choice": True, }, "gpt-5.3-codex-spark": { + "name": "GPT-5.3 Codex Spark", + "release_date": "2026-02-05", + "last_updated": "2026-02-05", + "open_weights": False, "max_input_tokens": 128000, "max_output_tokens": 32000, "text_inputs": True, @@ -590,12 +762,18 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": False, "image_url_inputs": True, "pdf_tool_message": True, "image_tool_message": True, "tool_choice": True, }, "gpt-5.4": { + "name": "GPT-5.4", + "release_date": "2026-03-05", + "last_updated": "2026-03-05", + "open_weights": False, "max_input_tokens": 1050000, "max_output_tokens": 128000, "text_inputs": True, @@ -610,12 +788,18 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": False, "image_url_inputs": True, "pdf_tool_message": True, "image_tool_message": True, "tool_choice": True, }, "gpt-5.4-pro": { + "name": "GPT-5.4 Pro", + "release_date": "2026-03-05", + "last_updated": "2026-03-05", + "open_weights": False, "max_input_tokens": 1050000, "max_output_tokens": 128000, "text_inputs": True, @@ -629,6 +813,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": False, + "attachment": True, + "temperature": False, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -636,6 +822,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "o1": { + "name": "o1", + "release_date": "2024-12-05", + "last_updated": "2024-12-05", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 100000, "text_inputs": True, @@ -649,6 +839,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": False, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -656,6 +848,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "o1-mini": { + "name": "o1-mini", + "release_date": "2024-09-12", + "last_updated": "2024-09-12", + "open_weights": False, "max_input_tokens": 128000, "max_output_tokens": 65536, "text_inputs": True, @@ -669,6 +865,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": False, "structured_output": True, + "attachment": False, + "temperature": False, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -676,6 +874,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "o1-preview": { + "name": "o1-preview", + "release_date": "2024-09-12", + "last_updated": "2024-09-12", + "open_weights": False, "max_input_tokens": 128000, "max_output_tokens": 32768, "text_inputs": True, @@ -688,6 +890,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": False, + "attachment": False, + "temperature": True, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -695,6 +899,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "o1-pro": { + "name": "o1-pro", + "release_date": "2025-03-19", + "last_updated": "2025-03-19", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 100000, "text_inputs": True, @@ -708,6 +916,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": False, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -715,6 +925,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "o3": { + "name": "o3", + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 100000, "text_inputs": True, @@ -728,6 +942,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": False, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -735,6 +951,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "o3-deep-research": { + "name": "o3-deep-research", + "release_date": "2024-06-26", + "last_updated": "2024-06-26", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 100000, "text_inputs": True, @@ -747,6 +967,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": True, + "temperature": False, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -754,6 +976,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "o3-mini": { + "name": "o3-mini", + "release_date": "2024-12-20", + "last_updated": "2025-01-29", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 100000, "text_inputs": True, @@ -767,6 +993,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": False, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -774,6 +1002,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "o3-pro": { + "name": "o3-pro", + "release_date": "2025-06-10", + "last_updated": "2025-06-10", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 100000, "text_inputs": True, @@ -787,6 +1019,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": False, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -794,6 +1028,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "o4-mini": { + "name": "o4-mini", + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 100000, "text_inputs": True, @@ -807,6 +1045,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": False, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -814,6 +1054,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "o4-mini-deep-research": { + "name": "o4-mini-deep-research", + "release_date": "2024-06-26", + "last_updated": "2024-06-26", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 100000, "text_inputs": True, @@ -826,6 +1070,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": True, + "temperature": False, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -833,6 +1079,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "text-embedding-3-large": { + "name": "text-embedding-3-large", + "release_date": "2024-01-25", + "last_updated": "2024-01-25", + "open_weights": False, "max_input_tokens": 8191, "max_output_tokens": 3072, "text_inputs": True, @@ -845,6 +1095,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": False, + "attachment": False, + "temperature": False, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -852,6 +1104,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "text-embedding-3-small": { + "name": "text-embedding-3-small", + "release_date": "2024-01-25", + "last_updated": "2024-01-25", + "open_weights": False, "max_input_tokens": 8191, "max_output_tokens": 1536, "text_inputs": True, @@ -864,6 +1120,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": False, + "attachment": False, + "temperature": False, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, @@ -871,6 +1129,10 @@ _PROFILES: dict[str, dict[str, Any]] = { "tool_choice": True, }, "text-embedding-ada-002": { + "name": "text-embedding-ada-002", + "release_date": "2022-12-15", + "last_updated": "2022-12-15", + "open_weights": False, "max_input_tokens": 8192, "max_output_tokens": 1536, "text_inputs": True, @@ -883,6 +1145,8 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": False, + "attachment": False, + "temperature": False, "image_url_inputs": True, "pdf_inputs": True, "pdf_tool_message": True, diff --git a/libs/partners/openrouter/langchain_openrouter/data/_profiles.py b/libs/partners/openrouter/langchain_openrouter/data/_profiles.py index 8a6647ee7b7..e064e561966 100644 --- a/libs/partners/openrouter/langchain_openrouter/data/_profiles.py +++ b/libs/partners/openrouter/langchain_openrouter/data/_profiles.py @@ -17,6 +17,10 @@ from typing import Any _PROFILES: dict[str, dict[str, Any]] = { "allenai/molmo-2-8b:free": { + "name": "Molmo2 8B (free)", + "release_date": "2026-01-09", + "last_updated": "2026-01-31", + "open_weights": True, "max_input_tokens": 36864, "max_output_tokens": 36864, "text_inputs": True, @@ -29,8 +33,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": False, + "attachment": False, + "temperature": True, }, "anthropic/claude-3.5-haiku": { + "name": "Claude Haiku 3.5", + "release_date": "2024-10-22", + "last_updated": "2024-10-22", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 8192, "text_inputs": True, @@ -44,8 +54,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": True, + "temperature": True, }, "anthropic/claude-3.7-sonnet": { + "name": "Claude Sonnet 3.7", + "release_date": "2025-02-19", + "last_updated": "2025-02-19", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 128000, "text_inputs": True, @@ -59,8 +75,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": True, + "temperature": True, }, "anthropic/claude-haiku-4.5": { + "name": "Claude Haiku 4.5", + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 64000, "text_inputs": True, @@ -75,8 +97,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "anthropic/claude-opus-4": { + "name": "Claude Opus 4", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 32000, "text_inputs": True, @@ -90,8 +118,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": True, + "temperature": True, }, "anthropic/claude-opus-4.1": { + "name": "Claude Opus 4.1", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 32000, "text_inputs": True, @@ -106,8 +140,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "anthropic/claude-opus-4.5": { + "name": "Claude Opus 4.5", + "release_date": "2025-11-24", + "last_updated": "2025-11-24", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 32000, "text_inputs": True, @@ -122,8 +162,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "anthropic/claude-opus-4.6": { + "name": "Claude Opus 4.6", + "release_date": "2026-02-05", + "last_updated": "2026-02-05", + "open_weights": False, "max_input_tokens": 1000000, "max_output_tokens": 128000, "text_inputs": True, @@ -138,8 +184,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "anthropic/claude-sonnet-4": { + "name": "Claude Sonnet 4", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 64000, "text_inputs": True, @@ -153,8 +205,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": True, + "temperature": True, }, "anthropic/claude-sonnet-4.5": { + "name": "Claude Sonnet 4.5", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "open_weights": False, "max_input_tokens": 1000000, "max_output_tokens": 64000, "text_inputs": True, @@ -169,8 +227,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "anthropic/claude-sonnet-4.6": { + "name": "Claude Sonnet 4.6", + "release_date": "2026-02-17", + "last_updated": "2026-02-17", + "open_weights": False, "max_input_tokens": 1000000, "max_output_tokens": 128000, "text_inputs": True, @@ -184,8 +248,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "arcee-ai/trinity-large-preview:free": { + "name": "Trinity Large Preview", + "release_date": "2026-01-28", + "last_updated": "2026-01-28", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 131072, "text_inputs": True, @@ -199,8 +269,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "arcee-ai/trinity-mini:free": { + "name": "Trinity Mini", + "release_date": "2026-01-28", + "last_updated": "2026-01-28", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 131072, "text_inputs": True, @@ -214,8 +290,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "black-forest-labs/flux.2-flex": { + "name": "FLUX.2 Flex", + "release_date": "2025-11-25", + "last_updated": "2026-01-31", + "open_weights": False, "max_input_tokens": 67344, "max_output_tokens": 67344, "text_inputs": True, @@ -228,8 +310,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": False, + "attachment": False, + "temperature": True, }, "black-forest-labs/flux.2-klein-4b": { + "name": "FLUX.2 Klein 4B", + "release_date": "2026-01-14", + "last_updated": "2026-01-31", + "open_weights": True, "max_input_tokens": 40960, "max_output_tokens": 40960, "text_inputs": True, @@ -242,8 +330,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": False, + "attachment": False, + "temperature": True, }, "black-forest-labs/flux.2-max": { + "name": "FLUX.2 Max", + "release_date": "2025-12-16", + "last_updated": "2026-01-31", + "open_weights": False, "max_input_tokens": 46864, "max_output_tokens": 46864, "text_inputs": True, @@ -256,8 +350,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": False, + "attachment": False, + "temperature": True, }, "black-forest-labs/flux.2-pro": { + "name": "FLUX.2 Pro", + "release_date": "2025-11-25", + "last_updated": "2026-01-31", + "open_weights": False, "max_input_tokens": 46864, "max_output_tokens": 46864, "text_inputs": True, @@ -270,8 +370,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": False, + "attachment": False, + "temperature": True, }, "bytedance-seed/seedream-4.5": { + "name": "Seedream 4.5", + "release_date": "2025-12-23", + "last_updated": "2026-01-31", + "open_weights": True, "max_input_tokens": 4096, "max_output_tokens": 4096, "text_inputs": True, @@ -284,8 +390,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": False, + "attachment": False, + "temperature": True, }, "cognitivecomputations/dolphin-mistral-24b-venice-edition:free": { + "name": "Uncensored (free)", + "release_date": "2025-07-09", + "last_updated": "2026-01-31", + "open_weights": True, "max_input_tokens": 32768, "max_output_tokens": 32768, "text_inputs": True, @@ -299,8 +411,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": False, "structured_output": True, + "attachment": False, + "temperature": True, }, "cognitivecomputations/dolphin3.0-mistral-24b": { + "name": "Dolphin3.0 Mistral 24B", + "release_date": "2025-02-13", + "last_updated": "2025-02-13", + "open_weights": True, "max_input_tokens": 32768, "max_output_tokens": 8192, "text_inputs": True, @@ -313,8 +431,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "cognitivecomputations/dolphin3.0-r1-mistral-24b": { + "name": "Dolphin3.0 R1 Mistral 24B", + "release_date": "2025-02-13", + "last_updated": "2025-02-13", + "open_weights": True, "max_input_tokens": 32768, "max_output_tokens": 8192, "text_inputs": True, @@ -327,8 +451,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "deepseek/deepseek-chat-v3-0324": { + "name": "DeepSeek V3 0324", + "release_date": "2025-03-24", + "last_updated": "2025-03-24", + "open_weights": True, "max_input_tokens": 16384, "max_output_tokens": 8192, "text_inputs": True, @@ -342,8 +472,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": False, "structured_output": True, + "attachment": False, + "temperature": True, }, "deepseek/deepseek-chat-v3.1": { + "name": "DeepSeek-V3.1", + "release_date": "2025-08-21", + "last_updated": "2025-08-21", + "open_weights": True, "max_input_tokens": 163840, "max_output_tokens": 163840, "text_inputs": True, @@ -357,8 +493,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "deepseek/deepseek-r1-0528-qwen3-8b:free": { + "name": "Deepseek R1 0528 Qwen3 8B (free)", + "release_date": "2025-05-29", + "last_updated": "2025-05-29", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 131072, "text_inputs": True, @@ -371,8 +513,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "deepseek/deepseek-r1-0528:free": { + "name": "R1 0528 (free)", + "release_date": "2025-05-28", + "last_updated": "2025-05-28", + "open_weights": True, "max_input_tokens": 163840, "max_output_tokens": 163840, "text_inputs": True, @@ -386,8 +534,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": False, "structured_output": True, + "attachment": False, + "temperature": True, }, "deepseek/deepseek-r1-distill-llama-70b": { + "name": "DeepSeek R1 Distill Llama 70B", + "release_date": "2025-01-23", + "last_updated": "2025-01-23", + "open_weights": True, "max_input_tokens": 8192, "max_output_tokens": 8192, "text_inputs": True, @@ -401,8 +555,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": False, "structured_output": True, + "attachment": False, + "temperature": True, }, "deepseek/deepseek-r1-distill-qwen-14b": { + "name": "DeepSeek R1 Distill Qwen 14B", + "release_date": "2025-01-29", + "last_updated": "2025-01-29", + "open_weights": True, "max_input_tokens": 64000, "max_output_tokens": 8192, "text_inputs": True, @@ -415,8 +575,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": False, + "attachment": False, + "temperature": True, }, "deepseek/deepseek-r1:free": { + "name": "R1 (free)", + "release_date": "2025-01-20", + "last_updated": "2025-01-20", + "open_weights": True, "max_input_tokens": 163840, "max_output_tokens": 163840, "text_inputs": True, @@ -429,8 +595,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "deepseek/deepseek-v3-base:free": { + "name": "DeepSeek V3 Base (free)", + "release_date": "2025-03-29", + "last_updated": "2025-03-29", + "open_weights": True, "max_input_tokens": 163840, "max_output_tokens": 163840, "text_inputs": True, @@ -443,8 +615,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": False, + "attachment": False, + "temperature": True, }, "deepseek/deepseek-v3.1-terminus": { + "name": "DeepSeek V3.1 Terminus", + "release_date": "2025-09-22", + "last_updated": "2025-09-22", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 65536, "text_inputs": True, @@ -458,8 +636,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "deepseek/deepseek-v3.1-terminus:exacto": { + "name": "DeepSeek V3.1 Terminus (exacto)", + "release_date": "2025-09-22", + "last_updated": "2025-09-22", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 65536, "text_inputs": True, @@ -473,8 +657,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "deepseek/deepseek-v3.2": { + "name": "DeepSeek V3.2", + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "open_weights": True, "max_input_tokens": 163840, "max_output_tokens": 65536, "text_inputs": True, @@ -488,8 +678,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "deepseek/deepseek-v3.2-speciale": { + "name": "DeepSeek V3.2 Speciale", + "release_date": "2025-12-01", + "last_updated": "2025-12-01", + "open_weights": True, "max_input_tokens": 163840, "max_output_tokens": 65536, "text_inputs": True, @@ -503,8 +699,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "featherless/qwerky-72b": { + "name": "Qwerky 72B", + "release_date": "2025-03-20", + "last_updated": "2025-03-20", + "open_weights": True, "max_input_tokens": 32768, "max_output_tokens": 8192, "text_inputs": True, @@ -517,8 +719,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": False, + "attachment": False, + "temperature": True, }, "google/gemini-2.0-flash-001": { + "name": "Gemini 2.0 Flash", + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "open_weights": False, "max_input_tokens": 1048576, "max_output_tokens": 8192, "text_inputs": True, @@ -533,8 +741,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "google/gemini-2.0-flash-exp:free": { + "name": "Gemini 2.0 Flash Experimental (free)", + "release_date": "2024-12-11", + "last_updated": "2024-12-11", + "open_weights": False, "max_input_tokens": 1048576, "max_output_tokens": 1048576, "text_inputs": True, @@ -547,8 +761,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": True, + "temperature": True, }, "google/gemini-2.5-flash": { + "name": "Gemini 2.5 Flash", + "release_date": "2025-07-17", + "last_updated": "2025-07-17", + "open_weights": False, "max_input_tokens": 1048576, "max_output_tokens": 65536, "text_inputs": True, @@ -563,8 +783,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "google/gemini-2.5-flash-lite": { + "name": "Gemini 2.5 Flash Lite", + "release_date": "2025-06-17", + "last_updated": "2025-06-17", + "open_weights": False, "max_input_tokens": 1048576, "max_output_tokens": 65536, "text_inputs": True, @@ -579,8 +805,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "google/gemini-2.5-flash-lite-preview-09-2025": { + "name": "Gemini 2.5 Flash Lite Preview 09-25", + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "open_weights": False, "max_input_tokens": 1048576, "max_output_tokens": 65536, "text_inputs": True, @@ -595,8 +827,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "google/gemini-2.5-flash-preview-09-2025": { + "name": "Gemini 2.5 Flash Preview 09-25", + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "open_weights": False, "max_input_tokens": 1048576, "max_output_tokens": 65536, "text_inputs": True, @@ -611,8 +849,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "google/gemini-2.5-pro": { + "name": "Gemini 2.5 Pro", + "release_date": "2025-03-20", + "last_updated": "2025-06-05", + "open_weights": False, "max_input_tokens": 1048576, "max_output_tokens": 65536, "text_inputs": True, @@ -627,8 +871,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "google/gemini-2.5-pro-preview-05-06": { + "name": "Gemini 2.5 Pro Preview 05-06", + "release_date": "2025-05-06", + "last_updated": "2025-05-06", + "open_weights": False, "max_input_tokens": 1048576, "max_output_tokens": 65536, "text_inputs": True, @@ -643,8 +893,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "google/gemini-2.5-pro-preview-06-05": { + "name": "Gemini 2.5 Pro Preview 06-05", + "release_date": "2025-06-05", + "last_updated": "2025-06-05", + "open_weights": False, "max_input_tokens": 1048576, "max_output_tokens": 65536, "text_inputs": True, @@ -659,8 +915,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "google/gemini-3-flash-preview": { + "name": "Gemini 3 Flash Preview", + "release_date": "2025-12-17", + "last_updated": "2025-12-17", + "open_weights": False, "max_input_tokens": 1048576, "max_output_tokens": 65536, "text_inputs": True, @@ -675,8 +937,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "google/gemini-3-pro-preview": { + "name": "Gemini 3 Pro Preview", + "release_date": "2025-11-18", + "last_updated": "2025-11", + "open_weights": False, "max_input_tokens": 1050000, "max_output_tokens": 66000, "text_inputs": True, @@ -691,8 +959,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "google/gemini-3.1-pro-preview": { + "name": "Gemini 3.1 Pro Preview", + "release_date": "2026-02-19", + "last_updated": "2026-02-19", + "open_weights": False, "max_input_tokens": 1048576, "max_output_tokens": 65536, "text_inputs": True, @@ -707,8 +981,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "google/gemini-3.1-pro-preview-customtools": { + "name": "Gemini 3.1 Pro Preview Custom Tools", + "release_date": "2026-02-19", + "last_updated": "2026-02-19", + "open_weights": False, "max_input_tokens": 1048576, "max_output_tokens": 65536, "text_inputs": True, @@ -723,8 +1003,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "google/gemma-2-9b-it": { + "name": "Gemma 2 9B", + "release_date": "2024-06-28", + "last_updated": "2024-06-28", + "open_weights": True, "max_input_tokens": 8192, "max_output_tokens": 8192, "text_inputs": True, @@ -737,8 +1023,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": False, + "attachment": False, + "temperature": True, }, "google/gemma-3-12b-it": { + "name": "Gemma 3 12B", + "release_date": "2025-03-13", + "last_updated": "2025-03-13", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 131072, "text_inputs": True, @@ -752,8 +1044,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": False, "structured_output": True, + "attachment": True, + "temperature": True, }, "google/gemma-3-12b-it:free": { + "name": "Gemma 3 12B (free)", + "release_date": "2025-03-13", + "last_updated": "2025-03-13", + "open_weights": True, "max_input_tokens": 32768, "max_output_tokens": 8192, "text_inputs": True, @@ -766,8 +1064,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": False, + "attachment": True, + "temperature": True, }, "google/gemma-3-27b-it": { + "name": "Gemma 3 27B", + "release_date": "2025-03-12", + "last_updated": "2025-03-12", + "open_weights": True, "max_input_tokens": 96000, "max_output_tokens": 96000, "text_inputs": True, @@ -781,8 +1085,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "google/gemma-3-27b-it:free": { + "name": "Gemma 3 27B (free)", + "release_date": "2025-03-12", + "last_updated": "2025-03-12", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 8192, "text_inputs": True, @@ -795,8 +1105,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": True, + "temperature": True, }, "google/gemma-3-4b-it": { + "name": "Gemma 3 4B", + "release_date": "2025-03-13", + "last_updated": "2025-03-13", + "open_weights": True, "max_input_tokens": 96000, "max_output_tokens": 96000, "text_inputs": True, @@ -809,8 +1125,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": False, + "attachment": True, + "temperature": True, }, "google/gemma-3-4b-it:free": { + "name": "Gemma 3 4B (free)", + "release_date": "2025-03-13", + "last_updated": "2025-03-13", + "open_weights": True, "max_input_tokens": 32768, "max_output_tokens": 8192, "text_inputs": True, @@ -823,8 +1145,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": False, + "attachment": True, + "temperature": True, }, "google/gemma-3n-e2b-it:free": { + "name": "Gemma 3n 2B (free)", + "release_date": "2025-07-09", + "last_updated": "2025-07-09", + "open_weights": True, "max_input_tokens": 8192, "max_output_tokens": 2000, "text_inputs": True, @@ -837,8 +1165,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": False, + "attachment": True, + "temperature": True, }, "google/gemma-3n-e4b-it": { + "name": "Gemma 3n 4B", + "release_date": "2025-05-20", + "last_updated": "2025-05-20", + "open_weights": True, "max_input_tokens": 32768, "max_output_tokens": 32768, "text_inputs": True, @@ -851,8 +1185,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": False, + "attachment": True, + "temperature": True, }, "google/gemma-3n-e4b-it:free": { + "name": "Gemma 3n 4B (free)", + "release_date": "2025-05-20", + "last_updated": "2025-05-20", + "open_weights": True, "max_input_tokens": 8192, "max_output_tokens": 2000, "text_inputs": True, @@ -865,8 +1205,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": False, + "attachment": True, + "temperature": True, }, "inception/mercury": { + "name": "Mercury", + "release_date": "2025-06-26", + "last_updated": "2025-06-26", + "open_weights": False, "max_input_tokens": 128000, "max_output_tokens": 32000, "text_inputs": True, @@ -880,8 +1226,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "inception/mercury-2": { + "name": "Mercury 2", + "release_date": "2026-03-04", + "last_updated": "2026-03-04", + "open_weights": False, "max_input_tokens": 128000, "max_output_tokens": 50000, "text_inputs": True, @@ -895,8 +1247,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "inception/mercury-coder": { + "name": "Mercury Coder", + "release_date": "2025-04-30", + "last_updated": "2025-04-30", + "open_weights": False, "max_input_tokens": 128000, "max_output_tokens": 32000, "text_inputs": True, @@ -910,8 +1268,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "kwaipilot/kat-coder-pro:free": { + "name": "Kat Coder Pro (free)", + "release_date": "2025-11-10", + "last_updated": "2025-11-10", + "open_weights": False, "max_input_tokens": 256000, "max_output_tokens": 65536, "text_inputs": True, @@ -925,8 +1289,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "liquid/lfm-2.5-1.2b-instruct:free": { + "name": "LFM2.5-1.2B-Instruct (free)", + "release_date": "2026-01-20", + "last_updated": "2026-01-28", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 32768, "text_inputs": True, @@ -939,8 +1309,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": False, + "attachment": False, + "temperature": True, }, "liquid/lfm-2.5-1.2b-thinking:free": { + "name": "LFM2.5-1.2B-Thinking (free)", + "release_date": "2026-01-20", + "last_updated": "2026-01-28", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 32768, "text_inputs": True, @@ -953,8 +1329,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": False, + "attachment": False, + "temperature": True, }, "meta-llama/llama-3.1-405b-instruct:free": { + "name": "Llama 3.1 405B Instruct (free)", + "release_date": "2024-07-23", + "last_updated": "2025-04-05", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 131072, "text_inputs": True, @@ -968,8 +1350,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": False, "structured_output": True, + "attachment": True, + "temperature": True, }, "meta-llama/llama-3.2-11b-vision-instruct": { + "name": "Llama 3.2 11B Vision Instruct", + "release_date": "2024-09-25", + "last_updated": "2024-09-25", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 8192, "text_inputs": True, @@ -982,8 +1370,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": False, + "attachment": True, + "temperature": True, }, "meta-llama/llama-3.2-3b-instruct:free": { + "name": "Llama 3.2 3B Instruct (free)", + "release_date": "2024-09-25", + "last_updated": "2024-09-25", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 131072, "text_inputs": True, @@ -996,8 +1390,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": False, + "attachment": True, + "temperature": True, }, "meta-llama/llama-3.3-70b-instruct:free": { + "name": "Llama 3.3 70B Instruct (free)", + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 131072, "text_inputs": True, @@ -1011,8 +1411,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "meta-llama/llama-4-scout:free": { + "name": "Llama 4 Scout (free)", + "release_date": "2025-04-05", + "last_updated": "2025-04-05", + "open_weights": True, "max_input_tokens": 64000, "max_output_tokens": 64000, "text_inputs": True, @@ -1026,8 +1432,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "microsoft/mai-ds-r1:free": { + "name": "MAI DS R1 (free)", + "release_date": "2025-04-21", + "last_updated": "2025-04-21", + "open_weights": True, "max_input_tokens": 163840, "max_output_tokens": 163840, "text_inputs": True, @@ -1040,8 +1452,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "minimax/minimax-01": { + "name": "MiniMax-01", + "release_date": "2025-01-15", + "last_updated": "2025-01-15", + "open_weights": True, "max_input_tokens": 1000000, "max_output_tokens": 1000000, "text_inputs": True, @@ -1054,8 +1472,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": True, + "temperature": True, }, "minimax/minimax-m1": { + "name": "MiniMax M1", + "release_date": "2025-06-17", + "last_updated": "2025-06-17", + "open_weights": True, "max_input_tokens": 1000000, "max_output_tokens": 40000, "text_inputs": True, @@ -1068,8 +1492,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "minimax/minimax-m2": { + "name": "MiniMax M2", + "release_date": "2025-10-23", + "last_updated": "2025-10-23", + "open_weights": True, "max_input_tokens": 196600, "max_output_tokens": 118000, "text_inputs": True, @@ -1083,8 +1513,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "minimax/minimax-m2.1": { + "name": "MiniMax M2.1", + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "open_weights": True, "max_input_tokens": 204800, "max_output_tokens": 131072, "text_inputs": True, @@ -1098,8 +1534,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "minimax/minimax-m2.5": { + "name": "MiniMax M2.5", + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "open_weights": True, "max_input_tokens": 204800, "max_output_tokens": 131072, "text_inputs": True, @@ -1113,8 +1555,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "mistralai/codestral-2508": { + "name": "Codestral 2508", + "release_date": "2025-08-01", + "last_updated": "2025-08-01", + "open_weights": True, "max_input_tokens": 256000, "max_output_tokens": 256000, "text_inputs": True, @@ -1128,8 +1576,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "mistralai/devstral-2512": { + "name": "Devstral 2 2512", + "release_date": "2025-09-12", + "last_updated": "2025-09-12", + "open_weights": True, "max_input_tokens": 262144, "max_output_tokens": 262144, "text_inputs": True, @@ -1143,8 +1597,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "mistralai/devstral-2512:free": { + "name": "Devstral 2 2512 (free)", + "release_date": "2025-09-12", + "last_updated": "2025-09-12", + "open_weights": True, "max_input_tokens": 262144, "max_output_tokens": 262144, "text_inputs": True, @@ -1157,8 +1617,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "mistralai/devstral-medium-2507": { + "name": "Devstral Medium", + "release_date": "2025-07-10", + "last_updated": "2025-07-10", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 131072, "text_inputs": True, @@ -1172,8 +1638,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "mistralai/devstral-small-2505": { + "name": "Devstral Small", + "release_date": "2025-05-07", + "last_updated": "2025-05-07", + "open_weights": True, "max_input_tokens": 128000, "max_output_tokens": 128000, "text_inputs": True, @@ -1186,8 +1658,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "mistralai/devstral-small-2505:free": { + "name": "Devstral Small 2505 (free)", + "release_date": "2025-05-21", + "last_updated": "2025-05-21", + "open_weights": True, "max_input_tokens": 32768, "max_output_tokens": 32768, "text_inputs": True, @@ -1200,8 +1678,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "mistralai/devstral-small-2507": { + "name": "Devstral Small 1.1", + "release_date": "2025-07-10", + "last_updated": "2025-07-10", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 131072, "text_inputs": True, @@ -1215,8 +1699,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "mistralai/mistral-7b-instruct:free": { + "name": "Mistral 7B Instruct (free)", + "release_date": "2024-05-27", + "last_updated": "2024-05-27", + "open_weights": True, "max_input_tokens": 32768, "max_output_tokens": 32768, "text_inputs": True, @@ -1229,8 +1719,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "mistralai/mistral-medium-3": { + "name": "Mistral Medium 3", + "release_date": "2025-05-07", + "last_updated": "2025-05-07", + "open_weights": False, "max_input_tokens": 131072, "max_output_tokens": 131072, "text_inputs": True, @@ -1244,8 +1740,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "mistralai/mistral-medium-3.1": { + "name": "Mistral Medium 3.1", + "release_date": "2025-08-12", + "last_updated": "2025-08-12", + "open_weights": False, "max_input_tokens": 262144, "max_output_tokens": 262144, "text_inputs": True, @@ -1259,8 +1761,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "mistralai/mistral-nemo:free": { + "name": "Mistral Nemo (free)", + "release_date": "2024-07-19", + "last_updated": "2024-07-19", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 131072, "text_inputs": True, @@ -1274,8 +1782,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "mistralai/mistral-small-3.1-24b-instruct": { + "name": "Mistral Small 3.1 24B Instruct", + "release_date": "2025-03-17", + "last_updated": "2025-03-17", + "open_weights": True, "max_input_tokens": 128000, "max_output_tokens": 8192, "text_inputs": True, @@ -1289,8 +1803,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "mistralai/mistral-small-3.2-24b-instruct": { + "name": "Mistral Small 3.2 24B Instruct", + "release_date": "2025-06-20", + "last_updated": "2025-06-20", + "open_weights": True, "max_input_tokens": 96000, "max_output_tokens": 8192, "text_inputs": True, @@ -1304,8 +1824,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "mistralai/mistral-small-3.2-24b-instruct:free": { + "name": "Mistral Small 3.2 24B (free)", + "release_date": "2025-06-20", + "last_updated": "2025-06-20", + "open_weights": True, "max_input_tokens": 96000, "max_output_tokens": 96000, "text_inputs": True, @@ -1319,8 +1845,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "moonshotai/kimi-dev-72b:free": { + "name": "Kimi Dev 72b (free)", + "release_date": "2025-06-16", + "last_updated": "2025-06-16", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 131072, "text_inputs": True, @@ -1333,8 +1865,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "moonshotai/kimi-k2": { + "name": "Kimi K2", + "release_date": "2025-07-11", + "last_updated": "2025-07-11", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 32768, "text_inputs": True, @@ -1347,8 +1885,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "moonshotai/kimi-k2-0905": { + "name": "Kimi K2 Instruct 0905", + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "open_weights": True, "max_input_tokens": 262144, "max_output_tokens": 16384, "text_inputs": True, @@ -1362,8 +1906,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "moonshotai/kimi-k2-0905:exacto": { + "name": "Kimi K2 Instruct 0905 (exacto)", + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "open_weights": True, "max_input_tokens": 262144, "max_output_tokens": 16384, "text_inputs": True, @@ -1377,8 +1927,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "moonshotai/kimi-k2-thinking": { + "name": "Kimi K2 Thinking", + "release_date": "2025-11-06", + "last_updated": "2025-11-06", + "open_weights": True, "max_input_tokens": 262144, "max_output_tokens": 262144, "text_inputs": True, @@ -1392,8 +1948,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "moonshotai/kimi-k2.5": { + "name": "Kimi K2.5", + "release_date": "2026-01-27", + "last_updated": "2026-01-27", + "open_weights": True, "max_input_tokens": 262144, "max_output_tokens": 262144, "text_inputs": True, @@ -1407,8 +1969,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "moonshotai/kimi-k2:free": { + "name": "Kimi K2 (free)", + "release_date": "2025-07-11", + "last_updated": "2025-07-11", + "open_weights": True, "max_input_tokens": 32800, "max_output_tokens": 32800, "text_inputs": True, @@ -1421,8 +1989,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "nousresearch/deephermes-3-llama-3-8b-preview": { + "name": "DeepHermes 3 Llama 3 8B Preview", + "release_date": "2025-02-28", + "last_updated": "2025-02-28", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 8192, "text_inputs": True, @@ -1435,8 +2009,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "nousresearch/hermes-3-llama-3.1-405b:free": { + "name": "Hermes 3 405B Instruct (free)", + "release_date": "2024-08-16", + "last_updated": "2024-08-16", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 131072, "text_inputs": True, @@ -1449,8 +2029,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": False, + "attachment": False, + "temperature": True, }, "nousresearch/hermes-4-405b": { + "name": "Hermes 4 405B", + "release_date": "2025-08-25", + "last_updated": "2025-08-25", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 131072, "text_inputs": True, @@ -1463,8 +2049,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "nousresearch/hermes-4-70b": { + "name": "Hermes 4 70B", + "release_date": "2025-08-25", + "last_updated": "2025-08-25", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 131072, "text_inputs": True, @@ -1478,8 +2070,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "nvidia/nemotron-3-nano-30b-a3b:free": { + "name": "Nemotron 3 Nano 30B A3B (free)", + "release_date": "2025-12-14", + "last_updated": "2026-01-31", + "open_weights": True, "max_input_tokens": 256000, "max_output_tokens": 256000, "text_inputs": True, @@ -1493,8 +2091,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "nvidia/nemotron-nano-12b-v2-vl:free": { + "name": "Nemotron Nano 12B 2 VL (free)", + "release_date": "2025-10-28", + "last_updated": "2026-01-31", + "open_weights": True, "max_input_tokens": 128000, "max_output_tokens": 128000, "text_inputs": True, @@ -1507,8 +2111,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "nvidia/nemotron-nano-9b-v2": { + "name": "nvidia-nemotron-nano-9b-v2", + "release_date": "2025-08-18", + "last_updated": "2025-08-18", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 131072, "text_inputs": True, @@ -1521,8 +2131,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "nvidia/nemotron-nano-9b-v2:free": { + "name": "Nemotron Nano 9B V2 (free)", + "release_date": "2025-09-05", + "last_updated": "2025-08-18", + "open_weights": True, "max_input_tokens": 128000, "max_output_tokens": 128000, "text_inputs": True, @@ -1536,8 +2152,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "openai/gpt-4.1": { + "name": "GPT-4.1", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "open_weights": False, "max_input_tokens": 1047576, "max_output_tokens": 32768, "text_inputs": True, @@ -1551,8 +2173,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "openai/gpt-4.1-mini": { + "name": "GPT-4.1 Mini", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "open_weights": False, "max_input_tokens": 1047576, "max_output_tokens": 32768, "text_inputs": True, @@ -1566,8 +2194,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "openai/gpt-4o-mini": { + "name": "GPT-4o-mini", + "release_date": "2024-07-18", + "last_updated": "2024-07-18", + "open_weights": False, "max_input_tokens": 128000, "max_output_tokens": 16384, "text_inputs": True, @@ -1581,8 +2215,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "openai/gpt-5": { + "name": "GPT-5", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "open_weights": False, "max_input_tokens": 400000, "max_output_tokens": 128000, "text_inputs": True, @@ -1596,8 +2236,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "openai/gpt-5-chat": { + "name": "GPT-5 Chat (latest)", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "open_weights": False, "max_input_tokens": 400000, "max_output_tokens": 128000, "text_inputs": True, @@ -1611,8 +2257,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": False, "structured_output": True, + "attachment": True, + "temperature": True, }, "openai/gpt-5-codex": { + "name": "GPT-5 Codex", + "release_date": "2025-09-15", + "last_updated": "2025-09-15", + "open_weights": False, "max_input_tokens": 400000, "max_output_tokens": 128000, "text_inputs": True, @@ -1626,8 +2278,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "openai/gpt-5-image": { + "name": "GPT-5 Image", + "release_date": "2025-10-14", + "last_updated": "2025-10-14", + "open_weights": False, "max_input_tokens": 400000, "max_output_tokens": 128000, "text_inputs": True, @@ -1642,8 +2300,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "openai/gpt-5-mini": { + "name": "GPT-5 Mini", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "open_weights": False, "max_input_tokens": 400000, "max_output_tokens": 128000, "text_inputs": True, @@ -1657,8 +2321,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "openai/gpt-5-nano": { + "name": "GPT-5 Nano", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "open_weights": False, "max_input_tokens": 400000, "max_output_tokens": 128000, "text_inputs": True, @@ -1672,8 +2342,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "openai/gpt-5-pro": { + "name": "GPT-5 Pro", + "release_date": "2025-10-06", + "last_updated": "2025-10-06", + "open_weights": False, "max_input_tokens": 400000, "max_output_tokens": 272000, "text_inputs": True, @@ -1687,8 +2363,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": False, }, "openai/gpt-5.1": { + "name": "GPT-5.1", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "open_weights": False, "max_input_tokens": 400000, "max_output_tokens": 128000, "text_inputs": True, @@ -1702,8 +2384,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "openai/gpt-5.1-chat": { + "name": "GPT-5.1 Chat", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "open_weights": False, "max_input_tokens": 128000, "max_output_tokens": 16384, "text_inputs": True, @@ -1717,8 +2405,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "openai/gpt-5.1-codex": { + "name": "GPT-5.1-Codex", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "open_weights": False, "max_input_tokens": 400000, "max_output_tokens": 128000, "text_inputs": True, @@ -1732,8 +2426,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "openai/gpt-5.1-codex-max": { + "name": "GPT-5.1-Codex-Max", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "open_weights": False, "max_input_tokens": 400000, "max_output_tokens": 128000, "text_inputs": True, @@ -1747,8 +2447,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "openai/gpt-5.1-codex-mini": { + "name": "GPT-5.1-Codex-Mini", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "open_weights": False, "max_input_tokens": 400000, "max_output_tokens": 100000, "text_inputs": True, @@ -1762,8 +2468,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "openai/gpt-5.2": { + "name": "GPT-5.2", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "open_weights": False, "max_input_tokens": 400000, "max_output_tokens": 128000, "text_inputs": True, @@ -1777,8 +2489,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": False, }, "openai/gpt-5.2-chat": { + "name": "GPT-5.2 Chat", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "open_weights": False, "max_input_tokens": 128000, "max_output_tokens": 16384, "text_inputs": True, @@ -1792,8 +2510,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": False, }, "openai/gpt-5.2-codex": { + "name": "GPT-5.2-Codex", + "release_date": "2026-01-14", + "last_updated": "2026-01-14", + "open_weights": False, "max_input_tokens": 400000, "max_output_tokens": 128000, "text_inputs": True, @@ -1807,8 +2531,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "openai/gpt-5.2-pro": { + "name": "GPT-5.2 Pro", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "open_weights": False, "max_input_tokens": 400000, "max_output_tokens": 128000, "text_inputs": True, @@ -1822,8 +2552,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": False, }, "openai/gpt-5.3-codex": { + "name": "GPT-5.3-Codex", + "release_date": "2026-02-24", + "last_updated": "2026-02-24", + "open_weights": False, "max_input_tokens": 400000, "max_output_tokens": 128000, "text_inputs": True, @@ -1838,8 +2574,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": False, }, "openai/gpt-5.4": { + "name": "GPT-5.4", + "release_date": "2026-03-05", + "last_updated": "2026-03-05", + "open_weights": False, "max_input_tokens": 1050000, "max_output_tokens": 128000, "text_inputs": True, @@ -1854,8 +2596,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": False, }, "openai/gpt-5.4-pro": { + "name": "GPT-5.4 Pro", + "release_date": "2026-03-05", + "last_updated": "2026-03-05", + "open_weights": False, "max_input_tokens": 1050000, "max_output_tokens": 128000, "text_inputs": True, @@ -1870,8 +2618,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": False, + "attachment": True, + "temperature": False, }, "openai/gpt-oss-120b": { + "name": "GPT OSS 120B", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 32768, "text_inputs": True, @@ -1885,8 +2639,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "openai/gpt-oss-120b:exacto": { + "name": "GPT OSS 120B (exacto)", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 32768, "text_inputs": True, @@ -1900,8 +2660,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "openai/gpt-oss-120b:free": { + "name": "gpt-oss-120b (free)", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 32768, "text_inputs": True, @@ -1914,8 +2680,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "openai/gpt-oss-20b": { + "name": "GPT OSS 20B", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 32768, "text_inputs": True, @@ -1929,8 +2701,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "openai/gpt-oss-20b:free": { + "name": "gpt-oss-20b (free)", + "release_date": "2025-08-05", + "last_updated": "2026-01-31", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 32768, "text_inputs": True, @@ -1943,8 +2721,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "openai/gpt-oss-safeguard-20b": { + "name": "GPT OSS Safeguard 20B", + "release_date": "2025-10-29", + "last_updated": "2025-10-29", + "open_weights": False, "max_input_tokens": 131072, "max_output_tokens": 65536, "text_inputs": True, @@ -1957,8 +2741,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "openai/o4-mini": { + "name": "o4 Mini", + "release_date": "2025-04-16", + "last_updated": "2025-04-16", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 100000, "text_inputs": True, @@ -1972,8 +2762,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "openrouter/aurora-alpha": { + "name": "Aurora Alpha", + "release_date": "2026-02-09", + "last_updated": "2026-02-09", + "open_weights": False, "max_input_tokens": 128000, "max_output_tokens": 50000, "text_inputs": True, @@ -1987,8 +2783,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "openrouter/free": { + "name": "Free Models Router", + "release_date": "2026-02-01", + "last_updated": "2026-02-01", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 8000, "text_inputs": True, @@ -2002,8 +2804,58 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, + }, + "openrouter/healer-alpha": { + "name": "Healer Alpha", + "release_date": "2026-03-11", + "last_updated": "2026-03-11", + "open_weights": False, + "max_input_tokens": 262144, + "max_output_tokens": 64000, + "text_inputs": True, + "image_inputs": True, + "audio_inputs": True, + "pdf_inputs": True, + "video_inputs": False, + "text_outputs": True, + "image_outputs": False, + "audio_outputs": False, + "video_outputs": False, + "reasoning_output": True, + "tool_calling": True, + "structured_output": True, + "attachment": True, + "temperature": True, + }, + "openrouter/hunter-alpha": { + "name": "Hunter Alpha", + "release_date": "2026-03-11", + "last_updated": "2026-03-11", + "open_weights": False, + "max_input_tokens": 1048576, + "max_output_tokens": 64000, + "text_inputs": True, + "image_inputs": True, + "audio_inputs": False, + "pdf_inputs": True, + "video_inputs": False, + "text_outputs": True, + "image_outputs": False, + "audio_outputs": False, + "video_outputs": False, + "reasoning_output": True, + "tool_calling": True, + "structured_output": True, + "attachment": True, + "temperature": True, }, "openrouter/sherlock-dash-alpha": { + "name": "Sherlock Dash Alpha", + "release_date": "2025-11-15", + "last_updated": "2025-12-14", + "open_weights": False, "max_input_tokens": 1840000, "max_output_tokens": 0, "text_inputs": True, @@ -2016,8 +2868,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": True, + "temperature": True, }, "openrouter/sherlock-think-alpha": { + "name": "Sherlock Think Alpha", + "release_date": "2025-11-15", + "last_updated": "2025-12-14", + "open_weights": False, "max_input_tokens": 1840000, "max_output_tokens": 0, "text_inputs": True, @@ -2030,8 +2888,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": True, + "temperature": True, }, "prime-intellect/intellect-3": { + "name": "Intellect 3", + "release_date": "2025-01-15", + "last_updated": "2025-01-15", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 8192, "text_inputs": True, @@ -2045,8 +2909,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "qwen/qwen-2.5-coder-32b-instruct": { + "name": "Qwen2.5 Coder 32B Instruct", + "release_date": "2024-11-11", + "last_updated": "2024-11-11", + "open_weights": True, "max_input_tokens": 32768, "max_output_tokens": 8192, "text_inputs": True, @@ -2060,8 +2930,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": False, "structured_output": True, + "attachment": False, + "temperature": True, }, "qwen/qwen-2.5-vl-7b-instruct:free": { + "name": "Qwen2.5-VL 7B Instruct (free)", + "release_date": "2024-08-28", + "last_updated": "2024-08-28", + "open_weights": True, "max_input_tokens": 32768, "max_output_tokens": 32768, "text_inputs": True, @@ -2074,8 +2950,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": True, + "temperature": True, }, "qwen/qwen2.5-vl-32b-instruct:free": { + "name": "Qwen2.5 VL 32B Instruct (free)", + "release_date": "2025-03-24", + "last_updated": "2025-03-24", + "open_weights": True, "max_input_tokens": 8192, "max_output_tokens": 8192, "text_inputs": True, @@ -2089,8 +2971,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "qwen/qwen2.5-vl-72b-instruct": { + "name": "Qwen2.5 VL 72B Instruct", + "release_date": "2025-02-01", + "last_updated": "2025-02-01", + "open_weights": True, "max_input_tokens": 32768, "max_output_tokens": 8192, "text_inputs": True, @@ -2104,8 +2992,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": False, "structured_output": True, + "attachment": True, + "temperature": True, }, "qwen/qwen2.5-vl-72b-instruct:free": { + "name": "Qwen2.5 VL 72B Instruct (free)", + "release_date": "2025-02-01", + "last_updated": "2025-02-01", + "open_weights": True, "max_input_tokens": 32768, "max_output_tokens": 32768, "text_inputs": True, @@ -2118,8 +3012,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": True, + "temperature": True, }, "qwen/qwen3-14b:free": { + "name": "Qwen3 14B (free)", + "release_date": "2025-04-28", + "last_updated": "2025-04-28", + "open_weights": True, "max_input_tokens": 40960, "max_output_tokens": 40960, "text_inputs": True, @@ -2133,8 +3033,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "qwen/qwen3-235b-a22b-07-25": { + "name": "Qwen3 235B A22B Instruct 2507", + "release_date": "2025-04-28", + "last_updated": "2025-07-21", + "open_weights": True, "max_input_tokens": 262144, "max_output_tokens": 131072, "text_inputs": True, @@ -2148,8 +3054,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "qwen/qwen3-235b-a22b-07-25:free": { + "name": "Qwen3 235B A22B Instruct 2507 (free)", + "release_date": "2025-04-28", + "last_updated": "2025-07-21", + "open_weights": True, "max_input_tokens": 262144, "max_output_tokens": 131072, "text_inputs": True, @@ -2162,8 +3074,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "qwen/qwen3-235b-a22b-thinking-2507": { + "name": "Qwen3 235B A22B Thinking 2507", + "release_date": "2025-07-25", + "last_updated": "2025-07-25", + "open_weights": True, "max_input_tokens": 262144, "max_output_tokens": 81920, "text_inputs": True, @@ -2177,8 +3095,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "qwen/qwen3-235b-a22b:free": { + "name": "Qwen3 235B A22B (free)", + "release_date": "2025-04-28", + "last_updated": "2025-04-28", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 131072, "text_inputs": True, @@ -2192,8 +3116,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "qwen/qwen3-30b-a3b-instruct-2507": { + "name": "Qwen3 30B A3B Instruct 2507", + "release_date": "2025-07-29", + "last_updated": "2025-07-29", + "open_weights": True, "max_input_tokens": 262000, "max_output_tokens": 262000, "text_inputs": True, @@ -2207,8 +3137,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "qwen/qwen3-30b-a3b-thinking-2507": { + "name": "Qwen3 30B A3B Thinking 2507", + "release_date": "2025-07-29", + "last_updated": "2025-07-29", + "open_weights": True, "max_input_tokens": 262000, "max_output_tokens": 262000, "text_inputs": True, @@ -2222,8 +3158,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "qwen/qwen3-30b-a3b:free": { + "name": "Qwen3 30B A3B (free)", + "release_date": "2025-04-28", + "last_updated": "2025-04-28", + "open_weights": True, "max_input_tokens": 40960, "max_output_tokens": 40960, "text_inputs": True, @@ -2237,8 +3179,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "qwen/qwen3-32b:free": { + "name": "Qwen3 32B (free)", + "release_date": "2025-04-28", + "last_updated": "2025-04-28", + "open_weights": True, "max_input_tokens": 40960, "max_output_tokens": 40960, "text_inputs": True, @@ -2252,8 +3200,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "qwen/qwen3-4b:free": { + "name": "Qwen3 4B (free)", + "release_date": "2025-04-30", + "last_updated": "2025-07-23", + "open_weights": True, "max_input_tokens": 40960, "max_output_tokens": 40960, "text_inputs": True, @@ -2267,8 +3221,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "qwen/qwen3-8b:free": { + "name": "Qwen3 8B (free)", + "release_date": "2025-04-28", + "last_updated": "2025-04-28", + "open_weights": True, "max_input_tokens": 40960, "max_output_tokens": 40960, "text_inputs": True, @@ -2282,8 +3242,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "qwen/qwen3-coder": { + "name": "Qwen3 Coder", + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "open_weights": True, "max_input_tokens": 262144, "max_output_tokens": 66536, "text_inputs": True, @@ -2297,8 +3263,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "qwen/qwen3-coder-30b-a3b-instruct": { + "name": "Qwen3 Coder 30B A3B Instruct", + "release_date": "2025-07-31", + "last_updated": "2025-07-31", + "open_weights": True, "max_input_tokens": 160000, "max_output_tokens": 65536, "text_inputs": True, @@ -2312,8 +3284,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "qwen/qwen3-coder-flash": { + "name": "Qwen3 Coder Flash", + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "open_weights": False, "max_input_tokens": 128000, "max_output_tokens": 66536, "text_inputs": True, @@ -2327,8 +3305,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": False, + "attachment": False, + "temperature": True, }, "qwen/qwen3-coder:exacto": { + "name": "Qwen3 Coder (exacto)", + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "open_weights": True, "max_input_tokens": 131072, "max_output_tokens": 32768, "text_inputs": True, @@ -2342,8 +3326,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "qwen/qwen3-coder:free": { + "name": "Qwen3 Coder 480B A35B Instruct (free)", + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "open_weights": True, "max_input_tokens": 262144, "max_output_tokens": 66536, "text_inputs": True, @@ -2356,8 +3346,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "qwen/qwen3-max": { + "name": "Qwen3 Max", + "release_date": "2025-09-05", + "last_updated": "2025-09-05", + "open_weights": False, "max_input_tokens": 262144, "max_output_tokens": 32768, "text_inputs": True, @@ -2370,8 +3366,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "qwen/qwen3-next-80b-a3b-instruct": { + "name": "Qwen3 Next 80B A3B Instruct", + "release_date": "2025-09-11", + "last_updated": "2025-09-11", + "open_weights": True, "max_input_tokens": 262144, "max_output_tokens": 262144, "text_inputs": True, @@ -2385,8 +3387,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "qwen/qwen3-next-80b-a3b-instruct:free": { + "name": "Qwen3 Next 80B A3B Instruct (free)", + "release_date": "2025-09-11", + "last_updated": "2025-09-11", + "open_weights": True, "max_input_tokens": 262144, "max_output_tokens": 262144, "text_inputs": True, @@ -2400,8 +3408,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "qwen/qwen3-next-80b-a3b-thinking": { + "name": "Qwen3 Next 80B A3B Thinking", + "release_date": "2025-09-11", + "last_updated": "2025-09-11", + "open_weights": True, "max_input_tokens": 262144, "max_output_tokens": 262144, "text_inputs": True, @@ -2415,8 +3429,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "qwen/qwen3.5-397b-a17b": { + "name": "Qwen3.5 397B A17B", + "release_date": "2026-02-16", + "last_updated": "2026-02-16", + "open_weights": True, "max_input_tokens": 262144, "max_output_tokens": 65536, "text_inputs": True, @@ -2430,8 +3450,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "qwen/qwen3.5-plus-02-15": { + "name": "Qwen3.5 Plus 2026-02-15", + "release_date": "2026-02-16", + "last_updated": "2026-02-16", + "open_weights": False, "max_input_tokens": 1000000, "max_output_tokens": 65536, "text_inputs": True, @@ -2445,8 +3471,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "qwen/qwq-32b:free": { + "name": "QwQ 32B (free)", + "release_date": "2025-03-05", + "last_updated": "2025-03-05", + "open_weights": True, "max_input_tokens": 32768, "max_output_tokens": 32768, "text_inputs": True, @@ -2460,8 +3492,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "rekaai/reka-flash-3": { + "name": "Reka Flash 3", + "release_date": "2025-03-12", + "last_updated": "2025-03-12", + "open_weights": True, "max_input_tokens": 32768, "max_output_tokens": 8192, "text_inputs": True, @@ -2474,8 +3512,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "sarvamai/sarvam-m:free": { + "name": "Sarvam-M (free)", + "release_date": "2025-05-25", + "last_updated": "2025-05-25", + "open_weights": True, "max_input_tokens": 32768, "max_output_tokens": 32768, "text_inputs": True, @@ -2488,8 +3532,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "sourceful/riverflow-v2-fast-preview": { + "name": "Riverflow V2 Fast Preview", + "release_date": "2025-12-08", + "last_updated": "2026-01-28", + "open_weights": True, "max_input_tokens": 8192, "max_output_tokens": 8192, "text_inputs": True, @@ -2502,8 +3552,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": False, + "attachment": False, + "temperature": True, }, "sourceful/riverflow-v2-max-preview": { + "name": "Riverflow V2 Max Preview", + "release_date": "2025-12-08", + "last_updated": "2026-01-28", + "open_weights": True, "max_input_tokens": 8192, "max_output_tokens": 8192, "text_inputs": True, @@ -2516,8 +3572,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": False, + "attachment": False, + "temperature": True, }, "sourceful/riverflow-v2-standard-preview": { + "name": "Riverflow V2 Standard Preview", + "release_date": "2025-12-08", + "last_updated": "2026-01-28", + "open_weights": True, "max_input_tokens": 8192, "max_output_tokens": 8192, "text_inputs": True, @@ -2530,8 +3592,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": False, + "attachment": False, + "temperature": True, }, "stepfun/step-3.5-flash": { + "name": "Step 3.5 Flash", + "release_date": "2026-01-29", + "last_updated": "2026-01-29", + "open_weights": True, "max_input_tokens": 256000, "max_output_tokens": 256000, "text_inputs": True, @@ -2544,8 +3612,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "stepfun/step-3.5-flash:free": { + "name": "Step 3.5 Flash (free)", + "release_date": "2026-01-29", + "last_updated": "2026-01-29", + "open_weights": True, "max_input_tokens": 256000, "max_output_tokens": 256000, "text_inputs": True, @@ -2558,8 +3632,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "thudm/glm-z1-32b:free": { + "name": "GLM Z1 32B (free)", + "release_date": "2025-04-17", + "last_updated": "2025-04-17", + "open_weights": True, "max_input_tokens": 32768, "max_output_tokens": 32768, "text_inputs": True, @@ -2572,8 +3652,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "tngtech/deepseek-r1t2-chimera:free": { + "name": "DeepSeek R1T2 Chimera (free)", + "release_date": "2025-07-08", + "last_updated": "2025-07-08", + "open_weights": True, "max_input_tokens": 163840, "max_output_tokens": 163840, "text_inputs": True, @@ -2587,8 +3673,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": False, "structured_output": True, + "attachment": False, + "temperature": True, }, "tngtech/tng-r1t-chimera:free": { + "name": "R1T Chimera (free)", + "release_date": "2025-11-26", + "last_updated": "2026-01-31", + "open_weights": True, "max_input_tokens": 163840, "max_output_tokens": 163840, "text_inputs": True, @@ -2602,8 +3694,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "x-ai/grok-3": { + "name": "Grok 3", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "open_weights": False, "max_input_tokens": 131072, "max_output_tokens": 8192, "text_inputs": True, @@ -2617,8 +3715,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": False, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "x-ai/grok-3-beta": { + "name": "Grok 3 Beta", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "open_weights": False, "max_input_tokens": 131072, "max_output_tokens": 8192, "text_inputs": True, @@ -2631,8 +3735,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "x-ai/grok-3-mini": { + "name": "Grok 3 Mini", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "open_weights": False, "max_input_tokens": 131072, "max_output_tokens": 8192, "text_inputs": True, @@ -2646,8 +3756,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "x-ai/grok-3-mini-beta": { + "name": "Grok 3 Mini Beta", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "open_weights": False, "max_input_tokens": 131072, "max_output_tokens": 8192, "text_inputs": True, @@ -2660,8 +3776,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "x-ai/grok-4": { + "name": "Grok 4", + "release_date": "2025-07-09", + "last_updated": "2025-07-09", + "open_weights": False, "max_input_tokens": 256000, "max_output_tokens": 64000, "text_inputs": True, @@ -2675,8 +3797,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "x-ai/grok-4-fast": { + "name": "Grok 4 Fast", + "release_date": "2025-08-19", + "last_updated": "2025-08-19", + "open_weights": False, "max_input_tokens": 2000000, "max_output_tokens": 30000, "text_inputs": True, @@ -2690,8 +3818,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "x-ai/grok-4.1-fast": { + "name": "Grok 4.1 Fast", + "release_date": "2025-11-19", + "last_updated": "2025-11-19", + "open_weights": False, "max_input_tokens": 2000000, "max_output_tokens": 30000, "text_inputs": True, @@ -2705,8 +3839,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "x-ai/grok-code-fast-1": { + "name": "Grok Code Fast 1", + "release_date": "2025-08-26", + "last_updated": "2025-08-26", + "open_weights": False, "max_input_tokens": 256000, "max_output_tokens": 10000, "text_inputs": True, @@ -2720,8 +3860,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "xiaomi/mimo-v2-flash": { + "name": "MiMo-V2-Flash", + "release_date": "2025-12-14", + "last_updated": "2025-12-14", + "open_weights": True, "max_input_tokens": 262144, "max_output_tokens": 65536, "text_inputs": True, @@ -2735,8 +3881,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "z-ai/glm-4.5": { + "name": "GLM 4.5", + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "open_weights": True, "max_input_tokens": 128000, "max_output_tokens": 96000, "text_inputs": True, @@ -2750,8 +3902,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "z-ai/glm-4.5-air": { + "name": "GLM 4.5 Air", + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "open_weights": True, "max_input_tokens": 128000, "max_output_tokens": 96000, "text_inputs": True, @@ -2765,8 +3923,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "z-ai/glm-4.5-air:free": { + "name": "GLM 4.5 Air (free)", + "release_date": "2025-07-28", + "last_updated": "2025-07-28", + "open_weights": True, "max_input_tokens": 128000, "max_output_tokens": 96000, "text_inputs": True, @@ -2779,8 +3943,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": False, + "attachment": False, + "temperature": True, }, "z-ai/glm-4.5v": { + "name": "GLM 4.5V", + "release_date": "2025-08-11", + "last_updated": "2025-08-11", + "open_weights": True, "max_input_tokens": 64000, "max_output_tokens": 16384, "text_inputs": True, @@ -2794,8 +3964,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": True, + "temperature": True, }, "z-ai/glm-4.6": { + "name": "GLM 4.6", + "release_date": "2025-09-30", + "last_updated": "2025-09-30", + "open_weights": True, "max_input_tokens": 200000, "max_output_tokens": 128000, "text_inputs": True, @@ -2809,8 +3985,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "z-ai/glm-4.6:exacto": { + "name": "GLM 4.6 (exacto)", + "release_date": "2025-09-30", + "last_updated": "2025-09-30", + "open_weights": True, "max_input_tokens": 200000, "max_output_tokens": 128000, "text_inputs": True, @@ -2824,8 +4006,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "z-ai/glm-4.7": { + "name": "GLM-4.7", + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "open_weights": True, "max_input_tokens": 204800, "max_output_tokens": 131072, "text_inputs": True, @@ -2839,8 +4027,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "z-ai/glm-4.7-flash": { + "name": "GLM-4.7-Flash", + "release_date": "2026-01-19", + "last_updated": "2026-01-19", + "open_weights": True, "max_input_tokens": 200000, "max_output_tokens": 65535, "text_inputs": True, @@ -2854,8 +4048,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, "z-ai/glm-5": { + "name": "GLM-5", + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "open_weights": True, "max_input_tokens": 202752, "max_output_tokens": 131000, "text_inputs": True, @@ -2869,5 +4069,7 @@ _PROFILES: dict[str, dict[str, Any]] = { "reasoning_output": True, "tool_calling": True, "structured_output": True, + "attachment": False, + "temperature": True, }, } diff --git a/libs/partners/perplexity/langchain_perplexity/data/_profiles.py b/libs/partners/perplexity/langchain_perplexity/data/_profiles.py index 9a83c0a1dce..35c4ce82825 100644 --- a/libs/partners/perplexity/langchain_perplexity/data/_profiles.py +++ b/libs/partners/perplexity/langchain_perplexity/data/_profiles.py @@ -17,6 +17,10 @@ from typing import Any _PROFILES: dict[str, dict[str, Any]] = { "sonar": { + "name": "Sonar", + "release_date": "2024-01-01", + "last_updated": "2025-09-01", + "open_weights": False, "max_input_tokens": 128000, "max_output_tokens": 4096, "text_inputs": True, @@ -29,8 +33,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": False, + "attachment": False, + "temperature": True, }, "sonar-deep-research": { + "name": "Perplexity Sonar Deep Research", + "release_date": "2025-02-01", + "last_updated": "2025-09-01", + "open_weights": False, "max_input_tokens": 128000, "max_output_tokens": 8192, "text_inputs": True, @@ -43,8 +53,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": False, + "attachment": False, + "temperature": False, }, "sonar-pro": { + "name": "Sonar Pro", + "release_date": "2024-01-01", + "last_updated": "2025-09-01", + "open_weights": False, "max_input_tokens": 200000, "max_output_tokens": 8192, "text_inputs": True, @@ -57,8 +73,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": False, + "attachment": True, + "temperature": True, }, "sonar-reasoning-pro": { + "name": "Sonar Reasoning Pro", + "release_date": "2024-01-01", + "last_updated": "2025-09-01", + "open_weights": False, "max_input_tokens": 128000, "max_output_tokens": 4096, "text_inputs": True, @@ -71,5 +93,7 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": False, + "attachment": True, + "temperature": True, }, } diff --git a/libs/partners/xai/langchain_xai/data/_profiles.py b/libs/partners/xai/langchain_xai/data/_profiles.py index c5223a90279..3d2e0607df2 100644 --- a/libs/partners/xai/langchain_xai/data/_profiles.py +++ b/libs/partners/xai/langchain_xai/data/_profiles.py @@ -17,6 +17,10 @@ from typing import Any _PROFILES: dict[str, dict[str, Any]] = { "grok-2": { + "name": "Grok 2", + "release_date": "2024-08-20", + "last_updated": "2024-08-20", + "open_weights": False, "max_input_tokens": 131072, "max_output_tokens": 8192, "text_inputs": True, @@ -29,8 +33,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "grok-2-1212": { + "name": "Grok 2 (1212)", + "release_date": "2024-12-12", + "last_updated": "2024-12-12", + "open_weights": False, "max_input_tokens": 131072, "max_output_tokens": 8192, "text_inputs": True, @@ -43,8 +53,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "grok-2-latest": { + "name": "Grok 2 Latest", + "release_date": "2024-08-20", + "last_updated": "2024-12-12", + "open_weights": False, "max_input_tokens": 131072, "max_output_tokens": 8192, "text_inputs": True, @@ -57,8 +73,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "grok-2-vision": { + "name": "Grok 2 Vision", + "release_date": "2024-08-20", + "last_updated": "2024-08-20", + "open_weights": False, "max_input_tokens": 8192, "max_output_tokens": 4096, "text_inputs": True, @@ -71,8 +93,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": True, + "temperature": True, }, "grok-2-vision-1212": { + "name": "Grok 2 Vision (1212)", + "release_date": "2024-08-20", + "last_updated": "2024-12-12", + "open_weights": False, "max_input_tokens": 8192, "max_output_tokens": 4096, "text_inputs": True, @@ -85,8 +113,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": True, + "temperature": True, }, "grok-2-vision-latest": { + "name": "Grok 2 Vision Latest", + "release_date": "2024-08-20", + "last_updated": "2024-12-12", + "open_weights": False, "max_input_tokens": 8192, "max_output_tokens": 4096, "text_inputs": True, @@ -99,8 +133,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": True, + "temperature": True, }, "grok-3": { + "name": "Grok 3", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "open_weights": False, "max_input_tokens": 131072, "max_output_tokens": 8192, "text_inputs": True, @@ -113,8 +153,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "grok-3-fast": { + "name": "Grok 3 Fast", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "open_weights": False, "max_input_tokens": 131072, "max_output_tokens": 8192, "text_inputs": True, @@ -127,8 +173,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "grok-3-fast-latest": { + "name": "Grok 3 Fast Latest", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "open_weights": False, "max_input_tokens": 131072, "max_output_tokens": 8192, "text_inputs": True, @@ -141,8 +193,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "grok-3-latest": { + "name": "Grok 3 Latest", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "open_weights": False, "max_input_tokens": 131072, "max_output_tokens": 8192, "text_inputs": True, @@ -155,8 +213,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "grok-3-mini": { + "name": "Grok 3 Mini", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "open_weights": False, "max_input_tokens": 131072, "max_output_tokens": 8192, "text_inputs": True, @@ -169,8 +233,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "grok-3-mini-fast": { + "name": "Grok 3 Mini Fast", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "open_weights": False, "max_input_tokens": 131072, "max_output_tokens": 8192, "text_inputs": True, @@ -183,8 +253,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "grok-3-mini-fast-latest": { + "name": "Grok 3 Mini Fast Latest", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "open_weights": False, "max_input_tokens": 131072, "max_output_tokens": 8192, "text_inputs": True, @@ -197,8 +273,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "grok-3-mini-latest": { + "name": "Grok 3 Mini Latest", + "release_date": "2025-02-17", + "last_updated": "2025-02-17", + "open_weights": False, "max_input_tokens": 131072, "max_output_tokens": 8192, "text_inputs": True, @@ -211,8 +293,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "grok-4": { + "name": "Grok 4", + "release_date": "2025-07-09", + "last_updated": "2025-07-09", + "open_weights": False, "max_input_tokens": 256000, "max_output_tokens": 64000, "text_inputs": True, @@ -225,8 +313,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "grok-4-1-fast": { + "name": "Grok 4.1 Fast", + "release_date": "2025-11-19", + "last_updated": "2025-11-19", + "open_weights": False, "max_input_tokens": 2000000, "max_output_tokens": 30000, "text_inputs": True, @@ -239,8 +333,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": True, + "temperature": True, }, "grok-4-1-fast-non-reasoning": { + "name": "Grok 4.1 Fast (Non-Reasoning)", + "release_date": "2025-11-19", + "last_updated": "2025-11-19", + "open_weights": False, "max_input_tokens": 2000000, "max_output_tokens": 30000, "text_inputs": True, @@ -253,8 +353,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": True, + "temperature": True, }, "grok-4-fast": { + "name": "Grok 4 Fast", + "release_date": "2025-09-19", + "last_updated": "2025-09-19", + "open_weights": False, "max_input_tokens": 2000000, "max_output_tokens": 30000, "text_inputs": True, @@ -267,8 +373,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": True, + "temperature": True, }, "grok-4-fast-non-reasoning": { + "name": "Grok 4 Fast (Non-Reasoning)", + "release_date": "2025-09-19", + "last_updated": "2025-09-19", + "open_weights": False, "max_input_tokens": 2000000, "max_output_tokens": 30000, "text_inputs": True, @@ -281,8 +393,15 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": True, + "temperature": True, }, "grok-4.20-experimental-beta-0304-non-reasoning": { + "name": "Grok 4.20 (Experimental, Non-Reasoning)", + "status": "beta", + "release_date": "2026-03-04", + "last_updated": "2026-03-04", + "open_weights": False, "max_input_tokens": 2000000, "max_output_tokens": 30000, "text_inputs": True, @@ -295,8 +414,15 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": True, + "temperature": True, }, "grok-4.20-experimental-beta-0304-reasoning": { + "name": "Grok 4.20 (Experimental, Reasoning)", + "status": "beta", + "release_date": "2026-03-04", + "last_updated": "2026-03-04", + "open_weights": False, "max_input_tokens": 2000000, "max_output_tokens": 30000, "text_inputs": True, @@ -309,8 +435,15 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": True, + "temperature": True, }, "grok-4.20-multi-agent-experimental-beta-0304": { + "name": "Grok 4.20 Multi-Agent (Experimental)", + "status": "beta", + "release_date": "2026-03-04", + "last_updated": "2026-03-04", + "open_weights": False, "max_input_tokens": 2000000, "max_output_tokens": 30000, "text_inputs": True, @@ -323,8 +456,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": True, + "temperature": True, }, "grok-beta": { + "name": "Grok Beta", + "release_date": "2024-11-01", + "last_updated": "2024-11-01", + "open_weights": False, "max_input_tokens": 131072, "max_output_tokens": 4096, "text_inputs": True, @@ -337,8 +476,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": False, + "temperature": True, }, "grok-code-fast-1": { + "name": "Grok Code Fast 1", + "release_date": "2025-08-28", + "last_updated": "2025-08-28", + "open_weights": False, "max_input_tokens": 256000, "max_output_tokens": 10000, "text_inputs": True, @@ -351,8 +496,14 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": True, "tool_calling": True, + "attachment": False, + "temperature": True, }, "grok-vision-beta": { + "name": "Grok Vision Beta", + "release_date": "2024-11-01", + "last_updated": "2024-11-01", + "open_weights": False, "max_input_tokens": 8192, "max_output_tokens": 4096, "text_inputs": True, @@ -365,5 +516,7 @@ _PROFILES: dict[str, dict[str, Any]] = { "video_outputs": False, "reasoning_output": False, "tool_calling": True, + "attachment": True, + "temperature": True, }, }