diff --git a/CODEBASE_GUIDE.md b/CODEBASE_GUIDE.md index 7d88859..adec4fc 100644 --- a/CODEBASE_GUIDE.md +++ b/CODEBASE_GUIDE.md @@ -131,7 +131,7 @@ This project provides a proxy layer for various Large Language Models (LLMs) and ### Supported Models & Providers -* **OpenAI:** Handled in `src/proxy/openai.ts`. Supports models like GPT-4, GPT-3.5-turbo, as well as o-series models (o1, o1-mini, o1-pro, o3, o3-mini, o4-mini). Handles chat completions and potentially image generation (`src/proxy/openai-image.ts`). +* **OpenAI:** Handled in `src/proxy/openai.ts`. Supports models like GPT-4, GPT-3.5-turbo, as well as o-series models (o1, o1-mini, o1-pro, o3, o3-mini, o3-pro, o4-mini). Handles chat completions and potentially image generation (`src/proxy/openai-image.ts`). * **Anthropic:** Handled in `src/proxy/anthropic.ts`. Supports Claude models. May use AWS Bedrock (`src/proxy/aws-claude.ts`) or Anthropic's direct API. * **Google AI / Vertex AI:** Handled in `src/proxy/google-ai.ts` and `src/proxy/gcp.ts`. Supports Gemini models (gemini-flash, gemini-pro, gemini-ultra). * **Mistral AI:** Handled in `src/proxy/mistral-ai.ts`. Supports Mistral models via their API or potentially AWS (`src/proxy/aws-mistral.ts`). @@ -229,7 +229,7 @@ The codebase handles several patterns for model naming and versioning: 1. **Date-stamped Models:** Many models include date stamps (e.g., `gpt-4-0125-preview`). The regex patterns in `OPENAI_MODEL_FAMILY_MAP` account for these with patterns like `^gpt-4o(-\\d{4}-\\d{2}-\\d{2})?$`. -2. **O-Series Models:** OpenAI's o-series models (o1, o1-mini, o1-pro, o3, o3-mini, o4-mini) follow a different naming convention. The codebase handles these with dedicated model families and regex patterns. +2. **O-Series Models:** OpenAI's o-series models (o1, o1-mini, o1-pro, o3, o3-mini, o3-pro, o4-mini) follow a different naming convention. The codebase handles these with dedicated model families and regex patterns. 3. **Preview/Non-Preview Variants:** Some models have preview variants (e.g., `gpt-4.5-preview`). The regex patterns in `OPENAI_MODEL_FAMILY_MAP` account for these with patterns like `^gpt-4\\.5(-preview)?(-\\d{4}-\\d{2}-\\d{2})?$`. diff --git a/src/config.ts b/src/config.ts index d688f43..4b1c7fd 100644 --- a/src/config.ts +++ b/src/config.ts @@ -880,6 +880,6 @@ function parseCsv(val: string): string[] { function getDefaultModelFamilies(): ModelFamily[] { return MODEL_FAMILIES.filter( - (f) => !f.includes("o1-pro") + (f) => !f.includes("o1-pro") && !f.includes("o3-pro") ) as ModelFamily[]; } diff --git a/src/info-page.ts b/src/info-page.ts index bfd17a6..dee8826 100644 --- a/src/info-page.ts +++ b/src/info-page.ts @@ -43,6 +43,7 @@ const MODEL_FAMILY_FRIENDLY_NAME: { [f in ModelFamily]: string } = { o1: "OpenAI o1", "o1-mini": "OpenAI o1 mini", "o1-pro": "OpenAI o1 pro", + "o3-pro": "OpenAI o3 pro", "o3-mini": "OpenAI o3 mini", "o3": "OpenAI o3", "o4-mini": "OpenAI o4 mini", @@ -78,6 +79,7 @@ const MODEL_FAMILY_FRIENDLY_NAME: { [f in ModelFamily]: string } = { "azure-o1": "Azure o1", "azure-o1-mini": "Azure o1 mini", "azure-o1-pro": "Azure o1 pro", + "azure-o3-pro": "Azure o3 pro", "azure-o3-mini": "Azure o3 mini", "azure-o3": "Azure o3", "azure-o4-mini": "Azure o4 mini", diff --git a/src/proxy/middleware/request/preprocessors/validate-context-size.ts b/src/proxy/middleware/request/preprocessors/validate-context-size.ts index 33f0ff4..33fc6ca 100644 --- a/src/proxy/middleware/request/preprocessors/validate-context-size.ts +++ b/src/proxy/middleware/request/preprocessors/validate-context-size.ts @@ -91,6 +91,8 @@ export const validateContextSize: RequestPreprocessor = async (req) => { modelMax = 128000; } else if (model.match(/^o1-pro(-\d{4}-\d{2}-\d{2})?$/)) { modelMax = 200000; + } else if (model.match(/^o3-pro(-\d{4}-\d{2}-\d{2})?$/)) { + modelMax = 200000; } else if (model.match(/^o1-preview(-\d{4}-\d{2}-\d{2})?$/)) { modelMax = 128000; } else if (model.match(/gpt-3.5-turbo/)) { diff --git a/src/proxy/openai.ts b/src/proxy/openai.ts index be6c585..1ec586e 100644 --- a/src/proxy/openai.ts +++ b/src/proxy/openai.ts @@ -356,7 +356,8 @@ const setupChunkedTransfer: RequestHandler = (req, res, next) => { // Functions to handle model-specific API routing function shouldUseResponsesApi(model: string): boolean { - return model === "o1-pro" || model.startsWith("o1-pro-") || + return model === "o1-pro" || model.startsWith("o1-pro-") || + model === "o3-pro" || model.startsWith("o3-pro-") || model === "codex-mini-latest" || model.startsWith("codex-mini-"); } diff --git a/src/shared/key-management/index.ts b/src/shared/key-management/index.ts index efd311e..7f09eaa 100644 --- a/src/shared/key-management/index.ts +++ b/src/shared/key-management/index.ts @@ -6,7 +6,7 @@ export type APIFormat = | "openai" | "openai-text" | "openai-image" - | "openai-responses" // New OpenAI Responses API for o1-pro model + | "openai-responses" // OpenAI Responses API (e.g., for o1-pro, o3-pro) | "anthropic-chat" // Anthropic's newer messages array format | "anthropic-text" // Legacy flat string prompt format | "google-ai" diff --git a/src/shared/models.ts b/src/shared/models.ts index 3c21889..f628e12 100644 --- a/src/shared/models.ts +++ b/src/shared/models.ts @@ -33,6 +33,7 @@ export type OpenAIModelFamily = | "o1" | "o1-mini" | "o1-pro" + | "o3-pro" | "o3-mini" | "o3" | "o4-mini" @@ -90,6 +91,7 @@ export const MODEL_FAMILIES = (( "o1", "o1-mini", "o1-pro", + "o3-pro", "o3-mini", "o3", "o4-mini", @@ -126,6 +128,7 @@ export const MODEL_FAMILIES = (( "azure-o1", "azure-o1-mini", "azure-o1-pro", + "azure-o3-pro", "azure-o3-mini", "azure-o3", "azure-o4-mini", @@ -168,6 +171,7 @@ export const MODEL_FAMILY_SERVICE: { "o1": "openai", "o1-mini": "openai", "o1-pro": "openai", + "o3-pro": "openai", "o3-mini": "openai", "o3": "openai", "o4-mini": "openai", @@ -197,6 +201,7 @@ export const MODEL_FAMILY_SERVICE: { "azure-o1": "azure", "azure-o1-mini": "azure", "azure-o1-pro": "azure", + "azure-o3-pro": "azure", "azure-o3-mini": "azure", "azure-o3": "azure", "azure-o4-mini": "azure", @@ -235,6 +240,7 @@ export const OPENAI_MODEL_FAMILY_MAP: { [regex: string]: OpenAIModelFamily } = { "^dall-e-\\d{1}$": "dall-e", "^o1-mini(-\\d{4}-\\d{2}-\\d{2})?$": "o1-mini", "^o1-pro(-\\d{4}-\\d{2}-\\d{2})?$": "o1-pro", + "^o3-pro(-\\d{4}-\\d{2}-\\d{2})?$": "o3-pro", "^o1(-\\d{4}-\\d{2}-\\d{2})?$": "o1", "^o3-mini(-\\d{4}-\\d{2}-\\d{2})?$": "o3-mini", "^o3(-\\d{4}-\\d{2}-\\d{2})?$": "o3", diff --git a/src/shared/stats.ts b/src/shared/stats.ts index d5db094..63f1d5c 100644 --- a/src/shared/stats.ts +++ b/src/shared/stats.ts @@ -19,13 +19,15 @@ const MODEL_PRICING: Record