Skip to content

Commit 01ef9e5

Browse files
authored
feat: report token usage to Copilot context via LanguageModelDataPart (#60)
Add reportCopilotContextUsage function that reports token usage data (prompt_tokens, completion_tokens, total_tokens, cached_tokens) to VS Code's Copilot infrastructure using LanguageModelDataPart with a 'usage' MIME type. This allows Copilot to track context window utilization and token consumption for the DeepSeek model provider.
1 parent 11d020e commit 01ef9e5

1 file changed

Lines changed: 24 additions & 0 deletions

File tree

src/provider/stream.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ interface ResponseStreamState {
1414
emittedToolCallIds: string[];
1515
}
1616

17+
const COPILOT_USAGE_DATA_PART_MIME = 'usage';
18+
1719
export interface StreamChatCompletionOptions {
1820
prepared: PreparedChatRequest;
1921
progress: vscode.Progress<vscode.LanguageModelResponsePart>;
@@ -77,6 +79,7 @@ export function streamChatCompletion({
7779
);
7880
setCharsPerToken(charsPerToken);
7981
prepared.cacheDiagnostics.onUsage(usage, charsPerToken);
82+
reportCopilotContextUsage(progress, usage);
8083
},
8184
},
8285
token,
@@ -178,3 +181,24 @@ function updateCharsPerToken(
178181
}
179182
return charsPerToken;
180183
}
184+
185+
function reportCopilotContextUsage(
186+
progress: vscode.Progress<vscode.LanguageModelResponsePart>,
187+
usage: DeepSeekUsage,
188+
): void {
189+
const data = {
190+
prompt_tokens: usage.prompt_tokens,
191+
completion_tokens: usage.completion_tokens,
192+
total_tokens: usage.total_tokens,
193+
prompt_tokens_details: {
194+
cached_tokens: usage.prompt_cache_hit_tokens ?? 0,
195+
},
196+
};
197+
198+
progress.report(
199+
new vscode.LanguageModelDataPart(
200+
new TextEncoder().encode(JSON.stringify(data)),
201+
COPILOT_USAGE_DATA_PART_MIME,
202+
),
203+
);
204+
}

0 commit comments

Comments
 (0)