mirror of
https://github.com/EthanMarti/infio-copilot.git
synced 2026-05-13 19:11:02 +00:00
Added Moonshot API support, updated relevant models and settings, optimized OpenAI-compatible providers to handle CORS issues, and enhanced model management capabilities.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { ALIBABA_QWEN_BASE_URL, DEEPSEEK_BASE_URL, GROK_BASE_URL, INFIO_BASE_URL, OPENROUTER_BASE_URL, SILICONFLOW_BASE_URL } from '../../constants'
|
||||
import { ALIBABA_QWEN_BASE_URL, DEEPSEEK_BASE_URL, GROK_BASE_URL, INFIO_BASE_URL, MOONSHOT_BASE_URL, OPENROUTER_BASE_URL, SILICONFLOW_BASE_URL } from '../../constants'
|
||||
import { ApiProvider, LLMModel } from '../../types/llm/model'
|
||||
import {
|
||||
LLMOptions,
|
||||
@@ -39,6 +39,7 @@ class LLMManager implements LLMManagerInterface {
|
||||
private googleProvider: GeminiProvider
|
||||
private groqProvider: GroqProvider
|
||||
private grokProvider: OpenAICompatibleProvider
|
||||
private moonshotProvider: OpenAICompatibleProvider
|
||||
private infioProvider: OpenAICompatibleProvider
|
||||
private openrouterProvider: OpenAICompatibleProvider
|
||||
private siliconflowProvider: OpenAICompatibleProvider
|
||||
@@ -85,6 +86,12 @@ class LLMManager implements LLMManagerInterface {
|
||||
settings.grokProvider.baseUrl
|
||||
: GROK_BASE_URL
|
||||
)
|
||||
this.moonshotProvider = new OpenAICompatibleProvider(
|
||||
settings.moonshotProvider.apiKey,
|
||||
settings.moonshotProvider.baseUrl && settings.moonshotProvider.useCustomUrl ?
|
||||
settings.moonshotProvider.baseUrl
|
||||
: MOONSHOT_BASE_URL
|
||||
)
|
||||
this.ollamaProvider = new OllamaProvider(settings.ollamaProvider.baseUrl)
|
||||
this.openaiCompatibleProvider = new OpenAICompatibleProvider(settings.openaicompatibleProvider.apiKey, settings.openaicompatibleProvider.baseUrl)
|
||||
this.isInfioEnabled = !!settings.infioProvider.apiKey
|
||||
@@ -158,6 +165,12 @@ class LLMManager implements LLMManagerInterface {
|
||||
request,
|
||||
options,
|
||||
)
|
||||
case ApiProvider.Moonshot:
|
||||
return await this.moonshotProvider.generateResponse(
|
||||
model,
|
||||
request,
|
||||
options,
|
||||
)
|
||||
case ApiProvider.OpenAICompatible:
|
||||
return await this.openaiCompatibleProvider.generateResponse(model, request, options)
|
||||
default:
|
||||
@@ -195,6 +208,8 @@ class LLMManager implements LLMManagerInterface {
|
||||
return await this.groqProvider.streamResponse(model, request, options)
|
||||
case ApiProvider.Grok:
|
||||
return await this.grokProvider.streamResponse(model, request, options)
|
||||
case ApiProvider.Moonshot:
|
||||
return await this.moonshotProvider.streamResponse(model, request, options)
|
||||
case ApiProvider.Ollama:
|
||||
return await this.ollamaProvider.streamResponse(model, request, options)
|
||||
case ApiProvider.OpenAICompatible:
|
||||
|
||||
@@ -24,7 +24,10 @@ import { OpenAIMessageAdapter } from './openai-message-adapter'
|
||||
|
||||
export class NoStainlessOpenAI extends OpenAI {
|
||||
defaultHeaders() {
|
||||
// 获取父类的默认头部,包含 Authorization
|
||||
const parentHeaders = super.defaultHeaders()
|
||||
return {
|
||||
...parentHeaders,
|
||||
Accept: 'application/json',
|
||||
'Content-Type': 'application/json',
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import OpenAI from 'openai'
|
||||
|
||||
import { ALIBABA_QWEN_BASE_URL } from '../../constants'
|
||||
import { ALIBABA_QWEN_BASE_URL, MOONSHOT_BASE_URL } from '../../constants'
|
||||
import { LLMModel } from '../../types/llm/model'
|
||||
import {
|
||||
LLMOptions,
|
||||
@@ -14,6 +14,7 @@ import {
|
||||
|
||||
import { BaseLLMProvider } from './base'
|
||||
import { LLMBaseUrlNotSetException } from './exception'
|
||||
import { NoStainlessOpenAI } from './ollama'
|
||||
import { OpenAIMessageAdapter } from './openai-message-adapter'
|
||||
|
||||
export class OpenAICompatibleProvider implements BaseLLMProvider {
|
||||
@@ -23,14 +24,27 @@ export class OpenAICompatibleProvider implements BaseLLMProvider {
|
||||
private baseURL: string
|
||||
|
||||
constructor(apiKey: string, baseURL: string) {
|
||||
this.adapter = new OpenAIMessageAdapter()
|
||||
this.client = new OpenAI({
|
||||
apiKey: apiKey,
|
||||
baseURL: baseURL,
|
||||
dangerouslyAllowBrowser: true,
|
||||
})
|
||||
this.adapter = new OpenAIMessageAdapter()
|
||||
this.apiKey = apiKey
|
||||
this.baseURL = baseURL
|
||||
|
||||
// 判断是否需要使用 NoStainlessOpenAI 来解决 CORS 问题
|
||||
const needsCorsAdapter = baseURL === MOONSHOT_BASE_URL ||
|
||||
baseURL?.includes('api.moonshot.cn')
|
||||
|
||||
if (needsCorsAdapter) {
|
||||
this.client = new NoStainlessOpenAI({
|
||||
apiKey: apiKey,
|
||||
baseURL: baseURL,
|
||||
dangerouslyAllowBrowser: true,
|
||||
})
|
||||
} else {
|
||||
this.client = new OpenAI({
|
||||
apiKey: apiKey,
|
||||
baseURL: baseURL,
|
||||
dangerouslyAllowBrowser: true,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// 检查是否为阿里云Qwen API
|
||||
|
||||
Reference in New Issue
Block a user