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,9 +19,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"grok-4-fast-non-reasoning": {
"max_input_tokens": 2000000,
"max_output_tokens": 30000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
@@ -31,9 +33,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"grok-3-fast": {
"max_input_tokens": 131072,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
@@ -43,9 +47,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"grok-4": {
"max_input_tokens": 256000,
"max_output_tokens": 64000,
"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 +61,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"grok-2-vision": {
"max_input_tokens": 8192,
"max_output_tokens": 4096,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
@@ -67,9 +75,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"grok-code-fast-1": {
"max_input_tokens": 256000,
"max_output_tokens": 10000,
"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 +89,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"grok-2": {
"max_input_tokens": 131072,
"max_output_tokens": 8192,
"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 +103,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"grok-3-mini-fast-latest": {
"max_input_tokens": 131072,
"max_output_tokens": 8192,
"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 +117,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"grok-2-vision-1212": {
"max_input_tokens": 8192,
"max_output_tokens": 4096,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
@@ -115,9 +131,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"grok-3": {
"max_input_tokens": 131072,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
@@ -127,9 +145,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"grok-4-fast": {
"max_input_tokens": 2000000,
"max_output_tokens": 30000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
@@ -139,9 +159,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"grok-2-latest": {
"max_input_tokens": 131072,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
@@ -151,9 +173,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"grok-4-1-fast": {
"max_input_tokens": 2000000,
"max_output_tokens": 30000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
@@ -163,9 +187,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"grok-2-1212": {
"max_input_tokens": 131072,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
@@ -175,9 +201,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"grok-3-fast-latest": {
"max_input_tokens": 131072,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
@@ -187,9 +215,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"grok-3-latest": {
"max_input_tokens": 131072,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
@@ -199,9 +229,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"grok-2-vision-latest": {
"max_input_tokens": 8192,
"max_output_tokens": 4096,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
@@ -211,9 +243,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"grok-vision-beta": {
"max_input_tokens": 8192,
"max_output_tokens": 4096,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
@@ -223,9 +257,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"grok-3-mini": {
"max_input_tokens": 131072,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
@@ -235,9 +271,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"grok-beta": {
"max_input_tokens": 131072,
"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,
@@ -247,9 +285,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"grok-3-mini-latest": {
"max_input_tokens": 131072,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
@@ -259,9 +299,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"grok-4-1-fast-non-reasoning": {
"max_input_tokens": 2000000,
"max_output_tokens": 30000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
@@ -271,9 +313,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"grok-3-mini-fast": {
"max_input_tokens": 131072,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,