2
0
Эх сурвалжийг харах

fix: max output tokens when setting budget thinking tokens (#2056)

Co-authored-by: rekram1-node <[email protected]>
Ytzhak 5 сар өмнө
parent
commit
4654fb88de

+ 14 - 0
packages/opencode/src/provider/transform.ts

@@ -98,4 +98,18 @@ export namespace ProviderTransform {
     }
     return result
   }
+
+  export function maxOutputTokens(providerID: string, outputLimit: number, options: Record<string, any>): number {
+    if (providerID === "anthropic") {
+      const thinking = options["thinking"]
+      if (typeof thinking === "object" && thinking !== null) {
+        const type = thinking["type"]
+        const budgetTokens = thinking["budgetTokens"]
+        if (type === "enabled" && typeof budgetTokens === "number" && budgetTokens > 0) {
+          return outputLimit - budgetTokens
+        }
+      }
+    }
+    return outputLimit
+  }
 }

+ 1 - 1
packages/opencode/src/session/index.ts

@@ -1019,7 +1019,7 @@ export namespace Session {
           : undefined,
       maxRetries: 3,
       activeTools: Object.keys(tools).filter((x) => x !== "invalid"),
-      maxOutputTokens: outputLimit,
+      maxOutputTokens: ProviderTransform.maxOutputTokens(model.providerID, outputLimit, params.options),
       abortSignal: abort.signal,
       stopWhen: async ({ steps }) => {
         if (steps.length >= 1000) {