- Fix _call_provider to support custom providers (OpenAI-compatible
fallback) instead of raising ValueError for unknown providers
- Add POST /admin/ppt/sync-models endpoint that fetches available
models from the configured provider's API
- Redesign PptSettingsAdmin UI: replace Dify model dropdown with
per-provider 'sync models' button + searchable model selector
- Remove dead Dify-specific code (fetchDifyModels, applyDifyModel)
- Update deepseek default model from deepseek-chat to deepseek-v4-pro
- API Key field now always shown (not conditional on non-dify)
- PptSettingsAdmin.vue: full settings page with provider/model/API key
config for PPT extraction, poster copy, and poster image generation
- Backend: GET /insurance/admin/ppt/available-models to fetch models
from Dify API (falls back to builtin list when unavailable)
- LLM client: read model config from SystemSetting DB with 60s cache,
priority: database > environment variables > defaults
- ppt-admin-api.ts: add getAvailableModels() method
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>