/* Copyright (c) 2025 Bernier LLC This file is licensed to the client under a limited-use license. The client may use and modify this code only within the scope of the project it was delivered for. Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC. */ import { ModelInfo } from '@bernierllc/ai-provider-core'; /** * OpenAI Model Registry * Contains information about all available OpenAI models */ export const OPENAI_MODELS: ModelInfo[] = [ { id: 'gpt-4-turbo', name: 'GPT-4 Turbo', contextWindow: 128000, maxOutputTokens: 4096, pricing: { inputPricePerToken: 0.01 / 1000, outputPricePerToken: 0.03 / 1000, currency: 'USD' }, capabilities: ['chat', 'completion', 'function-calling', 'vision'] }, { id: 'gpt-4-turbo-preview', name: 'GPT-4 Turbo Preview', contextWindow: 128000, maxOutputTokens: 4096, pricing: { inputPricePerToken: 0.01 / 1000, outputPricePerToken: 0.03 / 1000, currency: 'USD' }, capabilities: ['chat', 'completion', 'function-calling'] }, { id: 'gpt-4', name: 'GPT-4', contextWindow: 8192, maxOutputTokens: 8192, pricing: { inputPricePerToken: 0.03 / 1000, outputPricePerToken: 0.06 / 1000, currency: 'USD' }, capabilities: ['chat', 'completion', 'function-calling'] }, { id: 'gpt-4-32k', name: 'GPT-4 32K', contextWindow: 32768, maxOutputTokens: 32768, pricing: { inputPricePerToken: 0.06 / 1000, outputPricePerToken: 0.12 / 1000, currency: 'USD' }, capabilities: ['chat', 'completion', 'function-calling'] }, { id: 'gpt-3.5-turbo', name: 'GPT-3.5 Turbo', contextWindow: 16385, maxOutputTokens: 4096, pricing: { inputPricePerToken: 0.0005 / 1000, outputPricePerToken: 0.0015 / 1000, currency: 'USD' }, capabilities: ['chat', 'completion', 'function-calling'] }, { id: 'gpt-3.5-turbo-16k', name: 'GPT-3.5 Turbo 16K', contextWindow: 16385, maxOutputTokens: 16385, pricing: { inputPricePerToken: 0.003 / 1000, outputPricePerToken: 0.004 / 1000, currency: 'USD' }, capabilities: ['chat', 'completion', 'function-calling'] }, { id: 'gpt-4-vision-preview', name: 'GPT-4 Vision Preview', contextWindow: 128000, maxOutputTokens: 4096, pricing: { inputPricePerToken: 0.01 / 1000, outputPricePerToken: 0.03 / 1000, currency: 'USD' }, capabilities: ['chat', 'completion', 'vision'] }, { id: 'text-embedding-3-small', name: 'Text Embedding 3 Small', contextWindow: 8191, maxOutputTokens: 0, pricing: { inputPricePerToken: 0.00002 / 1000, outputPricePerToken: 0, currency: 'USD' }, capabilities: ['embeddings'] }, { id: 'text-embedding-3-large', name: 'Text Embedding 3 Large', contextWindow: 8191, maxOutputTokens: 0, pricing: { inputPricePerToken: 0.00013 / 1000, outputPricePerToken: 0, currency: 'USD' }, capabilities: ['embeddings'] }, { id: 'text-embedding-ada-002', name: 'Text Embedding Ada 002', contextWindow: 8191, maxOutputTokens: 0, pricing: { inputPricePerToken: 0.0001 / 1000, outputPricePerToken: 0, currency: 'USD' }, capabilities: ['embeddings'] } ]; /** * Get model information by ID */ export function getModelInfo(modelId: string): ModelInfo | undefined { return OPENAI_MODELS.find(model => model.id === modelId); } /** * Get all chat models */ export function getChatModels(): ModelInfo[] { return OPENAI_MODELS.filter(model => model.capabilities.includes('chat') || model.capabilities.includes('completion') ); } /** * Get all embedding models */ export function getEmbeddingModels(): ModelInfo[] { return OPENAI_MODELS.filter(model => model.capabilities.includes('embeddings') ); } /** * Get all vision-capable models */ export function getVisionModels(): ModelInfo[] { return OPENAI_MODELS.filter(model => model.capabilities.includes('vision') ); } /** * Check if model supports function calling */ export function supportsFunctionCalling(modelId: string): boolean { const model = getModelInfo(modelId); return model?.capabilities.includes('function-calling') ?? false; }