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:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user