From a6c5cb90b1825cda1960d8a3177915cd00243545 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 13 Jun 2026 02:41:53 -0400 Subject: [PATCH] fix(models): complete GPT-5 Chat registration --- CHANGELOG.md | 2 +- Sources/Tachikoma/Core/ModelCapabilities.swift | 1 + Sources/Tachikoma/Models/Model.swift | 1 + Tests/TachikomaTests/Core/LanguageModelCoverageTests.swift | 1 + Tests/TachikomaTests/Core/ModelCapabilitiesTests.swift | 1 + 5 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e31b0a..5d6c690 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,7 @@ All notable changes to the Tachikoma project will be documented in this file. - Removed stale direct model support for retired or non-canonical IDs including GPT-5.1/5.2/pseudo-thinking models, deprecated Claude Sonnet/Opus 4 snapshots, Grok 2/3/4-fast rows, old Groq Llama/Mixtral/Gemma aliases, stale Mistral aliases, and invalid LM Studio `current`. ### Fixed -- OpenAI `gpt-5-chat-latest` now preserves its distinct model identity instead of being rewritten to `chat-latest`. +- OpenAI `gpt-5-chat-latest` now preserves its distinct model identity, appears in model listings, and applies GPT-5 parameter filtering instead of being rewritten to `chat-latest`. - SwiftPM consumers now resolve Commander from the package URL instead of accidentally inheriting a sibling local checkout. - Ollama model parsing now preserves explicit custom vision model IDs such as `qwen2.5vl:3b` instead of falling back to `llama3.3` (#16). - Auth resolution now snapshots environment-ignore state consistently, preventing parallel tests and concurrent callers from falling back to stored OpenRouter credentials when an environment override is present. diff --git a/Sources/Tachikoma/Core/ModelCapabilities.swift b/Sources/Tachikoma/Core/ModelCapabilities.swift index 9a97454..943af90 100644 --- a/Sources/Tachikoma/Core/ModelCapabilities.swift +++ b/Sources/Tachikoma/Core/ModelCapabilities.swift @@ -242,6 +242,7 @@ public final class ModelCapabilityRegistry: @unchecked Sendable { ) self.capabilities["openai:chat-latest"] = gpt5Capabilities + self.capabilities["openai:gpt-5-chat-latest"] = gpt5Capabilities self.capabilities["openai:gpt-5.5"] = gpt5Capabilities self.capabilities["openai:gpt-5.4"] = gpt5Capabilities self.capabilities["openai:gpt-5.4-mini"] = gpt5Capabilities diff --git a/Sources/Tachikoma/Models/Model.swift b/Sources/Tachikoma/Models/Model.swift index a8ad649..0fdc535 100644 --- a/Sources/Tachikoma/Models/Model.swift +++ b/Sources/Tachikoma/Models/Model.swift @@ -57,6 +57,7 @@ public enum LanguageModel: Sendable, CustomStringConvertible, Hashable { public static var allCases: [OpenAI] { [ .chatLatest, + .gpt5ChatLatest, .gpt55, .gpt54, .gpt54Mini, diff --git a/Tests/TachikomaTests/Core/LanguageModelCoverageTests.swift b/Tests/TachikomaTests/Core/LanguageModelCoverageTests.swift index f868850..c70304e 100644 --- a/Tests/TachikomaTests/Core/LanguageModelCoverageTests.swift +++ b/Tests/TachikomaTests/Core/LanguageModelCoverageTests.swift @@ -6,6 +6,7 @@ struct LanguageModelCoverageTests { func `OpenAI enum exposes properties`() { let models = LanguageModel.OpenAI.allCases #expect(!models.isEmpty) + #expect(models.contains(.gpt5ChatLatest)) for model in models { #expect(!model.modelId.isEmpty) _ = model.supportsVision diff --git a/Tests/TachikomaTests/Core/ModelCapabilitiesTests.swift b/Tests/TachikomaTests/Core/ModelCapabilitiesTests.swift index fd41f76..4ad0bfc 100644 --- a/Tests/TachikomaTests/Core/ModelCapabilitiesTests.swift +++ b/Tests/TachikomaTests/Core/ModelCapabilitiesTests.swift @@ -7,6 +7,7 @@ enum ModelCapabilitiesTests { @Test func `GPT-5 models exclude temperature and topP`() { let models: [LanguageModel] = [ + .openai(.gpt5ChatLatest), .openai(.gpt55), .openai(.gpt54), .openai(.gpt54Mini),