fix(plugins): improve session idle event (#1615)

This commit is contained in:
Timo Clasen
2025-08-05 12:16:43 +02:00
committed by GitHub
parent 8168626cd3
commit 4957fca718

View File

@@ -122,6 +122,7 @@ export namespace Session {
const sessions = new Map<string, Info>() const sessions = new Map<string, Info>()
const messages = new Map<string, MessageV2.Info[]>() const messages = new Map<string, MessageV2.Info[]>()
const pending = new Map<string, AbortController>() const pending = new Map<string, AbortController>()
const autoCompacting = new Map<string, boolean>()
const queued = new Map< const queued = new Map<
string, string,
{ {
@@ -137,6 +138,7 @@ export namespace Session {
sessions, sessions,
messages, messages,
pending, pending,
autoCompacting,
queued, queued,
} }
}, },
@@ -615,6 +617,8 @@ export namespace Session {
const tokens = const tokens =
previous.tokens.input + previous.tokens.cache.read + previous.tokens.cache.write + previous.tokens.output previous.tokens.input + previous.tokens.cache.read + previous.tokens.cache.write + previous.tokens.output
if (model.info.limit.context && tokens > Math.max((model.info.limit.context - outputLimit) * 0.9, 0)) { if (model.info.limit.context && tokens > Math.max((model.info.limit.context - outputLimit) * 0.9, 0)) {
state().autoCompacting.set(input.sessionID, true)
await summarize({ await summarize({
sessionID: input.sessionID, sessionID: input.sessionID,
providerID: input.providerID, providerID: input.providerID,
@@ -623,7 +627,6 @@ export namespace Session {
return chat(input) return chat(input)
} }
} }
using abort = lock(input.sessionID) using abort = lock(input.sessionID)
const lastSummary = msgs.findLast((msg) => msg.info.role === "assistant" && msg.info.summary === true) const lastSummary = msgs.findLast((msg) => msg.info.role === "assistant" && msg.info.summary === true)
@@ -1319,9 +1322,19 @@ export namespace Session {
state().pending.set(sessionID, controller) state().pending.set(sessionID, controller)
return { return {
signal: controller.signal, signal: controller.signal,
[Symbol.dispose]() { async [Symbol.dispose]() {
log.info("unlocking", { sessionID }) log.info("unlocking", { sessionID })
state().pending.delete(sessionID) state().pending.delete(sessionID)
const isAutoCompacting = state().autoCompacting.get(sessionID) ?? false
if (isAutoCompacting) {
state().autoCompacting.delete(sessionID)
return
}
const session = await get(sessionID)
if (session.parentID) return
Bus.publish(Event.Idle, { Bus.publish(Event.Idle, {
sessionID, sessionID,
}) })
@@ -1344,8 +1357,8 @@ export namespace Session {
} }
return { return {
cost: new Decimal(0) cost: new Decimal(0)
.add(new Decimal(tokens.input).mul(model.cost?.input?? 0).div(1_000_000)) .add(new Decimal(tokens.input).mul(model.cost?.input ?? 0).div(1_000_000))
.add(new Decimal(tokens.output).mul(model.cost?.output?? 0).div(1_000_000)) .add(new Decimal(tokens.output).mul(model.cost?.output ?? 0).div(1_000_000))
.add(new Decimal(tokens.cache.read).mul(model.cost?.cache_read ?? 0).div(1_000_000)) .add(new Decimal(tokens.cache.read).mul(model.cost?.cache_read ?? 0).div(1_000_000))
.add(new Decimal(tokens.cache.write).mul(model.cost?.cache_write ?? 0).div(1_000_000)) .add(new Decimal(tokens.cache.write).mul(model.cost?.cache_write ?? 0).div(1_000_000))
.toNumber(), .toNumber(),