From 3edc64d5cf20657ce40aa23393b0ebde94a74b1b Mon Sep 17 00:00:00 2001 From: Sam Becker Date: Fri, 30 Jan 2026 20:42:47 -0600 Subject: [PATCH] Allow AI model override --- README.md | 3 ++- src/admin/config/AdminAppConfigurationClient.tsx | 12 ++++++++++++ src/app/config.ts | 2 ++ src/platforms/openai.ts | 13 ++++++++++--- 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 934dac19..e53c087b 100644 --- a/README.md +++ b/README.md @@ -92,7 +92,8 @@ To auto-generate text descriptions of photo: 1. Setup OpenAI - Create [OpenAI](https://openai.com) account and fund it ([see thread](https://github.com/sambecker/exif-photo-blog/issues/110) if you're having issues) - Setup usage limits to avoid unexpected charges (_recommended_) - - Set `OPENAI_BASE_URL` in order to use alternate OpenAI-compatible providers (experimental) + - Set `OPENAI_MODEL` to choose a specific model (set to 'compatible' to use gpt-4o) + - Set `OPENAI_BASE_URL` to use alternate OpenAI-compatible providers (experimental) 2. Generate API key and store in environment variable `OPENAI_SECRET_KEY` (enable Responses API write access if customizing permissions) 3. Add [rate limiting](#rate-limiting) (_recommended_) 4. Configure auto-generated fields (optional) diff --git a/src/admin/config/AdminAppConfigurationClient.tsx b/src/admin/config/AdminAppConfigurationClient.tsx index cc7d1b98..62fe922f 100644 --- a/src/admin/config/AdminAppConfigurationClient.tsx +++ b/src/admin/config/AdminAppConfigurationClient.tsx @@ -81,6 +81,7 @@ export default function AdminAppConfigurationClient({ imageQuality, isBlurEnabled, // AI + hasOpenaiModel, hasOpenaiBaseUrl, isAiTextGenerationEnabled, aiTextAutoGeneratedFields, @@ -555,6 +556,17 @@ export default function AdminAppConfigurationClient({ )}): {renderEnvVars(['AI_TEXT_AUTO_GENERATED_FIELDS'])} + + Store model in environment variable to use + alternate OpenAI model + {' '} + {'(set to \'compatible\' to use gpt-4o):'} + {renderEnvVars(['OPENAI_MODEL'])} + >[0]; + +const MODEL_DEFAULT: OpenAIModel = 'gpt-5.2'; +const MODEL_COMPATIBLE: OpenAIModel = 'gpt-4o'; + +const MODEL: OpenAIModel = OPENAI_MODEL === 'compatible' + ? MODEL_COMPATIBLE + : (OPENAI_MODEL || MODEL_DEFAULT); + const checkRateLimitAndThrow = (isBatch?: boolean) => _checkRateLimitAndThrow({ identifier: 'openai-image-query', ...isBatch && { tokens: 1200, duration: '1d' }, }); -const MODEL: Parameters>[0] = 'gpt-5.2'; - const openai = OPENAI_SECRET_KEY ? createOpenAI({ apiKey: OPENAI_SECRET_KEY,