fix(opencode): include cache writes in ACP usage (#40450)
Co-authored-by: Aiden Cline <rekram1-node@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
5b4fb1f770
commit
9f38562237
@@ -656,7 +656,7 @@ function makeUsageService(sdk: OpencodeClient) {
|
|||||||
sessionId: params.sessionID,
|
sessionId: params.sessionID,
|
||||||
update: {
|
update: {
|
||||||
sessionUpdate: "usage_update",
|
sessionUpdate: "usage_update",
|
||||||
used: message.tokens.input + message.tokens.cache.read,
|
used: UsageService.contextTokens(message),
|
||||||
size,
|
size,
|
||||||
cost: { amount: UsageService.totalSessionCost(messages), currency: "USD" },
|
cost: { amount: UsageService.totalSessionCost(messages), currency: "USD" },
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -83,6 +83,10 @@ export function messageLoaderFromSDK(sdk: SDK): MessageLoaderInterface {
|
|||||||
|
|
||||||
export const messageLoaderLayer = (sdk: SDK) => Layer.succeed(MessageLoader, messageLoaderFromSDK(sdk))
|
export const messageLoaderLayer = (sdk: SDK) => Layer.succeed(MessageLoader, messageLoaderFromSDK(sdk))
|
||||||
|
|
||||||
|
export function contextTokens(message: AssistantTokenCost): number {
|
||||||
|
return message.tokens.input + message.tokens.cache.read + message.tokens.cache.write
|
||||||
|
}
|
||||||
|
|
||||||
export function buildUsage(message: AssistantTokenCost): Usage {
|
export function buildUsage(message: AssistantTokenCost): Usage {
|
||||||
const cachedReadTokens = message.tokens.cache.read
|
const cachedReadTokens = message.tokens.cache.read
|
||||||
const cachedWriteTokens = message.tokens.cache.write
|
const cachedWriteTokens = message.tokens.cache.write
|
||||||
@@ -207,7 +211,7 @@ const layer = Layer.effect(
|
|||||||
sessionId: input.sessionID,
|
sessionId: input.sessionID,
|
||||||
update: {
|
update: {
|
||||||
sessionUpdate: "usage_update",
|
sessionUpdate: "usage_update",
|
||||||
used: message.tokens.input + message.tokens.cache.read,
|
used: contextTokens(message),
|
||||||
size,
|
size,
|
||||||
cost: { amount: totalSessionCost(messages), currency: "USD" },
|
cost: { amount: totalSessionCost(messages), currency: "USD" },
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -207,7 +207,7 @@ describe("acp usage", () => {
|
|||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
it.effect("sends ACP usage_update with context size and cumulative assistant cost", () => {
|
it.effect("includes cache reads and writes in ACP context usage", () => {
|
||||||
const updates: SessionNotification[] = []
|
const updates: SessionNotification[] = []
|
||||||
return Effect.gen(function* () {
|
return Effect.gen(function* () {
|
||||||
const usage = yield* UsageService.Service
|
const usage = yield* UsageService.Service
|
||||||
@@ -222,7 +222,7 @@ describe("acp usage", () => {
|
|||||||
sessionId: "ses_1",
|
sessionId: "ses_1",
|
||||||
update: {
|
update: {
|
||||||
sessionUpdate: "usage_update",
|
sessionUpdate: "usage_update",
|
||||||
used: 15,
|
used: 22,
|
||||||
size: 128_000,
|
size: 128_000,
|
||||||
cost: { amount: 3, currency: "USD" },
|
cost: { amount: 3, currency: "USD" },
|
||||||
},
|
},
|
||||||
@@ -239,7 +239,7 @@ describe("acp usage", () => {
|
|||||||
input: 10,
|
input: 10,
|
||||||
output: 20,
|
output: 20,
|
||||||
reasoning: 0,
|
reasoning: 0,
|
||||||
cache: { read: 5, write: 0 },
|
cache: { read: 5, write: 7 },
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
]),
|
]),
|
||||||
|
|||||||
Reference in New Issue
Block a user