@jupyterlite/ai 0.16.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/lib/agent.d.ts +19 -10
  2. package/lib/agent.js +82 -46
  3. package/lib/chat-commands/clear.js +1 -1
  4. package/lib/chat-model-handler.d.ts +2 -3
  5. package/lib/chat-model-handler.js +6 -2
  6. package/lib/chat-model.d.ts +129 -26
  7. package/lib/chat-model.js +543 -160
  8. package/lib/components/clear-button.d.ts +1 -1
  9. package/lib/components/clear-button.js +1 -1
  10. package/lib/components/save-button.d.ts +2 -2
  11. package/lib/index.js +224 -59
  12. package/lib/models/settings-model.js +1 -0
  13. package/lib/providers/built-in-providers.js +1 -1
  14. package/lib/providers/{generated-context-windows.d.ts → generated-model-info.d.ts} +2 -2
  15. package/lib/providers/generated-model-info.js +502 -0
  16. package/lib/providers/model-info.d.ts +3 -0
  17. package/lib/providers/model-info.js +33 -0
  18. package/lib/tokens.d.ts +98 -15
  19. package/lib/tokens.js +1 -0
  20. package/lib/widgets/ai-settings.js +5 -0
  21. package/lib/widgets/main-area-chat.d.ts +3 -3
  22. package/lib/widgets/main-area-chat.js +9 -5
  23. package/package.json +3 -3
  24. package/schema/settings-model.json +6 -0
  25. package/src/agent.ts +100 -52
  26. package/src/chat-commands/clear.ts +1 -1
  27. package/src/chat-model-handler.ts +10 -3
  28. package/src/chat-model.ts +727 -210
  29. package/src/components/clear-button.tsx +3 -3
  30. package/src/components/save-button.tsx +3 -3
  31. package/src/index.ts +289 -83
  32. package/src/models/settings-model.ts +1 -0
  33. package/src/providers/built-in-providers.ts +1 -1
  34. package/src/providers/generated-model-info.ts +508 -0
  35. package/src/providers/model-info.ts +57 -0
  36. package/src/tokens.ts +100 -15
  37. package/src/widgets/ai-settings.tsx +26 -0
  38. package/src/widgets/main-area-chat.ts +14 -9
  39. package/lib/providers/generated-context-windows.js +0 -96
  40. package/src/providers/generated-context-windows.ts +0 -102
package/src/tokens.ts CHANGED
@@ -1,14 +1,13 @@
1
- import { ActiveCellManager, IMessage, IMessageContent } from '@jupyter/chat';
1
+ import { ActiveCellManager, IChatModel, IMessage } from '@jupyter/chat';
2
2
  import { VDomRenderer } from '@jupyterlab/apputils';
3
3
  import { IRenderMimeRegistry } from '@jupyterlab/rendermime';
4
4
  import { Token } from '@lumino/coreutils';
5
5
  import type { IDisposable } from '@lumino/disposable';
6
6
  import { ISignal } from '@lumino/signaling';
7
- import type { Tool, LanguageModel } from 'ai';
7
+ import type { Tool, LanguageModel, UserContent, ModelMessage } from 'ai';
8
8
  import { ISecretsManager } from 'jupyter-secrets-manager';
9
9
 
10
10
  import type { IModelOptions } from './providers/models';
11
- import { AIChatModel } from './chat-model';
12
11
  import type {
13
12
  ISkillDefinition,
14
13
  ISkillRegistration,
@@ -30,6 +29,7 @@ export namespace CommandIds {
30
29
  export const openSettings = '@jupyterlite/ai:open-settings';
31
30
  export const reposition = '@jupyterlite/ai:reposition';
32
31
  export const openChat = '@jupyterlite/ai:open-chat';
32
+ export const openOrRevealChat = '@jupyterlite/ai:open-or-reveal-chat';
33
33
  export const moveChat = '@jupyterlite/ai:move-chat';
34
34
  export const refreshSkills = '@jupyterlite/ai:refresh-skills';
35
35
  export const saveChat = '@jupyterlite/ai:save-chat';
@@ -209,6 +209,18 @@ export interface IProviderModelInfo {
209
209
  * Default context window for the model in tokens.
210
210
  */
211
211
  contextWindow?: number;
212
+ /**
213
+ * Whether the model supports image inputs.
214
+ */
215
+ supportsImages?: boolean;
216
+ /**
217
+ * Whether the model supports PDF inputs.
218
+ */
219
+ supportsPdf?: boolean;
220
+ /**
221
+ * Whether the model supports audio inputs.
222
+ */
223
+ supportsAudio?: boolean;
212
224
  }
213
225
 
214
226
  export interface IProviderInfo {
@@ -397,6 +409,8 @@ export interface IAIConfig {
397
409
  skillsPaths: string[];
398
410
  // Directory where chat backups are saved
399
411
  chatBackupDirectory: string;
412
+ // Automatically request a title from the model for every message until there are 5 messages
413
+ autoTitle: boolean;
400
414
  }
401
415
 
402
416
  export interface IAISettingsModel extends VDomRenderer.IModel {
@@ -513,13 +527,12 @@ export namespace IAgentManager {
513
527
  isError: boolean;
514
528
  };
515
529
  tool_approval_request: {
516
- approvalId: string;
517
530
  toolCallId: string;
518
531
  toolName: string;
519
532
  args: unknown;
520
533
  };
521
534
  tool_approval_resolved: {
522
- approvalId: string;
535
+ toolCallId: string;
523
536
  approved: boolean;
524
537
  };
525
538
  error: {
@@ -584,34 +597,39 @@ export interface IAgentManager {
584
597
  /**
585
598
  * Clears conversation history and resets agent state.
586
599
  */
587
- clearHistory(): void;
600
+ clearHistory(): Promise<void>;
588
601
  /**
589
- * Sets the conversation history with a list of messages from the chat.
590
- * @param messages The chat messages to set as history
602
+ * Sets the history from already-processed model messages.
603
+ * @param messages Pre-built model messages (may include binary content)
591
604
  */
592
- setHistory(messages: IMessageContent[]): void;
605
+ setHistory(messages: ModelMessage[]): void;
593
606
  /**
594
607
  * Stops the current streaming response by aborting the request.
595
608
  */
596
609
  stopStreaming(): void;
597
610
  /**
598
611
  * Approves a pending tool call.
599
- * @param approvalId The approval ID to approve
612
+ * @param toolCallId The tool call ID to approve
600
613
  * @param reason Optional reason for approval
601
614
  */
602
- approveToolCall(approvalId: string, reason?: string): void;
615
+ approveToolCall(toolCallId: string, reason?: string): void;
603
616
  /**
604
617
  * Rejects a pending tool call.
605
- * @param approvalId The approval ID to reject
618
+ * @param toolCallId The tool call ID to reject
606
619
  * @param reason Optional reason for rejection
607
620
  */
608
- rejectToolCall(approvalId: string, reason?: string): void;
621
+ rejectToolCall(toolCallId: string, reason?: string): void;
609
622
  /**
610
623
  * Generates AI response to user message using the agent.
611
624
  * Handles the complete execution cycle including tool calls.
612
625
  * @param message The user message to respond to (may include processed attachment content)
613
626
  */
614
- generateResponse(message: string): Promise<void>;
627
+ generateResponse(message: UserContent): Promise<void>;
628
+ /**
629
+ * Create a transient language model to request a text response, which won't be added to history.
630
+ * @param messages - the messages sequence to send to the model.
631
+ */
632
+ textResponse(messages: ModelMessage[]): Promise<string>;
615
633
  /**
616
634
  * Initializes the AI agent with current settings and tools.
617
635
  * Sets up the agent with model configuration, tools, and MCP tools.
@@ -660,6 +678,69 @@ export const IAgentManagerFactory = new Token<IAgentManagerFactory>(
660
678
 
661
679
  /* THE CHAT MODELS HANDLER */
662
680
 
681
+ export interface IAIChatModel extends IChatModel {
682
+ /**
683
+ * A signal emitting when the chat name has changed.
684
+ */
685
+ readonly nameChanged: ISignal<IAIChatModel, string>;
686
+ /**
687
+ * The title of the chat.
688
+ */
689
+ title: string | null;
690
+ /**
691
+ * A signal emitting when the chat title has changed.
692
+ */
693
+ readonly titleChanged: ISignal<IAIChatModel, string | null>;
694
+ /**
695
+ * Whether to save the chat automatically.
696
+ */
697
+ autosave: boolean;
698
+ /**
699
+ * A signal emitting when the autosave flag changed.
700
+ */
701
+ readonly autosaveChanged: ISignal<IAIChatModel, boolean>;
702
+ /**
703
+ * Whether save/restore is available.
704
+ */
705
+ readonly saveAvailable: boolean;
706
+ /**
707
+ * A signal emitting when the token usage changed.
708
+ */
709
+ readonly tokenUsageChanged: ISignal<IAgentManager, ITokenUsage>;
710
+ /**
711
+ * The agent manager used in the model.
712
+ */
713
+ readonly agentManager: IAgentManager;
714
+ /**
715
+ * Save the chat as json file.
716
+ */
717
+ save(): Promise<void>;
718
+ /**
719
+ * Restore the chat from a json file.
720
+ *
721
+ * @param silent - Whether a log should be displayed in the console if the
722
+ * restoration is not possible.
723
+ */
724
+ restore(filepath: string, silent?: boolean): Promise<boolean>;
725
+ /**
726
+ * Request a title to this chat, regarding the message history.
727
+ */
728
+ requestTitle(): Promise<string>;
729
+ /**
730
+ * Removes a queued message by its ID.
731
+ * @param messageId The ID of the queued message to remove
732
+ */
733
+ removeQueuedMessage(messageId: string): void;
734
+ /**
735
+ * The current message queue
736
+ */
737
+ messageQueue: any[];
738
+ /**
739
+ * Whether the chat is currently busy processing a message
740
+ */
741
+ isBusy: boolean;
742
+ }
743
+
663
744
  /**
664
745
  * The interface for the chat model handler.
665
746
  */
@@ -667,7 +748,7 @@ export interface IChatModelHandler {
667
748
  /**
668
749
  * The function to create a new model.
669
750
  */
670
- createModel(options: ICreateChatOptions): AIChatModel;
751
+ createModel(options: ICreateChatOptions): IAIChatModel;
671
752
  /**
672
753
  * The active cell manager (to copy code from chat to cell).
673
754
  */
@@ -695,6 +776,10 @@ export interface ICreateChatOptions {
695
776
  * Whether the chat is autosaved or not.
696
777
  */
697
778
  autosave?: boolean;
779
+ /**
780
+ * An optional title to the chat.
781
+ */
782
+ title?: string | null;
698
783
  }
699
784
  /**
700
785
  * Token for the chat model handler.
@@ -925,6 +925,32 @@ const AISettingsComponent: React.FC<IAISettingsComponentProps> = ({
925
925
  }
926
926
  />
927
927
 
928
+ <FormControlLabel
929
+ control={
930
+ <Switch
931
+ checked={config.autoTitle}
932
+ onChange={e =>
933
+ handleConfigUpdate({
934
+ autoTitle: e.target.checked
935
+ })
936
+ }
937
+ color="primary"
938
+ />
939
+ }
940
+ label={
941
+ <Box>
942
+ <Typography variant="body1">
943
+ {trans.__('Auto Title')}
944
+ </Typography>
945
+ <Typography variant="caption" color="text.secondary">
946
+ {trans.__(
947
+ 'Automatically generate a chat title from the model for every message until there are 5 messages'
948
+ )}
949
+ </Typography>
950
+ </Box>
951
+ }
952
+ />
953
+
928
954
  <FormControlLabel
929
955
  control={
930
956
  <Switch
@@ -4,11 +4,10 @@ import { launchIcon } from '@jupyterlab/ui-components';
4
4
  import type { TranslationBundle } from '@jupyterlab/translation';
5
5
  import { CommandRegistry } from '@lumino/commands';
6
6
 
7
- import { AIChatModel } from '../chat-model';
8
7
  import { SaveComponentWidget } from '../components/save-button';
9
8
  import { UsageWidget } from '../components/usage-display';
10
9
  import { RenderedMessageOutputAreaCompat } from '../rendered-message-outputarea';
11
- import { CommandIds, type IAISettingsModel } from '../tokens';
10
+ import { CommandIds, IAIChatModel, type IAISettingsModel } from '../tokens';
12
11
 
13
12
  export namespace MainAreaChat {
14
13
  export interface IOptions extends MainAreaWidget.IOptions<ChatWidget> {
@@ -24,7 +23,8 @@ export namespace MainAreaChat {
24
23
  export class MainAreaChat extends MainAreaWidget<ChatWidget> {
25
24
  constructor(options: MainAreaChat.IOptions) {
26
25
  super(options);
27
- this.title.label = this.content.model.name;
26
+ this.title.label = this.model.name;
27
+ this.title.caption = this.model.title ?? this.model.name;
28
28
 
29
29
  const { trans } = options;
30
30
 
@@ -68,21 +68,24 @@ export class MainAreaChat extends MainAreaWidget<ChatWidget> {
68
68
  chatPanel: this.content
69
69
  });
70
70
 
71
- this.model.writersChanged.connect(this._writersChanged);
71
+ this.model.writersChanged?.connect(this._writersChanged);
72
+
73
+ this.model.titleChanged.connect(this._titleChanged);
72
74
  }
73
75
 
74
76
  dispose(): void {
75
77
  super.dispose();
76
78
  // Dispose of the approval buttons widget when the chat is disposed.
77
79
  this._outputAreaCompat.dispose();
78
- this.model.writersChanged.disconnect(this._writersChanged);
80
+ this.model.writersChanged?.disconnect(this._writersChanged);
81
+ this.model.titleChanged.disconnect(this._titleChanged);
79
82
  }
80
83
 
81
84
  /**
82
85
  * Get the model of the chat.
83
86
  */
84
- get model(): AIChatModel {
85
- return this.content.model as AIChatModel;
87
+ get model(): IAIChatModel {
88
+ return this.content.model as IAIChatModel;
86
89
  }
87
90
 
88
91
  /**
@@ -99,13 +102,15 @@ export class MainAreaChat extends MainAreaWidget<ChatWidget> {
99
102
  );
100
103
 
101
104
  if (aiWriting) {
102
- this.content.inputToolbarRegistry?.hide('send');
103
105
  this.content.inputToolbarRegistry?.show('stop');
104
106
  } else {
105
107
  this.content.inputToolbarRegistry?.hide('stop');
106
- this.content.inputToolbarRegistry?.show('send');
107
108
  }
108
109
  };
109
110
 
111
+ private _titleChanged = () => {
112
+ this.title.caption = this.model.title ?? this.model.name;
113
+ };
114
+
110
115
  private _outputAreaCompat: RenderedMessageOutputAreaCompat;
111
116
  }
@@ -1,96 +0,0 @@
1
- /**
2
- * This file is generated by `jlpm sync:model-context-windows`.
3
- * Source: https://models.dev/api.json
4
- * Backed by: https://github.com/anomalyco/models.dev
5
- * Generated: 2026-04-08T16:23:34.080Z
6
- */
7
- export const BUILT_IN_PROVIDER_MODEL_INFO = {
8
- anthropic: {
9
- 'claude-opus-4-6': { contextWindow: 1000000 },
10
- 'claude-sonnet-4-6': { contextWindow: 1000000 },
11
- 'claude-opus-4-5': { contextWindow: 200000 },
12
- 'claude-opus-4-5-20251101': { contextWindow: 200000 },
13
- 'claude-sonnet-4-5': { contextWindow: 200000 },
14
- 'claude-sonnet-4-5-20250929': { contextWindow: 200000 },
15
- 'claude-haiku-4-5': { contextWindow: 200000 },
16
- 'claude-haiku-4-5-20251001': { contextWindow: 200000 },
17
- 'claude-opus-4-1': { contextWindow: 200000 },
18
- 'claude-opus-4-1-20250805': { contextWindow: 200000 },
19
- 'claude-opus-4-0': { contextWindow: 200000 },
20
- 'claude-opus-4-20250514': { contextWindow: 200000 },
21
- 'claude-sonnet-4-0': { contextWindow: 200000 },
22
- 'claude-sonnet-4-20250514': { contextWindow: 200000 }
23
- },
24
- google: {
25
- 'gemini-3.1-pro-preview': { contextWindow: 1048576 },
26
- 'gemini-3.1-pro-preview-customtools': { contextWindow: 1048576 },
27
- 'gemini-3.1-flash-image-preview': { contextWindow: 131072 },
28
- 'gemini-3.1-flash-lite-preview': { contextWindow: 1048576 },
29
- 'gemini-3-flash-preview': { contextWindow: 1048576 },
30
- 'gemini-2.5-pro': { contextWindow: 1048576 },
31
- 'gemini-2.5-flash': { contextWindow: 1048576 },
32
- 'gemini-2.5-flash-image': { contextWindow: 32768 },
33
- 'gemini-2.5-flash-lite': { contextWindow: 1048576 },
34
- 'gemini-flash-latest': { contextWindow: 1048576 },
35
- 'gemini-flash-lite-latest': { contextWindow: 1048576 }
36
- },
37
- mistral: {
38
- 'mistral-large-latest': { contextWindow: 262144 },
39
- 'mistral-medium-latest': { contextWindow: 128000 },
40
- 'mistral-medium-2508': { contextWindow: 262144 },
41
- 'mistral-small-latest': { contextWindow: 256000 },
42
- 'mistral-small-2506': { contextWindow: 128000 },
43
- 'ministral-3b-latest': { contextWindow: 128000 },
44
- 'ministral-8b-latest': { contextWindow: 128000 },
45
- 'magistral-small-latest': { contextWindow: 128000 },
46
- 'magistral-medium-latest': { contextWindow: 128000 },
47
- 'pixtral-large-latest': { contextWindow: 128000 },
48
- 'codestral-latest': { contextWindow: 256000 },
49
- 'devstral-latest': { contextWindow: 262144 },
50
- 'devstral-2512': { contextWindow: 262144 }
51
- },
52
- openai: {
53
- 'gpt-5.4': { contextWindow: 1050000 },
54
- 'gpt-5.4-mini': { contextWindow: 400000 },
55
- 'gpt-5.4-nano': { contextWindow: 400000 },
56
- 'gpt-5.2': { contextWindow: 400000 },
57
- 'gpt-5.2-2025-12-11': { contextWindow: 400000 },
58
- 'gpt-5.2-chat-latest': { contextWindow: 128000 },
59
- 'gpt-5.2-pro': { contextWindow: 400000 },
60
- 'gpt-5.2-pro-2025-12-11': { contextWindow: 400000 },
61
- 'gpt-5.2-codex': { contextWindow: 400000 },
62
- 'gpt-5.1': { contextWindow: 400000 },
63
- 'gpt-5.1-2025-11-13': { contextWindow: 400000 },
64
- 'gpt-5.1-chat-latest': { contextWindow: 128000 },
65
- 'gpt-5': { contextWindow: 400000 },
66
- 'gpt-5-2025-08-07': { contextWindow: 400000 },
67
- 'gpt-5-chat-latest': { contextWindow: 400000 },
68
- 'gpt-5-mini': { contextWindow: 400000 },
69
- 'gpt-5-mini-2025-08-07': { contextWindow: 400000 },
70
- 'gpt-5-nano': { contextWindow: 400000 },
71
- 'gpt-5-nano-2025-08-07': { contextWindow: 400000 },
72
- 'o4-mini': { contextWindow: 200000 },
73
- 'o4-mini-2025-04-16': { contextWindow: 200000 },
74
- 'o3-pro': { contextWindow: 200000 },
75
- o3: { contextWindow: 200000 },
76
- 'o3-2025-04-16': { contextWindow: 200000 },
77
- 'o3-mini': { contextWindow: 200000 },
78
- 'o3-mini-2025-01-31': { contextWindow: 200000 },
79
- o1: { contextWindow: 200000 },
80
- 'o1-2024-12-17': { contextWindow: 200000 },
81
- 'gpt-4.1': { contextWindow: 1047576 },
82
- 'gpt-4.1-2025-04-14': { contextWindow: 1047576 },
83
- 'gpt-4.1-mini': { contextWindow: 1047576 },
84
- 'gpt-4.1-mini-2025-04-14': { contextWindow: 1047576 },
85
- 'gpt-4.1-nano': { contextWindow: 1047576 },
86
- 'gpt-4.1-nano-2025-04-14': { contextWindow: 1047576 },
87
- 'gpt-4o': { contextWindow: 128000 },
88
- 'gpt-4o-2024-05-13': { contextWindow: 128000 },
89
- 'gpt-4o-2024-08-06': { contextWindow: 128000 },
90
- 'gpt-4o-2024-11-20': { contextWindow: 128000 },
91
- 'gpt-4o-mini': { contextWindow: 128000 },
92
- 'gpt-4o-mini-2024-07-18': { contextWindow: 128000 },
93
- 'gpt-3.5-turbo': { contextWindow: 16385 },
94
- 'gpt-3.5-turbo-0125': { contextWindow: 16385 }
95
- }
96
- };
@@ -1,102 +0,0 @@
1
- /**
2
- * This file is generated by `jlpm sync:model-context-windows`.
3
- * Source: https://models.dev/api.json
4
- * Backed by: https://github.com/anomalyco/models.dev
5
- * Generated: 2026-04-08T16:23:34.080Z
6
- */
7
-
8
- import type { IProviderModelInfo } from '../tokens';
9
-
10
- export const BUILT_IN_PROVIDER_MODEL_INFO: Record<
11
- string,
12
- Record<string, IProviderModelInfo>
13
- > = {
14
- anthropic: {
15
- 'claude-opus-4-6': { contextWindow: 1000000 },
16
- 'claude-sonnet-4-6': { contextWindow: 1000000 },
17
- 'claude-opus-4-5': { contextWindow: 200000 },
18
- 'claude-opus-4-5-20251101': { contextWindow: 200000 },
19
- 'claude-sonnet-4-5': { contextWindow: 200000 },
20
- 'claude-sonnet-4-5-20250929': { contextWindow: 200000 },
21
- 'claude-haiku-4-5': { contextWindow: 200000 },
22
- 'claude-haiku-4-5-20251001': { contextWindow: 200000 },
23
- 'claude-opus-4-1': { contextWindow: 200000 },
24
- 'claude-opus-4-1-20250805': { contextWindow: 200000 },
25
- 'claude-opus-4-0': { contextWindow: 200000 },
26
- 'claude-opus-4-20250514': { contextWindow: 200000 },
27
- 'claude-sonnet-4-0': { contextWindow: 200000 },
28
- 'claude-sonnet-4-20250514': { contextWindow: 200000 }
29
- },
30
- google: {
31
- 'gemini-3.1-pro-preview': { contextWindow: 1048576 },
32
- 'gemini-3.1-pro-preview-customtools': { contextWindow: 1048576 },
33
- 'gemini-3.1-flash-image-preview': { contextWindow: 131072 },
34
- 'gemini-3.1-flash-lite-preview': { contextWindow: 1048576 },
35
- 'gemini-3-flash-preview': { contextWindow: 1048576 },
36
- 'gemini-2.5-pro': { contextWindow: 1048576 },
37
- 'gemini-2.5-flash': { contextWindow: 1048576 },
38
- 'gemini-2.5-flash-image': { contextWindow: 32768 },
39
- 'gemini-2.5-flash-lite': { contextWindow: 1048576 },
40
- 'gemini-flash-latest': { contextWindow: 1048576 },
41
- 'gemini-flash-lite-latest': { contextWindow: 1048576 }
42
- },
43
- mistral: {
44
- 'mistral-large-latest': { contextWindow: 262144 },
45
- 'mistral-medium-latest': { contextWindow: 128000 },
46
- 'mistral-medium-2508': { contextWindow: 262144 },
47
- 'mistral-small-latest': { contextWindow: 256000 },
48
- 'mistral-small-2506': { contextWindow: 128000 },
49
- 'ministral-3b-latest': { contextWindow: 128000 },
50
- 'ministral-8b-latest': { contextWindow: 128000 },
51
- 'magistral-small-latest': { contextWindow: 128000 },
52
- 'magistral-medium-latest': { contextWindow: 128000 },
53
- 'pixtral-large-latest': { contextWindow: 128000 },
54
- 'codestral-latest': { contextWindow: 256000 },
55
- 'devstral-latest': { contextWindow: 262144 },
56
- 'devstral-2512': { contextWindow: 262144 }
57
- },
58
- openai: {
59
- 'gpt-5.4': { contextWindow: 1050000 },
60
- 'gpt-5.4-mini': { contextWindow: 400000 },
61
- 'gpt-5.4-nano': { contextWindow: 400000 },
62
- 'gpt-5.2': { contextWindow: 400000 },
63
- 'gpt-5.2-2025-12-11': { contextWindow: 400000 },
64
- 'gpt-5.2-chat-latest': { contextWindow: 128000 },
65
- 'gpt-5.2-pro': { contextWindow: 400000 },
66
- 'gpt-5.2-pro-2025-12-11': { contextWindow: 400000 },
67
- 'gpt-5.2-codex': { contextWindow: 400000 },
68
- 'gpt-5.1': { contextWindow: 400000 },
69
- 'gpt-5.1-2025-11-13': { contextWindow: 400000 },
70
- 'gpt-5.1-chat-latest': { contextWindow: 128000 },
71
- 'gpt-5': { contextWindow: 400000 },
72
- 'gpt-5-2025-08-07': { contextWindow: 400000 },
73
- 'gpt-5-chat-latest': { contextWindow: 400000 },
74
- 'gpt-5-mini': { contextWindow: 400000 },
75
- 'gpt-5-mini-2025-08-07': { contextWindow: 400000 },
76
- 'gpt-5-nano': { contextWindow: 400000 },
77
- 'gpt-5-nano-2025-08-07': { contextWindow: 400000 },
78
- 'o4-mini': { contextWindow: 200000 },
79
- 'o4-mini-2025-04-16': { contextWindow: 200000 },
80
- 'o3-pro': { contextWindow: 200000 },
81
- o3: { contextWindow: 200000 },
82
- 'o3-2025-04-16': { contextWindow: 200000 },
83
- 'o3-mini': { contextWindow: 200000 },
84
- 'o3-mini-2025-01-31': { contextWindow: 200000 },
85
- o1: { contextWindow: 200000 },
86
- 'o1-2024-12-17': { contextWindow: 200000 },
87
- 'gpt-4.1': { contextWindow: 1047576 },
88
- 'gpt-4.1-2025-04-14': { contextWindow: 1047576 },
89
- 'gpt-4.1-mini': { contextWindow: 1047576 },
90
- 'gpt-4.1-mini-2025-04-14': { contextWindow: 1047576 },
91
- 'gpt-4.1-nano': { contextWindow: 1047576 },
92
- 'gpt-4.1-nano-2025-04-14': { contextWindow: 1047576 },
93
- 'gpt-4o': { contextWindow: 128000 },
94
- 'gpt-4o-2024-05-13': { contextWindow: 128000 },
95
- 'gpt-4o-2024-08-06': { contextWindow: 128000 },
96
- 'gpt-4o-2024-11-20': { contextWindow: 128000 },
97
- 'gpt-4o-mini': { contextWindow: 128000 },
98
- 'gpt-4o-mini-2024-07-18': { contextWindow: 128000 },
99
- 'gpt-3.5-turbo': { contextWindow: 16385 },
100
- 'gpt-3.5-turbo-0125': { contextWindow: 16385 }
101
- }
102
- };