summaryrefslogtreecommitdiffhomepage
path: root/packages
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-06-16 11:41:45 -0400
committerDax Raad <[email protected]>2025-06-16 11:41:54 -0400
commit1a553e525f70419ac893bec1a7fc3ea839b89b2c (patch)
tree3e11cc11b9db677a80ff960689a4579cf7391dee /packages
parent3c4e96621660519d260cc97561684ef006df2710 (diff)
downloadopencode-1a553e525f70419ac893bec1a7fc3ea839b89b2c.tar.gz
opencode-1a553e525f70419ac893bec1a7fc3ea839b89b2c.zip
enable prompt caching for anthropic
Diffstat (limited to 'packages')
-rw-r--r--packages/opencode/src/provider/provider.ts3
-rw-r--r--packages/opencode/src/session/index.ts36
2 files changed, 34 insertions, 5 deletions
diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts
index e55a5795f..c6d09b0d8 100644
--- a/packages/opencode/src/provider/provider.ts
+++ b/packages/opencode/src/provider/provider.ts
@@ -268,7 +268,6 @@ export namespace Provider {
}
const TOOLS = [
- BashTool,
EditTool,
WebFetchTool,
GlobTool,
@@ -281,9 +280,7 @@ export namespace Provider {
EditTool,
// MultiEditTool,
WriteTool,
- TodoWriteTool,
TaskTool,
- TodoReadTool,
]
const TOOL_MAPPING: Record<string, Tool.Info[]> = {
anthropic: TOOLS.filter((t) => t.id !== "opencode.patch"),
diff --git a/packages/opencode/src/session/index.ts b/packages/opencode/src/session/index.ts
index cb3d6c89e..a04472d39 100644
--- a/packages/opencode/src/session/index.ts
+++ b/packages/opencode/src/session/index.ts
@@ -13,6 +13,7 @@ import {
type LanguageModelUsage,
type CoreMessage,
type UIMessage,
+ type LanguageModelV1Middleware,
} from "ai"
import { z, ZodSchema } from "zod"
import { Decimal } from "decimal.js"
@@ -234,6 +235,13 @@ export namespace Session {
(x): CoreMessage => ({
role: "system",
content: x,
+ providerOptions: {
+ ...(input.providerID === "anthropic"
+ ? {
+ cacheControl: { type: "ephemeral" },
+ }
+ : {}),
+ },
}),
),
...convertToCoreMessages([
@@ -270,7 +278,7 @@ export namespace Session {
msgs.push(msg)
const system = input.system ?? SystemPrompt.provider(input.providerID)
- system.push(...(await SystemPrompt.environment(input.sessionID)))
+ system.push(...(await SystemPrompt.environment()))
system.push(...(await SystemPrompt.custom()))
const next: Message.Info = {
@@ -379,6 +387,24 @@ export namespace Session {
}
let text: Message.TextPart | undefined
+ await Bun.write(
+ "/tmp/message.json",
+ JSON.stringify(
+ [
+ ...system.map(
+ (x): CoreMessage => ({
+ role: "system",
+ content: x,
+ }),
+ ),
+ ...convertToCoreMessages(
+ msgs.map(toUIMessage).filter((x) => x.parts.length > 0),
+ ),
+ ],
+ null,
+ 2,
+ ),
+ )
const result = streamText({
onStepFinish: async (step) => {
log.info("step finish", {
@@ -447,6 +473,13 @@ export namespace Session {
(x): CoreMessage => ({
role: "system",
content: x,
+ providerOptions: {
+ ...(input.providerID === "anthropic"
+ ? {
+ cacheControl: { type: "ephemeral" },
+ }
+ : {}),
+ },
}),
),
...convertToCoreMessages(
@@ -455,7 +488,6 @@ export namespace Session {
],
temperature: model.info.id === "codex-mini-latest" ? undefined : 0,
tools: {
- ...(await MCP.tools()),
...tools,
},
model: model.language,