From 1e614abc218e7514d40c5e258d5154c361ee0884 Mon Sep 17 00:00:00 2001 From: ht Date: Fri, 28 Aug 2026 22:50:00 +0300 Subject: [PATCH] =?UTF-8?q?refactor(ai):=20glm-latest=20zincirden=20=C3=A7?= =?UTF-8?q?=C4=B1kar=C4=B1ld=C4=B1=20(birincil=20ile=20ayn=C4=B1=20modele?= =?UTF-8?q?=20=C3=A7=C3=B6z=C3=BCn=C3=BCyordu)=20=E2=80=94=202.=20s=C4=B1r?= =?UTF-8?q?a=20Gemini=20Flash=20Latest;=20kay=C4=B1tl=C4=B1=20zincirler=20?= =?UTF-8?q?s=C3=BCr=C3=BCm=203=20ge=C3=A7i=C5=9Fiyle=20ta=C5=9F=C4=B1n?= =?UTF-8?q?=C4=B1r?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/ai.mjs | 18 ++++++------------ src/context/AppContext.jsx | 20 +++++++++++++------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/server/ai.mjs b/server/ai.mjs index f7a06fd..44f7747 100644 --- a/server/ai.mjs +++ b/server/ai.mjs @@ -22,11 +22,11 @@ export const PROVIDERS = { or: () => process.env.GLM_FLASH_OR_MODEL || 'z-ai/glm-5.3-flash', url: 'https://api.z.ai/api/paas/v4/chat/completions', style: 'openai', }, - glm: { - label: 'GLM', provider: 'Z.ai', envKey: 'ZAI_API_KEY', - model: () => process.env.GLM_MODEL || 'glm-5.3', - or: () => process.env.GLM_OR_MODEL || '~z-ai/glm-latest', - url: 'https://api.z.ai/api/paas/v4/chat/completions', style: 'openai', + gemini: { + label: 'Gemini', provider: 'Google', envKey: 'GEMINI_API_KEY', + model: () => process.env.GEMINI_MODEL || 'gemini-flash-latest', + or: () => process.env.GEMINI_OR_MODEL || '~google/gemini-flash-latest', + style: 'gemini', }, deepseek: { label: 'DeepSeek', provider: 'DeepSeek', envKey: 'DEEPSEEK_API_KEY', @@ -34,12 +34,6 @@ export const PROVIDERS = { or: () => process.env.DEEPSEEK_OR_MODEL || '~deepseek/deepseek-v4-flash-latest', url: 'https://api.deepseek.com/chat/completions', style: 'openai', }, - gemini: { - label: 'Gemini', provider: 'Google', envKey: 'GEMINI_API_KEY', - model: () => process.env.GEMINI_MODEL || 'gemini-flash-latest', - or: () => process.env.GEMINI_OR_MODEL || '~google/gemini-flash-latest', - style: 'gemini', - }, grok: { label: 'Grok', provider: 'xAI', envKey: 'XAI_API_KEY', model: () => process.env.XAI_MODEL || 'grok-4.6', @@ -219,7 +213,7 @@ function extractJson(raw) { /** Zinciri sırayla dener; ilk başarılı sonucu döndürür. */ export async function analyzeSpec({ text, fileName, tender, chain }) { - const order = (Array.isArray(chain) && chain.length ? chain : ['glmflash', 'glm', 'deepseek', 'gemini', 'grok', 'gpt', 'claude']) + const order = (Array.isArray(chain) && chain.length ? chain : ['glmflash', 'gemini', 'deepseek', 'grok', 'gpt', 'claude']) .filter((id) => PROVIDERS[id]); const userPrompt = buildUserPrompt({ text, fileName, tender }); const attempts = []; diff --git a/src/context/AppContext.jsx b/src/context/AppContext.jsx index 3d61842..40b47a4 100644 --- a/src/context/AppContext.jsx +++ b/src/context/AppContext.jsx @@ -193,27 +193,33 @@ export const AppProvider = ({ children }) => { // --------------------------------------------------------------------------- const AI_MODEL_CATALOG = [ { id: 'glmflash', label: 'GLM 5.3 Flash', provider: 'Z.ai', or: 'z-ai/glm-5.3-flash', model: 'glm-5.3-flash', renk: 'blue' }, - { id: 'glm', label: 'GLM Latest', provider: 'Z.ai', or: '~z-ai/glm-latest', model: 'glm-5.3', renk: 'blue' }, - { id: 'deepseek', label: 'DeepSeek V4 Flash Latest', provider: 'DeepSeek', or: '~deepseek/deepseek-v4-flash-latest', model: 'deepseek-chat', renk: 'indigo' }, { id: 'gemini', label: 'Gemini Flash Latest', provider: 'Google', or: '~google/gemini-flash-latest', model: 'gemini-flash-latest', renk: 'amber' }, + { id: 'deepseek', label: 'DeepSeek V4 Flash Latest', provider: 'DeepSeek', or: '~deepseek/deepseek-v4-flash-latest', model: 'deepseek-chat', renk: 'indigo' }, { id: 'grok', label: 'Grok Latest', provider: 'xAI', or: '~x-ai/grok-latest', model: 'grok-4.6', renk: 'slate' }, { id: 'gpt', label: 'GPT Chat Latest', provider: 'OpenAI', or: 'openai/gpt-chat-latest', model: 'gpt-5.6-sol', renk: 'emerald' }, { id: 'claude', label: 'Claude Opus Latest', provider: 'Anthropic', or: '~anthropic/claude-opus-latest', model: 'claude-opus-5', renk: 'orange' } ]; - // Varsayılan fallback zinciri: GLM 5.3 Flash (birincil) → GLM Latest → DeepSeek → Gemini - const VARSAYILAN_ZINCIR = ['glmflash', 'glm', 'deepseek', 'gemini']; - const ZINCIR_SURUM = 2; // artırıldığında kayıtlı zincire yeni birincil eklenir + // Varsayılan fallback zinciri: GLM 5.3 Flash (birincil) → Gemini → DeepSeek + // (glm-latest kaldırıldı: birincil ile aynı modele çözünüyordu, gerçek yedek değildi) + const VARSAYILAN_ZINCIR = ['glmflash', 'gemini', 'deepseek']; + const ZINCIR_SURUM = 3; // artırıldığında kayıtlı zincir yeni düzene taşınır const [aiModelConfig, setAiModelConfig] = useState(() => { const saved = localStorage.getItem('ihaleist_ai_model_config'); if (saved) { try { const cfg = JSON.parse(saved); - // Geçiş: yeni birincil model eklendiyse kayıtlı zincirin başına al + // Geçiş: kayıtlı zinciri yeni düzene taşı (glm çıkar, glmflash → gemini başa) if ((cfg.surum || 1) < ZINCIR_SURUM) { const chain = Array.isArray(cfg.chain) ? cfg.chain : []; - return { ...cfg, surum: ZINCIR_SURUM, chain: ['glmflash', ...chain.filter((id) => id !== 'glmflash')] }; + const kalan = chain.filter((id) => !['glmflash', 'gemini', 'glm'].includes(id)); + return { ...cfg, surum: ZINCIR_SURUM, chain: ['glmflash', 'gemini', ...kalan] }; + } + // Katalogdan çıkarılmış modelleri kayıtlı zincirden ayıkla + if (Array.isArray(cfg.chain)) { + cfg.chain = cfg.chain.filter((id) => AI_MODEL_CATALOG.some((m) => m.id === id)); + if (!cfg.chain.length) cfg.chain = VARSAYILAN_ZINCIR; } return cfg; } catch { /* yoksay */ }