summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorRyan Vogel <[email protected]>2026-01-30 15:57:01 -0500
committeropencode <[email protected]>2026-01-30 21:06:48 +0000
commit4a56491e42c07e30b95238a06c9b9175e4763444 (patch)
tree1f72347080b49deca3846dcd4852b85013ee3405
parentf51bd28ed8f933364228979f6130206027f3061f (diff)
downloadopencode-4a56491e42c07e30b95238a06c9b9175e4763444.tar.gz
opencode-4a56491e42c07e30b95238a06c9b9175e4763444.zip
fix(provider): exclude chat models from textVerbosity setting (#11363)
-rw-r--r--packages/opencode/src/provider/transform.ts3
-rw-r--r--packages/opencode/test/provider/transform.test.ts72
2 files changed, 75 insertions, 0 deletions
diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts
index 6ca089c2f..dcc2605ab 100644
--- a/packages/opencode/src/provider/transform.ts
+++ b/packages/opencode/src/provider/transform.ts
@@ -594,9 +594,12 @@ export namespace ProviderTransform {
result["reasoningEffort"] = "medium"
}
+ // Only set textVerbosity for non-chat gpt-5.x models
+ // Chat models (e.g. gpt-5.2-chat-latest) only support "medium" verbosity
if (
input.model.api.id.includes("gpt-5.") &&
!input.model.api.id.includes("codex") &&
+ !input.model.api.id.includes("-chat") &&
input.model.providerID !== "azure"
) {
result["textVerbosity"] = "low"
diff --git a/packages/opencode/test/provider/transform.test.ts b/packages/opencode/test/provider/transform.test.ts
index 1d69a2a29..b818ab98c 100644
--- a/packages/opencode/test/provider/transform.test.ts
+++ b/packages/opencode/test/provider/transform.test.ts
@@ -103,6 +103,78 @@ describe("ProviderTransform.options - setCacheKey", () => {
})
})
+describe("ProviderTransform.options - gpt-5 textVerbosity", () => {
+ const sessionID = "test-session-123"
+
+ const createGpt5Model = (apiId: string) =>
+ ({
+ id: `openai/${apiId}`,
+ providerID: "openai",
+ api: {
+ id: apiId,
+ url: "https://api.openai.com",
+ npm: "@ai-sdk/openai",
+ },
+ name: apiId,
+ capabilities: {
+ temperature: true,
+ reasoning: true,
+ attachment: true,
+ toolcall: true,
+ input: { text: true, audio: false, image: true, video: false, pdf: false },
+ output: { text: true, audio: false, image: false, video: false, pdf: false },
+ interleaved: false,
+ },
+ cost: { input: 0.03, output: 0.06, cache: { read: 0.001, write: 0.002 } },
+ limit: { context: 128000, output: 4096 },
+ status: "active",
+ options: {},
+ headers: {},
+ }) as any
+
+ test("gpt-5.2 should have textVerbosity set to low", () => {
+ const model = createGpt5Model("gpt-5.2")
+ const result = ProviderTransform.options({ model, sessionID, providerOptions: {} })
+ expect(result.textVerbosity).toBe("low")
+ })
+
+ test("gpt-5.1 should have textVerbosity set to low", () => {
+ const model = createGpt5Model("gpt-5.1")
+ const result = ProviderTransform.options({ model, sessionID, providerOptions: {} })
+ expect(result.textVerbosity).toBe("low")
+ })
+
+ test("gpt-5.2-chat-latest should NOT have textVerbosity set (only supports medium)", () => {
+ const model = createGpt5Model("gpt-5.2-chat-latest")
+ const result = ProviderTransform.options({ model, sessionID, providerOptions: {} })
+ expect(result.textVerbosity).toBeUndefined()
+ })
+
+ test("gpt-5.1-chat-latest should NOT have textVerbosity set (only supports medium)", () => {
+ const model = createGpt5Model("gpt-5.1-chat-latest")
+ const result = ProviderTransform.options({ model, sessionID, providerOptions: {} })
+ expect(result.textVerbosity).toBeUndefined()
+ })
+
+ test("gpt-5.2-chat should NOT have textVerbosity set", () => {
+ const model = createGpt5Model("gpt-5.2-chat")
+ const result = ProviderTransform.options({ model, sessionID, providerOptions: {} })
+ expect(result.textVerbosity).toBeUndefined()
+ })
+
+ test("gpt-5-chat should NOT have textVerbosity set", () => {
+ const model = createGpt5Model("gpt-5-chat")
+ const result = ProviderTransform.options({ model, sessionID, providerOptions: {} })
+ expect(result.textVerbosity).toBeUndefined()
+ })
+
+ test("gpt-5.2-codex should NOT have textVerbosity set (codex models excluded)", () => {
+ const model = createGpt5Model("gpt-5.2-codex")
+ const result = ProviderTransform.options({ model, sessionID, providerOptions: {} })
+ expect(result.textVerbosity).toBeUndefined()
+ })
+})
+
describe("ProviderTransform.maxOutputTokens", () => {
test("returns 32k when modelLimit > 32k", () => {
const modelLimit = 100000