Skip to content

Commit 2c8eecf

Browse files
Add GPT-5.4 mini and nano support (#140)
1 parent 542cb38 commit 2c8eecf

5 files changed

Lines changed: 41 additions & 1 deletion

File tree

app/openai_constants.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,16 @@
4141
GPT_5_2_2025_12_11_MODEL = "gpt-5.2-2025-12-11"
4242
GPT_5_3_CHAT_LATEST_MODEL = "gpt-5.3-chat-latest"
4343
GPT_5_4_MODEL = "gpt-5.4"
44+
GPT_5_4_MINI_MODEL = "gpt-5.4-mini"
45+
GPT_5_4_NANO_MODEL = "gpt-5.4-nano"
4446
O3_MODEL = "o3"
4547
O4_MINI_MODEL = "o4-mini"
4648
GPT_5_2025_08_07_MODEL = "gpt-5-2025-08-07"
4749
GPT_5_MINI_2025_08_07_MODEL = "gpt-5-mini-2025-08-07"
4850
GPT_5_NANO_2025_08_07_MODEL = "gpt-5-nano-2025-08-07"
4951
GPT_5_4_2026_03_05_MODEL = "gpt-5.4-2026-03-05"
52+
GPT_5_4_MINI_2026_03_17_MODEL = "gpt-5.4-mini-2026-03-17"
53+
GPT_5_4_NANO_2026_03_17_MODEL = "gpt-5.4-nano-2026-03-17"
5054
O3_2025_04_16_MODEL = "o3-2025-04-16"
5155
O4_MINI_2025_04_16_MODEL = "o4-mini-2025-04-16"
5256

@@ -97,6 +101,8 @@
97101
GPT_5_1_2025_11_13_MODEL: (3, 1),
98102
GPT_5_2_2025_12_11_MODEL: (3, 1),
99103
GPT_5_4_2026_03_05_MODEL: (3, 1),
104+
GPT_5_4_MINI_2026_03_17_MODEL: (3, 1),
105+
GPT_5_4_NANO_2026_03_17_MODEL: (3, 1),
100106
# Reasoning models (dated)
101107
O3_2025_04_16_MODEL: (3, 1),
102108
O4_MINI_2025_04_16_MODEL: (3, 1),
@@ -121,6 +127,8 @@
121127
GPT_5_1_MODEL: GPT_5_1_2025_11_13_MODEL,
122128
GPT_5_2_MODEL: GPT_5_2_2025_12_11_MODEL,
123129
GPT_5_4_MODEL: GPT_5_4_2026_03_05_MODEL,
130+
GPT_5_4_MINI_MODEL: GPT_5_4_MINI_2026_03_17_MODEL,
131+
GPT_5_4_NANO_MODEL: GPT_5_4_NANO_2026_03_17_MODEL,
124132
GPT_5_SEARCH_API_MODEL: GPT_5_SEARCH_API_2025_10_14_MODEL,
125133
O3_MODEL: O3_2025_04_16_MODEL,
126134
O4_MINI_MODEL: O4_MINI_2025_04_16_MODEL,
@@ -163,6 +171,8 @@
163171
GPT_5_1_2025_11_13_MODEL: 128000,
164172
GPT_5_2_2025_12_11_MODEL: 400000,
165173
GPT_5_4_2026_03_05_MODEL: 272000,
174+
GPT_5_4_MINI_2026_03_17_MODEL: 400000,
175+
GPT_5_4_NANO_2026_03_17_MODEL: 400000,
166176
# Reasoning models (dated)
167177
O3_2025_04_16_MODEL: 128000,
168178
O4_MINI_2025_04_16_MODEL: 128000,

app/slack_ui.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
GPT_4_1_MINI_MODEL,
1111
GPT_5_3_CHAT_LATEST_MODEL,
1212
GPT_5_4_MODEL,
13+
GPT_5_4_MINI_MODEL,
14+
GPT_5_4_NANO_MODEL,
1315
GPT_5_2_CHAT_LATEST_MODEL,
1416
GPT_5_2_MODEL,
1517
GPT_5_1_CHAT_LATEST_MODEL,
@@ -450,6 +452,14 @@ def build_configure_modal(context: BoltContext) -> dict:
450452
"text": {"type": "plain_text", "text": "GPT-5.4"},
451453
"value": GPT_5_4_MODEL,
452454
},
455+
{
456+
"text": {"type": "plain_text", "text": "GPT-5.4-mini"},
457+
"value": GPT_5_4_MINI_MODEL,
458+
},
459+
{
460+
"text": {"type": "plain_text", "text": "GPT-5.4-nano"},
461+
"value": GPT_5_4_NANO_MODEL,
462+
},
453463
{
454464
"text": {"type": "plain_text", "text": "GPT-5.3-chat-latest"},
455465
"value": GPT_5_3_CHAT_LATEST_MODEL,

tests/model_constants_test.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,11 @@
1111
GPT_5_2_MODEL,
1212
GPT_5_2_2025_12_11_MODEL,
1313
GPT_5_4_MODEL,
14+
GPT_5_4_MINI_MODEL,
15+
GPT_5_4_NANO_MODEL,
1416
GPT_5_4_2026_03_05_MODEL,
17+
GPT_5_4_MINI_2026_03_17_MODEL,
18+
GPT_5_4_NANO_2026_03_17_MODEL,
1519
)
1620

1721
def test_alias_resolution():
@@ -31,6 +35,14 @@ def test_gpt_5_4_alias_resolution():
3135
"""Ensures the GPT-5.4 alias resolves to the dated release."""
3236
assert resolve_model_alias(GPT_5_4_MODEL) == GPT_5_4_2026_03_05_MODEL
3337

38+
def test_gpt_5_4_mini_alias_resolution():
39+
"""Ensures the GPT-5.4-mini alias resolves to the dated release."""
40+
assert resolve_model_alias(GPT_5_4_MINI_MODEL) == GPT_5_4_MINI_2026_03_17_MODEL
41+
42+
def test_gpt_5_4_nano_alias_resolution():
43+
"""Ensures the GPT-5.4-nano alias resolves to the dated release."""
44+
assert resolve_model_alias(GPT_5_4_NANO_MODEL) == GPT_5_4_NANO_2026_03_17_MODEL
45+
3446
def test_unregistered_model_fails():
3547
"""Tests that resolving an unregistered model raises NotImplementedError."""
3648
# First, test the resolver

tests/openai_ops_test.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,8 @@ def fake_calculate_num_tokens(messages, model=None): # type: ignore[no-redef]
163163
("gpt-5.1-2025-11-13", True),
164164
("gpt-5.2-2025-12-11", True),
165165
("gpt-5.4", True),
166+
("gpt-5.4-mini", True),
167+
("gpt-5.4-nano", True),
166168
("gpt-5-nano", True),
167169
("o3", True),
168170
("o4-mini", True),
@@ -186,6 +188,8 @@ def test_is_reasoning_heuristics(model, expected):
186188
("gpt-5.2-chat-latest", False, 0.55, 11, "U678"),
187189
(GPT_5_3_CHAT_LATEST_MODEL, False, 0.55, 11, "U789"),
188190
(GPT_5_4_MODEL, True, 0.55, 11, "U890"),
191+
("gpt-5.4-mini", True, 0.55, 11, "U901"),
192+
("gpt-5.4-nano", True, 0.55, 11, "U902"),
189193
],
190194
)
191195
def test_sync_tokens_and_sampling_behavior(fake_clients, api_type, model, is_reasoning, temperature, timeout, user):

tests/slack_ui_test.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
from app.openai_constants import (
55
GPT_5_3_CHAT_LATEST_MODEL,
66
GPT_5_4_MODEL,
7+
GPT_5_4_MINI_MODEL,
8+
GPT_5_4_NANO_MODEL,
79
)
810

911

@@ -27,8 +29,10 @@ def test_build_configure_modal_includes_new_models():
2729
options = modal["blocks"][1]["element"]["options"]
2830
values = [option["value"] for option in options]
2931

30-
assert values[:4] == [
32+
assert values[:6] == [
3133
GPT_5_4_MODEL,
34+
GPT_5_4_MINI_MODEL,
35+
GPT_5_4_NANO_MODEL,
3236
GPT_5_3_CHAT_LATEST_MODEL,
3337
"gpt-5.2-chat-latest",
3438
"gpt-5.2",

0 commit comments

Comments
 (0)