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

support token caching for anthropic via openrouter

Dax Raad 8 месяцев назад
Родитель
Сommit
f1a2b2eba4
2 измененных файлов с 32 добавлено и 21 удалено
  1. 24 0
      packages/opencode/src/provider/transform.ts
  2. 8 21
      packages/opencode/src/session/index.ts

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

@@ -0,0 +1,24 @@
+import type { CoreMessage } from "ai"
+
+export namespace ProviderTransform {
+  export function message(
+    msg: CoreMessage,
+    index: number,
+    providerID: string,
+    modelID: string,
+  ) {
+    if (
+      (providerID === "anthropic" || modelID.includes("anthropic")) &&
+      index < 4
+    ) {
+      msg.providerOptions = {
+        ...msg.providerOptions,
+        anthropic: {
+          cacheControl: { type: "ephemeral" },
+        },
+      }
+    }
+
+    return msg
+  }
+}

+ 8 - 21
packages/opencode/src/session/index.ts

@@ -32,6 +32,7 @@ import { Flag } from "../flag/flag"
 import type { ModelsDev } from "../provider/models"
 import { Installation } from "../installation"
 import { Config } from "../config/config"
+import { ProviderTransform } from "../provider/transform"
 
 export namespace Session {
   const log = Log.create({ service: "session" })
@@ -266,15 +267,6 @@ export namespace Session {
             (x): CoreMessage => ({
               role: "system",
               content: x,
-              providerOptions: {
-                ...(input.providerID === "anthropic"
-                  ? {
-                      anthropic: {
-                        cacheControl: { type: "ephemeral" },
-                      },
-                    }
-                  : {}),
-              },
             }),
           ),
           ...convertToCoreMessages([
@@ -284,7 +276,9 @@ export namespace Session {
               parts: toParts(input.parts),
             },
           ]),
-        ],
+        ].map((msg, i) =>
+          ProviderTransform.message(msg, i, input.providerID, input.modelID),
+        ),
         model: model.language,
       })
         .then((result) => {
@@ -515,24 +509,17 @@ export namespace Session {
       maxSteps: 1000,
       messages: [
         ...system.map(
-          (x, index): CoreMessage => ({
+          (x): CoreMessage => ({
             role: "system",
             content: x,
-            providerOptions: {
-              ...(input.providerID === "anthropic" && index < 4
-                ? {
-                    anthropic: {
-                      cacheControl: { type: "ephemeral" },
-                    },
-                  }
-                : {}),
-            },
           }),
         ),
         ...convertToCoreMessages(
           msgs.map(toUIMessage).filter((x) => x.parts.length > 0),
         ),
-      ],
+      ].map((msg, i) =>
+        ProviderTransform.message(msg, i, input.providerID, input.modelID),
+      ),
       temperature: model.info.temperature ? 0 : undefined,
       tools: {
         ...tools,