feat(admin): AI model yönetimi paneli (fallback zinciri seçimi)

- 6 model kataloğu: GLM 5.3, DeepSeek V4 Flash, Gemini 3.7 Flash, Grok 4.6, GPT-5.6 Sol, Claude Opus 5
- Varsayılan fallback zinciri: GLM (birincil) → DeepSeek → Gemini
- Admin panelden sıralama, birincil seçme, ekleme/çıkarma; localStorage'da saklanır
- AI analizi aktif modeli kullanır
This commit is contained in:
2026-08-27 09:44:34 +03:00
parent 9ea46eb4c2
commit cc0b6b6017
4 changed files with 211 additions and 2 deletions
+36 -1
View File
@@ -128,12 +128,42 @@ export const AppProvider = ({ children }) => {
{ id: 'key-1', name: 'ERP Entegrasyon Anahtarı', key: 'ih_live_8f92a19c3b88412e', createdAt: '2026-04-10', lastUsed: 'Bugün 12:45' }
]);
// ---------------------------------------------------------------------------
// AI Model Yönetimi (admin panelden seçilebilir + fallback zinciri)
// ---------------------------------------------------------------------------
const AI_MODEL_CATALOG = [
{ id: 'glm', label: 'GLM 5.3', provider: 'Z.ai', alias: '~z-ai/glm-latest', model: 'glm-5.3', renk: 'blue' },
{ id: 'deepseek', label: 'DeepSeek V4 Flash', provider: 'DeepSeek', alias: '~deepseek/deepseek-v4-flash-latest', model: 'deepseek-v4-flash-0731', renk: 'indigo' },
{ id: 'gemini', label: 'Gemini 3.7 Flash', provider: 'Google', alias: '~google/gemini-flash-latest', model: 'gemini-3.7-flash', renk: 'amber' },
{ id: 'grok', label: 'Grok 4.6', provider: 'xAI', alias: '~x-ai/grok-latest', model: 'grok-4.6', renk: 'slate' },
{ id: 'gpt', label: 'GPT-5.6 Sol', provider: 'OpenAI', alias: '~openai/gpt-latest', model: 'gpt-5.6-sol', renk: 'emerald' },
{ id: 'claude', label: 'Claude Opus 5', provider: 'Anthropic', alias: '~anthropic/claude-opus-latest', model: 'claude-opus-5', renk: 'orange' }
];
// Varsayılan fallback zinciri: GLM (birincil) → DeepSeek → Gemini
const [aiModelConfig, setAiModelConfig] = useState(() => {
const saved = localStorage.getItem('ihaleist_ai_model_config');
if (saved) {
try { return JSON.parse(saved); } catch { /* yoksay */ }
}
return { chain: ['glm', 'deepseek', 'gemini'] };
});
useEffect(() => {
localStorage.setItem('ihaleist_ai_model_config', JSON.stringify(aiModelConfig));
}, [aiModelConfig]);
const getModelById = (id) => AI_MODEL_CATALOG.find(m => m.id === id);
const activeAiModel = getModelById(aiModelConfig.chain[0]) || AI_MODEL_CATALOG[0];
const analyzeSpecPdfWithGemini = (fileName = 'Teknik_Sartname.pdf') => {
return new Promise((resolve) => {
setTimeout(() => {
const result = {
fileName,
model: 'Gemini 3.6 Flash',
model: `${activeAiModel.label} (${activeAiModel.provider})`,
modelId: activeAiModel.model,
fallbackChain: aiModelConfig.chain.map(id => getModelById(id)?.model).filter(Boolean),
analyzedAt: new Date().toLocaleString('tr-TR'),
summary: 'İşbu teknik şartname, idarenin ihtiyacı olan medikal sarf malzemeleri ve cihaz parçalarının teknik özellikleri, garanti şartları, teslimat vadeleri ve muayene kabul kriterlerini düzenlemektedir.',
qualificationCriteria: [
@@ -348,6 +378,11 @@ export const AppProvider = ({ children }) => {
setWebhooksConfig,
apiKeys,
setApiKeys,
AI_MODEL_CATALOG,
aiModelConfig,
setAiModelConfig,
getModelById,
activeAiModel,
userProfile,
notifications,
toggleTrackTender,