summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorShantur Rathore <[email protected]>2025-11-25 04:20:52 +0000
committerGitHub <[email protected]>2025-11-24 22:20:52 -0600
commit9b6d03c497d33d136cd635e44ba9e543b59d9f62 (patch)
tree7f081fac8abafbef75f767b929adaf1274949370
parentd3ea0446197a78d668342d360cc9d07fa5cc6fce (diff)
downloadopencode-9b6d03c497d33d136cd635e44ba9e543b59d9f62.tar.gz
opencode-9b6d03c497d33d136cd635e44ba9e543b59d9f62.zip
config: add setCacheKey in provider options (#4654)
Co-authored-by: GitHub Action <[email protected]>
-rw-r--r--packages/opencode/src/config/config.ts4
-rw-r--r--packages/opencode/src/provider/transform.ts10
-rw-r--r--packages/opencode/src/session/prompt.ts17
3 files changed, 26 insertions, 5 deletions
diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts
index 779a4e8e2..4fdbc0d2c 100644
--- a/packages/opencode/src/config/config.ts
+++ b/packages/opencode/src/config/config.ts
@@ -529,6 +529,10 @@ export namespace Config {
apiKey: z.string().optional(),
baseURL: z.string().optional(),
enterpriseUrl: z.string().optional().describe("GitHub Enterprise URL for copilot authentication"),
+ setCacheKey: z
+ .boolean()
+ .optional()
+ .describe("Enable promptCacheKey for this provider (default false)"),
timeout: z
.union([
z
diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts
index 6cf03fc06..7faea89b3 100644
--- a/packages/opencode/src/provider/transform.ts
+++ b/packages/opencode/src/provider/transform.ts
@@ -128,7 +128,13 @@ export namespace ProviderTransform {
return undefined
}
- export function options(providerID: string, modelID: string, npm: string, sessionID: string): Record<string, any> {
+ export function options(
+ providerID: string,
+ modelID: string,
+ npm: string,
+ sessionID: string,
+ providerOptions?: Record<string, any>,
+ ): Record<string, any> | undefined {
const result: Record<string, any> = {}
// switch to providerID later, for now use this
@@ -138,7 +144,7 @@ export namespace ProviderTransform {
}
}
- if (providerID === "openai") {
+ if (providerID === "openai" || providerOptions?.setCacheKey) {
result["promptCacheKey"] = sessionID
}
diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts
index 741e3cc7e..d1e60d577 100644
--- a/packages/opencode/src/session/prompt.ts
+++ b/packages/opencode/src/session/prompt.ts
@@ -475,13 +475,14 @@ export namespace SessionPrompt {
tools: lastUser.tools,
processor,
})
+ const provider = await Provider.getProvider(model.providerID)
const params = await Plugin.trigger(
"chat.params",
{
sessionID: sessionID,
agent: lastUser.agent,
model: model.info,
- provider: await Provider.getProvider(model.providerID),
+ provider,
message: lastUser,
},
{
@@ -491,7 +492,9 @@ export namespace SessionPrompt {
topP: agent.topP ?? ProviderTransform.topP(model.providerID, model.modelID),
options: pipe(
{},
- mergeDeep(ProviderTransform.options(model.providerID, model.modelID, model.npm ?? "", sessionID)),
+ mergeDeep(
+ ProviderTransform.options(model.providerID, model.modelID, model.npm ?? "", sessionID, provider?.options),
+ ),
mergeDeep(model.info.options),
mergeDeep(agent.options),
),
@@ -1412,7 +1415,15 @@ export namespace SessionPrompt {
(await Provider.getSmallModel(input.providerID)) ?? (await Provider.getModel(input.providerID, input.modelID))
const options = pipe(
{},
- mergeDeep(ProviderTransform.options(small.providerID, small.modelID, small.npm ?? "", input.session.id)),
+ mergeDeep(
+ ProviderTransform.options(
+ small.providerID,
+ small.modelID,
+ small.npm ?? "",
+ input.session.id,
+ provider?.options,
+ ),
+ ),
mergeDeep(ProviderTransform.smallOptions({ providerID: small.providerID, modelID: small.modelID })),
mergeDeep(small.info.options),
)