summaryrefslogtreecommitdiffhomepage
path: root/packages
diff options
context:
space:
mode:
authorNoam Bressler <[email protected]>2025-12-05 18:48:22 +0200
committerGitHub <[email protected]>2025-12-05 10:48:22 -0600
commit864c098701c27016afad20bc121cb1c307eb3dbc (patch)
treeeb1d8698365cc67828ef87f3a80a678114d8096d /packages
parentcfbaf81ef8f360d1df621d800d10b0ac2b3019a8 (diff)
downloadopencode-864c098701c27016afad20bc121cb1c307eb3dbc.tar.gz
opencode-864c098701c27016afad20bc121cb1c307eb3dbc.zip
add experimental.open_telemetry config option to enable OTEL spans (#4978)
Co-authored-by: noamzbr <[email protected]> Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> Co-authored-by: rekram1-node <[email protected]>
Diffstat (limited to 'packages')
-rw-r--r--packages/opencode/src/agent/agent.ts2
-rw-r--r--packages/opencode/src/config/config.ts4
-rw-r--r--packages/opencode/src/session/compaction.ts3
-rw-r--r--packages/opencode/src/session/prompt.ts5
-rw-r--r--packages/opencode/src/session/summary.ts4
5 files changed, 18 insertions, 0 deletions
diff --git a/packages/opencode/src/agent/agent.ts b/packages/opencode/src/agent/agent.ts
index 0e7a7c5d3..ea967616b 100644
--- a/packages/opencode/src/agent/agent.ts
+++ b/packages/opencode/src/agent/agent.ts
@@ -222,6 +222,7 @@ export namespace Agent {
}
export async function generate(input: { description: string }) {
+ const cfg = await Config.get()
const defaultModel = await Provider.defaultModel()
const model = await Provider.getModel(defaultModel.providerID, defaultModel.modelID)
const language = await Provider.getLanguage(model)
@@ -229,6 +230,7 @@ export namespace Agent {
system.push(PROMPT_GENERATE)
const existing = await list()
const result = await generateObject({
+ experimental_telemetry: { isEnabled: cfg.experimental?.openTelemetry },
temperature: 0.3,
prompt: [
...system.map(
diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts
index 2c691cedb..03c4a39fb 100644
--- a/packages/opencode/src/config/config.ts
+++ b/packages/opencode/src/config/config.ts
@@ -670,6 +670,10 @@ export namespace Config {
chatMaxRetries: z.number().optional().describe("Number of retries for chat completions on failure"),
disable_paste_summary: z.boolean().optional(),
batch_tool: z.boolean().optional().describe("Enable the batch tool"),
+ openTelemetry: z
+ .boolean()
+ .optional()
+ .describe("Enable OpenTelemetry spans for AI SDK calls (using the 'experimental_telemetry' flag)"),
primary_tools: z
.array(z.string())
.optional()
diff --git a/packages/opencode/src/session/compaction.ts b/packages/opencode/src/session/compaction.ts
index 07468995b..de75eda6e 100644
--- a/packages/opencode/src/session/compaction.ts
+++ b/packages/opencode/src/session/compaction.ts
@@ -10,6 +10,7 @@ import z from "zod"
import { SessionPrompt } from "./prompt"
import { Flag } from "../flag/flag"
import { Token } from "../util/token"
+import { Config } from "../config/config"
import { Log } from "../util/log"
import { ProviderTransform } from "@/provider/transform"
import { SessionProcessor } from "./processor"
@@ -96,6 +97,7 @@ export namespace SessionCompaction {
abort: AbortSignal
auto: boolean
}) {
+ const cfg = await Config.get()
const model = await Provider.getModel(input.model.providerID, input.model.modelID)
const language = await Provider.getLanguage(model)
const system = [...SystemPrompt.compaction(model.providerID)]
@@ -191,6 +193,7 @@ export namespace SessionCompaction {
},
],
}),
+ experimental_telemetry: { isEnabled: cfg.experimental?.openTelemetry },
})
if (result === "continue" && input.auto) {
const continueMsg = await Session.updateMessage({
diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts
index ebf0a57d0..2f0bc0902 100644
--- a/packages/opencode/src/session/prompt.ts
+++ b/packages/opencode/src/session/prompt.ts
@@ -42,6 +42,7 @@ import { Command } from "../command"
import { $, fileURLToPath } from "bun"
import { ConfigMarkdown } from "../config/markdown"
import { SessionSummary } from "./summary"
+import { Config } from "../config/config"
import { NamedError } from "@opencode-ai/util/error"
import { fn } from "@/util/fn"
import { SessionProcessor } from "./processor"
@@ -433,6 +434,7 @@ export namespace SessionPrompt {
}
// normal processing
+ const cfg = await Config.get()
const agent = await Agent.get(lastUser.agent)
msgs = insertReminders({
messages: msgs,
@@ -613,6 +615,7 @@ export namespace SessionPrompt {
},
],
}),
+ experimental_telemetry: { isEnabled: cfg.experimental?.openTelemetry },
})
if (result === "stop") break
continue
@@ -1418,6 +1421,7 @@ export namespace SessionPrompt {
input.history.filter((m) => m.info.role === "user" && !m.parts.every((p) => "synthetic" in p && p.synthetic))
.length === 1
if (!isFirst) return
+ const cfg = await Config.get()
const small =
(await Provider.getSmallModel(input.providerID)) ?? (await Provider.getModel(input.providerID, input.modelID))
const language = await Provider.getLanguage(small)
@@ -1464,6 +1468,7 @@ export namespace SessionPrompt {
],
headers: small.headers,
model: language,
+ experimental_telemetry: { isEnabled: cfg.experimental?.openTelemetry },
})
.then((result) => {
if (result.text)
diff --git a/packages/opencode/src/session/summary.ts b/packages/opencode/src/session/summary.ts
index 8d366e499..ba0a1a00c 100644
--- a/packages/opencode/src/session/summary.ts
+++ b/packages/opencode/src/session/summary.ts
@@ -1,4 +1,5 @@
import { Provider } from "@/provider/provider"
+import { Config } from "@/config/config"
import { fn } from "@/util/fn"
import z from "zod"
import { Session } from "."
@@ -60,6 +61,7 @@ export namespace SessionSummary {
}
async function summarizeMessage(input: { messageID: string; messages: MessageV2.WithParts[] }) {
+ const cfg = await Config.get()
const messages = input.messages.filter(
(m) => m.info.id === input.messageID || (m.info.role === "assistant" && m.info.parentID === input.messageID),
)
@@ -109,6 +111,7 @@ export namespace SessionSummary {
],
headers: small.headers,
model: language,
+ experimental_telemetry: { isEnabled: cfg.experimental?.openTelemetry },
})
log.info("title", { title: result.text })
userMsg.summary.title = result.text
@@ -150,6 +153,7 @@ export namespace SessionSummary {
},
],
headers: small.headers,
+ experimental_telemetry: { isEnabled: cfg.experimental?.openTelemetry },
}).catch(() => {})
if (result) summary = result.text
}