Files
hack/tools/scripts/llm-key-hunter/results/_cache/content/chieji_lumumba-nexus-.json
T

1 line
8.7 KiB
JSON

{"repo": "chieji/lumumba-nexus-", "files": {"aiService.ts": {"4ad3fd03968f4365775c27cf06ae7e57679f91ca": {"t": 1785746034.4343069, "n": 8533, "h": "f0510b345845bc0e", "c": "\nimport { GoogleGenAI } from \"@google/genai\";\nimport { AIProvider, ProviderConfig } from \"./types\";\nimport { SYSTEM_PROMPT } from \"./constants\";\n\nexport type NexusErrorCode = \n | 'ERR_AUTH_001' \n | 'ERR_AUTH_002' \n | 'ERR_LIMIT_001' \n | 'ERR_SRV_500' \n | 'ERR_SRV_503' \n | 'ERR_SAFE_001' \n | 'ERR_CONN_001' \n | 'ERR_REQ_001' \n | 'ERR_GEN_999'; \n\ninterface NexusError {\n code: NexusErrorCode;\n message: string;\n}\n\nconst PROVIDER_ERROR_PARSERS: Record<AIProvider, (error: any) => NexusError | null> = {\n [AIProvider.GEMINI]: (err) => {\n const s = String(err).toLowerCase();\n if (s.includes('401')) return { code: 'ERR_AUTH_001', message: 'Gemini: Authentication failed. Verify API key.' };\n if (s.includes('403')) return { code: 'ERR_AUTH_002', message: 'Gemini: Access restricted. Check billing or project status.' };\n if (s.includes('429')) return { code: 'ERR_LIMIT_001', message: 'Gemini: Threshold reached. Slow down execution.' };\n if (s.includes('safety') || s.includes('blocked')) return { code: 'ERR_SAFE_001', message: 'Gemini: Request blocked by safety filters.' };\n if (s.includes('500')) return { code: 'ERR_SRV_500', message: 'Gemini: Internal remote server error.' };\n return null;\n },\n [AIProvider.OPENAI]: (err) => {\n const s = String(err).toLowerCase();\n if (s.includes('invalid_api_key') || s.includes('401')) return { code: 'ERR_AUTH_001', message: 'OpenAI: Key rejected.' };\n if (s.includes('insufficient_quota')) return { code: 'ERR_LIMIT_001', message: 'OpenAI: Quota exhausted or rate limited.' };\n if (s.includes('429')) return { code: 'ERR_LIMIT_001', message: 'OpenAI: Rate limit exceeded.' };\n return null;\n },\n [AIProvider.CLAUDE]: (err) => {\n const s = String(err).toLowerCase();\n if (s.includes('authentication_error') || s.includes('401')) return { code: 'ERR_AUTH_001', message: 'Claude: Auth failure.' };\n if (s.includes('rate_limit_error') || s.includes('429')) return { code: 'ERR_LIMIT_001', message: 'Claude: Operational capacity reached.' };\n if (s.includes('overloaded_error')) return { code: 'ERR_SRV_503', message: 'Claude: Anthropic servers are currently overloaded.' };\n return null;\n },\n [AIProvider.OLLAMA]: (err) => {\n const s = String(err).toLowerCase();\n if (s.includes('fetch') || s.includes('failed to connect')) return { code: 'ERR_CONN_001', message: 'Ollama: Local server unreachable. Ensure Ollama is running.' };\n if (s.includes('not found')) return { code: 'ERR_REQ_001', message: 'Ollama: Model not found. Run \"ollama pull [model]\".' };\n return null;\n },\n [AIProvider.OPENROUTER]: (err) => PROVIDER_ERROR_PARSERS[AIProvider.OPENAI](err),\n [AIProvider.GROQ]: (err) => PROVIDER_ERROR_PARSERS[AIProvider.OPENAI](err),\n [AIProvider.DEEPSEEK]: (err) => PROVIDER_ERROR_PARSERS[AIProvider.OPENAI](err),\n [AIProvider.MISTRAL]: (err) => PROVIDER_ERROR_PARSERS[AIProvider.OPENAI](err),\n [AIProvider.REPLICATE]: (err) => null,\n [AIProvider.COHERE]: (err) => null,\n [AIProvider.KIMI]: (err) => null,\n [AIProvider.MINIMAX]: (err) => null,\n};\n\nexport const handleNexusError = (error: any, provider: AIProvider): string => {\n console.error(`[Nexus System Log - ${provider}]:`, error);\n const parsed = PROVIDER_ERROR_PARSERS[provider](error);\n if (parsed) return `[${parsed.code}]: ${parsed.message}`;\n const errStr = String(error);\n if (errStr.includes('429')) return '[ERR_LIMIT_001]: Global rate limit detected across provider bridge.';\n if (errStr.includes('500')) return '[ERR_SRV_500]: Remote infrastructure failure.';\n return `[ERR_GEN_999]: An unhandled system exception occurred during ${provider.toUpperCase()} dispatch. Trace: ${error instanceof Error ? error.message : errStr}`;\n};\n\nexport const dispatchAIRequest = async (\n provider: AIProvider,\n config: ProviderConfig,\n prompt: string,\n mcpContext: string,\n image?: { data: string, mimeType: string } | null\n) => {\n const fullPrompt = `${SYSTEM_PROMPT}\\n\\n[MCP_RESOURCES]:\\n${mcpContext}\\n\\n[USER_QUERY]:\\n${prompt}`;\n\n try {\n switch (provider) {\n case AIProvider.GEMINI:\n return await callGemini(config, fullPrompt, image);\n case AIProvider.OPENAI:\n case AIProvider.GROQ:\n case AIProvider.DEEPSEEK:\n case AIProvider.MISTRAL:\n case AIProvider.OPENROUTER:\n return await callOpenAICompatible(provider, config, fullPrompt, image);\n case AIProvider.CLAUDE:\n return await callAnthropic(config, fullPrompt, image);\n case AIProvider.OLLAMA:\n return await callOllama(config, fullPrompt);\n default:\n throw new Error(`Provider bridge for ${provider} is not configured.`);\n }\n } catch (error) {\n return handleNexusError(error, provider);\n }\n};\n\nasync function callGemini(config: ProviderConfig, prompt: string, image?: { data: string, mimeType: string } | null) {\n const apiKey = config.apiKey || process.env.API_KEY || '';\n const ai = new GoogleGenAI({ apiKey });\n \n const parts: any[] = [{ text: prompt }];\n if (image) {\n parts.unshift({\n inlineData: {\n data: image.data,\n mimeType: image.mimeType\n }\n });\n }\n\n const response = await ai.models.generateContent({\n model: config.model || 'gemini-3-pro-preview',\n contents: { parts },\n config: {\n thinkingConfig: config.model.includes('pro') ? { thinkingBudget: 32768 } : undefined,\n temperature: 0.2,\n },\n });\n return response.text || \"Communication success: empty response payload.\";\n}\n\nasync function callOpenAICompatible(provider: AIProvider, config: ProviderConfig, prompt: string, image?: { data: string, mimeType: string } | null) {\n const baseUrls: Record<string, string> = {\n [AIProvider.OPENAI]: 'https://api.openai.com/v1',\n [AIProvider.GROQ]: 'https://api.groq.com/openai/v1',\n [AIProvider.DEEPSEEK]: 'https://api.deepseek.com/v1',\n [AIProvider.MISTRAL]: 'https://api.mistral.ai/v1',\n [AIProvider.OPENROUTER]: 'https://openrouter.ai/api/v1',\n };\n\n const url = `${config.baseUrl || baseUrls[provider]}/chat/completions`;\n const messages: any[] = [];\n \n if (image) {\n messages.push({\n role: 'user',\n content: [\n { type: 'text', text: prompt },\n { type: 'image_url', image_url: { url: `data:${image.mimeType};base64,${image.data}` } }\n ]\n });\n } else {\n messages.push({ role: 'user', content: prompt });\n }\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${config.apiKey}`,\n 'HTTP-Referer': window.location.origin,\n 'X-Title': 'LUMUMBA Nexus'\n },\n body: JSON.stringify({\n model: config.model,\n messages: messages,\n temperature: 0.2\n })\n });\n\n if (!response.ok) {\n const errorBody = await response.json().catch(() => ({}));\n throw new Error(`HTTP ${response.status}: ${JSON.stringify(errorBody)}`);\n }\n const data = await response.json();\n return data.choices?.[0]?.message?.content || \"Payload empty.\";\n}\n\nasync function callAnthropic(config: ProviderConfig, prompt: string, image?: { data: string, mimeType: string } | null) {\n const content: any[] = [{ type: 'text', text: prompt }];\n \n if (image) {\n content.unshift({\n type: 'image',\n source: {\n type: 'base64',\n media_type: image.mimeType,\n data: image.data\n }\n });\n }\n\n const response = await fetch('https://api.anthropic.com/v1/messages', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': config.apiKey,\n 'anthropic-version': '2023-06-01',\n 'dangerously-allow-browser': 'true'\n },\n body: JSON.stringify({\n model: config.model,\n max_tokens: 4096,\n messages: [{ role: 'user', content: content }]\n })\n });\n\n if (!response.ok) {\n const errorBody = await response.json().catch(() => ({}));\n throw new Error(`HTTP ${response.status}: ${JSON.stringify(errorBody)}`);\n }\n const data = await response.json();\n return data.content?.[0]?.text || \"No response data.\";\n}\n\nasync function callOllama(config: ProviderConfig, prompt: string) {\n const url = `${config.baseUrl || 'http://localhost:11434'}/api/generate`;\n const response = await fetch(url, {\n method: 'POST',\n body: JSON.stringify({\n model: config.model,\n prompt: prompt,\n stream: false\n })\n });\n if (!response.ok) throw new Error(`Ollama Internal Error ${response.status}`);\n const data = await response.json();\n return data.response;\n}\n"}}}}