feat(model-profiles): new fields + Makefile target (#35788)

Extract additional fields from models.dev into `_model_data_to_profile`:
`name`, `status`, `release_date`, `last_updated`, `open_weights`,
`attachment`, `temperature`

Move the model profile refresh logic from an inline bash script in the
GitHub Actions workflow into a `make refresh-profiles` target in
`libs/model-profiles/Makefile`. This makes it runnable locally with a
single command and keeps the provider map in one place instead of
duplicated between CI and developer docs.
This commit is contained in:
Mason Daugherty
2026-03-12 09:56:25 -04:00
committed by GitHub
parent 1891d414be
commit 5d9568b5f5
15 changed files with 2373 additions and 34 deletions

View File

@@ -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,