/
Alex_Ural
/
opencode
Обзор
Документация
Войти
/
Alex_Ural
/
opencode
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
packages/app/src/components/session/session-context-metrics.ts
65 строк
2 KB
Luke Parker
fix(app): align context tokens with usage (#36015)
10 июл 2026, 02:12
Не верифицирован
10 июл 2026, 02:12
b94e55c
Код
Авторство
О чём код?
import type { AssistantMessage, Message } from "@opencode-ai/sdk/v2/client" type Provider = { id: string name?: string models: Record<string, Model | undefined> } type Model = { name?: string limit: { context: number } } type Context = { message: AssistantMessage provider?: Provider model?: Model providerLabel: string modelLabel: string limit: number | undefined input: number total: number usage: number | null } const tokenTotal = (msg: AssistantMessage) => { return msg.tokens.input + msg.tokens.output + msg.tokens.reasoning + msg.tokens.cache.read + msg.tokens.cache.write } const lastAssistantWithTokens = (messages: Message[]) => { for (let i = messages.length - 1; i >= 0; i--) { const msg = messages[i] if (msg.role !== "assistant") continue if (tokenTotal(msg) <= 0) continue return msg } } const build = (messages: Message[] = [], providers: Provider[] = []): Context | undefined => { const message = lastAssistantWithTokens(messages) if (!message) return undefined const provider = providers.find((item) => item.id === message.providerID) const model = provider?.models[message.modelID] const limit = model?.limit.context const total = tokenTotal(message) return { message, provider, model, providerLabel: provider?.name ?? message.providerID, modelLabel: model?.name ?? message.modelID, limit, input: message.tokens.input, total, usage: limit ? Math.round((total / limit) * 100) : null, } } export function getSessionContext(messages: Message[] = [], providers: Provider[] = []) { return build(messages, providers) }