update: 添加MuMuのAPI,提供更方便的api接入
This commit is contained in:
@@ -33,3 +33,8 @@ transformers==4.57.1
|
|||||||
|
|
||||||
# Sentence Transformers(更新到最新稳定版本以修复 FutureWarning)
|
# Sentence Transformers(更新到最新稳定版本以修复 FutureWarning)
|
||||||
sentence-transformers==5.1.2
|
sentence-transformers==5.1.2
|
||||||
|
|
||||||
|
# PyTorch 版本锁定(用于打包环境)
|
||||||
|
torch==2.8.0
|
||||||
|
torchvision==0.23.0
|
||||||
|
torchaudio==2.8.0
|
||||||
|
|||||||
@@ -412,6 +412,11 @@ export default function ProjectList() {
|
|||||||
icon: <SettingOutlined />,
|
icon: <SettingOutlined />,
|
||||||
label: 'API 设置',
|
label: 'API 设置',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
key: 'mumu-api',
|
||||||
|
icon: <ApiOutlined />,
|
||||||
|
label: 'MuMuのAPI',
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
@@ -442,6 +447,11 @@ export default function ProjectList() {
|
|||||||
icon: <SettingOutlined />,
|
icon: <SettingOutlined />,
|
||||||
label: 'API 设置',
|
label: 'API 设置',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
key: 'mumu-api',
|
||||||
|
icon: <ApiOutlined />,
|
||||||
|
label: 'MuMuのAPI',
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -550,6 +560,10 @@ export default function ProjectList() {
|
|||||||
selectedKeys={[activeView]}
|
selectedKeys={[activeView]}
|
||||||
style={{ borderRight: 0, paddingTop: 12, width: '100%' }}
|
style={{ borderRight: 0, paddingTop: 12, width: '100%' }}
|
||||||
onClick={({ key }) => {
|
onClick={({ key }) => {
|
||||||
|
if (key === 'mumu-api') {
|
||||||
|
window.open('https://api.mumuverse.space', '_blank', 'noopener,noreferrer');
|
||||||
|
return;
|
||||||
|
}
|
||||||
changeView(key as ProjectListView);
|
changeView(key as ProjectListView);
|
||||||
}}
|
}}
|
||||||
items={collapsed ? sideMenuItemsCollapsed : sideMenuItems}
|
items={collapsed ? sideMenuItemsCollapsed : sideMenuItems}
|
||||||
@@ -751,6 +765,11 @@ export default function ProjectList() {
|
|||||||
selectedKeys={[activeView]}
|
selectedKeys={[activeView]}
|
||||||
style={{ borderRight: 0, paddingTop: 8 }}
|
style={{ borderRight: 0, paddingTop: 8 }}
|
||||||
onClick={({ key }) => {
|
onClick={({ key }) => {
|
||||||
|
if (key === 'mumu-api') {
|
||||||
|
window.open('https://api.mumuverse.space', '_blank', 'noopener,noreferrer');
|
||||||
|
setDrawerVisible(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
changeView(key as ProjectListView);
|
changeView(key as ProjectListView);
|
||||||
setDrawerVisible(false);
|
setDrawerVisible(false);
|
||||||
}}
|
}}
|
||||||
|
|||||||
@@ -280,12 +280,29 @@ export default function SettingsPage() {
|
|||||||
{ value: 'openai', label: 'OpenAI Compatible', defaultUrl: 'https://api.openai.com/v1' },
|
{ value: 'openai', label: 'OpenAI Compatible', defaultUrl: 'https://api.openai.com/v1' },
|
||||||
// { value: 'anthropic', label: 'Anthropic (Claude)', defaultUrl: 'https://api.anthropic.com' },
|
// { value: 'anthropic', label: 'Anthropic (Claude)', defaultUrl: 'https://api.anthropic.com' },
|
||||||
{ value: 'gemini', label: 'Google Gemini', defaultUrl: 'https://generativelanguage.googleapis.com/v1beta' },
|
{ value: 'gemini', label: 'Google Gemini', defaultUrl: 'https://generativelanguage.googleapis.com/v1beta' },
|
||||||
|
{
|
||||||
|
value: 'mumu',
|
||||||
|
label: 'MuMuのAPI',
|
||||||
|
defaultUrl: 'https://api.mumuverse.space/v1',
|
||||||
|
defaultModel: 'gemini-3-flash-preview'
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
const selectedProvider = Form.useWatch('api_provider', form);
|
||||||
|
const selectedPresetProvider = Form.useWatch('api_provider', presetForm);
|
||||||
|
|
||||||
const handleProviderChange = (value: string) => {
|
const handleProviderChange = (value: string) => {
|
||||||
const provider = apiProviders.find(p => p.value === value);
|
const provider = apiProviders.find(p => p.value === value);
|
||||||
if (provider && provider.defaultUrl) {
|
if (provider) {
|
||||||
form.setFieldValue('api_base_url', provider.defaultUrl);
|
const nextValues: Record<string, string> = {};
|
||||||
|
if (provider.defaultUrl) {
|
||||||
|
nextValues.api_base_url = provider.defaultUrl;
|
||||||
|
}
|
||||||
|
if (provider.value === 'mumu') {
|
||||||
|
nextValues.api_key = '';
|
||||||
|
nextValues.llm_model = provider.defaultModel || 'gemini-3-flash-preview';
|
||||||
|
}
|
||||||
|
form.setFieldsValue(nextValues);
|
||||||
}
|
}
|
||||||
// 清空模型列表,需要重新获取
|
// 清空模型列表,需要重新获取
|
||||||
setModelOptions([]);
|
setModelOptions([]);
|
||||||
@@ -488,8 +505,16 @@ export default function SettingsPage() {
|
|||||||
// 预设编辑窗口:提供商变更时更新默认URL并清空模型列表
|
// 预设编辑窗口:提供商变更时更新默认URL并清空模型列表
|
||||||
const handlePresetProviderChange = (value: string) => {
|
const handlePresetProviderChange = (value: string) => {
|
||||||
const provider = apiProviders.find(p => p.value === value);
|
const provider = apiProviders.find(p => p.value === value);
|
||||||
if (provider && provider.defaultUrl) {
|
if (provider) {
|
||||||
presetForm.setFieldValue('api_base_url', provider.defaultUrl);
|
const nextValues: Record<string, string> = {};
|
||||||
|
if (provider.defaultUrl) {
|
||||||
|
nextValues.api_base_url = provider.defaultUrl;
|
||||||
|
}
|
||||||
|
if (provider.value === 'mumu') {
|
||||||
|
nextValues.api_key = '';
|
||||||
|
nextValues.llm_model = provider.defaultModel || 'gemini-3-flash-preview';
|
||||||
|
}
|
||||||
|
presetForm.setFieldsValue(nextValues);
|
||||||
}
|
}
|
||||||
// 清空模型列表,需要重新获取
|
// 清空模型列表,需要重新获取
|
||||||
setPresetModelOptions([]);
|
setPresetModelOptions([]);
|
||||||
@@ -780,6 +805,8 @@ export default function SettingsPage() {
|
|||||||
// return 'purple';
|
// return 'purple';
|
||||||
case 'gemini':
|
case 'gemini':
|
||||||
return 'green';
|
return 'green';
|
||||||
|
case 'mumu':
|
||||||
|
return 'magenta';
|
||||||
default:
|
default:
|
||||||
return 'default';
|
return 'default';
|
||||||
}
|
}
|
||||||
@@ -1050,6 +1077,30 @@ export default function SettingsPage() {
|
|||||||
</Select>
|
</Select>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
|
{selectedProvider === 'mumu' && (
|
||||||
|
<Alert
|
||||||
|
type="info"
|
||||||
|
showIcon
|
||||||
|
message="MuMuのAPI 专属供应商"
|
||||||
|
description={
|
||||||
|
<Space direction="vertical" size={8} style={{ width: '100%' }}>
|
||||||
|
<Text>
|
||||||
|
已自动填入专属地址,API Key 保持留空。免费注册后即可获取可用 Key。
|
||||||
|
</Text>
|
||||||
|
<div>
|
||||||
|
<Button
|
||||||
|
type="primary"
|
||||||
|
onClick={() => window.open('https://api.mumuverse.space', '_blank', 'noopener,noreferrer')}
|
||||||
|
>
|
||||||
|
打开 MuMuのAPI 站点免费注册
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
</Space>
|
||||||
|
}
|
||||||
|
style={{ marginBottom: 16 }}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
|
||||||
<Form.Item
|
<Form.Item
|
||||||
label={
|
label={
|
||||||
<Space size={4}>
|
<Space size={4}>
|
||||||
@@ -1568,8 +1619,33 @@ export default function SettingsPage() {
|
|||||||
<Select placeholder="选择提供商" onChange={handlePresetProviderChange}>
|
<Select placeholder="选择提供商" onChange={handlePresetProviderChange}>
|
||||||
<Select.Option value="openai">OpenAI</Select.Option>
|
<Select.Option value="openai">OpenAI</Select.Option>
|
||||||
<Select.Option value="gemini">Google Gemini</Select.Option>
|
<Select.Option value="gemini">Google Gemini</Select.Option>
|
||||||
|
<Select.Option value="mumu">MuMuのAPI</Select.Option>
|
||||||
</Select>
|
</Select>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
|
{selectedPresetProvider === 'mumu' && (
|
||||||
|
<Alert
|
||||||
|
type="info"
|
||||||
|
showIcon
|
||||||
|
message="MuMuのAPI 专属供应商"
|
||||||
|
description={
|
||||||
|
<Space direction="vertical" size={8} style={{ width: '100%' }}>
|
||||||
|
<Text>
|
||||||
|
已自动填入专属地址,API Key 保持留空。免费注册后即可获取可用 Key。
|
||||||
|
</Text>
|
||||||
|
<div>
|
||||||
|
<Button
|
||||||
|
type="primary"
|
||||||
|
onClick={() => window.open('https://api.mumuverse.space', '_blank', 'noopener,noreferrer')}
|
||||||
|
>
|
||||||
|
打开 MuMuのAPI 站点免费注册
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
</Space>
|
||||||
|
}
|
||||||
|
style={{ marginBottom: 16 }}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
</Col>
|
</Col>
|
||||||
</Row>
|
</Row>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user