@vitkuz/vitkuz-chat-gpt-apapter 1.3.2 → 1.5.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.
package/dist/index.d.mts CHANGED
@@ -83,27 +83,100 @@ interface CreateChatCompletionOutput {
83
83
  };
84
84
  price?: PriceInfo;
85
85
  }
86
+ interface CreateImageInput {
87
+ prompt: string;
88
+ model?: string;
89
+ n?: number;
90
+ quality?: 'standard' | 'hd';
91
+ response_format?: 'url' | 'b64_json';
92
+ size?: '256x256' | '512x512' | '1024x1024' | '1024x1792' | '1792x1024';
93
+ style?: 'vivid' | 'natural';
94
+ user?: string;
95
+ }
96
+ interface CreateImageOutput {
97
+ created: number;
98
+ data: {
99
+ url?: string;
100
+ b64_json?: string;
101
+ revised_prompt?: string;
102
+ }[];
103
+ price?: PriceInfo;
104
+ }
105
+ interface CreateSpeechInput {
106
+ model?: string;
107
+ input: string;
108
+ voice: 'alloy' | 'echo' | 'fable' | 'onyx' | 'nova' | 'shimmer';
109
+ response_format?: 'mp3' | 'opus' | 'aac' | 'flac' | 'wav' | 'pcm';
110
+ speed?: number;
111
+ }
112
+ interface CreateSpeechOutput {
113
+ data: Buffer | Uint8Array;
114
+ price?: PriceInfo;
115
+ }
86
116
 
87
117
  declare const createChatGptClient: (config: ChatGptConfig) => OpenAI;
88
118
 
89
119
  declare const createChatCompletion: (ctx: ChatGptContext) => (input: CreateChatCompletionInput) => Promise<CreateChatCompletionOutput>;
90
120
 
121
+ declare const createImage: (ctx: ChatGptContext) => (input: CreateImageInput) => Promise<CreateImageOutput>;
122
+
123
+ declare const createSpeech: (ctx: ChatGptContext) => (input: CreateSpeechInput) => Promise<CreateSpeechOutput>;
124
+
91
125
  interface ChatGptAdapter {
92
126
  createChatCompletion: ReturnType<typeof createChatCompletion>;
127
+ createImage: ReturnType<typeof createImage>;
128
+ createSpeech: ReturnType<typeof createSpeech>;
93
129
  }
94
130
  declare const createAdapter: (config: ChatGptConfig, logger?: Logger) => ChatGptAdapter;
95
131
 
96
132
  declare const CHAT_GPT_MODELS: {
133
+ readonly GPT_5_2: "gpt-5.2";
134
+ readonly GPT_5_1: "gpt-5.1";
135
+ readonly GPT_5: "gpt-5";
136
+ readonly GPT_5_MINI: "gpt-5-mini";
137
+ readonly GPT_5_NANO: "gpt-5-nano";
138
+ readonly GPT_5_2_PRO: "gpt-5.2-pro";
139
+ readonly GPT_5_PRO: "gpt-5-pro";
140
+ readonly GPT_5_2_CHAT_LATEST: "gpt-5.2-chat-latest";
141
+ readonly GPT_5_1_CHAT_LATEST: "gpt-5.1-chat-latest";
142
+ readonly GPT_5_CHAT_LATEST: "gpt-5-chat-latest";
143
+ readonly GPT_5_1_CODEX_MAX: "gpt-5.1-codex-max";
144
+ readonly GPT_5_1_CODEX: "gpt-5.1-codex";
145
+ readonly GPT_5_CODEX: "gpt-5-codex";
146
+ readonly GPT_5_1_CODEX_MINI: "gpt-5.1-codex-mini";
147
+ readonly GPT_5_SEARCH_API: "gpt-5-search-api";
148
+ readonly GPT_4_1: "gpt-4.1";
149
+ readonly GPT_4_1_MINI: "gpt-4.1-mini";
150
+ readonly GPT_4_1_NANO: "gpt-4.1-nano";
97
151
  readonly GPT_4o: "gpt-4o";
98
152
  readonly GPT_4o_2024_08_06: "gpt-4o-2024-08-06";
153
+ readonly GPT_4o_2024_05_13: "gpt-4o-2024-05-13";
99
154
  readonly GPT_4o_MINI: "gpt-4o-mini";
100
155
  readonly GPT_4o_MINI_2024_07_18: "gpt-4o-mini-2024-07-18";
101
- readonly GPT_4_TURBO: "gpt-4-turbo";
102
- readonly GPT_4: "gpt-4";
103
- readonly GPT_3_5_TURBO: "gpt-3.5-turbo";
156
+ readonly GPT_4o_SEARCH_PREVIEW: "gpt-4o-search-preview";
157
+ readonly GPT_4o_MINI_SEARCH_PREVIEW: "gpt-4o-mini-search-preview";
104
158
  readonly O1: "o1";
159
+ readonly O1_PRO: "o1-pro";
105
160
  readonly O1_MINI: "o1-mini";
161
+ readonly O3: "o3";
162
+ readonly O3_PRO: "o3-pro";
106
163
  readonly O3_MINI: "o3-mini";
164
+ readonly O3_DEEP_RESEARCH: "o3-deep-research";
165
+ readonly O4_MINI: "o4-mini";
166
+ readonly O4_MINI_DEEP_RESEARCH: "o4-mini-deep-research";
167
+ readonly GPT_REALTIME: "gpt-realtime";
168
+ readonly GPT_REALTIME_MINI: "gpt-realtime-mini";
169
+ readonly GPT_4o_REALTIME_PREVIEW: "gpt-4o-realtime-preview";
170
+ readonly GPT_4o_MINI_REALTIME_PREVIEW: "gpt-4o-mini-realtime-preview";
171
+ readonly GPT_AUDIO: "gpt-audio";
172
+ readonly GPT_AUDIO_MINI: "gpt-audio-mini";
173
+ readonly GPT_4o_AUDIO_PREVIEW: "gpt-4o-audio-preview";
174
+ readonly GPT_4o_MINI_AUDIO_PREVIEW: "gpt-4o-mini-audio-preview";
175
+ readonly GPT_4_TURBO: "gpt-4-turbo";
176
+ readonly GPT_4: "gpt-4";
177
+ readonly GPT_3_5_TURBO: "gpt-3.5-turbo";
178
+ readonly GPT_3_5_TURBO_INSTRUCT: "gpt-3.5-turbo-instruct";
179
+ readonly COMPUTER_USE_PREVIEW: "computer-use-preview";
107
180
  };
108
181
  type ChatGptModel = (typeof CHAT_GPT_MODELS)[keyof typeof CHAT_GPT_MODELS];
109
182
  declare const isStructuredOutputSupported: (model: string) => boolean;
@@ -113,7 +186,13 @@ interface ModelPricing {
113
186
  output: number;
114
187
  cachedInput?: number;
115
188
  }
189
+ interface ImagePricing {
190
+ standard: Record<string, number>;
191
+ hd: Record<string, number>;
192
+ }
116
193
  declare const CHAT_GPT_PRICING: Record<string, ModelPricing>;
194
+ declare const IMAGE_PRICING: Record<string, ImagePricing>;
195
+ declare const SPEECH_PRICING: Record<string, number>;
117
196
  declare const calculatePrice: (model: string, usage?: {
118
197
  prompt_tokens?: number;
119
198
  completion_tokens?: number;
@@ -126,5 +205,7 @@ declare const calculatePrice: (model: string, usage?: {
126
205
  cached_tokens?: number;
127
206
  };
128
207
  }) => PriceInfo | undefined;
208
+ declare const calculateImagePrice: (model: string, size?: string, quality?: string, n?: number) => PriceInfo | undefined;
209
+ declare const calculateSpeechPrice: (model: string, inputLength: number) => PriceInfo | undefined;
129
210
 
130
- export { CHAT_GPT_MODELS, CHAT_GPT_PRICING, type ChatGptAdapter, type ChatGptConfig, type ChatGptContext, type ChatGptDefaults, type ChatGptModel, type ChatMessage, type ChatMessageRole, type CreateChatCompletionInput, type CreateChatCompletionOutput, type Logger, type ModelPricing, type PriceInfo, calculatePrice, createAdapter, createChatCompletion, createChatGptClient, isStructuredOutputSupported };
211
+ export { CHAT_GPT_MODELS, CHAT_GPT_PRICING, type ChatGptAdapter, type ChatGptConfig, type ChatGptContext, type ChatGptDefaults, type ChatGptModel, type ChatMessage, type ChatMessageRole, type CreateChatCompletionInput, type CreateChatCompletionOutput, type CreateImageInput, type CreateImageOutput, type CreateSpeechInput, type CreateSpeechOutput, IMAGE_PRICING, type ImagePricing, type Logger, type ModelPricing, type PriceInfo, SPEECH_PRICING, calculateImagePrice, calculatePrice, calculateSpeechPrice, createAdapter, createChatCompletion, createChatGptClient, createImage, createSpeech, isStructuredOutputSupported };
package/dist/index.d.ts CHANGED
@@ -83,27 +83,100 @@ interface CreateChatCompletionOutput {
83
83
  };
84
84
  price?: PriceInfo;
85
85
  }
86
+ interface CreateImageInput {
87
+ prompt: string;
88
+ model?: string;
89
+ n?: number;
90
+ quality?: 'standard' | 'hd';
91
+ response_format?: 'url' | 'b64_json';
92
+ size?: '256x256' | '512x512' | '1024x1024' | '1024x1792' | '1792x1024';
93
+ style?: 'vivid' | 'natural';
94
+ user?: string;
95
+ }
96
+ interface CreateImageOutput {
97
+ created: number;
98
+ data: {
99
+ url?: string;
100
+ b64_json?: string;
101
+ revised_prompt?: string;
102
+ }[];
103
+ price?: PriceInfo;
104
+ }
105
+ interface CreateSpeechInput {
106
+ model?: string;
107
+ input: string;
108
+ voice: 'alloy' | 'echo' | 'fable' | 'onyx' | 'nova' | 'shimmer';
109
+ response_format?: 'mp3' | 'opus' | 'aac' | 'flac' | 'wav' | 'pcm';
110
+ speed?: number;
111
+ }
112
+ interface CreateSpeechOutput {
113
+ data: Buffer | Uint8Array;
114
+ price?: PriceInfo;
115
+ }
86
116
 
87
117
  declare const createChatGptClient: (config: ChatGptConfig) => OpenAI;
88
118
 
89
119
  declare const createChatCompletion: (ctx: ChatGptContext) => (input: CreateChatCompletionInput) => Promise<CreateChatCompletionOutput>;
90
120
 
121
+ declare const createImage: (ctx: ChatGptContext) => (input: CreateImageInput) => Promise<CreateImageOutput>;
122
+
123
+ declare const createSpeech: (ctx: ChatGptContext) => (input: CreateSpeechInput) => Promise<CreateSpeechOutput>;
124
+
91
125
  interface ChatGptAdapter {
92
126
  createChatCompletion: ReturnType<typeof createChatCompletion>;
127
+ createImage: ReturnType<typeof createImage>;
128
+ createSpeech: ReturnType<typeof createSpeech>;
93
129
  }
94
130
  declare const createAdapter: (config: ChatGptConfig, logger?: Logger) => ChatGptAdapter;
95
131
 
96
132
  declare const CHAT_GPT_MODELS: {
133
+ readonly GPT_5_2: "gpt-5.2";
134
+ readonly GPT_5_1: "gpt-5.1";
135
+ readonly GPT_5: "gpt-5";
136
+ readonly GPT_5_MINI: "gpt-5-mini";
137
+ readonly GPT_5_NANO: "gpt-5-nano";
138
+ readonly GPT_5_2_PRO: "gpt-5.2-pro";
139
+ readonly GPT_5_PRO: "gpt-5-pro";
140
+ readonly GPT_5_2_CHAT_LATEST: "gpt-5.2-chat-latest";
141
+ readonly GPT_5_1_CHAT_LATEST: "gpt-5.1-chat-latest";
142
+ readonly GPT_5_CHAT_LATEST: "gpt-5-chat-latest";
143
+ readonly GPT_5_1_CODEX_MAX: "gpt-5.1-codex-max";
144
+ readonly GPT_5_1_CODEX: "gpt-5.1-codex";
145
+ readonly GPT_5_CODEX: "gpt-5-codex";
146
+ readonly GPT_5_1_CODEX_MINI: "gpt-5.1-codex-mini";
147
+ readonly GPT_5_SEARCH_API: "gpt-5-search-api";
148
+ readonly GPT_4_1: "gpt-4.1";
149
+ readonly GPT_4_1_MINI: "gpt-4.1-mini";
150
+ readonly GPT_4_1_NANO: "gpt-4.1-nano";
97
151
  readonly GPT_4o: "gpt-4o";
98
152
  readonly GPT_4o_2024_08_06: "gpt-4o-2024-08-06";
153
+ readonly GPT_4o_2024_05_13: "gpt-4o-2024-05-13";
99
154
  readonly GPT_4o_MINI: "gpt-4o-mini";
100
155
  readonly GPT_4o_MINI_2024_07_18: "gpt-4o-mini-2024-07-18";
101
- readonly GPT_4_TURBO: "gpt-4-turbo";
102
- readonly GPT_4: "gpt-4";
103
- readonly GPT_3_5_TURBO: "gpt-3.5-turbo";
156
+ readonly GPT_4o_SEARCH_PREVIEW: "gpt-4o-search-preview";
157
+ readonly GPT_4o_MINI_SEARCH_PREVIEW: "gpt-4o-mini-search-preview";
104
158
  readonly O1: "o1";
159
+ readonly O1_PRO: "o1-pro";
105
160
  readonly O1_MINI: "o1-mini";
161
+ readonly O3: "o3";
162
+ readonly O3_PRO: "o3-pro";
106
163
  readonly O3_MINI: "o3-mini";
164
+ readonly O3_DEEP_RESEARCH: "o3-deep-research";
165
+ readonly O4_MINI: "o4-mini";
166
+ readonly O4_MINI_DEEP_RESEARCH: "o4-mini-deep-research";
167
+ readonly GPT_REALTIME: "gpt-realtime";
168
+ readonly GPT_REALTIME_MINI: "gpt-realtime-mini";
169
+ readonly GPT_4o_REALTIME_PREVIEW: "gpt-4o-realtime-preview";
170
+ readonly GPT_4o_MINI_REALTIME_PREVIEW: "gpt-4o-mini-realtime-preview";
171
+ readonly GPT_AUDIO: "gpt-audio";
172
+ readonly GPT_AUDIO_MINI: "gpt-audio-mini";
173
+ readonly GPT_4o_AUDIO_PREVIEW: "gpt-4o-audio-preview";
174
+ readonly GPT_4o_MINI_AUDIO_PREVIEW: "gpt-4o-mini-audio-preview";
175
+ readonly GPT_4_TURBO: "gpt-4-turbo";
176
+ readonly GPT_4: "gpt-4";
177
+ readonly GPT_3_5_TURBO: "gpt-3.5-turbo";
178
+ readonly GPT_3_5_TURBO_INSTRUCT: "gpt-3.5-turbo-instruct";
179
+ readonly COMPUTER_USE_PREVIEW: "computer-use-preview";
107
180
  };
108
181
  type ChatGptModel = (typeof CHAT_GPT_MODELS)[keyof typeof CHAT_GPT_MODELS];
109
182
  declare const isStructuredOutputSupported: (model: string) => boolean;
@@ -113,7 +186,13 @@ interface ModelPricing {
113
186
  output: number;
114
187
  cachedInput?: number;
115
188
  }
189
+ interface ImagePricing {
190
+ standard: Record<string, number>;
191
+ hd: Record<string, number>;
192
+ }
116
193
  declare const CHAT_GPT_PRICING: Record<string, ModelPricing>;
194
+ declare const IMAGE_PRICING: Record<string, ImagePricing>;
195
+ declare const SPEECH_PRICING: Record<string, number>;
117
196
  declare const calculatePrice: (model: string, usage?: {
118
197
  prompt_tokens?: number;
119
198
  completion_tokens?: number;
@@ -126,5 +205,7 @@ declare const calculatePrice: (model: string, usage?: {
126
205
  cached_tokens?: number;
127
206
  };
128
207
  }) => PriceInfo | undefined;
208
+ declare const calculateImagePrice: (model: string, size?: string, quality?: string, n?: number) => PriceInfo | undefined;
209
+ declare const calculateSpeechPrice: (model: string, inputLength: number) => PriceInfo | undefined;
129
210
 
130
- export { CHAT_GPT_MODELS, CHAT_GPT_PRICING, type ChatGptAdapter, type ChatGptConfig, type ChatGptContext, type ChatGptDefaults, type ChatGptModel, type ChatMessage, type ChatMessageRole, type CreateChatCompletionInput, type CreateChatCompletionOutput, type Logger, type ModelPricing, type PriceInfo, calculatePrice, createAdapter, createChatCompletion, createChatGptClient, isStructuredOutputSupported };
211
+ export { CHAT_GPT_MODELS, CHAT_GPT_PRICING, type ChatGptAdapter, type ChatGptConfig, type ChatGptContext, type ChatGptDefaults, type ChatGptModel, type ChatMessage, type ChatMessageRole, type CreateChatCompletionInput, type CreateChatCompletionOutput, type CreateImageInput, type CreateImageOutput, type CreateSpeechInput, type CreateSpeechOutput, IMAGE_PRICING, type ImagePricing, type Logger, type ModelPricing, type PriceInfo, SPEECH_PRICING, calculateImagePrice, calculatePrice, calculateSpeechPrice, createAdapter, createChatCompletion, createChatGptClient, createImage, createSpeech, isStructuredOutputSupported };
package/dist/index.js CHANGED
@@ -18,22 +18,70 @@ var createChatGptClient = (config) => {
18
18
 
19
19
  // src/models.ts
20
20
  var CHAT_GPT_MODELS = {
21
+ // GPT-5
22
+ GPT_5_2: "gpt-5.2",
23
+ GPT_5_1: "gpt-5.1",
24
+ GPT_5: "gpt-5",
25
+ GPT_5_MINI: "gpt-5-mini",
26
+ GPT_5_NANO: "gpt-5-nano",
27
+ GPT_5_2_PRO: "gpt-5.2-pro",
28
+ GPT_5_PRO: "gpt-5-pro",
29
+ GPT_5_2_CHAT_LATEST: "gpt-5.2-chat-latest",
30
+ GPT_5_1_CHAT_LATEST: "gpt-5.1-chat-latest",
31
+ GPT_5_CHAT_LATEST: "gpt-5-chat-latest",
32
+ GPT_5_1_CODEX_MAX: "gpt-5.1-codex-max",
33
+ GPT_5_1_CODEX: "gpt-5.1-codex",
34
+ GPT_5_CODEX: "gpt-5-codex",
35
+ GPT_5_1_CODEX_MINI: "gpt-5.1-codex-mini",
36
+ GPT_5_SEARCH_API: "gpt-5-search-api",
37
+ // GPT-4.1
38
+ GPT_4_1: "gpt-4.1",
39
+ GPT_4_1_MINI: "gpt-4.1-mini",
40
+ GPT_4_1_NANO: "gpt-4.1-nano",
41
+ // GPT-4o
21
42
  GPT_4o: "gpt-4o",
22
43
  GPT_4o_2024_08_06: "gpt-4o-2024-08-06",
44
+ GPT_4o_2024_05_13: "gpt-4o-2024-05-13",
23
45
  GPT_4o_MINI: "gpt-4o-mini",
24
46
  GPT_4o_MINI_2024_07_18: "gpt-4o-mini-2024-07-18",
47
+ GPT_4o_SEARCH_PREVIEW: "gpt-4o-search-preview",
48
+ GPT_4o_MINI_SEARCH_PREVIEW: "gpt-4o-mini-search-preview",
49
+ // Reasoning Models (o-series)
50
+ O1: "o1",
51
+ O1_PRO: "o1-pro",
52
+ O1_MINI: "o1-mini",
53
+ O3: "o3",
54
+ O3_PRO: "o3-pro",
55
+ O3_MINI: "o3-mini",
56
+ O3_DEEP_RESEARCH: "o3-deep-research",
57
+ O4_MINI: "o4-mini",
58
+ O4_MINI_DEEP_RESEARCH: "o4-mini-deep-research",
59
+ // Realtime & Audio
60
+ GPT_REALTIME: "gpt-realtime",
61
+ GPT_REALTIME_MINI: "gpt-realtime-mini",
62
+ GPT_4o_REALTIME_PREVIEW: "gpt-4o-realtime-preview",
63
+ GPT_4o_MINI_REALTIME_PREVIEW: "gpt-4o-mini-realtime-preview",
64
+ GPT_AUDIO: "gpt-audio",
65
+ GPT_AUDIO_MINI: "gpt-audio-mini",
66
+ GPT_4o_AUDIO_PREVIEW: "gpt-4o-audio-preview",
67
+ GPT_4o_MINI_AUDIO_PREVIEW: "gpt-4o-mini-audio-preview",
68
+ // Legacy / GPT-4 & 3.5
25
69
  GPT_4_TURBO: "gpt-4-turbo",
26
70
  GPT_4: "gpt-4",
27
71
  GPT_3_5_TURBO: "gpt-3.5-turbo",
28
- O1: "o1",
29
- O1_MINI: "o1-mini",
30
- O3_MINI: "o3-mini"
72
+ GPT_3_5_TURBO_INSTRUCT: "gpt-3.5-turbo-instruct",
73
+ // Specialized Preview
74
+ COMPUTER_USE_PREVIEW: "computer-use-preview"
31
75
  };
32
76
  var isStructuredOutputSupported = (model) => {
33
77
  if (model.startsWith("gpt-4o-mini")) return true;
34
- if (model === "gpt-4o") return true;
35
78
  if (model.startsWith("gpt-4o-2024-08-06")) return true;
36
- if (model.includes("2024-08-06")) return true;
79
+ if (model === "gpt-4o") return true;
80
+ if (model.startsWith("gpt-5")) return true;
81
+ if (model.startsWith("gpt-4.1")) return true;
82
+ if (model.startsWith("o1")) return true;
83
+ if (model.startsWith("o3")) return true;
84
+ if (model.startsWith("o4")) return true;
37
85
  return false;
38
86
  };
39
87
 
@@ -45,6 +93,16 @@ var CHAT_GPT_PRICING = {
45
93
  "gpt-5": { input: 1.25, cachedInput: 0.125, output: 10 },
46
94
  "gpt-5-mini": { input: 0.25, cachedInput: 0.025, output: 2 },
47
95
  "gpt-5-nano": { input: 0.05, cachedInput: 5e-3, output: 0.4 },
96
+ "gpt-5.2-pro": { input: 21, output: 168 },
97
+ "gpt-5-pro": { input: 15, output: 120 },
98
+ "gpt-5.2-chat-latest": { input: 1.75, cachedInput: 0.175, output: 14 },
99
+ "gpt-5.1-chat-latest": { input: 1.25, cachedInput: 0.125, output: 10 },
100
+ "gpt-5-chat-latest": { input: 1.25, cachedInput: 0.125, output: 10 },
101
+ "gpt-5.1-codex-max": { input: 1.25, cachedInput: 0.125, output: 10 },
102
+ "gpt-5.1-codex": { input: 1.25, cachedInput: 0.125, output: 10 },
103
+ "gpt-5-codex": { input: 1.25, cachedInput: 0.125, output: 10 },
104
+ "gpt-5.1-codex-mini": { input: 0.25, cachedInput: 0.025, output: 2 },
105
+ "gpt-5-search-api": { input: 1.25, cachedInput: 0.125, output: 10 },
48
106
  // GPT-4.1
49
107
  "gpt-4.1": { input: 2, cachedInput: 0.5, output: 8 },
50
108
  "gpt-4.1-mini": { input: 0.4, cachedInput: 0.1, output: 1.6 },
@@ -55,17 +113,64 @@ var CHAT_GPT_PRICING = {
55
113
  "gpt-4o-2024-08-06": { input: 2.5, cachedInput: 1.25, output: 10 },
56
114
  "gpt-4o-mini": { input: 0.15, cachedInput: 0.075, output: 0.6 },
57
115
  "gpt-4o-mini-2024-07-18": { input: 0.15, cachedInput: 0.075, output: 0.6 },
58
- // Reasoning Models
116
+ "gpt-4o-mini-search-preview": { input: 0.15, output: 0.6 },
117
+ "gpt-4o-search-preview": { input: 2.5, output: 10 },
118
+ // Reasoning Models (o-series)
59
119
  o1: { input: 15, cachedInput: 7.5, output: 60 },
120
+ "o1-pro": { input: 150, output: 600 },
60
121
  "o1-mini": { input: 1.1, cachedInput: 0.55, output: 4.4 },
61
122
  o3: { input: 2, cachedInput: 0.5, output: 8 },
123
+ "o3-pro": { input: 20, output: 80 },
62
124
  "o3-mini": { input: 1.1, cachedInput: 0.55, output: 4.4 },
125
+ "o3-deep-research": { input: 10, cachedInput: 2.5, output: 40 },
63
126
  "o4-mini": { input: 1.1, cachedInput: 0.275, output: 4.4 },
64
- // Legacy/Other
127
+ "o4-mini-deep-research": { input: 2, cachedInput: 0.5, output: 8 },
128
+ // Realtime & Audio
129
+ "gpt-realtime": { input: 4, cachedInput: 0.4, output: 16 },
130
+ "gpt-realtime-mini": { input: 0.6, cachedInput: 0.06, output: 2.4 },
131
+ "gpt-4o-realtime-preview": { input: 5, cachedInput: 2.5, output: 20 },
132
+ "gpt-4o-mini-realtime-preview": { input: 0.6, cachedInput: 0.3, output: 2.4 },
133
+ "gpt-audio": { input: 2.5, output: 10 },
134
+ "gpt-audio-mini": { input: 0.6, output: 2.4 },
135
+ "gpt-4o-audio-preview": { input: 2.5, output: 10 },
136
+ "gpt-4o-mini-audio-preview": { input: 0.15, output: 0.6 },
137
+ // Legacy / GPT-4 & 3.5
65
138
  "gpt-4-turbo": { input: 10, output: 30 },
66
139
  "gpt-4-turbo-2024-04-09": { input: 10, output: 30 },
67
140
  "gpt-4": { input: 30, output: 60 },
68
- "gpt-3.5-turbo": { input: 0.5, output: 1.5 }
141
+ "gpt-3.5-turbo": { input: 0.5, output: 1.5 },
142
+ "gpt-3.5-turbo-instruct": { input: 1.5, output: 2 },
143
+ // Specialized Preview
144
+ "computer-use-preview": { input: 3, output: 12 }
145
+ };
146
+ var IMAGE_PRICING = {
147
+ "dall-e-3": {
148
+ standard: {
149
+ "1024x1024": 0.04,
150
+ "1024x1792": 0.08,
151
+ "1792x1024": 0.08
152
+ },
153
+ hd: {
154
+ "1024x1024": 0.08,
155
+ "1024x1792": 0.12,
156
+ "1792x1024": 0.12
157
+ }
158
+ },
159
+ "dall-e-2": {
160
+ standard: {
161
+ "1024x1024": 0.02,
162
+ "512x512": 0.018,
163
+ "256x256": 0.016
164
+ },
165
+ hd: {}
166
+ // no hd for dall-e-2
167
+ }
168
+ };
169
+ var SPEECH_PRICING = {
170
+ tts: 15 / 1e6,
171
+ // per character
172
+ "tts-hd": 30 / 1e6
173
+ // per character
69
174
  };
70
175
  var calculatePrice = (model, usage) => {
71
176
  if (!usage) return void 0;
@@ -84,6 +189,31 @@ var calculatePrice = (model, usage) => {
84
189
  currency: "USD"
85
190
  };
86
191
  };
192
+ var calculateImagePrice = (model, size = "1024x1024", quality = "standard", n = 1) => {
193
+ const pricing = IMAGE_PRICING[model];
194
+ if (!pricing) return void 0;
195
+ const unitPrice = quality === "hd" ? pricing.hd[size] : pricing.standard[size];
196
+ if (unitPrice === void 0) return void 0;
197
+ const total = unitPrice * n;
198
+ return {
199
+ total: Number(total.toFixed(6)),
200
+ inputCost: 0,
201
+ outputCost: total,
202
+ currency: "USD"
203
+ };
204
+ };
205
+ var calculateSpeechPrice = (model, inputLength) => {
206
+ const priceKey = model.includes("hd") ? "tts-hd" : "tts";
207
+ const rate = SPEECH_PRICING[priceKey];
208
+ if (!rate) return void 0;
209
+ const total = inputLength * rate;
210
+ return {
211
+ total: Number(total.toFixed(6)),
212
+ inputCost: 0,
213
+ outputCost: total,
214
+ currency: "USD"
215
+ };
216
+ };
87
217
 
88
218
  // src/operations/create-chat-completion.ts
89
219
  var createChatCompletion = (ctx) => async (input) => {
@@ -134,21 +264,79 @@ var createChatCompletion = (ctx) => async (input) => {
134
264
  }
135
265
  };
136
266
 
267
+ // src/operations/create-image.ts
268
+ var createImage = (ctx) => async (input) => {
269
+ const { client, logger } = ctx;
270
+ const model = input.model || "dall-e-3";
271
+ const mergedInput = {
272
+ ...input,
273
+ model
274
+ };
275
+ logger?.debug("chat-gpt:createImage:start", { data: mergedInput });
276
+ try {
277
+ const response = await client.images.generate(mergedInput);
278
+ const price = calculateImagePrice(model, input.size, input.quality, input.n);
279
+ const output = {
280
+ created: response.created,
281
+ data: response.data,
282
+ price
283
+ };
284
+ logger?.debug("chat-gpt:createImage:success", { data: output });
285
+ return output;
286
+ } catch (error) {
287
+ logger?.debug("chat-gpt:createImage:error", { error });
288
+ throw error;
289
+ }
290
+ };
291
+
292
+ // src/operations/create-speech.ts
293
+ var createSpeech = (ctx) => async (input) => {
294
+ const { client, logger } = ctx;
295
+ const model = input.model || "tts-1";
296
+ const mergedInput = {
297
+ ...input,
298
+ model
299
+ };
300
+ logger?.debug("chat-gpt:createSpeech:start", { data: mergedInput });
301
+ try {
302
+ const response = await client.audio.speech.create(mergedInput);
303
+ const buffer = Buffer.from(await response.arrayBuffer());
304
+ const price = calculateSpeechPrice(model, input.input.length);
305
+ const output = {
306
+ data: buffer,
307
+ price
308
+ };
309
+ logger?.debug("chat-gpt:createSpeech:success", { data: { price } });
310
+ return output;
311
+ } catch (error) {
312
+ logger?.debug("chat-gpt:createSpeech:error", { error });
313
+ throw error;
314
+ }
315
+ };
316
+
137
317
  // src/adapter.ts
138
318
  var createAdapter = (config, logger) => {
139
319
  const client = createChatGptClient(config);
140
320
  const context = { client, logger, defaults: config.defaults };
141
321
  return {
142
- createChatCompletion: createChatCompletion(context)
322
+ createChatCompletion: createChatCompletion(context),
323
+ createImage: createImage(context),
324
+ createSpeech: createSpeech(context)
143
325
  };
144
326
  };
145
327
 
146
328
  exports.CHAT_GPT_MODELS = CHAT_GPT_MODELS;
147
329
  exports.CHAT_GPT_PRICING = CHAT_GPT_PRICING;
330
+ exports.IMAGE_PRICING = IMAGE_PRICING;
331
+ exports.SPEECH_PRICING = SPEECH_PRICING;
332
+ exports.calculateImagePrice = calculateImagePrice;
148
333
  exports.calculatePrice = calculatePrice;
334
+ exports.calculateSpeechPrice = calculateSpeechPrice;
149
335
  exports.createAdapter = createAdapter;
150
336
  exports.createChatCompletion = createChatCompletion;
151
337
  exports.createChatGptClient = createChatGptClient;
338
+ exports.createImage = createImage;
339
+ exports.createSpeech = createSpeech;
152
340
  exports.isStructuredOutputSupported = isStructuredOutputSupported;
153
341
  //# sourceMappingURL=index.js.map
154
342
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/client.ts","../src/models.ts","../src/pricing.ts","../src/operations/create-chat-completion.ts","../src/adapter.ts"],"names":["OpenAI","zodTextFormat"],"mappings":"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","file":"index.js","sourcesContent":["import OpenAI from 'openai';\nimport { ChatGptConfig } from './types';\n\nexport const createChatGptClient = (config: ChatGptConfig): OpenAI => {\n return new OpenAI({\n apiKey: config.apiKey,\n organization: config.organization,\n project: config.project,\n });\n};\n","export const CHAT_GPT_MODELS = {\n GPT_4o: 'gpt-4o',\n GPT_4o_2024_08_06: 'gpt-4o-2024-08-06',\n GPT_4o_MINI: 'gpt-4o-mini',\n GPT_4o_MINI_2024_07_18: 'gpt-4o-mini-2024-07-18',\n GPT_4_TURBO: 'gpt-4-turbo',\n GPT_4: 'gpt-4',\n GPT_3_5_TURBO: 'gpt-3.5-turbo',\n O1: 'o1',\n O1_MINI: 'o1-mini',\n O3_MINI: 'o3-mini',\n} as const;\n\nexport type ChatGptModel = (typeof CHAT_GPT_MODELS)[keyof typeof CHAT_GPT_MODELS];\n\nexport const isStructuredOutputSupported = (model: string): boolean => {\n const supportedPrefixes = ['gpt-4o', 'gpt-4o-mini', 'o1']; // o1 supposedly supports it in some versions soon, but for now gpt-4o is the main one.\n // Actually per docs: gpt-4o-mini, gpt-4o-2024-08-06 and later.\n\n if (model.startsWith('gpt-4o-mini')) return true;\n if (model === 'gpt-4o') return true;\n if (model.startsWith('gpt-4o-2024-08-06')) return true;\n if (model.includes('2024-08-06')) return true; // safety for other snapshots\n\n return false;\n};\n","import { PriceInfo } from './types';\n\nexport interface ModelPricing {\n input: number; // cost per 1M tokens\n output: number; // cost per 1M tokens\n cachedInput?: number; // cost per 1M tokens\n}\n\nexport const CHAT_GPT_PRICING: Record<string, ModelPricing> = {\n // GPT-5 (Standard)\n 'gpt-5.2': { input: 1.75, cachedInput: 0.175, output: 14.0 },\n 'gpt-5.1': { input: 1.25, cachedInput: 0.125, output: 10.0 },\n 'gpt-5': { input: 1.25, cachedInput: 0.125, output: 10.0 },\n 'gpt-5-mini': { input: 0.25, cachedInput: 0.025, output: 2.0 },\n 'gpt-5-nano': { input: 0.05, cachedInput: 0.005, output: 0.4 },\n\n // GPT-4.1\n 'gpt-4.1': { input: 2.0, cachedInput: 0.5, output: 8.0 },\n 'gpt-4.1-mini': { input: 0.4, cachedInput: 0.1, output: 1.6 },\n 'gpt-4.1-nano': { input: 0.1, cachedInput: 0.025, output: 0.4 },\n\n // GPT-4o\n 'gpt-4o': { input: 2.5, cachedInput: 1.25, output: 10.0 },\n 'gpt-4o-2024-05-13': { input: 5.0, output: 15.0 },\n 'gpt-4o-2024-08-06': { input: 2.5, cachedInput: 1.25, output: 10.0 },\n 'gpt-4o-mini': { input: 0.15, cachedInput: 0.075, output: 0.6 },\n 'gpt-4o-mini-2024-07-18': { input: 0.15, cachedInput: 0.075, output: 0.6 },\n\n // Reasoning Models\n o1: { input: 15.0, cachedInput: 7.5, output: 60.0 },\n 'o1-mini': { input: 1.1, cachedInput: 0.55, output: 4.4 },\n o3: { input: 2.0, cachedInput: 0.5, output: 8.0 },\n 'o3-mini': { input: 1.1, cachedInput: 0.55, output: 4.4 },\n 'o4-mini': { input: 1.1, cachedInput: 0.275, output: 4.4 },\n\n // Legacy/Other\n 'gpt-4-turbo': { input: 10.0, output: 30.0 },\n 'gpt-4-turbo-2024-04-09': { input: 10.0, output: 30.0 },\n 'gpt-4': { input: 30.0, output: 60.0 },\n 'gpt-3.5-turbo': { input: 0.5, output: 1.5 },\n};\n\nexport const calculatePrice = (\n model: string,\n usage?: {\n prompt_tokens?: number;\n completion_tokens?: number;\n input_tokens?: number;\n output_tokens?: number;\n prompt_tokens_details?: { cached_tokens?: number };\n input_tokens_details?: { cached_tokens?: number };\n },\n): PriceInfo | undefined => {\n if (!usage) return undefined;\n\n const pricing = CHAT_GPT_PRICING[model];\n if (!pricing) return undefined;\n\n const inputTokens = usage.input_tokens ?? usage.prompt_tokens ?? 0;\n const outputTokens = usage.output_tokens ?? usage.completion_tokens ?? 0;\n const cachedTokens =\n usage.input_tokens_details?.cached_tokens ??\n usage.prompt_tokens_details?.cached_tokens ??\n 0;\n\n const regularInputTokens = inputTokens - cachedTokens;\n\n const inputCost =\n (regularInputTokens / 1_000_000) * pricing.input +\n (cachedTokens / 1_000_000) * (pricing.cachedInput ?? pricing.input);\n\n const outputCost = (outputTokens / 1_000_000) * pricing.output;\n\n return {\n total: Number((inputCost + outputCost).toFixed(6)),\n inputCost: Number(inputCost.toFixed(6)),\n outputCost: Number(outputCost.toFixed(6)),\n currency: 'USD',\n };\n};\n","import { zodTextFormat } from 'openai/helpers/zod';\nimport { ChatGptContext, CreateChatCompletionInput, CreateChatCompletionOutput } from '../types';\nimport { isStructuredOutputSupported } from '../models';\nimport { calculatePrice } from '../pricing';\n\nexport const createChatCompletion =\n (ctx: ChatGptContext) =>\n async (input: CreateChatCompletionInput): Promise<CreateChatCompletionOutput> => {\n const { client, logger, defaults } = ctx;\n\n const mergedInput = {\n ...defaults,\n ...input,\n };\n\n if (!mergedInput.model) {\n throw new Error('chat-gpt:createChatCompletion: model is required');\n }\n\n const { schema, schemaName, messages, ...rest } = mergedInput;\n\n logger?.debug('chat-gpt:createChatCompletion:start', { data: mergedInput });\n\n try {\n let response: any;\n if (schema) {\n if (!isStructuredOutputSupported(mergedInput.model)) {\n throw new Error(\n `chat-gpt:createChatCompletion: model ${mergedInput.model} does not support Structured Outputs. ` +\n 'See https://platform.openai.com/docs/guides/structured-outputs#supported-models',\n );\n }\n\n response = await (client.responses as any).parse({\n ...rest,\n input: messages,\n text: {\n format: zodTextFormat(schema, schemaName || 'output'),\n },\n });\n\n response = {\n ...response,\n parsed: response.output_parsed,\n };\n } else {\n // Fallback to regular chat completion for non-zod calls\n response = await client.chat.completions.create({\n ...mergedInput,\n } as any);\n }\n\n const price = calculatePrice(mergedInput.model, response.usage);\n\n const output = {\n ...response,\n price,\n } as CreateChatCompletionOutput;\n\n logger?.debug('chat-gpt:createChatCompletion:success', { data: output });\n\n return output;\n } catch (error) {\n logger?.debug('chat-gpt:createChatCompletion:error', { error });\n throw error;\n }\n };\n","import OpenAI from 'openai';\nimport { ChatGptConfig, ChatGptContext, Logger } from './types';\nimport { createChatGptClient } from './client';\nimport { createChatCompletion } from './operations/create-chat-completion';\n\nexport interface ChatGptAdapter {\n createChatCompletion: ReturnType<typeof createChatCompletion>;\n}\n\nexport const createAdapter = (config: ChatGptConfig, logger?: Logger): ChatGptAdapter => {\n const client = createChatGptClient(config);\n const context: ChatGptContext = { client, logger, defaults: config.defaults };\n\n return {\n createChatCompletion: createChatCompletion(context),\n };\n};\n"]}
1
+ {"version":3,"sources":["../src/client.ts","../src/models.ts","../src/pricing.ts","../src/operations/create-chat-completion.ts","../src/operations/create-image.ts","../src/operations/create-speech.ts","../src/adapter.ts"],"names":["OpenAI","zodTextFormat"],"mappings":"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","file":"index.js","sourcesContent":["import OpenAI from 'openai';\nimport { ChatGptConfig } from './types';\n\nexport const createChatGptClient = (config: ChatGptConfig): OpenAI => {\n return new OpenAI({\n apiKey: config.apiKey,\n organization: config.organization,\n project: config.project,\n });\n};\n","export const CHAT_GPT_MODELS = {\n // GPT-5\n GPT_5_2: 'gpt-5.2',\n GPT_5_1: 'gpt-5.1',\n GPT_5: 'gpt-5',\n GPT_5_MINI: 'gpt-5-mini',\n GPT_5_NANO: 'gpt-5-nano',\n GPT_5_2_PRO: 'gpt-5.2-pro',\n GPT_5_PRO: 'gpt-5-pro',\n GPT_5_2_CHAT_LATEST: 'gpt-5.2-chat-latest',\n GPT_5_1_CHAT_LATEST: 'gpt-5.1-chat-latest',\n GPT_5_CHAT_LATEST: 'gpt-5-chat-latest',\n GPT_5_1_CODEX_MAX: 'gpt-5.1-codex-max',\n GPT_5_1_CODEX: 'gpt-5.1-codex',\n GPT_5_CODEX: 'gpt-5-codex',\n GPT_5_1_CODEX_MINI: 'gpt-5.1-codex-mini',\n GPT_5_SEARCH_API: 'gpt-5-search-api',\n\n // GPT-4.1\n GPT_4_1: 'gpt-4.1',\n GPT_4_1_MINI: 'gpt-4.1-mini',\n GPT_4_1_NANO: 'gpt-4.1-nano',\n\n // GPT-4o\n GPT_4o: 'gpt-4o',\n GPT_4o_2024_08_06: 'gpt-4o-2024-08-06',\n GPT_4o_2024_05_13: 'gpt-4o-2024-05-13',\n GPT_4o_MINI: 'gpt-4o-mini',\n GPT_4o_MINI_2024_07_18: 'gpt-4o-mini-2024-07-18',\n GPT_4o_SEARCH_PREVIEW: 'gpt-4o-search-preview',\n GPT_4o_MINI_SEARCH_PREVIEW: 'gpt-4o-mini-search-preview',\n\n // Reasoning Models (o-series)\n O1: 'o1',\n O1_PRO: 'o1-pro',\n O1_MINI: 'o1-mini',\n O3: 'o3',\n O3_PRO: 'o3-pro',\n O3_MINI: 'o3-mini',\n O3_DEEP_RESEARCH: 'o3-deep-research',\n O4_MINI: 'o4-mini',\n O4_MINI_DEEP_RESEARCH: 'o4-mini-deep-research',\n\n // Realtime & Audio\n GPT_REALTIME: 'gpt-realtime',\n GPT_REALTIME_MINI: 'gpt-realtime-mini',\n GPT_4o_REALTIME_PREVIEW: 'gpt-4o-realtime-preview',\n GPT_4o_MINI_REALTIME_PREVIEW: 'gpt-4o-mini-realtime-preview',\n GPT_AUDIO: 'gpt-audio',\n GPT_AUDIO_MINI: 'gpt-audio-mini',\n GPT_4o_AUDIO_PREVIEW: 'gpt-4o-audio-preview',\n GPT_4o_MINI_AUDIO_PREVIEW: 'gpt-4o-mini-audio-preview',\n\n // Legacy / GPT-4 & 3.5\n GPT_4_TURBO: 'gpt-4-turbo',\n GPT_4: 'gpt-4',\n GPT_3_5_TURBO: 'gpt-3.5-turbo',\n GPT_3_5_TURBO_INSTRUCT: 'gpt-3.5-turbo-instruct',\n\n // Specialized Preview\n COMPUTER_USE_PREVIEW: 'computer-use-preview',\n} as const;\n\nexport type ChatGptModel = (typeof CHAT_GPT_MODELS)[keyof typeof CHAT_GPT_MODELS];\n\nexport const isStructuredOutputSupported = (model: string): boolean => {\n // Per OpenAI docs and pricing tiers:\n // GPT-4o, GPT-4o-mini, GPT-4o-2024-08-06 and later support it.\n // Also GPT-5 and GPT-4.1 series likely support it as next-gen models.\n\n if (model.startsWith('gpt-4o-mini')) return true;\n if (model.startsWith('gpt-4o-2024-08-06')) return true;\n if (model === 'gpt-4o') return true;\n\n if (model.startsWith('gpt-5')) return true;\n if (model.startsWith('gpt-4.1')) return true;\n\n // o1 and o3 series support structured outputs in recent versions\n if (model.startsWith('o1')) return true;\n if (model.startsWith('o3')) return true;\n if (model.startsWith('o4')) return true;\n\n return false;\n};\n","import { PriceInfo } from './types';\n\nexport interface ModelPricing {\n input: number; // cost per 1M tokens\n output: number; // cost per 1M tokens\n cachedInput?: number; // cost per 1M tokens\n}\n\nexport interface ImagePricing {\n standard: Record<string, number>;\n hd: Record<string, number>;\n}\n\nexport const CHAT_GPT_PRICING: Record<string, ModelPricing> = {\n // GPT-5 (Standard)\n 'gpt-5.2': { input: 1.75, cachedInput: 0.175, output: 14.0 },\n 'gpt-5.1': { input: 1.25, cachedInput: 0.125, output: 10.0 },\n 'gpt-5': { input: 1.25, cachedInput: 0.125, output: 10.0 },\n 'gpt-5-mini': { input: 0.25, cachedInput: 0.025, output: 2.0 },\n 'gpt-5-nano': { input: 0.05, cachedInput: 0.005, output: 0.4 },\n 'gpt-5.2-pro': { input: 21.0, output: 168.0 },\n 'gpt-5-pro': { input: 15.0, output: 120.0 },\n 'gpt-5.2-chat-latest': { input: 1.75, cachedInput: 0.175, output: 14.0 },\n 'gpt-5.1-chat-latest': { input: 1.25, cachedInput: 0.125, output: 10.0 },\n 'gpt-5-chat-latest': { input: 1.25, cachedInput: 0.125, output: 10.0 },\n 'gpt-5.1-codex-max': { input: 1.25, cachedInput: 0.125, output: 10.0 },\n 'gpt-5.1-codex': { input: 1.25, cachedInput: 0.125, output: 10.0 },\n 'gpt-5-codex': { input: 1.25, cachedInput: 0.125, output: 10.0 },\n 'gpt-5.1-codex-mini': { input: 0.25, cachedInput: 0.025, output: 2.0 },\n 'gpt-5-search-api': { input: 1.25, cachedInput: 0.125, output: 10.0 },\n\n // GPT-4.1\n 'gpt-4.1': { input: 2.0, cachedInput: 0.5, output: 8.0 },\n 'gpt-4.1-mini': { input: 0.4, cachedInput: 0.1, output: 1.6 },\n 'gpt-4.1-nano': { input: 0.1, cachedInput: 0.025, output: 0.4 },\n\n // GPT-4o\n 'gpt-4o': { input: 2.5, cachedInput: 1.25, output: 10.0 },\n 'gpt-4o-2024-05-13': { input: 5.0, output: 15.0 },\n 'gpt-4o-2024-08-06': { input: 2.5, cachedInput: 1.25, output: 10.0 },\n 'gpt-4o-mini': { input: 0.15, cachedInput: 0.075, output: 0.6 },\n 'gpt-4o-mini-2024-07-18': { input: 0.15, cachedInput: 0.075, output: 0.6 },\n 'gpt-4o-mini-search-preview': { input: 0.15, output: 0.6 },\n 'gpt-4o-search-preview': { input: 2.5, output: 10.0 },\n\n // Reasoning Models (o-series)\n o1: { input: 15.0, cachedInput: 7.5, output: 60.0 },\n 'o1-pro': { input: 150.0, output: 600.0 },\n 'o1-mini': { input: 1.1, cachedInput: 0.55, output: 4.4 },\n o3: { input: 2.0, cachedInput: 0.5, output: 8.0 },\n 'o3-pro': { input: 20.0, output: 80.0 },\n 'o3-mini': { input: 1.1, cachedInput: 0.55, output: 4.4 },\n 'o3-deep-research': { input: 10.0, cachedInput: 2.5, output: 40.0 },\n 'o4-mini': { input: 1.1, cachedInput: 0.275, output: 4.4 },\n 'o4-mini-deep-research': { input: 2.0, cachedInput: 0.5, output: 8.0 },\n\n // Realtime & Audio\n 'gpt-realtime': { input: 4.0, cachedInput: 0.4, output: 16.0 },\n 'gpt-realtime-mini': { input: 0.6, cachedInput: 0.06, output: 2.4 },\n 'gpt-4o-realtime-preview': { input: 5.0, cachedInput: 2.5, output: 20.0 },\n 'gpt-4o-mini-realtime-preview': { input: 0.6, cachedInput: 0.3, output: 2.4 },\n 'gpt-audio': { input: 2.5, output: 10.0 },\n 'gpt-audio-mini': { input: 0.6, output: 2.4 },\n 'gpt-4o-audio-preview': { input: 2.5, output: 10.0 },\n 'gpt-4o-mini-audio-preview': { input: 0.15, output: 0.6 },\n\n // Legacy / GPT-4 & 3.5\n 'gpt-4-turbo': { input: 10.0, output: 30.0 },\n 'gpt-4-turbo-2024-04-09': { input: 10.0, output: 30.0 },\n 'gpt-4': { input: 30.0, output: 60.0 },\n 'gpt-3.5-turbo': { input: 0.5, output: 1.5 },\n 'gpt-3.5-turbo-instruct': { input: 1.5, output: 2.0 },\n\n // Specialized Preview\n 'computer-use-preview': { input: 3.0, output: 12.0 },\n};\n\nexport const IMAGE_PRICING: Record<string, ImagePricing> = {\n 'dall-e-3': {\n standard: {\n '1024x1024': 0.04,\n '1024x1792': 0.08,\n '1792x1024': 0.08,\n },\n hd: {\n '1024x1024': 0.08,\n '1024x1792': 0.12,\n '1792x1024': 0.12,\n },\n },\n 'dall-e-2': {\n standard: {\n '1024x1024': 0.02,\n '512x512': 0.018,\n '256x256': 0.016,\n },\n hd: {}, // no hd for dall-e-2\n },\n};\n\nexport const SPEECH_PRICING: Record<string, number> = {\n tts: 15.0 / 1_000_000, // per character\n 'tts-hd': 30.0 / 1_000_000, // per character\n};\n\nexport const calculatePrice = (\n model: string,\n usage?: {\n prompt_tokens?: number;\n completion_tokens?: number;\n input_tokens?: number;\n output_tokens?: number;\n prompt_tokens_details?: { cached_tokens?: number };\n input_tokens_details?: { cached_tokens?: number };\n },\n): PriceInfo | undefined => {\n if (!usage) return undefined;\n\n const pricing = CHAT_GPT_PRICING[model];\n if (!pricing) return undefined;\n\n const inputTokens = usage.input_tokens ?? usage.prompt_tokens ?? 0;\n const outputTokens = usage.output_tokens ?? usage.completion_tokens ?? 0;\n const cachedTokens =\n usage.input_tokens_details?.cached_tokens ??\n usage.prompt_tokens_details?.cached_tokens ??\n 0;\n\n const regularInputTokens = inputTokens - cachedTokens;\n\n const inputCost =\n (regularInputTokens / 1_000_000) * pricing.input +\n (cachedTokens / 1_000_000) * (pricing.cachedInput ?? pricing.input);\n\n const outputCost = (outputTokens / 1_000_000) * pricing.output;\n\n return {\n total: Number((inputCost + outputCost).toFixed(6)),\n inputCost: Number(inputCost.toFixed(6)),\n outputCost: Number(outputCost.toFixed(6)),\n currency: 'USD',\n };\n};\n\nexport const calculateImagePrice = (\n model: string,\n size: string = '1024x1024',\n quality: string = 'standard',\n n: number = 1,\n): PriceInfo | undefined => {\n const pricing = IMAGE_PRICING[model];\n if (!pricing) return undefined;\n\n const unitPrice =\n quality === 'hd'\n ? pricing.hd[size as keyof typeof pricing.hd]\n : pricing.standard[size as keyof typeof pricing.standard];\n\n if (unitPrice === undefined) return undefined;\n\n const total = unitPrice * n;\n\n return {\n total: Number(total.toFixed(6)),\n inputCost: 0,\n outputCost: total,\n currency: 'USD',\n };\n};\n\nexport const calculateSpeechPrice = (model: string, inputLength: number): PriceInfo | undefined => {\n // Model in API is 'tts-1' or 'tts-1-hd'\n const priceKey = model.includes('hd') ? 'tts-hd' : 'tts';\n const rate = SPEECH_PRICING[priceKey];\n\n if (!rate) return undefined;\n\n const total = inputLength * rate;\n\n return {\n total: Number(total.toFixed(6)),\n inputCost: 0,\n outputCost: total,\n currency: 'USD',\n };\n};\n","import { zodTextFormat } from 'openai/helpers/zod';\nimport { ChatGptContext, CreateChatCompletionInput, CreateChatCompletionOutput } from '../types';\nimport { isStructuredOutputSupported } from '../models';\nimport { calculatePrice } from '../pricing';\n\nexport const createChatCompletion =\n (ctx: ChatGptContext) =>\n async (input: CreateChatCompletionInput): Promise<CreateChatCompletionOutput> => {\n const { client, logger, defaults } = ctx;\n\n const mergedInput = {\n ...defaults,\n ...input,\n };\n\n if (!mergedInput.model) {\n throw new Error('chat-gpt:createChatCompletion: model is required');\n }\n\n const { schema, schemaName, messages, ...rest } = mergedInput;\n\n logger?.debug('chat-gpt:createChatCompletion:start', { data: mergedInput });\n\n try {\n let response: any;\n if (schema) {\n if (!isStructuredOutputSupported(mergedInput.model)) {\n throw new Error(\n `chat-gpt:createChatCompletion: model ${mergedInput.model} does not support Structured Outputs. ` +\n 'See https://platform.openai.com/docs/guides/structured-outputs#supported-models',\n );\n }\n\n response = await (client.responses as any).parse({\n ...rest,\n input: messages,\n text: {\n format: zodTextFormat(schema, schemaName || 'output'),\n },\n });\n\n response = {\n ...response,\n parsed: response.output_parsed,\n };\n } else {\n // Fallback to regular chat completion for non-zod calls\n response = await client.chat.completions.create({\n ...mergedInput,\n } as any);\n }\n\n const price = calculatePrice(mergedInput.model, response.usage);\n\n const output = {\n ...response,\n price,\n } as CreateChatCompletionOutput;\n\n logger?.debug('chat-gpt:createChatCompletion:success', { data: output });\n\n return output;\n } catch (error) {\n logger?.debug('chat-gpt:createChatCompletion:error', { error });\n throw error;\n }\n };\n","import { ChatGptContext, CreateImageInput, CreateImageOutput } from '../types';\nimport { calculateImagePrice } from '../pricing';\n\nexport const createImage =\n (ctx: ChatGptContext) =>\n async (input: CreateImageInput): Promise<CreateImageOutput> => {\n const { client, logger } = ctx;\n\n const model = input.model || 'dall-e-3';\n const mergedInput = {\n ...input,\n model,\n };\n\n logger?.debug('chat-gpt:createImage:start', { data: mergedInput });\n\n try {\n const response = await client.images.generate(mergedInput as any);\n\n const price = calculateImagePrice(model, input.size, input.quality, input.n);\n\n const output: CreateImageOutput = {\n created: response.created,\n data: response.data as any,\n price,\n };\n\n logger?.debug('chat-gpt:createImage:success', { data: output });\n\n return output;\n } catch (error) {\n logger?.debug('chat-gpt:createImage:error', { error });\n throw error;\n }\n };\n","import { ChatGptContext, CreateSpeechInput, CreateSpeechOutput } from '../types';\nimport { calculateSpeechPrice } from '../pricing';\n\nexport const createSpeech =\n (ctx: ChatGptContext) =>\n async (input: CreateSpeechInput): Promise<CreateSpeechOutput> => {\n const { client, logger } = ctx;\n\n const model = input.model || 'tts-1';\n const mergedInput = {\n ...input,\n model,\n };\n\n logger?.debug('chat-gpt:createSpeech:start', { data: mergedInput });\n\n try {\n const response = await client.audio.speech.create(mergedInput as any);\n const buffer = Buffer.from(await response.arrayBuffer());\n\n const price = calculateSpeechPrice(model, input.input.length);\n\n const output: CreateSpeechOutput = {\n data: buffer,\n price,\n };\n\n logger?.debug('chat-gpt:createSpeech:success', { data: { price } });\n\n return output;\n } catch (error) {\n logger?.debug('chat-gpt:createSpeech:error', { error });\n throw error;\n }\n };\n","import OpenAI from 'openai';\nimport { ChatGptConfig, ChatGptContext, Logger } from './types';\nimport { createChatGptClient } from './client';\nimport { createChatCompletion } from './operations/create-chat-completion';\nimport { createImage } from './operations/create-image';\nimport { createSpeech } from './operations/create-speech';\n\nexport interface ChatGptAdapter {\n createChatCompletion: ReturnType<typeof createChatCompletion>;\n createImage: ReturnType<typeof createImage>;\n createSpeech: ReturnType<typeof createSpeech>;\n}\n\nexport const createAdapter = (config: ChatGptConfig, logger?: Logger): ChatGptAdapter => {\n const client = createChatGptClient(config);\n const context: ChatGptContext = { client, logger, defaults: config.defaults };\n\n return {\n createChatCompletion: createChatCompletion(context),\n createImage: createImage(context),\n createSpeech: createSpeech(context),\n };\n};\n"]}
package/dist/index.mjs CHANGED
@@ -12,22 +12,70 @@ var createChatGptClient = (config) => {
12
12
 
13
13
  // src/models.ts
14
14
  var CHAT_GPT_MODELS = {
15
+ // GPT-5
16
+ GPT_5_2: "gpt-5.2",
17
+ GPT_5_1: "gpt-5.1",
18
+ GPT_5: "gpt-5",
19
+ GPT_5_MINI: "gpt-5-mini",
20
+ GPT_5_NANO: "gpt-5-nano",
21
+ GPT_5_2_PRO: "gpt-5.2-pro",
22
+ GPT_5_PRO: "gpt-5-pro",
23
+ GPT_5_2_CHAT_LATEST: "gpt-5.2-chat-latest",
24
+ GPT_5_1_CHAT_LATEST: "gpt-5.1-chat-latest",
25
+ GPT_5_CHAT_LATEST: "gpt-5-chat-latest",
26
+ GPT_5_1_CODEX_MAX: "gpt-5.1-codex-max",
27
+ GPT_5_1_CODEX: "gpt-5.1-codex",
28
+ GPT_5_CODEX: "gpt-5-codex",
29
+ GPT_5_1_CODEX_MINI: "gpt-5.1-codex-mini",
30
+ GPT_5_SEARCH_API: "gpt-5-search-api",
31
+ // GPT-4.1
32
+ GPT_4_1: "gpt-4.1",
33
+ GPT_4_1_MINI: "gpt-4.1-mini",
34
+ GPT_4_1_NANO: "gpt-4.1-nano",
35
+ // GPT-4o
15
36
  GPT_4o: "gpt-4o",
16
37
  GPT_4o_2024_08_06: "gpt-4o-2024-08-06",
38
+ GPT_4o_2024_05_13: "gpt-4o-2024-05-13",
17
39
  GPT_4o_MINI: "gpt-4o-mini",
18
40
  GPT_4o_MINI_2024_07_18: "gpt-4o-mini-2024-07-18",
41
+ GPT_4o_SEARCH_PREVIEW: "gpt-4o-search-preview",
42
+ GPT_4o_MINI_SEARCH_PREVIEW: "gpt-4o-mini-search-preview",
43
+ // Reasoning Models (o-series)
44
+ O1: "o1",
45
+ O1_PRO: "o1-pro",
46
+ O1_MINI: "o1-mini",
47
+ O3: "o3",
48
+ O3_PRO: "o3-pro",
49
+ O3_MINI: "o3-mini",
50
+ O3_DEEP_RESEARCH: "o3-deep-research",
51
+ O4_MINI: "o4-mini",
52
+ O4_MINI_DEEP_RESEARCH: "o4-mini-deep-research",
53
+ // Realtime & Audio
54
+ GPT_REALTIME: "gpt-realtime",
55
+ GPT_REALTIME_MINI: "gpt-realtime-mini",
56
+ GPT_4o_REALTIME_PREVIEW: "gpt-4o-realtime-preview",
57
+ GPT_4o_MINI_REALTIME_PREVIEW: "gpt-4o-mini-realtime-preview",
58
+ GPT_AUDIO: "gpt-audio",
59
+ GPT_AUDIO_MINI: "gpt-audio-mini",
60
+ GPT_4o_AUDIO_PREVIEW: "gpt-4o-audio-preview",
61
+ GPT_4o_MINI_AUDIO_PREVIEW: "gpt-4o-mini-audio-preview",
62
+ // Legacy / GPT-4 & 3.5
19
63
  GPT_4_TURBO: "gpt-4-turbo",
20
64
  GPT_4: "gpt-4",
21
65
  GPT_3_5_TURBO: "gpt-3.5-turbo",
22
- O1: "o1",
23
- O1_MINI: "o1-mini",
24
- O3_MINI: "o3-mini"
66
+ GPT_3_5_TURBO_INSTRUCT: "gpt-3.5-turbo-instruct",
67
+ // Specialized Preview
68
+ COMPUTER_USE_PREVIEW: "computer-use-preview"
25
69
  };
26
70
  var isStructuredOutputSupported = (model) => {
27
71
  if (model.startsWith("gpt-4o-mini")) return true;
28
- if (model === "gpt-4o") return true;
29
72
  if (model.startsWith("gpt-4o-2024-08-06")) return true;
30
- if (model.includes("2024-08-06")) return true;
73
+ if (model === "gpt-4o") return true;
74
+ if (model.startsWith("gpt-5")) return true;
75
+ if (model.startsWith("gpt-4.1")) return true;
76
+ if (model.startsWith("o1")) return true;
77
+ if (model.startsWith("o3")) return true;
78
+ if (model.startsWith("o4")) return true;
31
79
  return false;
32
80
  };
33
81
 
@@ -39,6 +87,16 @@ var CHAT_GPT_PRICING = {
39
87
  "gpt-5": { input: 1.25, cachedInput: 0.125, output: 10 },
40
88
  "gpt-5-mini": { input: 0.25, cachedInput: 0.025, output: 2 },
41
89
  "gpt-5-nano": { input: 0.05, cachedInput: 5e-3, output: 0.4 },
90
+ "gpt-5.2-pro": { input: 21, output: 168 },
91
+ "gpt-5-pro": { input: 15, output: 120 },
92
+ "gpt-5.2-chat-latest": { input: 1.75, cachedInput: 0.175, output: 14 },
93
+ "gpt-5.1-chat-latest": { input: 1.25, cachedInput: 0.125, output: 10 },
94
+ "gpt-5-chat-latest": { input: 1.25, cachedInput: 0.125, output: 10 },
95
+ "gpt-5.1-codex-max": { input: 1.25, cachedInput: 0.125, output: 10 },
96
+ "gpt-5.1-codex": { input: 1.25, cachedInput: 0.125, output: 10 },
97
+ "gpt-5-codex": { input: 1.25, cachedInput: 0.125, output: 10 },
98
+ "gpt-5.1-codex-mini": { input: 0.25, cachedInput: 0.025, output: 2 },
99
+ "gpt-5-search-api": { input: 1.25, cachedInput: 0.125, output: 10 },
42
100
  // GPT-4.1
43
101
  "gpt-4.1": { input: 2, cachedInput: 0.5, output: 8 },
44
102
  "gpt-4.1-mini": { input: 0.4, cachedInput: 0.1, output: 1.6 },
@@ -49,17 +107,64 @@ var CHAT_GPT_PRICING = {
49
107
  "gpt-4o-2024-08-06": { input: 2.5, cachedInput: 1.25, output: 10 },
50
108
  "gpt-4o-mini": { input: 0.15, cachedInput: 0.075, output: 0.6 },
51
109
  "gpt-4o-mini-2024-07-18": { input: 0.15, cachedInput: 0.075, output: 0.6 },
52
- // Reasoning Models
110
+ "gpt-4o-mini-search-preview": { input: 0.15, output: 0.6 },
111
+ "gpt-4o-search-preview": { input: 2.5, output: 10 },
112
+ // Reasoning Models (o-series)
53
113
  o1: { input: 15, cachedInput: 7.5, output: 60 },
114
+ "o1-pro": { input: 150, output: 600 },
54
115
  "o1-mini": { input: 1.1, cachedInput: 0.55, output: 4.4 },
55
116
  o3: { input: 2, cachedInput: 0.5, output: 8 },
117
+ "o3-pro": { input: 20, output: 80 },
56
118
  "o3-mini": { input: 1.1, cachedInput: 0.55, output: 4.4 },
119
+ "o3-deep-research": { input: 10, cachedInput: 2.5, output: 40 },
57
120
  "o4-mini": { input: 1.1, cachedInput: 0.275, output: 4.4 },
58
- // Legacy/Other
121
+ "o4-mini-deep-research": { input: 2, cachedInput: 0.5, output: 8 },
122
+ // Realtime & Audio
123
+ "gpt-realtime": { input: 4, cachedInput: 0.4, output: 16 },
124
+ "gpt-realtime-mini": { input: 0.6, cachedInput: 0.06, output: 2.4 },
125
+ "gpt-4o-realtime-preview": { input: 5, cachedInput: 2.5, output: 20 },
126
+ "gpt-4o-mini-realtime-preview": { input: 0.6, cachedInput: 0.3, output: 2.4 },
127
+ "gpt-audio": { input: 2.5, output: 10 },
128
+ "gpt-audio-mini": { input: 0.6, output: 2.4 },
129
+ "gpt-4o-audio-preview": { input: 2.5, output: 10 },
130
+ "gpt-4o-mini-audio-preview": { input: 0.15, output: 0.6 },
131
+ // Legacy / GPT-4 & 3.5
59
132
  "gpt-4-turbo": { input: 10, output: 30 },
60
133
  "gpt-4-turbo-2024-04-09": { input: 10, output: 30 },
61
134
  "gpt-4": { input: 30, output: 60 },
62
- "gpt-3.5-turbo": { input: 0.5, output: 1.5 }
135
+ "gpt-3.5-turbo": { input: 0.5, output: 1.5 },
136
+ "gpt-3.5-turbo-instruct": { input: 1.5, output: 2 },
137
+ // Specialized Preview
138
+ "computer-use-preview": { input: 3, output: 12 }
139
+ };
140
+ var IMAGE_PRICING = {
141
+ "dall-e-3": {
142
+ standard: {
143
+ "1024x1024": 0.04,
144
+ "1024x1792": 0.08,
145
+ "1792x1024": 0.08
146
+ },
147
+ hd: {
148
+ "1024x1024": 0.08,
149
+ "1024x1792": 0.12,
150
+ "1792x1024": 0.12
151
+ }
152
+ },
153
+ "dall-e-2": {
154
+ standard: {
155
+ "1024x1024": 0.02,
156
+ "512x512": 0.018,
157
+ "256x256": 0.016
158
+ },
159
+ hd: {}
160
+ // no hd for dall-e-2
161
+ }
162
+ };
163
+ var SPEECH_PRICING = {
164
+ tts: 15 / 1e6,
165
+ // per character
166
+ "tts-hd": 30 / 1e6
167
+ // per character
63
168
  };
64
169
  var calculatePrice = (model, usage) => {
65
170
  if (!usage) return void 0;
@@ -78,6 +183,31 @@ var calculatePrice = (model, usage) => {
78
183
  currency: "USD"
79
184
  };
80
185
  };
186
+ var calculateImagePrice = (model, size = "1024x1024", quality = "standard", n = 1) => {
187
+ const pricing = IMAGE_PRICING[model];
188
+ if (!pricing) return void 0;
189
+ const unitPrice = quality === "hd" ? pricing.hd[size] : pricing.standard[size];
190
+ if (unitPrice === void 0) return void 0;
191
+ const total = unitPrice * n;
192
+ return {
193
+ total: Number(total.toFixed(6)),
194
+ inputCost: 0,
195
+ outputCost: total,
196
+ currency: "USD"
197
+ };
198
+ };
199
+ var calculateSpeechPrice = (model, inputLength) => {
200
+ const priceKey = model.includes("hd") ? "tts-hd" : "tts";
201
+ const rate = SPEECH_PRICING[priceKey];
202
+ if (!rate) return void 0;
203
+ const total = inputLength * rate;
204
+ return {
205
+ total: Number(total.toFixed(6)),
206
+ inputCost: 0,
207
+ outputCost: total,
208
+ currency: "USD"
209
+ };
210
+ };
81
211
 
82
212
  // src/operations/create-chat-completion.ts
83
213
  var createChatCompletion = (ctx) => async (input) => {
@@ -128,15 +258,67 @@ var createChatCompletion = (ctx) => async (input) => {
128
258
  }
129
259
  };
130
260
 
261
+ // src/operations/create-image.ts
262
+ var createImage = (ctx) => async (input) => {
263
+ const { client, logger } = ctx;
264
+ const model = input.model || "dall-e-3";
265
+ const mergedInput = {
266
+ ...input,
267
+ model
268
+ };
269
+ logger?.debug("chat-gpt:createImage:start", { data: mergedInput });
270
+ try {
271
+ const response = await client.images.generate(mergedInput);
272
+ const price = calculateImagePrice(model, input.size, input.quality, input.n);
273
+ const output = {
274
+ created: response.created,
275
+ data: response.data,
276
+ price
277
+ };
278
+ logger?.debug("chat-gpt:createImage:success", { data: output });
279
+ return output;
280
+ } catch (error) {
281
+ logger?.debug("chat-gpt:createImage:error", { error });
282
+ throw error;
283
+ }
284
+ };
285
+
286
+ // src/operations/create-speech.ts
287
+ var createSpeech = (ctx) => async (input) => {
288
+ const { client, logger } = ctx;
289
+ const model = input.model || "tts-1";
290
+ const mergedInput = {
291
+ ...input,
292
+ model
293
+ };
294
+ logger?.debug("chat-gpt:createSpeech:start", { data: mergedInput });
295
+ try {
296
+ const response = await client.audio.speech.create(mergedInput);
297
+ const buffer = Buffer.from(await response.arrayBuffer());
298
+ const price = calculateSpeechPrice(model, input.input.length);
299
+ const output = {
300
+ data: buffer,
301
+ price
302
+ };
303
+ logger?.debug("chat-gpt:createSpeech:success", { data: { price } });
304
+ return output;
305
+ } catch (error) {
306
+ logger?.debug("chat-gpt:createSpeech:error", { error });
307
+ throw error;
308
+ }
309
+ };
310
+
131
311
  // src/adapter.ts
132
312
  var createAdapter = (config, logger) => {
133
313
  const client = createChatGptClient(config);
134
314
  const context = { client, logger, defaults: config.defaults };
135
315
  return {
136
- createChatCompletion: createChatCompletion(context)
316
+ createChatCompletion: createChatCompletion(context),
317
+ createImage: createImage(context),
318
+ createSpeech: createSpeech(context)
137
319
  };
138
320
  };
139
321
 
140
- export { CHAT_GPT_MODELS, CHAT_GPT_PRICING, calculatePrice, createAdapter, createChatCompletion, createChatGptClient, isStructuredOutputSupported };
322
+ export { CHAT_GPT_MODELS, CHAT_GPT_PRICING, IMAGE_PRICING, SPEECH_PRICING, calculateImagePrice, calculatePrice, calculateSpeechPrice, createAdapter, createChatCompletion, createChatGptClient, createImage, createSpeech, isStructuredOutputSupported };
141
323
  //# sourceMappingURL=index.mjs.map
142
324
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/client.ts","../src/models.ts","../src/pricing.ts","../src/operations/create-chat-completion.ts","../src/adapter.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import OpenAI from 'openai';\nimport { ChatGptConfig } from './types';\n\nexport const createChatGptClient = (config: ChatGptConfig): OpenAI => {\n return new OpenAI({\n apiKey: config.apiKey,\n organization: config.organization,\n project: config.project,\n });\n};\n","export const CHAT_GPT_MODELS = {\n GPT_4o: 'gpt-4o',\n GPT_4o_2024_08_06: 'gpt-4o-2024-08-06',\n GPT_4o_MINI: 'gpt-4o-mini',\n GPT_4o_MINI_2024_07_18: 'gpt-4o-mini-2024-07-18',\n GPT_4_TURBO: 'gpt-4-turbo',\n GPT_4: 'gpt-4',\n GPT_3_5_TURBO: 'gpt-3.5-turbo',\n O1: 'o1',\n O1_MINI: 'o1-mini',\n O3_MINI: 'o3-mini',\n} as const;\n\nexport type ChatGptModel = (typeof CHAT_GPT_MODELS)[keyof typeof CHAT_GPT_MODELS];\n\nexport const isStructuredOutputSupported = (model: string): boolean => {\n const supportedPrefixes = ['gpt-4o', 'gpt-4o-mini', 'o1']; // o1 supposedly supports it in some versions soon, but for now gpt-4o is the main one.\n // Actually per docs: gpt-4o-mini, gpt-4o-2024-08-06 and later.\n\n if (model.startsWith('gpt-4o-mini')) return true;\n if (model === 'gpt-4o') return true;\n if (model.startsWith('gpt-4o-2024-08-06')) return true;\n if (model.includes('2024-08-06')) return true; // safety for other snapshots\n\n return false;\n};\n","import { PriceInfo } from './types';\n\nexport interface ModelPricing {\n input: number; // cost per 1M tokens\n output: number; // cost per 1M tokens\n cachedInput?: number; // cost per 1M tokens\n}\n\nexport const CHAT_GPT_PRICING: Record<string, ModelPricing> = {\n // GPT-5 (Standard)\n 'gpt-5.2': { input: 1.75, cachedInput: 0.175, output: 14.0 },\n 'gpt-5.1': { input: 1.25, cachedInput: 0.125, output: 10.0 },\n 'gpt-5': { input: 1.25, cachedInput: 0.125, output: 10.0 },\n 'gpt-5-mini': { input: 0.25, cachedInput: 0.025, output: 2.0 },\n 'gpt-5-nano': { input: 0.05, cachedInput: 0.005, output: 0.4 },\n\n // GPT-4.1\n 'gpt-4.1': { input: 2.0, cachedInput: 0.5, output: 8.0 },\n 'gpt-4.1-mini': { input: 0.4, cachedInput: 0.1, output: 1.6 },\n 'gpt-4.1-nano': { input: 0.1, cachedInput: 0.025, output: 0.4 },\n\n // GPT-4o\n 'gpt-4o': { input: 2.5, cachedInput: 1.25, output: 10.0 },\n 'gpt-4o-2024-05-13': { input: 5.0, output: 15.0 },\n 'gpt-4o-2024-08-06': { input: 2.5, cachedInput: 1.25, output: 10.0 },\n 'gpt-4o-mini': { input: 0.15, cachedInput: 0.075, output: 0.6 },\n 'gpt-4o-mini-2024-07-18': { input: 0.15, cachedInput: 0.075, output: 0.6 },\n\n // Reasoning Models\n o1: { input: 15.0, cachedInput: 7.5, output: 60.0 },\n 'o1-mini': { input: 1.1, cachedInput: 0.55, output: 4.4 },\n o3: { input: 2.0, cachedInput: 0.5, output: 8.0 },\n 'o3-mini': { input: 1.1, cachedInput: 0.55, output: 4.4 },\n 'o4-mini': { input: 1.1, cachedInput: 0.275, output: 4.4 },\n\n // Legacy/Other\n 'gpt-4-turbo': { input: 10.0, output: 30.0 },\n 'gpt-4-turbo-2024-04-09': { input: 10.0, output: 30.0 },\n 'gpt-4': { input: 30.0, output: 60.0 },\n 'gpt-3.5-turbo': { input: 0.5, output: 1.5 },\n};\n\nexport const calculatePrice = (\n model: string,\n usage?: {\n prompt_tokens?: number;\n completion_tokens?: number;\n input_tokens?: number;\n output_tokens?: number;\n prompt_tokens_details?: { cached_tokens?: number };\n input_tokens_details?: { cached_tokens?: number };\n },\n): PriceInfo | undefined => {\n if (!usage) return undefined;\n\n const pricing = CHAT_GPT_PRICING[model];\n if (!pricing) return undefined;\n\n const inputTokens = usage.input_tokens ?? usage.prompt_tokens ?? 0;\n const outputTokens = usage.output_tokens ?? usage.completion_tokens ?? 0;\n const cachedTokens =\n usage.input_tokens_details?.cached_tokens ??\n usage.prompt_tokens_details?.cached_tokens ??\n 0;\n\n const regularInputTokens = inputTokens - cachedTokens;\n\n const inputCost =\n (regularInputTokens / 1_000_000) * pricing.input +\n (cachedTokens / 1_000_000) * (pricing.cachedInput ?? pricing.input);\n\n const outputCost = (outputTokens / 1_000_000) * pricing.output;\n\n return {\n total: Number((inputCost + outputCost).toFixed(6)),\n inputCost: Number(inputCost.toFixed(6)),\n outputCost: Number(outputCost.toFixed(6)),\n currency: 'USD',\n };\n};\n","import { zodTextFormat } from 'openai/helpers/zod';\nimport { ChatGptContext, CreateChatCompletionInput, CreateChatCompletionOutput } from '../types';\nimport { isStructuredOutputSupported } from '../models';\nimport { calculatePrice } from '../pricing';\n\nexport const createChatCompletion =\n (ctx: ChatGptContext) =>\n async (input: CreateChatCompletionInput): Promise<CreateChatCompletionOutput> => {\n const { client, logger, defaults } = ctx;\n\n const mergedInput = {\n ...defaults,\n ...input,\n };\n\n if (!mergedInput.model) {\n throw new Error('chat-gpt:createChatCompletion: model is required');\n }\n\n const { schema, schemaName, messages, ...rest } = mergedInput;\n\n logger?.debug('chat-gpt:createChatCompletion:start', { data: mergedInput });\n\n try {\n let response: any;\n if (schema) {\n if (!isStructuredOutputSupported(mergedInput.model)) {\n throw new Error(\n `chat-gpt:createChatCompletion: model ${mergedInput.model} does not support Structured Outputs. ` +\n 'See https://platform.openai.com/docs/guides/structured-outputs#supported-models',\n );\n }\n\n response = await (client.responses as any).parse({\n ...rest,\n input: messages,\n text: {\n format: zodTextFormat(schema, schemaName || 'output'),\n },\n });\n\n response = {\n ...response,\n parsed: response.output_parsed,\n };\n } else {\n // Fallback to regular chat completion for non-zod calls\n response = await client.chat.completions.create({\n ...mergedInput,\n } as any);\n }\n\n const price = calculatePrice(mergedInput.model, response.usage);\n\n const output = {\n ...response,\n price,\n } as CreateChatCompletionOutput;\n\n logger?.debug('chat-gpt:createChatCompletion:success', { data: output });\n\n return output;\n } catch (error) {\n logger?.debug('chat-gpt:createChatCompletion:error', { error });\n throw error;\n }\n };\n","import OpenAI from 'openai';\nimport { ChatGptConfig, ChatGptContext, Logger } from './types';\nimport { createChatGptClient } from './client';\nimport { createChatCompletion } from './operations/create-chat-completion';\n\nexport interface ChatGptAdapter {\n createChatCompletion: ReturnType<typeof createChatCompletion>;\n}\n\nexport const createAdapter = (config: ChatGptConfig, logger?: Logger): ChatGptAdapter => {\n const client = createChatGptClient(config);\n const context: ChatGptContext = { client, logger, defaults: config.defaults };\n\n return {\n createChatCompletion: createChatCompletion(context),\n };\n};\n"]}
1
+ {"version":3,"sources":["../src/client.ts","../src/models.ts","../src/pricing.ts","../src/operations/create-chat-completion.ts","../src/operations/create-image.ts","../src/operations/create-speech.ts","../src/adapter.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import OpenAI from 'openai';\nimport { ChatGptConfig } from './types';\n\nexport const createChatGptClient = (config: ChatGptConfig): OpenAI => {\n return new OpenAI({\n apiKey: config.apiKey,\n organization: config.organization,\n project: config.project,\n });\n};\n","export const CHAT_GPT_MODELS = {\n // GPT-5\n GPT_5_2: 'gpt-5.2',\n GPT_5_1: 'gpt-5.1',\n GPT_5: 'gpt-5',\n GPT_5_MINI: 'gpt-5-mini',\n GPT_5_NANO: 'gpt-5-nano',\n GPT_5_2_PRO: 'gpt-5.2-pro',\n GPT_5_PRO: 'gpt-5-pro',\n GPT_5_2_CHAT_LATEST: 'gpt-5.2-chat-latest',\n GPT_5_1_CHAT_LATEST: 'gpt-5.1-chat-latest',\n GPT_5_CHAT_LATEST: 'gpt-5-chat-latest',\n GPT_5_1_CODEX_MAX: 'gpt-5.1-codex-max',\n GPT_5_1_CODEX: 'gpt-5.1-codex',\n GPT_5_CODEX: 'gpt-5-codex',\n GPT_5_1_CODEX_MINI: 'gpt-5.1-codex-mini',\n GPT_5_SEARCH_API: 'gpt-5-search-api',\n\n // GPT-4.1\n GPT_4_1: 'gpt-4.1',\n GPT_4_1_MINI: 'gpt-4.1-mini',\n GPT_4_1_NANO: 'gpt-4.1-nano',\n\n // GPT-4o\n GPT_4o: 'gpt-4o',\n GPT_4o_2024_08_06: 'gpt-4o-2024-08-06',\n GPT_4o_2024_05_13: 'gpt-4o-2024-05-13',\n GPT_4o_MINI: 'gpt-4o-mini',\n GPT_4o_MINI_2024_07_18: 'gpt-4o-mini-2024-07-18',\n GPT_4o_SEARCH_PREVIEW: 'gpt-4o-search-preview',\n GPT_4o_MINI_SEARCH_PREVIEW: 'gpt-4o-mini-search-preview',\n\n // Reasoning Models (o-series)\n O1: 'o1',\n O1_PRO: 'o1-pro',\n O1_MINI: 'o1-mini',\n O3: 'o3',\n O3_PRO: 'o3-pro',\n O3_MINI: 'o3-mini',\n O3_DEEP_RESEARCH: 'o3-deep-research',\n O4_MINI: 'o4-mini',\n O4_MINI_DEEP_RESEARCH: 'o4-mini-deep-research',\n\n // Realtime & Audio\n GPT_REALTIME: 'gpt-realtime',\n GPT_REALTIME_MINI: 'gpt-realtime-mini',\n GPT_4o_REALTIME_PREVIEW: 'gpt-4o-realtime-preview',\n GPT_4o_MINI_REALTIME_PREVIEW: 'gpt-4o-mini-realtime-preview',\n GPT_AUDIO: 'gpt-audio',\n GPT_AUDIO_MINI: 'gpt-audio-mini',\n GPT_4o_AUDIO_PREVIEW: 'gpt-4o-audio-preview',\n GPT_4o_MINI_AUDIO_PREVIEW: 'gpt-4o-mini-audio-preview',\n\n // Legacy / GPT-4 & 3.5\n GPT_4_TURBO: 'gpt-4-turbo',\n GPT_4: 'gpt-4',\n GPT_3_5_TURBO: 'gpt-3.5-turbo',\n GPT_3_5_TURBO_INSTRUCT: 'gpt-3.5-turbo-instruct',\n\n // Specialized Preview\n COMPUTER_USE_PREVIEW: 'computer-use-preview',\n} as const;\n\nexport type ChatGptModel = (typeof CHAT_GPT_MODELS)[keyof typeof CHAT_GPT_MODELS];\n\nexport const isStructuredOutputSupported = (model: string): boolean => {\n // Per OpenAI docs and pricing tiers:\n // GPT-4o, GPT-4o-mini, GPT-4o-2024-08-06 and later support it.\n // Also GPT-5 and GPT-4.1 series likely support it as next-gen models.\n\n if (model.startsWith('gpt-4o-mini')) return true;\n if (model.startsWith('gpt-4o-2024-08-06')) return true;\n if (model === 'gpt-4o') return true;\n\n if (model.startsWith('gpt-5')) return true;\n if (model.startsWith('gpt-4.1')) return true;\n\n // o1 and o3 series support structured outputs in recent versions\n if (model.startsWith('o1')) return true;\n if (model.startsWith('o3')) return true;\n if (model.startsWith('o4')) return true;\n\n return false;\n};\n","import { PriceInfo } from './types';\n\nexport interface ModelPricing {\n input: number; // cost per 1M tokens\n output: number; // cost per 1M tokens\n cachedInput?: number; // cost per 1M tokens\n}\n\nexport interface ImagePricing {\n standard: Record<string, number>;\n hd: Record<string, number>;\n}\n\nexport const CHAT_GPT_PRICING: Record<string, ModelPricing> = {\n // GPT-5 (Standard)\n 'gpt-5.2': { input: 1.75, cachedInput: 0.175, output: 14.0 },\n 'gpt-5.1': { input: 1.25, cachedInput: 0.125, output: 10.0 },\n 'gpt-5': { input: 1.25, cachedInput: 0.125, output: 10.0 },\n 'gpt-5-mini': { input: 0.25, cachedInput: 0.025, output: 2.0 },\n 'gpt-5-nano': { input: 0.05, cachedInput: 0.005, output: 0.4 },\n 'gpt-5.2-pro': { input: 21.0, output: 168.0 },\n 'gpt-5-pro': { input: 15.0, output: 120.0 },\n 'gpt-5.2-chat-latest': { input: 1.75, cachedInput: 0.175, output: 14.0 },\n 'gpt-5.1-chat-latest': { input: 1.25, cachedInput: 0.125, output: 10.0 },\n 'gpt-5-chat-latest': { input: 1.25, cachedInput: 0.125, output: 10.0 },\n 'gpt-5.1-codex-max': { input: 1.25, cachedInput: 0.125, output: 10.0 },\n 'gpt-5.1-codex': { input: 1.25, cachedInput: 0.125, output: 10.0 },\n 'gpt-5-codex': { input: 1.25, cachedInput: 0.125, output: 10.0 },\n 'gpt-5.1-codex-mini': { input: 0.25, cachedInput: 0.025, output: 2.0 },\n 'gpt-5-search-api': { input: 1.25, cachedInput: 0.125, output: 10.0 },\n\n // GPT-4.1\n 'gpt-4.1': { input: 2.0, cachedInput: 0.5, output: 8.0 },\n 'gpt-4.1-mini': { input: 0.4, cachedInput: 0.1, output: 1.6 },\n 'gpt-4.1-nano': { input: 0.1, cachedInput: 0.025, output: 0.4 },\n\n // GPT-4o\n 'gpt-4o': { input: 2.5, cachedInput: 1.25, output: 10.0 },\n 'gpt-4o-2024-05-13': { input: 5.0, output: 15.0 },\n 'gpt-4o-2024-08-06': { input: 2.5, cachedInput: 1.25, output: 10.0 },\n 'gpt-4o-mini': { input: 0.15, cachedInput: 0.075, output: 0.6 },\n 'gpt-4o-mini-2024-07-18': { input: 0.15, cachedInput: 0.075, output: 0.6 },\n 'gpt-4o-mini-search-preview': { input: 0.15, output: 0.6 },\n 'gpt-4o-search-preview': { input: 2.5, output: 10.0 },\n\n // Reasoning Models (o-series)\n o1: { input: 15.0, cachedInput: 7.5, output: 60.0 },\n 'o1-pro': { input: 150.0, output: 600.0 },\n 'o1-mini': { input: 1.1, cachedInput: 0.55, output: 4.4 },\n o3: { input: 2.0, cachedInput: 0.5, output: 8.0 },\n 'o3-pro': { input: 20.0, output: 80.0 },\n 'o3-mini': { input: 1.1, cachedInput: 0.55, output: 4.4 },\n 'o3-deep-research': { input: 10.0, cachedInput: 2.5, output: 40.0 },\n 'o4-mini': { input: 1.1, cachedInput: 0.275, output: 4.4 },\n 'o4-mini-deep-research': { input: 2.0, cachedInput: 0.5, output: 8.0 },\n\n // Realtime & Audio\n 'gpt-realtime': { input: 4.0, cachedInput: 0.4, output: 16.0 },\n 'gpt-realtime-mini': { input: 0.6, cachedInput: 0.06, output: 2.4 },\n 'gpt-4o-realtime-preview': { input: 5.0, cachedInput: 2.5, output: 20.0 },\n 'gpt-4o-mini-realtime-preview': { input: 0.6, cachedInput: 0.3, output: 2.4 },\n 'gpt-audio': { input: 2.5, output: 10.0 },\n 'gpt-audio-mini': { input: 0.6, output: 2.4 },\n 'gpt-4o-audio-preview': { input: 2.5, output: 10.0 },\n 'gpt-4o-mini-audio-preview': { input: 0.15, output: 0.6 },\n\n // Legacy / GPT-4 & 3.5\n 'gpt-4-turbo': { input: 10.0, output: 30.0 },\n 'gpt-4-turbo-2024-04-09': { input: 10.0, output: 30.0 },\n 'gpt-4': { input: 30.0, output: 60.0 },\n 'gpt-3.5-turbo': { input: 0.5, output: 1.5 },\n 'gpt-3.5-turbo-instruct': { input: 1.5, output: 2.0 },\n\n // Specialized Preview\n 'computer-use-preview': { input: 3.0, output: 12.0 },\n};\n\nexport const IMAGE_PRICING: Record<string, ImagePricing> = {\n 'dall-e-3': {\n standard: {\n '1024x1024': 0.04,\n '1024x1792': 0.08,\n '1792x1024': 0.08,\n },\n hd: {\n '1024x1024': 0.08,\n '1024x1792': 0.12,\n '1792x1024': 0.12,\n },\n },\n 'dall-e-2': {\n standard: {\n '1024x1024': 0.02,\n '512x512': 0.018,\n '256x256': 0.016,\n },\n hd: {}, // no hd for dall-e-2\n },\n};\n\nexport const SPEECH_PRICING: Record<string, number> = {\n tts: 15.0 / 1_000_000, // per character\n 'tts-hd': 30.0 / 1_000_000, // per character\n};\n\nexport const calculatePrice = (\n model: string,\n usage?: {\n prompt_tokens?: number;\n completion_tokens?: number;\n input_tokens?: number;\n output_tokens?: number;\n prompt_tokens_details?: { cached_tokens?: number };\n input_tokens_details?: { cached_tokens?: number };\n },\n): PriceInfo | undefined => {\n if (!usage) return undefined;\n\n const pricing = CHAT_GPT_PRICING[model];\n if (!pricing) return undefined;\n\n const inputTokens = usage.input_tokens ?? usage.prompt_tokens ?? 0;\n const outputTokens = usage.output_tokens ?? usage.completion_tokens ?? 0;\n const cachedTokens =\n usage.input_tokens_details?.cached_tokens ??\n usage.prompt_tokens_details?.cached_tokens ??\n 0;\n\n const regularInputTokens = inputTokens - cachedTokens;\n\n const inputCost =\n (regularInputTokens / 1_000_000) * pricing.input +\n (cachedTokens / 1_000_000) * (pricing.cachedInput ?? pricing.input);\n\n const outputCost = (outputTokens / 1_000_000) * pricing.output;\n\n return {\n total: Number((inputCost + outputCost).toFixed(6)),\n inputCost: Number(inputCost.toFixed(6)),\n outputCost: Number(outputCost.toFixed(6)),\n currency: 'USD',\n };\n};\n\nexport const calculateImagePrice = (\n model: string,\n size: string = '1024x1024',\n quality: string = 'standard',\n n: number = 1,\n): PriceInfo | undefined => {\n const pricing = IMAGE_PRICING[model];\n if (!pricing) return undefined;\n\n const unitPrice =\n quality === 'hd'\n ? pricing.hd[size as keyof typeof pricing.hd]\n : pricing.standard[size as keyof typeof pricing.standard];\n\n if (unitPrice === undefined) return undefined;\n\n const total = unitPrice * n;\n\n return {\n total: Number(total.toFixed(6)),\n inputCost: 0,\n outputCost: total,\n currency: 'USD',\n };\n};\n\nexport const calculateSpeechPrice = (model: string, inputLength: number): PriceInfo | undefined => {\n // Model in API is 'tts-1' or 'tts-1-hd'\n const priceKey = model.includes('hd') ? 'tts-hd' : 'tts';\n const rate = SPEECH_PRICING[priceKey];\n\n if (!rate) return undefined;\n\n const total = inputLength * rate;\n\n return {\n total: Number(total.toFixed(6)),\n inputCost: 0,\n outputCost: total,\n currency: 'USD',\n };\n};\n","import { zodTextFormat } from 'openai/helpers/zod';\nimport { ChatGptContext, CreateChatCompletionInput, CreateChatCompletionOutput } from '../types';\nimport { isStructuredOutputSupported } from '../models';\nimport { calculatePrice } from '../pricing';\n\nexport const createChatCompletion =\n (ctx: ChatGptContext) =>\n async (input: CreateChatCompletionInput): Promise<CreateChatCompletionOutput> => {\n const { client, logger, defaults } = ctx;\n\n const mergedInput = {\n ...defaults,\n ...input,\n };\n\n if (!mergedInput.model) {\n throw new Error('chat-gpt:createChatCompletion: model is required');\n }\n\n const { schema, schemaName, messages, ...rest } = mergedInput;\n\n logger?.debug('chat-gpt:createChatCompletion:start', { data: mergedInput });\n\n try {\n let response: any;\n if (schema) {\n if (!isStructuredOutputSupported(mergedInput.model)) {\n throw new Error(\n `chat-gpt:createChatCompletion: model ${mergedInput.model} does not support Structured Outputs. ` +\n 'See https://platform.openai.com/docs/guides/structured-outputs#supported-models',\n );\n }\n\n response = await (client.responses as any).parse({\n ...rest,\n input: messages,\n text: {\n format: zodTextFormat(schema, schemaName || 'output'),\n },\n });\n\n response = {\n ...response,\n parsed: response.output_parsed,\n };\n } else {\n // Fallback to regular chat completion for non-zod calls\n response = await client.chat.completions.create({\n ...mergedInput,\n } as any);\n }\n\n const price = calculatePrice(mergedInput.model, response.usage);\n\n const output = {\n ...response,\n price,\n } as CreateChatCompletionOutput;\n\n logger?.debug('chat-gpt:createChatCompletion:success', { data: output });\n\n return output;\n } catch (error) {\n logger?.debug('chat-gpt:createChatCompletion:error', { error });\n throw error;\n }\n };\n","import { ChatGptContext, CreateImageInput, CreateImageOutput } from '../types';\nimport { calculateImagePrice } from '../pricing';\n\nexport const createImage =\n (ctx: ChatGptContext) =>\n async (input: CreateImageInput): Promise<CreateImageOutput> => {\n const { client, logger } = ctx;\n\n const model = input.model || 'dall-e-3';\n const mergedInput = {\n ...input,\n model,\n };\n\n logger?.debug('chat-gpt:createImage:start', { data: mergedInput });\n\n try {\n const response = await client.images.generate(mergedInput as any);\n\n const price = calculateImagePrice(model, input.size, input.quality, input.n);\n\n const output: CreateImageOutput = {\n created: response.created,\n data: response.data as any,\n price,\n };\n\n logger?.debug('chat-gpt:createImage:success', { data: output });\n\n return output;\n } catch (error) {\n logger?.debug('chat-gpt:createImage:error', { error });\n throw error;\n }\n };\n","import { ChatGptContext, CreateSpeechInput, CreateSpeechOutput } from '../types';\nimport { calculateSpeechPrice } from '../pricing';\n\nexport const createSpeech =\n (ctx: ChatGptContext) =>\n async (input: CreateSpeechInput): Promise<CreateSpeechOutput> => {\n const { client, logger } = ctx;\n\n const model = input.model || 'tts-1';\n const mergedInput = {\n ...input,\n model,\n };\n\n logger?.debug('chat-gpt:createSpeech:start', { data: mergedInput });\n\n try {\n const response = await client.audio.speech.create(mergedInput as any);\n const buffer = Buffer.from(await response.arrayBuffer());\n\n const price = calculateSpeechPrice(model, input.input.length);\n\n const output: CreateSpeechOutput = {\n data: buffer,\n price,\n };\n\n logger?.debug('chat-gpt:createSpeech:success', { data: { price } });\n\n return output;\n } catch (error) {\n logger?.debug('chat-gpt:createSpeech:error', { error });\n throw error;\n }\n };\n","import OpenAI from 'openai';\nimport { ChatGptConfig, ChatGptContext, Logger } from './types';\nimport { createChatGptClient } from './client';\nimport { createChatCompletion } from './operations/create-chat-completion';\nimport { createImage } from './operations/create-image';\nimport { createSpeech } from './operations/create-speech';\n\nexport interface ChatGptAdapter {\n createChatCompletion: ReturnType<typeof createChatCompletion>;\n createImage: ReturnType<typeof createImage>;\n createSpeech: ReturnType<typeof createSpeech>;\n}\n\nexport const createAdapter = (config: ChatGptConfig, logger?: Logger): ChatGptAdapter => {\n const client = createChatGptClient(config);\n const context: ChatGptContext = { client, logger, defaults: config.defaults };\n\n return {\n createChatCompletion: createChatCompletion(context),\n createImage: createImage(context),\n createSpeech: createSpeech(context),\n };\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vitkuz/vitkuz-chat-gpt-apapter",
3
- "version": "1.3.2",
3
+ "version": "1.5.0",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.mjs",
6
6
  "types": "./dist/index.d.ts",