opensite / utils /providers.js
luoluoluo22's picture
初始化项目
33c3d0d
export const PROVIDERS = {
"fireworks-ai": {
name: "Fireworks AI",
max_tokens: 131_000,
id: "fireworks-ai",
},
nebius: {
name: "Nebius AI Studio",
max_tokens: 131_000,
id: "nebius",
},
sambanova: {
name: "SambaNova",
max_tokens: 8_000,
id: "sambanova",
},
novita: {
name: "Novita",
model_id: "HuggingFaceH4/starchat-beta",
max_tokens: 0,
},
custom: {
name: "自定义模型",
model_id: process.env.OPENAI_COMPATIBLE_MODEL_ID || "",
endpoint: process.env.OPENAI_COMPATIBLE_ENDPOINT || "",
apiKey: process.env.OPENAI_COMPATIBLE_API_KEY || "",
apiType: "openai", // 默认使用 OpenAI 兼容格式
max_tokens: parseInt(process.env.OPENAI_COMPATIBLE_MAX_TOKENS) || 0,
systemPrompt: process.env.OPENAI_COMPATIBLE_SYSTEM_PROMPT || DEFAULT_SYSTEM_PROMPT,
}
};
// OpenAI兼容的API格式转换
export const convertToOpenAIFormat = (messages) => {
return {
model: PROVIDERS.custom.model_id,
messages,
stream: true,
max_tokens: PROVIDERS.custom.max_tokens || undefined,
temperature: 0.7,
};
};
// HuggingFace格式转换
export const convertToHFFormat = (messages) => {
// 将消息数组转换为单个字符串
const formattedMessages = messages.map(msg => {
if (msg.role === 'system') {
return `System: ${msg.content}\n`;
} else if (msg.role === 'user') {
return `Human: ${msg.content}\n`;
} else if (msg.role === 'assistant') {
return `Assistant: ${msg.content}\n`;
}
return '';
}).join('');
return {
model: PROVIDERS.custom.model_id,
inputs: formattedMessages,
parameters: {
max_new_tokens: PROVIDERS.custom.max_tokens || 2048,
temperature: 0.7,
top_p: 0.95,
do_sample: true,
return_full_text: false,
},
};
};
export const updateCustomProvider = (config) => {
PROVIDERS.custom = {
...PROVIDERS.custom,
...config,
};
};
export const DEFAULT_SYSTEM_PROMPT = `你是一个专业的前端开发助手,擅长编写和优化HTML、CSS和JavaScript代码。请根据用户的需求提供相应的代码建议和修改方案。`;