refactor(ai): glm-latest zincirden çıkarıldı (birincil ile aynı modele çözünüyordu) — 2. sıra Gemini Flash Latest; kayıtlı zincirler sürüm 3 geçişiyle taşınır

This commit is contained in:
2026-08-28 22:50:00 +03:00
parent 5282543471
commit 1e614abc21
2 changed files with 19 additions and 19 deletions
+6 -12
View File
@@ -22,11 +22,11 @@ export const PROVIDERS = {
or: () => process.env.GLM_FLASH_OR_MODEL || 'z-ai/glm-5.3-flash', 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', url: 'https://api.z.ai/api/paas/v4/chat/completions', style: 'openai',
}, },
glm: { gemini: {
label: 'GLM', provider: 'Z.ai', envKey: 'ZAI_API_KEY', label: 'Gemini', provider: 'Google', envKey: 'GEMINI_API_KEY',
model: () => process.env.GLM_MODEL || 'glm-5.3', model: () => process.env.GEMINI_MODEL || 'gemini-flash-latest',
or: () => process.env.GLM_OR_MODEL || '~z-ai/glm-latest', or: () => process.env.GEMINI_OR_MODEL || '~google/gemini-flash-latest',
url: 'https://api.z.ai/api/paas/v4/chat/completions', style: 'openai', style: 'gemini',
}, },
deepseek: { deepseek: {
label: 'DeepSeek', provider: 'DeepSeek', envKey: 'DEEPSEEK_API_KEY', 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', or: () => process.env.DEEPSEEK_OR_MODEL || '~deepseek/deepseek-v4-flash-latest',
url: 'https://api.deepseek.com/chat/completions', style: 'openai', 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: { grok: {
label: 'Grok', provider: 'xAI', envKey: 'XAI_API_KEY', label: 'Grok', provider: 'xAI', envKey: 'XAI_API_KEY',
model: () => process.env.XAI_MODEL || 'grok-4.6', 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. */ /** Zinciri sırayla dener; ilk başarılı sonucu döndürür. */
export async function analyzeSpec({ text, fileName, tender, chain }) { 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]); .filter((id) => PROVIDERS[id]);
const userPrompt = buildUserPrompt({ text, fileName, tender }); const userPrompt = buildUserPrompt({ text, fileName, tender });
const attempts = []; const attempts = [];
+13 -7
View File
@@ -193,27 +193,33 @@ export const AppProvider = ({ children }) => {
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
const AI_MODEL_CATALOG = [ 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: '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: '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: '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: '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' } { 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 // Varsayılan fallback zinciri: GLM 5.3 Flash (birincil) → Gemini → DeepSeek
const VARSAYILAN_ZINCIR = ['glmflash', 'glm', 'deepseek', 'gemini']; // (glm-latest kaldırıldı: birincil ile aynı modele çözünüyordu, gerçek yedek değildi)
const ZINCIR_SURUM = 2; // artırıldığında kayıtlı zincire yeni birincil eklenir 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 [aiModelConfig, setAiModelConfig] = useState(() => {
const saved = localStorage.getItem('ihaleist_ai_model_config'); const saved = localStorage.getItem('ihaleist_ai_model_config');
if (saved) { if (saved) {
try { try {
const cfg = JSON.parse(saved); 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) { if ((cfg.surum || 1) < ZINCIR_SURUM) {
const chain = Array.isArray(cfg.chain) ? cfg.chain : []; 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; return cfg;
} catch { /* yoksay */ } } catch { /* yoksay */ }