URGENT FIX: Admin form was not properly saving AI provider configuration, causing 'AI_PROVIDER_TAGS is not configured' error even after setting OpenAI. Changes: - admin-settings-form.tsx: Added validation and error handling - admin-settings.ts: Filter empty values before saving to DB - setup-openai.ts: Script to initialize OpenAI as default provider This fixes the critical bug where users couldn't use the app after configuring OpenAI in the admin interface. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
49 lines
1.5 KiB
TypeScript
49 lines
1.5 KiB
TypeScript
import prisma from '../lib/prisma'
|
|
|
|
/**
|
|
* Setup OpenAI as default AI provider in database
|
|
* Run this to ensure OpenAI is properly configured
|
|
*/
|
|
async function setupOpenAI() {
|
|
console.log('🔧 Setting up OpenAI as default AI provider...\n')
|
|
|
|
const configs = [
|
|
{ key: 'AI_PROVIDER_TAGS', value: 'openai' },
|
|
{ key: 'AI_PROVIDER_EMBEDDING', value: 'openai' },
|
|
{ key: 'AI_MODEL_TAGS', value: 'gpt-4o-mini' },
|
|
{ key: 'AI_MODEL_EMBEDDING', value: 'text-embedding-3-small' },
|
|
]
|
|
|
|
try {
|
|
for (const config of configs) {
|
|
await prisma.systemConfig.upsert({
|
|
where: { key: config.key },
|
|
update: { value: config.value },
|
|
create: { key: config.key, value: config.value }
|
|
})
|
|
console.log(`✅ Set ${config.key} = ${config.value}`)
|
|
}
|
|
|
|
console.log('\n✨ OpenAI configuration complete!')
|
|
console.log('\nNext steps:')
|
|
console.log('1. Add your OPENAI_API_KEY in admin settings: http://localhost:3000/admin/settings')
|
|
console.log('2. Or add it to .env.docker: OPENAI_API_KEY=sk-...')
|
|
console.log('3. Restart the application')
|
|
|
|
// Verify
|
|
const verify = await prisma.systemConfig.findMany({
|
|
where: { key: { in: configs.map(c => c.key) } }
|
|
})
|
|
|
|
console.log('\n✅ Verification:')
|
|
verify.forEach(c => console.log(` ${c.key}: ${c.value}`))
|
|
} catch (error) {
|
|
console.error('❌ Error:', error)
|
|
process.exit(1)
|
|
}
|
|
}
|
|
|
|
setupOpenAI()
|
|
.then(() => process.exit(0))
|
|
.catch(() => process.exit(1))
|