Просмотр исходного кода

fix(core): request default OpenAI reasoning summaries

Dustin Deus 1 месяц назад
Родитель
Сommit
fda66bfd40

+ 5 - 6
packages/core/src/session/runner/model.ts

@@ -2,6 +2,7 @@ export * as SessionRunnerModel from "./model"
 
 import { makeLocationNode } from "../../effect/app-node"
 import { Model } from "@opencode-ai/llm"
+import { OpenAI } from "@opencode-ai/llm/providers"
 // ast-grep-ignore: no-star-import
 import * as AnthropicMessages from "@opencode-ai/llm/protocols/anthropic-messages"
 // ast-grep-ignore: no-star-import
@@ -191,20 +192,18 @@ export const fromCatalogModel = (
   const packageName = ProviderV2.packageName(resolved.package)
   const key = apiKey(resolved, credential)
 
-  if (
-    OpenAICodex.isChatGPT(credential) &&
-    !ProviderV2.isAISDK(resolved.package) &&
-    isNativeOpenAI(resolved.package)
-  ) {
+  if (OpenAICodex.isChatGPT(credential) && !ProviderV2.isAISDK(resolved.package) && isNativeOpenAI(resolved.package)) {
     return Effect.succeed(codexModel(resolved, credential, key))
   }
 
   if (ProviderV2.isAISDK(resolved.package) && packageName === "@ai-sdk/openai") {
     if (OpenAICodex.isChatGPT(credential)) return Effect.succeed(codexModel(resolved, credential, key))
+    const id = resolved.modelID ?? resolved.id
     return Effect.succeed(
       withDefaults(resolved, OpenAIResponses.route)
+        .with(OpenAI.OpenAIProviderOptions.withOpenAIOptions(id, {}))
         .with({ auth: key === undefined ? Auth.none : Auth.bearer(key) })
-        .model({ id: resolved.modelID ?? resolved.id }),
+        .model({ id }),
     )
   }
   if (ProviderV2.isAISDK(resolved.package) && packageName === "@ai-sdk/anthropic") {

+ 14 - 0
packages/core/test/session-runner-model.test.ts

@@ -64,6 +64,20 @@ describe("SessionRunnerModel", () => {
     }),
   )
 
+  it.effect("requests OpenAI reasoning summaries for default reasoning models", () =>
+    Effect.gen(function* () {
+      const resolved = yield* SessionRunnerModel.fromCatalogModel(
+        model(ProviderV2.aisdk("@ai-sdk/openai"), {
+          modelID: "gpt-5.2",
+          settings: { baseURL: "https://openai.example/v1" },
+        }),
+      )
+      const prepared = yield* LLMClient.prepare(LLM.request({ model: resolved, prompt: "Hello" }))
+
+      expect(prepared.body).toMatchObject({ reasoning: { summary: "auto" } })
+    }),
+  )
+
   it.effect("keeps catalog apiKey credentials out of provider JSON", () =>
     Effect.gen(function* () {
       const resolved = yield* SessionRunnerModel.fromCatalogModel(

+ 1 - 0
packages/llm/src/providers/openai.ts

@@ -7,6 +7,7 @@ import * as OpenAIResponses from "../protocols/openai-responses"
 import { withOpenAIOptions, type OpenAIProviderOptionsInput } from "./openai-options"
 
 export type { OpenAIOptionsInput, OpenAIResponseIncludable } from "./openai-options"
+export * as OpenAIProviderOptions from "./openai-options"
 
 export const id = ProviderID.make("openai")