@vitkuz/vitkuz-chat-gpt-apapter 1.6.2 → 1.7.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
@@ -102,6 +102,7 @@ interface CreateImageOutput {
102
102
  revised_prompt?: string;
103
103
  }[];
104
104
  price?: PriceInfo;
105
+ model: string;
105
106
  input?: CreateImageInput;
106
107
  }
107
108
  interface CreateSpeechInput {
@@ -114,6 +115,7 @@ interface CreateSpeechInput {
114
115
  interface CreateSpeechOutput {
115
116
  data: Buffer | Uint8Array;
116
117
  price?: PriceInfo;
118
+ model: string;
117
119
  input?: CreateSpeechInput;
118
120
  }
119
121
 
package/dist/index.d.ts CHANGED
@@ -102,6 +102,7 @@ interface CreateImageOutput {
102
102
  revised_prompt?: string;
103
103
  }[];
104
104
  price?: PriceInfo;
105
+ model: string;
105
106
  input?: CreateImageInput;
106
107
  }
107
108
  interface CreateSpeechInput {
@@ -114,6 +115,7 @@ interface CreateSpeechInput {
114
115
  interface CreateSpeechOutput {
115
116
  data: Buffer | Uint8Array;
116
117
  price?: PriceInfo;
118
+ model: string;
117
119
  input?: CreateSpeechInput;
118
120
  }
119
121
 
package/dist/index.js CHANGED
@@ -287,6 +287,7 @@ var createImage = (ctx) => async (input) => {
287
287
  created: response.created,
288
288
  data: response.data,
289
289
  price,
290
+ model,
290
291
  input
291
292
  };
292
293
  logger?.debug("chat-gpt:createImage:success", { data: output });
@@ -300,7 +301,15 @@ var createImage = (ctx) => async (input) => {
300
301
  // src/operations/create-speech.ts
301
302
  var createSpeech = (ctx) => async (input) => {
302
303
  const { client, logger } = ctx;
303
- const model = input.model || CHAT_GPT_MODELS.TTS_1;
304
+ let model = input.model || CHAT_GPT_MODELS.TTS_1;
305
+ const supportedAudioModels = [CHAT_GPT_MODELS.TTS_1, CHAT_GPT_MODELS.TTS_1_HD];
306
+ if (!supportedAudioModels.includes(model)) {
307
+ logger?.error("chat-gpt:createSpeech:unsupported-model", {
308
+ provided: model,
309
+ fallback: CHAT_GPT_MODELS.TTS_1
310
+ });
311
+ model = CHAT_GPT_MODELS.TTS_1;
312
+ }
304
313
  const mergedInput = {
305
314
  ...input,
306
315
  model
@@ -313,6 +322,7 @@ var createSpeech = (ctx) => async (input) => {
313
322
  const output = {
314
323
  data: buffer,
315
324
  price,
325
+ model,
316
326
  input
317
327
  };
318
328
  logger?.debug("chat-gpt:createSpeech:success", { data: { price } });
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/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\n // Image Generation Models\n DALL_E_3: 'dall-e-3',\n DALL_E_2: 'dall-e-2',\n\n // Text-to-Speech Models\n TTS_1: 'tts-1',\n TTS_1_HD: 'tts-1-hd',\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 input,\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';\nimport { CHAT_GPT_MODELS } from '../models';\n\nexport const createImage =\n (ctx: ChatGptContext) =>\n async (input: CreateImageInput): Promise<CreateImageOutput> => {\n const { client, logger } = ctx;\n\n const model = input.model || CHAT_GPT_MODELS.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 input,\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';\nimport { CHAT_GPT_MODELS } from '../models';\n\nexport const createSpeech =\n (ctx: ChatGptContext) =>\n async (input: CreateSpeechInput): Promise<CreateSpeechOutput> => {\n const { client, logger } = ctx;\n\n const model = input.model || CHAT_GPT_MODELS.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 input,\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"]}
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\n // Image Generation Models\n DALL_E_3: 'dall-e-3',\n DALL_E_2: 'dall-e-2',\n\n // Text-to-Speech Models\n TTS_1: 'tts-1',\n TTS_1_HD: 'tts-1-hd',\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 input,\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';\nimport { CHAT_GPT_MODELS } from '../models';\n\nexport const createImage =\n (ctx: ChatGptContext) =>\n async (input: CreateImageInput): Promise<CreateImageOutput> => {\n const { client, logger } = ctx;\n\n const model = input.model || CHAT_GPT_MODELS.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 model,\n input,\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';\nimport { CHAT_GPT_MODELS } from '../models';\n\nexport const createSpeech =\n (ctx: ChatGptContext) =>\n async (input: CreateSpeechInput): Promise<CreateSpeechOutput> => {\n const { client, logger } = ctx;\n\n let model = input.model || CHAT_GPT_MODELS.TTS_1;\n const supportedAudioModels = [CHAT_GPT_MODELS.TTS_1, CHAT_GPT_MODELS.TTS_1_HD];\n\n if (!supportedAudioModels.includes(model as any)) {\n logger?.error('chat-gpt:createSpeech:unsupported-model', {\n provided: model,\n fallback: CHAT_GPT_MODELS.TTS_1,\n });\n model = CHAT_GPT_MODELS.TTS_1;\n }\n\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 model,\n input,\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
@@ -281,6 +281,7 @@ var createImage = (ctx) => async (input) => {
281
281
  created: response.created,
282
282
  data: response.data,
283
283
  price,
284
+ model,
284
285
  input
285
286
  };
286
287
  logger?.debug("chat-gpt:createImage:success", { data: output });
@@ -294,7 +295,15 @@ var createImage = (ctx) => async (input) => {
294
295
  // src/operations/create-speech.ts
295
296
  var createSpeech = (ctx) => async (input) => {
296
297
  const { client, logger } = ctx;
297
- const model = input.model || CHAT_GPT_MODELS.TTS_1;
298
+ let model = input.model || CHAT_GPT_MODELS.TTS_1;
299
+ const supportedAudioModels = [CHAT_GPT_MODELS.TTS_1, CHAT_GPT_MODELS.TTS_1_HD];
300
+ if (!supportedAudioModels.includes(model)) {
301
+ logger?.error("chat-gpt:createSpeech:unsupported-model", {
302
+ provided: model,
303
+ fallback: CHAT_GPT_MODELS.TTS_1
304
+ });
305
+ model = CHAT_GPT_MODELS.TTS_1;
306
+ }
298
307
  const mergedInput = {
299
308
  ...input,
300
309
  model
@@ -307,6 +316,7 @@ var createSpeech = (ctx) => async (input) => {
307
316
  const output = {
308
317
  data: buffer,
309
318
  price,
319
+ model,
310
320
  input
311
321
  };
312
322
  logger?.debug("chat-gpt:createSpeech:success", { data: { price } });
@@ -1 +1 @@
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\n // Image Generation Models\n DALL_E_3: 'dall-e-3',\n DALL_E_2: 'dall-e-2',\n\n // Text-to-Speech Models\n TTS_1: 'tts-1',\n TTS_1_HD: 'tts-1-hd',\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 input,\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';\nimport { CHAT_GPT_MODELS } from '../models';\n\nexport const createImage =\n (ctx: ChatGptContext) =>\n async (input: CreateImageInput): Promise<CreateImageOutput> => {\n const { client, logger } = ctx;\n\n const model = input.model || CHAT_GPT_MODELS.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 input,\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';\nimport { CHAT_GPT_MODELS } from '../models';\n\nexport const createSpeech =\n (ctx: ChatGptContext) =>\n async (input: CreateSpeechInput): Promise<CreateSpeechOutput> => {\n const { client, logger } = ctx;\n\n const model = input.model || CHAT_GPT_MODELS.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 input,\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"]}
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\n // Image Generation Models\n DALL_E_3: 'dall-e-3',\n DALL_E_2: 'dall-e-2',\n\n // Text-to-Speech Models\n TTS_1: 'tts-1',\n TTS_1_HD: 'tts-1-hd',\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 input,\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';\nimport { CHAT_GPT_MODELS } from '../models';\n\nexport const createImage =\n (ctx: ChatGptContext) =>\n async (input: CreateImageInput): Promise<CreateImageOutput> => {\n const { client, logger } = ctx;\n\n const model = input.model || CHAT_GPT_MODELS.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 model,\n input,\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';\nimport { CHAT_GPT_MODELS } from '../models';\n\nexport const createSpeech =\n (ctx: ChatGptContext) =>\n async (input: CreateSpeechInput): Promise<CreateSpeechOutput> => {\n const { client, logger } = ctx;\n\n let model = input.model || CHAT_GPT_MODELS.TTS_1;\n const supportedAudioModels = [CHAT_GPT_MODELS.TTS_1, CHAT_GPT_MODELS.TTS_1_HD];\n\n if (!supportedAudioModels.includes(model as any)) {\n logger?.error('chat-gpt:createSpeech:unsupported-model', {\n provided: model,\n fallback: CHAT_GPT_MODELS.TTS_1,\n });\n model = CHAT_GPT_MODELS.TTS_1;\n }\n\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 model,\n input,\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.6.2",
3
+ "version": "1.7.0",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.mjs",
6
6
  "types": "./dist/index.d.ts",