From fc1089ed99a9d889a68c3f150a147c387e052255 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 20 Dec 2025 17:15:03 +0000 Subject: [PATCH 1/7] feat: add Gemini 3 Flash (Preview) to AI providers Add Google's newly released Gemini 3.0 Flash model (gemini-3-flash-preview) to the available AI models: - Added to Google AI provider (direct API) - Added to OpenRouter provider - Added vision capability support - Added pricing and context window (1M tokens) configuration - Updated iOS AIProviders.swift to mirror web configuration --- apps/ios/PageSpace/Core/Constants/AIProviders.swift | 3 +++ apps/web/src/lib/ai/core/ai-providers-config.ts | 2 ++ apps/web/src/lib/ai/core/model-capabilities.ts | 2 ++ packages/lib/src/monitoring/ai-monitoring.ts | 4 ++++ 4 files changed, 11 insertions(+) diff --git a/apps/ios/PageSpace/Core/Constants/AIProviders.swift b/apps/ios/PageSpace/Core/Constants/AIProviders.swift index e992623855..4ec5c72742 100644 --- a/apps/ios/PageSpace/Core/Constants/AIProviders.swift +++ b/apps/ios/PageSpace/Core/Constants/AIProviders.swift @@ -44,6 +44,7 @@ let AI_PROVIDERS: [String: AIProvider] = [ "openai/o1-mini": "OpenAI o1-mini", "openai/o1-preview": "OpenAI o1-preview", // Google Models + "google/gemini-3-flash-preview": "Gemini 3 Flash (Preview)", "google/gemini-pro-1.5": "Gemini Pro 1.5", "google/gemini-flash-1.5": "Gemini Flash 1.5", // xAI Models (2025) @@ -102,6 +103,8 @@ let AI_PROVIDERS: [String: AIProvider] = [ "google": AIProvider( name: "Google AI", models: [ + // Gemini 3 Series (2025) + "gemini-3-flash-preview": "Gemini 3 Flash (Preview)", // Gemini 2.5 Series (2025) "gemini-2.5-pro": "Gemini 2.5 Pro", "gemini-2.5-flash": "Gemini 2.5 Flash", diff --git a/apps/web/src/lib/ai/core/ai-providers-config.ts b/apps/web/src/lib/ai/core/ai-providers-config.ts index 9c3b184d91..d802ee7404 100644 --- a/apps/web/src/lib/ai/core/ai-providers-config.ts +++ b/apps/web/src/lib/ai/core/ai-providers-config.ts @@ -62,6 +62,7 @@ export const AI_PROVIDERS = { // Google Models (via OpenRouter) 'google/gemini-3-pro-preview': 'Gemini 3 Pro', + 'google/gemini-3-flash-preview': 'Gemini 3 Flash (Preview)', 'google/gemini-2.5-pro': 'Gemini 2.5 Pro', 'google/gemini-2.5-flash': 'Gemini 2.5 Flash', 'google/gemini-2.5-flash-lite': 'Gemini 2.5 Flash Lite', @@ -131,6 +132,7 @@ export const AI_PROVIDERS = { models: { // Gemini 3 Series (2025) 'gemini-3-pro': 'Gemini 3 Pro', + 'gemini-3-flash-preview': 'Gemini 3 Flash (Preview)', // Gemini 2.5 Series (2025) 'gemini-2.5-pro': 'Gemini 2.5 Pro', 'gemini-2.5-flash': 'Gemini 2.5 Flash', diff --git a/apps/web/src/lib/ai/core/model-capabilities.ts b/apps/web/src/lib/ai/core/model-capabilities.ts index 2778212d29..5b1eb4b2e8 100644 --- a/apps/web/src/lib/ai/core/model-capabilities.ts +++ b/apps/web/src/lib/ai/core/model-capabilities.ts @@ -50,12 +50,14 @@ const VISION_CAPABLE_MODELS: Record = { 'anthropic/claude-opus-4.1': true, // Google Gemini (all versions support vision) + 'gemini-3-flash-preview': true, 'gemini-2.5-pro': true, 'gemini-2.5-flash': true, 'gemini-2.5-flash-lite': true, 'gemini-2.0-flash-exp': true, 'gemini-1.5-pro': true, 'gemini-1.5-flash': true, + 'google/gemini-3-flash-preview': true, 'google/gemini-2.5-pro': true, 'google/gemini-2.5-flash': true, 'google/gemini-2.5-flash-lite': true, diff --git a/packages/lib/src/monitoring/ai-monitoring.ts b/packages/lib/src/monitoring/ai-monitoring.ts index 1f9f7b2c2a..dbdc8107b5 100644 --- a/packages/lib/src/monitoring/ai-monitoring.ts +++ b/packages/lib/src/monitoring/ai-monitoring.ts @@ -32,6 +32,7 @@ export const AI_PRICING = { // OpenRouter Paid Models - Google 'google/gemini-3-pro-preview': { input: 1.25, output: 5.00 }, + 'google/gemini-3-flash-preview': { input: 0.10, output: 0.40 }, 'meta-llama/llama-3.1-405b-instruct': { input: 3.00, output: 3.00 }, 'mistralai/mistral-medium-3.1': { input: 2.70, output: 8.10 }, 'mistralai/mistral-small-3.2-24b-instruct': { input: 0.20, output: 0.60 }, @@ -42,6 +43,7 @@ export const AI_PRICING = { // Google AI Direct Models 'gemini-3-pro': { input: 1.25, output: 5.00 }, + 'gemini-3-flash-preview': { input: 0.10, output: 0.40 }, 'gemini-2.0-flash-exp': { input: 0.00, output: 0.00 }, // Free during preview 'gemini-1.5-flash': { input: 0.075, output: 0.30 }, 'gemini-1.5-flash-8b': { input: 0.0375, output: 0.15 }, @@ -108,6 +110,7 @@ export const MODEL_CONTEXT_WINDOWS = { // OpenRouter Models - Google 'google/gemini-3-pro-preview': 1048576, + 'google/gemini-3-flash-preview': 1048576, 'google/gemini-2.5-pro': 2000000, 'google/gemini-2.5-flash': 1000000, 'google/gemini-2.5-flash-lite': 1000000, @@ -116,6 +119,7 @@ export const MODEL_CONTEXT_WINDOWS = { // Google AI Direct Models 'gemini-3-pro': 1048576, + 'gemini-3-flash-preview': 1048576, 'gemini-2.5-pro': 2000000, 'gemini-2.5-flash': 1000000, 'gemini-2.0-pro-exp': 2000000, From b28e79942200a7c15d1455c53c0fda79a83ee791 Mon Sep 17 00:00:00 2001 From: 2witstudios <2witstudios@gmail.com> Date: Sun, 21 Dec 2025 00:54:48 -0600 Subject: [PATCH 2/7] fix: sync AI model pricing and context limits with provider config MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add 70+ missing models to AI_PRICING and MODEL_CONTEXT_WINDOWS: - OpenRouter: o3/o4 research, gpt-oss, devstral, GLM, Qwen, Kimi, MiniMax, DeepSeek, AI21 Jamba, xAI Grok, Mercury - Google AI Direct: gemini-2.0-flash, gemini-2.0-flash-lite - OpenAI Direct: gpt-5 series, gpt-4.1 series, gpt-4o, o-series - Anthropic Direct: Claude 4.1, 3.7, 3.5, 3 series - xAI Direct: all Grok 4/3/2 variants - MiniMax Direct: M2, M2-Stable - GLM Direct: glm-4.6 pricing Also fix gemini-3-flash-preview pricing (0.50/3.00 per 1M tokens) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- packages/lib/src/monitoring/ai-monitoring.ts | 181 ++++++++++++++++++- 1 file changed, 175 insertions(+), 6 deletions(-) diff --git a/packages/lib/src/monitoring/ai-monitoring.ts b/packages/lib/src/monitoring/ai-monitoring.ts index dbdc8107b5..73b8b507de 100644 --- a/packages/lib/src/monitoring/ai-monitoring.ts +++ b/packages/lib/src/monitoring/ai-monitoring.ts @@ -26,25 +26,64 @@ export const AI_PRICING = { 'openai/gpt-5.1-codex-mini': { input: 5.00, output: 20.00 }, 'openai/gpt-4o': { input: 2.50, output: 10.00 }, 'openai/gpt-4o-mini': { input: 0.15, output: 0.60 }, + 'openai/o3-deep-research': { input: 15.00, output: 60.00 }, + 'openai/o4-mini-deep-research': { input: 15.00, output: 60.00 }, 'openai/gpt-5': { input: 10.00, output: 40.00 }, 'openai/gpt-5-mini': { input: 1.00, output: 4.00 }, 'openai/gpt-5-nano': { input: 0.10, output: 0.40 }, + 'openai/gpt-oss-120b': { input: 0.00, output: 0.00 }, + 'openai/gpt-oss-20b': { input: 0.00, output: 0.00 }, // OpenRouter Paid Models - Google 'google/gemini-3-pro-preview': { input: 1.25, output: 5.00 }, - 'google/gemini-3-flash-preview': { input: 0.10, output: 0.40 }, + 'google/gemini-3-flash-preview': { input: 0.50, output: 3.00 }, 'meta-llama/llama-3.1-405b-instruct': { input: 3.00, output: 3.00 }, 'mistralai/mistral-medium-3.1': { input: 2.70, output: 8.10 }, 'mistralai/mistral-small-3.2-24b-instruct': { input: 0.20, output: 0.60 }, 'mistralai/codestral-2508': { input: 0.30, output: 0.90 }, + 'mistralai/devstral-medium': { input: 0.50, output: 1.50 }, + 'mistralai/devstral-small': { input: 0.50, output: 1.50 }, 'google/gemini-2.5-pro': { input: 1.25, output: 5.00 }, 'google/gemini-2.5-flash': { input: 0.075, output: 0.30 }, 'google/gemini-2.5-flash-lite': { input: 0.02, output: 0.08 }, - + 'google/gemini-2.5-flash-lite-preview-06-17': { input: 0.02, output: 0.08 }, + + // OpenRouter Paid Models - Chinese/Asian + 'z-ai/glm-4.5v': { input: 0.10, output: 0.40 }, + 'z-ai/glm-4.5': { input: 0.10, output: 0.40 }, + 'z-ai/glm-4.5-air': { input: 0.10, output: 0.40 }, + 'z-ai/glm-4-32b': { input: 0.10, output: 0.40 }, + 'qwen/qwen3-max': { input: 0.50, output: 1.50 }, + 'qwen/qwen3-235b-a22b-thinking-2507': { input: 0.50, output: 1.50 }, + 'qwen/qwen3-235b-a22b-2507': { input: 0.50, output: 1.50 }, + 'qwen/qwen3-coder': { input: 0.50, output: 1.50 }, + 'moonshotai/kimi-k2': { input: 0.20, output: 0.60 }, + 'minimax/minimax-m1': { input: 0.20, output: 0.60 }, + + // OpenRouter Paid Models - DeepSeek + 'deepseek/deepseek-v3.1-terminus': { input: 0.14, output: 0.28 }, + + // OpenRouter Paid Models - AI21 + 'ai21/jamba-mini-1.7': { input: 0.50, output: 0.70 }, + 'ai21/jamba-large-1.7': { input: 0.50, output: 0.70 }, + + // OpenRouter Paid Models - xAI + 'x-ai/grok-4-fast': { input: 5.00, output: 15.00 }, + 'x-ai/grok-4': { input: 5.00, output: 15.00 }, + + // OpenRouter Paid Models - Other + 'inception/mercury': { input: 0.50, output: 1.50 }, + // Google AI Direct Models 'gemini-3-pro': { input: 1.25, output: 5.00 }, - 'gemini-3-flash-preview': { input: 0.10, output: 0.40 }, + 'gemini-3-flash-preview': { input: 0.50, output: 3.00 }, + 'gemini-2.5-pro': { input: 1.25, output: 5.00 }, + 'gemini-2.5-flash': { input: 0.075, output: 0.30 }, + 'gemini-2.5-flash-lite': { input: 0.02, output: 0.08 }, + 'gemini-2.0-pro-exp': { input: 0.00, output: 0.00 }, // Free during preview + 'gemini-2.0-flash': { input: 0.10, output: 0.40 }, 'gemini-2.0-flash-exp': { input: 0.00, output: 0.00 }, // Free during preview + 'gemini-2.0-flash-lite': { input: 0.04, output: 0.16 }, 'gemini-1.5-flash': { input: 0.075, output: 0.30 }, 'gemini-1.5-flash-8b': { input: 0.0375, output: 0.15 }, 'gemini-1.5-pro': { input: 1.25, output: 5.00 }, @@ -52,18 +91,71 @@ export const AI_PRICING = { // OpenAI Direct Models 'gpt-5.1': { input: 10.00, output: 40.00 }, 'gpt-5.1-codex': { input: 10.00, output: 40.00 }, + 'gpt-5': { input: 10.00, output: 40.00 }, + 'gpt-5-mini': { input: 1.00, output: 4.00 }, + 'gpt-5-nano': { input: 0.10, output: 0.40 }, + 'gpt-4.1-2025-04-14': { input: 2.00, output: 8.00 }, + 'gpt-4.1-mini-2025-04-14': { input: 0.40, output: 1.60 }, + 'gpt-4.1-nano-2025-04-14': { input: 0.10, output: 0.40 }, + 'gpt-4o': { input: 2.50, output: 10.00 }, + 'gpt-4o-mini': { input: 0.15, output: 0.60 }, + 'gpt-4o-audio-preview': { input: 2.50, output: 10.00 }, 'gpt-4-turbo': { input: 10.00, output: 30.00 }, 'gpt-4': { input: 30.00, output: 60.00 }, 'gpt-3.5-turbo': { input: 0.50, output: 1.50 }, + 'o4-mini-2025-04-16': { input: 15.00, output: 60.00 }, + 'o3': { input: 15.00, output: 60.00 }, + 'o3-mini': { input: 15.00, output: 60.00 }, + 'o1': { input: 15.00, output: 60.00 }, + 'o1-mini': { input: 15.00, output: 60.00 }, + 'o1-preview': { input: 15.00, output: 60.00 }, // Anthropic Direct Models 'claude-opus-4-5-20251124': { input: 15.00, output: 75.00 }, 'claude-sonnet-4-5-20250929': { input: 3.00, output: 15.00 }, 'claude-haiku-4-5-20251001': { input: 0.80, output: 4.00 }, + 'claude-opus-4-1-20250805': { input: 15.00, output: 75.00 }, + 'claude-sonnet-4-1-20250805': { input: 3.00, output: 15.00 }, + 'claude-3-7-sonnet-20250219': { input: 3.00, output: 15.00 }, + 'claude-3-5-sonnet-20241022': { input: 3.00, output: 15.00 }, + 'claude-3-5-sonnet-20240620': { input: 3.00, output: 15.00 }, 'claude-3-5-sonnet-latest': { input: 3.00, output: 15.00 }, + 'claude-3-5-haiku-20241022': { input: 0.80, output: 4.00 }, 'claude-3-5-haiku-latest': { input: 0.80, output: 4.00 }, + 'claude-3-opus-20240229': { input: 15.00, output: 75.00 }, 'claude-3-opus-latest': { input: 15.00, output: 75.00 }, - + 'claude-3-sonnet-20240229': { input: 3.00, output: 15.00 }, + 'claude-3-haiku-20240307': { input: 0.25, output: 1.25 }, + + // xAI Direct Models + 'grok-4': { input: 5.00, output: 15.00 }, + 'grok-4-fast-reasoning': { input: 5.00, output: 15.00 }, + 'grok-4-fast-non-reasoning': { input: 5.00, output: 15.00 }, + 'grok-code-fast-1': { input: 5.00, output: 15.00 }, + 'grok-3': { input: 5.00, output: 15.00 }, + 'grok-3-latest': { input: 5.00, output: 15.00 }, + 'grok-3-fast': { input: 5.00, output: 15.00 }, + 'grok-3-fast-latest': { input: 5.00, output: 15.00 }, + 'grok-3-mini': { input: 5.00, output: 15.00 }, + 'grok-3-mini-latest': { input: 5.00, output: 15.00 }, + 'grok-3-mini-fast': { input: 5.00, output: 15.00 }, + 'grok-3-mini-fast-latest': { input: 5.00, output: 15.00 }, + 'grok-2': { input: 5.00, output: 15.00 }, + 'grok-2-latest': { input: 5.00, output: 15.00 }, + 'grok-2-1212': { input: 5.00, output: 15.00 }, + 'grok-2-vision': { input: 5.00, output: 15.00 }, + 'grok-2-vision-latest': { input: 5.00, output: 15.00 }, + 'grok-2-vision-1212': { input: 5.00, output: 15.00 }, + 'grok-beta': { input: 5.00, output: 15.00 }, + 'grok-vision-beta': { input: 5.00, output: 15.00 }, + + // MiniMax Direct Models + 'MiniMax-M2': { input: 0.20, output: 0.60 }, + 'MiniMax-M2-Stable': { input: 0.20, output: 0.60 }, + + // GLM Direct Models + 'glm-4.6': { input: 0.10, output: 0.40 }, + // Ollama (local) - no cost 'llama3.2': { input: 0, output: 0 }, 'llama3.2-vision': { input: 0, output: 0 }, @@ -98,15 +190,21 @@ export const MODEL_CONTEXT_WINDOWS = { 'openai/gpt-5.1-codex-mini': 400000, 'openai/gpt-4o': 128000, 'openai/gpt-4o-mini': 128000, + 'openai/o3-deep-research': 200000, + 'openai/o4-mini-deep-research': 200000, 'openai/gpt-5': 272000, 'openai/gpt-5-mini': 128000, 'openai/gpt-5-nano': 128000, + 'openai/gpt-oss-120b': 128000, + 'openai/gpt-oss-20b': 128000, // OpenRouter Models - Other 'meta-llama/llama-3.1-405b-instruct': 128000, 'mistralai/mistral-medium-3.1': 128000, 'mistralai/mistral-small-3.2-24b-instruct': 32000, 'mistralai/codestral-2508': 32000, + 'mistralai/devstral-medium': 128000, + 'mistralai/devstral-small': 128000, // OpenRouter Models - Google 'google/gemini-3-pro-preview': 1048576, @@ -114,16 +212,46 @@ export const MODEL_CONTEXT_WINDOWS = { 'google/gemini-2.5-pro': 2000000, 'google/gemini-2.5-flash': 1000000, 'google/gemini-2.5-flash-lite': 1000000, + 'google/gemini-2.5-flash-lite-preview-06-17': 1000000, 'google/gemini-2.0-pro': 2000000, 'google/gemini-2.0-flash': 1000000, + // OpenRouter Models - Chinese/Asian + 'z-ai/glm-4.5v': 128000, + 'z-ai/glm-4.5': 128000, + 'z-ai/glm-4.5-air': 128000, + 'z-ai/glm-4-32b': 128000, + 'qwen/qwen3-max': 128000, + 'qwen/qwen3-235b-a22b-thinking-2507': 128000, + 'qwen/qwen3-235b-a22b-2507': 128000, + 'qwen/qwen3-coder': 128000, + 'moonshotai/kimi-k2': 128000, + 'minimax/minimax-m1': 128000, + + // OpenRouter Models - DeepSeek + 'deepseek/deepseek-v3.1-terminus': 128000, + + // OpenRouter Models - AI21 + 'ai21/jamba-mini-1.7': 256000, + 'ai21/jamba-large-1.7': 256000, + + // OpenRouter Models - xAI + 'x-ai/grok-4-fast': 2000000, + 'x-ai/grok-4': 128000, + + // OpenRouter Models - Other + 'inception/mercury': 128000, + // Google AI Direct Models 'gemini-3-pro': 1048576, 'gemini-3-flash-preview': 1048576, 'gemini-2.5-pro': 2000000, 'gemini-2.5-flash': 1000000, + 'gemini-2.5-flash-lite': 1000000, 'gemini-2.0-pro-exp': 2000000, + 'gemini-2.0-flash': 1000000, 'gemini-2.0-flash-exp': 1000000, + 'gemini-2.0-flash-lite': 1000000, 'gemini-1.5-flash': 1000000, 'gemini-1.5-flash-8b': 1000000, 'gemini-1.5-pro': 2000000, @@ -134,27 +262,68 @@ export const MODEL_CONTEXT_WINDOWS = { 'gpt-5': 272000, 'gpt-5-mini': 128000, 'gpt-5-nano': 128000, + 'gpt-4.1-2025-04-14': 400000, + 'gpt-4.1-mini-2025-04-14': 400000, + 'gpt-4.1-nano-2025-04-14': 400000, + 'gpt-4o': 128000, + 'gpt-4o-mini': 128000, + 'gpt-4o-audio-preview': 128000, 'gpt-4-turbo': 128000, 'gpt-4': 8192, 'gpt-3.5-turbo': 16385, + 'o4-mini-2025-04-16': 200000, + 'o3': 200000, + 'o3-mini': 200000, + 'o1': 200000, + 'o1-mini': 200000, + 'o1-preview': 200000, // Anthropic Direct Models 'claude-opus-4-5-20251124': 200000, 'claude-sonnet-4-5': 200000, 'claude-sonnet-4-5-20250929': 200000, 'claude-haiku-4-5-20251001': 200000, + 'claude-opus-4-1-20250805': 200000, + 'claude-sonnet-4-1-20250805': 200000, + 'claude-3-7-sonnet-20250219': 200000, + 'claude-3-5-sonnet-20241022': 200000, + 'claude-3-5-sonnet-20240620': 200000, 'claude-3-5-sonnet-latest': 200000, + 'claude-3-5-haiku-20241022': 200000, 'claude-3-5-haiku-latest': 200000, + 'claude-3-opus-20240229': 200000, 'claude-3-opus-latest': 200000, + 'claude-3-sonnet-20240229': 200000, + 'claude-3-haiku-20240307': 200000, // xAI Models - 'grok-4-fast': 2000000, // Grok 4 Fast (2025) 'grok-4': 128000, + 'grok-4-fast-reasoning': 2000000, + 'grok-4-fast-non-reasoning': 2000000, + 'grok-code-fast-1': 128000, 'grok-3': 128000, + 'grok-3-latest': 128000, + 'grok-3-fast': 128000, + 'grok-3-fast-latest': 128000, 'grok-3-mini': 128000, + 'grok-3-mini-latest': 128000, + 'grok-3-mini-fast': 128000, + 'grok-3-mini-fast-latest': 128000, + 'grok-2': 128000, + 'grok-2-latest': 128000, + 'grok-2-1212': 128000, + 'grok-2-vision': 128000, + 'grok-2-vision-latest': 128000, + 'grok-2-vision-1212': 128000, + 'grok-beta': 128000, + 'grok-vision-beta': 128000, + + // MiniMax Direct Models + 'MiniMax-M2': 128000, + 'MiniMax-M2-Stable': 128000, // PageSpace/GLM Models - 'glm-4.6': 200000, // GLM 4.6 (Sept 2025) + 'glm-4.6': 200000, 'glm-4.5': 128000, 'glm-4.5-air': 128000, From a5eafae8cb25a26537a52bbea3b1207019daf4c8 Mon Sep 17 00:00:00 2001 From: 2witstudios <2witstudios@gmail.com> Date: Sun, 21 Dec 2025 00:59:28 -0600 Subject: [PATCH 3/7] fix: add orphaned models to provider config MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add models that were tracked in monitoring but not available for selection: - Google AI Direct: gemini-2.0-flash-exp, gemini-1.5-pro/flash/flash-8b - OpenRouter: google/gemini-2.0-pro (also added missing pricing) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- apps/web/src/lib/ai/core/ai-providers-config.ts | 6 ++++++ packages/lib/src/monitoring/ai-monitoring.ts | 1 + 2 files changed, 7 insertions(+) diff --git a/apps/web/src/lib/ai/core/ai-providers-config.ts b/apps/web/src/lib/ai/core/ai-providers-config.ts index d802ee7404..6651700e1b 100644 --- a/apps/web/src/lib/ai/core/ai-providers-config.ts +++ b/apps/web/src/lib/ai/core/ai-providers-config.ts @@ -67,6 +67,7 @@ export const AI_PROVIDERS = { 'google/gemini-2.5-flash': 'Gemini 2.5 Flash', 'google/gemini-2.5-flash-lite': 'Gemini 2.5 Flash Lite', 'google/gemini-2.5-flash-lite-preview-06-17': 'Gemini 2.5 Flash Lite Preview', + 'google/gemini-2.0-pro': 'Gemini 2.0 Pro', // AI21 Models 'ai21/jamba-mini-1.7': 'Jamba Mini 1.7', @@ -140,7 +141,12 @@ export const AI_PROVIDERS = { // Gemini 2.0 Series (2025) 'gemini-2.0-pro-exp': 'Gemini 2.0 Pro (Experimental)', 'gemini-2.0-flash': 'Gemini 2.0 Flash', + 'gemini-2.0-flash-exp': 'Gemini 2.0 Flash (Experimental)', 'gemini-2.0-flash-lite': 'Gemini 2.0 Flash-Lite', + // Gemini 1.5 Series + 'gemini-1.5-pro': 'Gemini 1.5 Pro', + 'gemini-1.5-flash': 'Gemini 1.5 Flash', + 'gemini-1.5-flash-8b': 'Gemini 1.5 Flash 8B', }, }, openai: { diff --git a/packages/lib/src/monitoring/ai-monitoring.ts b/packages/lib/src/monitoring/ai-monitoring.ts index 73b8b507de..2cd5c176bf 100644 --- a/packages/lib/src/monitoring/ai-monitoring.ts +++ b/packages/lib/src/monitoring/ai-monitoring.ts @@ -47,6 +47,7 @@ export const AI_PRICING = { 'google/gemini-2.5-flash': { input: 0.075, output: 0.30 }, 'google/gemini-2.5-flash-lite': { input: 0.02, output: 0.08 }, 'google/gemini-2.5-flash-lite-preview-06-17': { input: 0.02, output: 0.08 }, + 'google/gemini-2.0-pro': { input: 1.25, output: 5.00 }, // OpenRouter Paid Models - Chinese/Asian 'z-ai/glm-4.5v': { input: 0.10, output: 0.40 }, From a11de45d5ec9ae19663473f3a90478bd942707e9 Mon Sep 17 00:00:00 2001 From: 2witstudios <2witstudios@gmail.com> Date: Sun, 21 Dec 2025 01:01:50 -0600 Subject: [PATCH 4/7] fix: correct pricing for Devstral and deep research models MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Update to official pricing rates: - mistralai/devstral-medium: 0.40/2.00 (was 0.50/1.50) - mistralai/devstral-small: 0.10/0.30 (was 0.50/1.50) - openai/o3-deep-research: 10.00/40.00 (was 15.00/60.00) - openai/o4-mini-deep-research: 2.00/8.00 (was 15.00/60.00) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- packages/lib/src/monitoring/ai-monitoring.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/lib/src/monitoring/ai-monitoring.ts b/packages/lib/src/monitoring/ai-monitoring.ts index 2cd5c176bf..9a9365bdd5 100644 --- a/packages/lib/src/monitoring/ai-monitoring.ts +++ b/packages/lib/src/monitoring/ai-monitoring.ts @@ -26,8 +26,8 @@ export const AI_PRICING = { 'openai/gpt-5.1-codex-mini': { input: 5.00, output: 20.00 }, 'openai/gpt-4o': { input: 2.50, output: 10.00 }, 'openai/gpt-4o-mini': { input: 0.15, output: 0.60 }, - 'openai/o3-deep-research': { input: 15.00, output: 60.00 }, - 'openai/o4-mini-deep-research': { input: 15.00, output: 60.00 }, + 'openai/o3-deep-research': { input: 10.00, output: 40.00 }, + 'openai/o4-mini-deep-research': { input: 2.00, output: 8.00 }, 'openai/gpt-5': { input: 10.00, output: 40.00 }, 'openai/gpt-5-mini': { input: 1.00, output: 4.00 }, 'openai/gpt-5-nano': { input: 0.10, output: 0.40 }, @@ -41,8 +41,8 @@ export const AI_PRICING = { 'mistralai/mistral-medium-3.1': { input: 2.70, output: 8.10 }, 'mistralai/mistral-small-3.2-24b-instruct': { input: 0.20, output: 0.60 }, 'mistralai/codestral-2508': { input: 0.30, output: 0.90 }, - 'mistralai/devstral-medium': { input: 0.50, output: 1.50 }, - 'mistralai/devstral-small': { input: 0.50, output: 1.50 }, + 'mistralai/devstral-medium': { input: 0.40, output: 2.00 }, + 'mistralai/devstral-small': { input: 0.10, output: 0.30 }, 'google/gemini-2.5-pro': { input: 1.25, output: 5.00 }, 'google/gemini-2.5-flash': { input: 0.075, output: 0.30 }, 'google/gemini-2.5-flash-lite': { input: 0.02, output: 0.08 }, From c8e8df88c093128e7666ea84910fffb5d9700b08 Mon Sep 17 00:00:00 2001 From: 2witstudios <2witstudios@gmail.com> Date: Sun, 21 Dec 2025 01:02:41 -0600 Subject: [PATCH 5/7] fix: replace any types with proper TypeScript types MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - metadata field: any -> Record - metadata cast: as any -> as Record 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- packages/lib/src/monitoring/ai-monitoring.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/lib/src/monitoring/ai-monitoring.ts b/packages/lib/src/monitoring/ai-monitoring.ts index 9a9365bdd5..e4af2fae36 100644 --- a/packages/lib/src/monitoring/ai-monitoring.ts +++ b/packages/lib/src/monitoring/ai-monitoring.ts @@ -395,7 +395,7 @@ export interface AIUsageData { driveId?: string; success?: boolean; error?: string; - metadata?: any; + metadata?: Record; // Context tracking - track actual conversation context vs billing tokens contextMessages?: string[]; // Array of message IDs included in this call's context @@ -657,8 +657,8 @@ export async function getPopularAIFeatures( for (const record of usage) { if (record.metadata && typeof record.metadata === 'object') { - const metadata = record.metadata as any; - const feature = metadata.type || metadata.feature || 'general_chat'; + const metadata = record.metadata as Record; + const feature = (metadata.type as string) || (metadata.feature as string) || 'general_chat'; if (!featureMap.has(feature)) { featureMap.set(feature, new Set()); From 0562cef71e1f6afa237772ae96993302be4e491f Mon Sep 17 00:00:00 2001 From: 2witstudios <2witstudios@gmail.com> Date: Sun, 21 Dec 2025 01:09:55 -0600 Subject: [PATCH 6/7] fix: comprehensive AI model pricing update from official sources MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Updated pricing based on official documentation (Dec 2025): OpenRouter: - z-ai/glm models: 0.48/1.44 and 0.35/1.55 (was 0.10/0.40) - qwen/qwen3-max: 1.20/6.00 (was 0.50/1.50) - moonshotai/kimi-k2: 0.48/2.00 (was 0.20/0.60) - minimax/minimax-m1: 0.44/1.76 (was 0.20/0.60) - deepseek-v3.1-terminus: 0.21/0.32 (was 0.14/0.28) - x-ai/grok-4: 3.00/15.00, grok-4-fast: 0.20/0.50 OpenAI Direct: - gpt-5: 1.25/10.00 (was 10.00/40.00) - gpt-5-mini: 0.25/2.00 (was 1.00/4.00) - gpt-5-nano: 0.05/0.40 (was 0.10/0.40) - o3: 2.00/8.00, o3-mini: 1.10/4.40 (was 15.00/60.00) - o4-mini: 1.10/4.40 (was 15.00/60.00) xAI Direct: - grok-4/3: 3.00/15.00, fast variants: 0.20/0.50 - grok-3-mini: 1.00/5.00, grok-2: 2.00/10.00 MiniMax/GLM Direct: - MiniMax-M2: 0.30/1.20, glm-4.6: 0.39/1.90 Sources: openrouter.ai, platform.openai.com, docs.x.ai 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- packages/lib/src/monitoring/ai-monitoring.ts | 112 +++++++++---------- 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/packages/lib/src/monitoring/ai-monitoring.ts b/packages/lib/src/monitoring/ai-monitoring.ts index e4af2fae36..e5a2496254 100644 --- a/packages/lib/src/monitoring/ai-monitoring.ts +++ b/packages/lib/src/monitoring/ai-monitoring.ts @@ -28,9 +28,9 @@ export const AI_PRICING = { 'openai/gpt-4o-mini': { input: 0.15, output: 0.60 }, 'openai/o3-deep-research': { input: 10.00, output: 40.00 }, 'openai/o4-mini-deep-research': { input: 2.00, output: 8.00 }, - 'openai/gpt-5': { input: 10.00, output: 40.00 }, - 'openai/gpt-5-mini': { input: 1.00, output: 4.00 }, - 'openai/gpt-5-nano': { input: 0.10, output: 0.40 }, + 'openai/gpt-5': { input: 1.25, output: 10.00 }, + 'openai/gpt-5-mini': { input: 0.25, output: 2.00 }, + 'openai/gpt-5-nano': { input: 0.05, output: 0.40 }, 'openai/gpt-oss-120b': { input: 0.00, output: 0.00 }, 'openai/gpt-oss-20b': { input: 0.00, output: 0.00 }, @@ -49,28 +49,28 @@ export const AI_PRICING = { 'google/gemini-2.5-flash-lite-preview-06-17': { input: 0.02, output: 0.08 }, 'google/gemini-2.0-pro': { input: 1.25, output: 5.00 }, - // OpenRouter Paid Models - Chinese/Asian - 'z-ai/glm-4.5v': { input: 0.10, output: 0.40 }, - 'z-ai/glm-4.5': { input: 0.10, output: 0.40 }, - 'z-ai/glm-4.5-air': { input: 0.10, output: 0.40 }, - 'z-ai/glm-4-32b': { input: 0.10, output: 0.40 }, - 'qwen/qwen3-max': { input: 0.50, output: 1.50 }, - 'qwen/qwen3-235b-a22b-thinking-2507': { input: 0.50, output: 1.50 }, - 'qwen/qwen3-235b-a22b-2507': { input: 0.50, output: 1.50 }, - 'qwen/qwen3-coder': { input: 0.50, output: 1.50 }, - 'moonshotai/kimi-k2': { input: 0.20, output: 0.60 }, - 'minimax/minimax-m1': { input: 0.20, output: 0.60 }, - - // OpenRouter Paid Models - DeepSeek - 'deepseek/deepseek-v3.1-terminus': { input: 0.14, output: 0.28 }, + // OpenRouter Paid Models - Chinese/Asian (openrouter.ai, Dec 2025) + 'z-ai/glm-4.5v': { input: 0.48, output: 1.44 }, + 'z-ai/glm-4.5': { input: 0.48, output: 1.44 }, + 'z-ai/glm-4.5-air': { input: 0.35, output: 1.55 }, + 'z-ai/glm-4-32b': { input: 0.35, output: 1.55 }, + 'qwen/qwen3-max': { input: 1.20, output: 6.00 }, + 'qwen/qwen3-235b-a22b-thinking-2507': { input: 0.50, output: 2.00 }, + 'qwen/qwen3-235b-a22b-2507': { input: 0.50, output: 2.00 }, + 'qwen/qwen3-coder': { input: 0.50, output: 2.00 }, + 'moonshotai/kimi-k2': { input: 0.48, output: 2.00 }, + 'minimax/minimax-m1': { input: 0.44, output: 1.76 }, + + // OpenRouter Paid Models - DeepSeek (openrouter.ai, Dec 2025) + 'deepseek/deepseek-v3.1-terminus': { input: 0.21, output: 0.32 }, // OpenRouter Paid Models - AI21 'ai21/jamba-mini-1.7': { input: 0.50, output: 0.70 }, 'ai21/jamba-large-1.7': { input: 0.50, output: 0.70 }, - // OpenRouter Paid Models - xAI - 'x-ai/grok-4-fast': { input: 5.00, output: 15.00 }, - 'x-ai/grok-4': { input: 5.00, output: 15.00 }, + // OpenRouter Paid Models - xAI (openrouter.ai, Dec 2025) + 'x-ai/grok-4-fast': { input: 0.20, output: 0.50 }, + 'x-ai/grok-4': { input: 3.00, output: 15.00 }, // OpenRouter Paid Models - Other 'inception/mercury': { input: 0.50, output: 1.50 }, @@ -89,12 +89,12 @@ export const AI_PRICING = { 'gemini-1.5-flash-8b': { input: 0.0375, output: 0.15 }, 'gemini-1.5-pro': { input: 1.25, output: 5.00 }, - // OpenAI Direct Models + // OpenAI Direct Models (platform.openai.com/docs/pricing, Dec 2025) 'gpt-5.1': { input: 10.00, output: 40.00 }, 'gpt-5.1-codex': { input: 10.00, output: 40.00 }, - 'gpt-5': { input: 10.00, output: 40.00 }, - 'gpt-5-mini': { input: 1.00, output: 4.00 }, - 'gpt-5-nano': { input: 0.10, output: 0.40 }, + 'gpt-5': { input: 1.25, output: 10.00 }, + 'gpt-5-mini': { input: 0.25, output: 2.00 }, + 'gpt-5-nano': { input: 0.05, output: 0.40 }, 'gpt-4.1-2025-04-14': { input: 2.00, output: 8.00 }, 'gpt-4.1-mini-2025-04-14': { input: 0.40, output: 1.60 }, 'gpt-4.1-nano-2025-04-14': { input: 0.10, output: 0.40 }, @@ -104,11 +104,11 @@ export const AI_PRICING = { 'gpt-4-turbo': { input: 10.00, output: 30.00 }, 'gpt-4': { input: 30.00, output: 60.00 }, 'gpt-3.5-turbo': { input: 0.50, output: 1.50 }, - 'o4-mini-2025-04-16': { input: 15.00, output: 60.00 }, - 'o3': { input: 15.00, output: 60.00 }, - 'o3-mini': { input: 15.00, output: 60.00 }, + 'o4-mini-2025-04-16': { input: 1.10, output: 4.40 }, + 'o3': { input: 2.00, output: 8.00 }, + 'o3-mini': { input: 1.10, output: 4.40 }, 'o1': { input: 15.00, output: 60.00 }, - 'o1-mini': { input: 15.00, output: 60.00 }, + 'o1-mini': { input: 3.00, output: 12.00 }, 'o1-preview': { input: 15.00, output: 60.00 }, // Anthropic Direct Models @@ -128,34 +128,34 @@ export const AI_PRICING = { 'claude-3-sonnet-20240229': { input: 3.00, output: 15.00 }, 'claude-3-haiku-20240307': { input: 0.25, output: 1.25 }, - // xAI Direct Models - 'grok-4': { input: 5.00, output: 15.00 }, - 'grok-4-fast-reasoning': { input: 5.00, output: 15.00 }, - 'grok-4-fast-non-reasoning': { input: 5.00, output: 15.00 }, - 'grok-code-fast-1': { input: 5.00, output: 15.00 }, - 'grok-3': { input: 5.00, output: 15.00 }, - 'grok-3-latest': { input: 5.00, output: 15.00 }, - 'grok-3-fast': { input: 5.00, output: 15.00 }, - 'grok-3-fast-latest': { input: 5.00, output: 15.00 }, - 'grok-3-mini': { input: 5.00, output: 15.00 }, - 'grok-3-mini-latest': { input: 5.00, output: 15.00 }, - 'grok-3-mini-fast': { input: 5.00, output: 15.00 }, - 'grok-3-mini-fast-latest': { input: 5.00, output: 15.00 }, - 'grok-2': { input: 5.00, output: 15.00 }, - 'grok-2-latest': { input: 5.00, output: 15.00 }, - 'grok-2-1212': { input: 5.00, output: 15.00 }, - 'grok-2-vision': { input: 5.00, output: 15.00 }, - 'grok-2-vision-latest': { input: 5.00, output: 15.00 }, - 'grok-2-vision-1212': { input: 5.00, output: 15.00 }, - 'grok-beta': { input: 5.00, output: 15.00 }, - 'grok-vision-beta': { input: 5.00, output: 15.00 }, - - // MiniMax Direct Models - 'MiniMax-M2': { input: 0.20, output: 0.60 }, - 'MiniMax-M2-Stable': { input: 0.20, output: 0.60 }, - - // GLM Direct Models - 'glm-4.6': { input: 0.10, output: 0.40 }, + // xAI Direct Models (docs.x.ai/docs/models, Dec 2025) + 'grok-4': { input: 3.00, output: 15.00 }, + 'grok-4-fast-reasoning': { input: 0.20, output: 0.50 }, + 'grok-4-fast-non-reasoning': { input: 0.20, output: 0.50 }, + 'grok-code-fast-1': { input: 0.20, output: 0.50 }, + 'grok-3': { input: 3.00, output: 15.00 }, + 'grok-3-latest': { input: 3.00, output: 15.00 }, + 'grok-3-fast': { input: 0.20, output: 0.50 }, + 'grok-3-fast-latest': { input: 0.20, output: 0.50 }, + 'grok-3-mini': { input: 1.00, output: 5.00 }, + 'grok-3-mini-latest': { input: 1.00, output: 5.00 }, + 'grok-3-mini-fast': { input: 0.20, output: 0.50 }, + 'grok-3-mini-fast-latest': { input: 0.20, output: 0.50 }, + 'grok-2': { input: 2.00, output: 10.00 }, + 'grok-2-latest': { input: 2.00, output: 10.00 }, + 'grok-2-1212': { input: 2.00, output: 10.00 }, + 'grok-2-vision': { input: 2.00, output: 10.00 }, + 'grok-2-vision-latest': { input: 2.00, output: 10.00 }, + 'grok-2-vision-1212': { input: 2.00, output: 10.00 }, + 'grok-beta': { input: 2.00, output: 10.00 }, + 'grok-vision-beta': { input: 2.00, output: 10.00 }, + + // MiniMax Direct Models (openrouter.ai, Dec 2025) + 'MiniMax-M2': { input: 0.30, output: 1.20 }, + 'MiniMax-M2-Stable': { input: 0.30, output: 1.20 }, + + // GLM Direct Models (openrouter.ai, Dec 2025) + 'glm-4.6': { input: 0.39, output: 1.90 }, // Ollama (local) - no cost 'llama3.2': { input: 0, output: 0 }, From c35a20653cdb44366d1b3049d2bea7123957beda Mon Sep 17 00:00:00 2001 From: 2witstudios <2witstudios@gmail.com> Date: Sun, 21 Dec 2025 01:16:26 -0600 Subject: [PATCH 7/7] any to uknown in ai monitoring --- packages/lib/src/monitoring/ai-monitoring.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/lib/src/monitoring/ai-monitoring.ts b/packages/lib/src/monitoring/ai-monitoring.ts index e5a2496254..3cdaa338ef 100644 --- a/packages/lib/src/monitoring/ai-monitoring.ts +++ b/packages/lib/src/monitoring/ai-monitoring.ts @@ -488,8 +488,8 @@ export interface AIToolUsage { model: string; toolName: string; toolId?: string; - args?: any; - result?: any; + args?: unknown; + result?: unknown; duration?: number; success?: boolean; error?: string;