feat: GLM 5.3 Flash eklendi ve birincil modele alındı
- server/ai.mjs: yeni 'glmflash' sağlayıcısı (z-ai/glm-5.3-flash), varsayılan zincirin başında - AppContext: kataloğa eklendi; varsayılan zincir glmflash → glm → deepseek → gemini - Kayıtlı ayarlar için sürüm geçişi (ZINCIR_SURUM): mevcut kullanıcıların zincirinin başına glmflash otomatik eklenir, kalan sıraları korunur - Env ile geçilebilir: GLM_FLASH_OR_MODEL / GLM_FLASH_MODEL
This commit is contained in:
+7
-1
@@ -16,6 +16,12 @@
|
|||||||
const OPENROUTER_URL = 'https://openrouter.ai/api/v1/chat/completions';
|
const OPENROUTER_URL = 'https://openrouter.ai/api/v1/chat/completions';
|
||||||
|
|
||||||
export const PROVIDERS = {
|
export const PROVIDERS = {
|
||||||
|
glmflash: {
|
||||||
|
label: 'GLM 5.3 Flash', provider: 'Z.ai', envKey: 'ZAI_API_KEY',
|
||||||
|
model: () => process.env.GLM_FLASH_MODEL || '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',
|
||||||
|
},
|
||||||
glm: {
|
glm: {
|
||||||
label: 'GLM', provider: 'Z.ai', envKey: 'ZAI_API_KEY',
|
label: 'GLM', provider: 'Z.ai', envKey: 'ZAI_API_KEY',
|
||||||
model: () => process.env.GLM_MODEL || 'glm-5.3',
|
model: () => process.env.GLM_MODEL || 'glm-5.3',
|
||||||
@@ -213,7 +219,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 : ['glm', 'deepseek', 'gemini', 'grok', 'gpt', 'claude'])
|
const order = (Array.isArray(chain) && chain.length ? chain : ['glmflash', 'glm', 'deepseek', 'gemini', '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 = [];
|
||||||
|
|||||||
@@ -192,6 +192,7 @@ export const AppProvider = ({ children }) => {
|
|||||||
// AI Model Yönetimi (admin panelden seçilebilir + fallback zinciri)
|
// AI Model Yönetimi (admin panelden seçilebilir + fallback zinciri)
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
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: 'glm', label: 'GLM Latest', provider: 'Z.ai', or: '~z-ai/glm-latest', model: 'glm-5.3', 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: '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' },
|
||||||
@@ -200,13 +201,24 @@ export const AppProvider = ({ children }) => {
|
|||||||
{ 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 (birincil) → DeepSeek → Gemini
|
// 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
|
||||||
|
|
||||||
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 { return JSON.parse(saved); } catch { /* yoksay */ }
|
try {
|
||||||
|
const cfg = JSON.parse(saved);
|
||||||
|
// Geçiş: yeni birincil model eklendiyse kayıtlı zincirin başına al
|
||||||
|
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')] };
|
||||||
}
|
}
|
||||||
return { chain: ['glm', 'deepseek', 'gemini'] };
|
return cfg;
|
||||||
|
} catch { /* yoksay */ }
|
||||||
|
}
|
||||||
|
return { chain: VARSAYILAN_ZINCIR, surum: ZINCIR_SURUM };
|
||||||
});
|
});
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|||||||
Reference in New Issue
Block a user