@@ -403,9 +403,9 @@ export function isWorkspaceOpen(): boolean {
403
403
/**
404
404
* Checks if a given language model part defines a cache breakpoint.
405
405
*/
406
- export function isCacheBreakpointPart ( part : unknown ) : part is vscode . LanguageModelDataPart & { mimeType : LanguageModelDataPartMimeType . CacheBreakpoint } {
407
- return ( part instanceof vscode . LanguageModelDataPart ) &&
408
- part . mimeType === LanguageModelDataPartMimeType . CacheBreakpoint ;
406
+ export function isCacheBreakpointPart ( part : unknown ) : part is vscode . LanguageModelDataPart & { mimeType : LanguageModelDataPartMimeType . CacheControl } {
407
+ return part instanceof vscode . LanguageModelDataPart &&
408
+ part . mimeType === LanguageModelDataPartMimeType . CacheControl ;
409
409
}
410
410
411
411
/**
@@ -417,40 +417,28 @@ export function isCacheBreakpointPart(part: unknown): part is vscode.LanguageMod
417
417
* or if the parsed data does not match the expected schema.
418
418
*/
419
419
export function parseCacheBreakpoint ( part : vscode . LanguageModelDataPart ) : LanguageModelCacheBreakpoint {
420
- if ( part . mimeType !== LanguageModelDataPartMimeType . CacheBreakpoint ) {
421
- throw new Error ( `Expected LanguageModelDataPart with mimeType ${ LanguageModelDataPartMimeType . CacheBreakpoint } , but got ${ part . mimeType } ` ) ;
420
+ if ( part . mimeType !== LanguageModelDataPartMimeType . CacheControl ) {
421
+ throw new Error ( `Expected LanguageModelDataPart with mimeType ${ LanguageModelDataPartMimeType . CacheControl } , but got ${ part . mimeType } ` ) ;
422
422
}
423
423
424
- let data : unknown ;
425
- try {
426
- data = JSON . parse ( part . data . toString ( ) ) ;
427
- } catch ( error ) {
428
- throw new Error ( `Failed to parse LanguageModelDataPart JSON: ${ error } ` ) ;
424
+ // By matching the Copilot extension, other extensions that use models from either Copilot
425
+ // or Positron Assistant can set cache breakpoints with the same schema.
426
+ // See: https://github.com/microsoft/vscode-copilot-chat/blob/6aeac371813be9037e74395186ec5b5b94089245/src/extension/byok/vscode-node/anthropicMessageConverter.ts#L22
427
+ const type = part . data . toString ( ) ;
428
+ if ( ! ( type === LanguageModelCacheBreakpointType . Ephemeral ) ) {
429
+ throw new Error ( `Expected LanguageModelDataPart to contain a LanguageModelCacheBreakpoint, but got: ${ type } ` ) ;
429
430
}
430
431
431
- if ( ! isCacheBreakpoint ( data ) ) {
432
- throw new Error ( `Expected LanguageModelDataPart to contain a LanguageModelCacheBreakpoint, but got: ${ JSON . stringify ( data ) } ` ) ;
433
- }
434
-
435
- return data ;
436
- }
437
-
438
- function isCacheBreakpoint ( obj : unknown ) : obj is LanguageModelCacheBreakpoint {
439
- return typeof obj === 'object' &&
440
- obj !== null &&
441
- 'type' in obj &&
442
- obj . type === LanguageModelCacheBreakpointType . Ephemeral ;
432
+ return { type } ;
443
433
}
444
434
445
435
/**
446
436
* Create a language model part that represents a cache control point.
447
437
* @returns A language model part representing the cache control point.
448
438
*/
449
439
export function languageModelCacheBreakpointPart ( ) : vscode . LanguageModelDataPart {
450
- return vscode . LanguageModelDataPart . json (
451
- {
452
- type : LanguageModelCacheBreakpointType . Ephemeral ,
453
- } satisfies LanguageModelCacheBreakpoint ,
454
- LanguageModelDataPartMimeType . CacheBreakpoint ,
455
- ) ;
440
+ // By matching the Copilot extension, other extensions that use models from either Copilot
441
+ // or Positron Assistant can set cache breakpoints with the same schema.
442
+ // See: https://github.com/microsoft/vscode-copilot-chat/blob/6aeac371813be9037e74395186ec5b5b94089245/src/extension/byok/vscode-node/anthropicMessageConverter.ts#L22
443
+ return vscode . LanguageModelDataPart . text ( LanguageModelCacheBreakpointType . Ephemeral , LanguageModelDataPartMimeType . CacheControl ) ;
456
444
}
0 commit comments