mirror of
https://github.com/Kilo-Org/kilocode.git
synced 2026-09-24 16:02:55 +08:00
fix(vscode): fix context usage calculation and compact error handling
- Add limit field to ProviderModel types to match actual server response (server sends limit.context, not contextLength) - Use limit.context for context usage percentage with contextLength fallback - Show task header when messages exist, even before title is generated - Validate model selection before compact instead of hardcoding kilo fallback
This commit is contained in:
@@ -523,9 +523,18 @@ export class KiloProvider implements vscode.WebviewViewProvider {
|
||||
return
|
||||
}
|
||||
|
||||
if (!providerID || !modelID) {
|
||||
console.error("[Kilo New] KiloProvider: No model selected for compact")
|
||||
this.postMessage({
|
||||
type: "error",
|
||||
message: "No model selected. Connect a provider to compact this session.",
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
const workspaceDir = this.getWorkspaceDirectory()
|
||||
await this.httpClient.summarize(target, providerID || "kilo", modelID || "kilo/auto", workspaceDir)
|
||||
await this.httpClient.summarize(target, providerID, modelID, workspaceDir)
|
||||
} catch (error) {
|
||||
console.error("[Kilo New] KiloProvider: Failed to compact session:", error)
|
||||
this.postMessage({
|
||||
|
||||
@@ -100,6 +100,8 @@ export interface ProviderModel {
|
||||
contextLength?: number
|
||||
releaseDate?: string
|
||||
latest?: boolean
|
||||
// Actual shape returned by the server (Provider.Model)
|
||||
limit?: { context: number; input?: number; output: number }
|
||||
}
|
||||
|
||||
// Provider definition
|
||||
|
||||
@@ -14,7 +14,7 @@ export const TaskHeader: Component = () => {
|
||||
|
||||
const title = createMemo(() => session.currentSession()?.title)
|
||||
const hasMessages = createMemo(() => session.messages().length > 0)
|
||||
const visible = createMemo(() => !!(title() && hasMessages()))
|
||||
const visible = createMemo(() => hasMessages())
|
||||
const busy = createMemo(() => session.status() === "busy")
|
||||
|
||||
const cost = createMemo(() => {
|
||||
|
||||
@@ -442,7 +442,8 @@ export const SessionProvider: ParentComponent = (props) => {
|
||||
if (total === 0) continue
|
||||
const sel = selected()
|
||||
const model = sel ? provider.findModel(sel) : undefined
|
||||
const percentage = model?.contextLength ? Math.round((total / model.contextLength) * 100) : null
|
||||
const limit = model?.limit?.context ?? model?.contextLength
|
||||
const percentage = limit ? Math.round((total / limit) * 100) : null
|
||||
return { tokens: total, percentage }
|
||||
}
|
||||
return undefined
|
||||
|
||||
@@ -157,6 +157,8 @@ export interface ProviderModel {
|
||||
contextLength?: number
|
||||
releaseDate?: string
|
||||
latest?: boolean
|
||||
// Actual shape returned by the server (Provider.Model)
|
||||
limit?: { context: number; input?: number; output: number }
|
||||
}
|
||||
|
||||
export interface Provider {
|
||||
|
||||
Reference in New Issue
Block a user