feat(model-profiles): add text_inputs and text_outputs (#35084)

- Add `text_inputs` and `text_outputs` fields to `ModelProfile`
- Regenerate `_profiles.py` for all providers

## Why

models.dev data includes `'text'` as both an input and output modality,
but we didn't capture it.

models.dev broadly contains models without text input (Whisper/ASR) and
without text output (image generators, TTS).

Without this, downstream consumers can't filter on model text support
(e.g. preventing users from passing text input to an audio-only model).

---

We'd need to also run for Google, AWS and cut releases for all to
propagate
This commit is contained in:
Mason Daugherty
2026-02-09 14:50:09 -05:00
committed by GitHub
parent e8e47b083e
commit 4ca586b322
13 changed files with 624 additions and 60 deletions

View File

@@ -19,33 +19,81 @@ _PROFILES: dict[str, dict[str, Any]] = {
"moonshotai/Kimi-K2-Instruct": {
"max_input_tokens": 131072,
"max_output_tokens": 16384,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"moonshotai/Kimi-K2.5": {
"max_input_tokens": 262144,
"max_output_tokens": 262144,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": True,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"moonshotai/Kimi-K2-Instruct-0905": {
"max_input_tokens": 262144,
"max_output_tokens": 16384,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"MiniMaxAI/MiniMax-M2": {
"max_input_tokens": 204800,
"max_output_tokens": 204800,
"moonshotai/Kimi-K2-Thinking": {
"max_input_tokens": 262144,
"max_output_tokens": 262144,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"MiniMaxAI/MiniMax-M2.1": {
"max_input_tokens": 204800,
"max_output_tokens": 131072,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"XiaomiMiMo/MiMo-V2-Flash": {
"max_input_tokens": 262144,
"max_output_tokens": 4096,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
@@ -55,9 +103,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"Qwen/Qwen3-Embedding-8B": {
"max_input_tokens": 32000,
"max_output_tokens": 4096,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
@@ -67,9 +117,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"Qwen/Qwen3-Embedding-4B": {
"max_input_tokens": 32000,
"max_output_tokens": 2048,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
@@ -79,9 +131,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"Qwen/Qwen3-Coder-480B-A35B-Instruct": {
"max_input_tokens": 262144,
"max_output_tokens": 66536,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
@@ -91,9 +145,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"Qwen/Qwen3-235B-A22B-Thinking-2507": {
"max_input_tokens": 262144,
"max_output_tokens": 131072,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
@@ -103,9 +159,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"Qwen/Qwen3-Next-80B-A3B-Instruct": {
"max_input_tokens": 262144,
"max_output_tokens": 66536,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
@@ -115,69 +173,67 @@ _PROFILES: dict[str, dict[str, Any]] = {
"Qwen/Qwen3-Next-80B-A3B-Thinking": {
"max_input_tokens": 262144,
"max_output_tokens": 131072,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"zai-org/GLM-4.5": {
"max_input_tokens": 131072,
"max_output_tokens": 98304,
"zai-org/GLM-4.7": {
"max_input_tokens": 204800,
"max_output_tokens": 131072,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"zai-org/GLM-4.6": {
"zai-org/GLM-4.7-Flash": {
"max_input_tokens": 200000,
"max_output_tokens": 128000,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"zai-org/GLM-4.5-Air": {
"max_input_tokens": 128000,
"max_output_tokens": 96000,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"deepseek-ai/Deepseek-V3-0324": {
"max_input_tokens": 16384,
"max_output_tokens": 8192,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"deepseek-ai/DeepSeek-R1-0528": {
"max_input_tokens": 163840,
"max_output_tokens": 163840,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"deepseek-ai/DeepSeek-V3.2": {
"max_input_tokens": 163840,
"max_output_tokens": 65536,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,