mirror of
https://github.com/APIParkLab/APIPark.git
synced 2026-06-14 20:41:15 +08:00
Compare commits
27 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8d44d796b4 | |||
| fd6680d615 | |||
| 945d53fcfd | |||
| ac7045b724 | |||
| c907bdc4a5 | |||
| 733ed9ac2f | |||
| 1d8e579a10 | |||
| 567cac9c95 | |||
| 095c09c8c0 | |||
| e9c949822d | |||
| f7801261c3 | |||
| b0c37918b5 | |||
| d5af1c8da3 | |||
| 7c827804f4 | |||
| b0dacbda0d | |||
| d5abde2593 | |||
| bc3290de3b | |||
| 7f438bf776 | |||
| 13cfe24b2f | |||
| f5cfd77550 | |||
| 4a8f5152b3 | |||
| 83ac747cb1 | |||
| d5eedd1dd2 | |||
| 86758383c4 | |||
| 6ce3e0bfac | |||
| e4eadf863e | |||
| ca328e784c |
@@ -25,7 +25,7 @@ jobs:
|
|||||||
echo "Build frontend..."
|
echo "Build frontend..."
|
||||||
cd ./frontend && pnpm run build
|
cd ./frontend && pnpm run build
|
||||||
- name: upload frontend release
|
- name: upload frontend release
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: frontend-package
|
name: frontend-package
|
||||||
path: frontend/dist
|
path: frontend/dist
|
||||||
@@ -41,7 +41,7 @@ jobs:
|
|||||||
- name: Checkout #Checkout代码
|
- name: Checkout #Checkout代码
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
- name: download frontend release
|
- name: download frontend release
|
||||||
uses: actions/download-artifact@v3
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: frontend-package
|
name: frontend-package
|
||||||
path: frontend/dist
|
path: frontend/dist
|
||||||
@@ -71,7 +71,7 @@ jobs:
|
|||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: download frontend release
|
- name: download frontend release
|
||||||
uses: actions/download-artifact@v3
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: frontend-package
|
name: frontend-package
|
||||||
path: frontend/dist
|
path: frontend/dist
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ export const KeyStatusNode: React.FC<{ data: KeyStatusNodeData }> = ({ data }) =
|
|||||||
<div
|
<div
|
||||||
className="flex gap-1 w-full"
|
className="flex gap-1 w-full"
|
||||||
style={{
|
style={{
|
||||||
|
minWidth: keys.length > 5 ? '118px' : 'auto',
|
||||||
maxWidth: `calc(${MAX_KEYS} * ${KEY_SIZE} + (${MAX_KEYS} - 1) * ${KEY_GAP})`,
|
maxWidth: `calc(${MAX_KEYS} * ${KEY_SIZE} + (${MAX_KEYS} - 1) * ${KEY_GAP})`,
|
||||||
minHeight: KEY_SIZE
|
minHeight: KEY_SIZE
|
||||||
}}
|
}}
|
||||||
|
|||||||
@@ -29,46 +29,48 @@ export const ModelCardNode: React.FC<{ data: ModelCardNodeData }> = ({ data }) =
|
|||||||
const statusConfig = getStatusIcon(status)
|
const statusConfig = getStatusIcon(status)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<>
|
||||||
className="node-card bg-white rounded-lg shadow-sm p-4 min-w-[280px] group"
|
<div
|
||||||
style={{ border: '1px solid var(--border-color)' }}
|
className="node-card bg-white rounded-lg shadow-sm p-4 min-w-[280px] group"
|
||||||
>
|
style={{ border: '1px solid var(--border-color)' }}
|
||||||
<Handle type="target" position={Position.Left} />
|
>
|
||||||
<Handle type="source" position={Position.Right} />
|
<Handle type="target" position={Position.Left} />
|
||||||
<div>
|
<Handle type="source" position={Position.Right} />
|
||||||
<div className="flex justify-between items-center">
|
<div>
|
||||||
<div className="flex gap-2 items-center">
|
<div className="flex justify-between items-center">
|
||||||
<div className="flex flex-1 overflow-hidden items-center gap-[4px]">
|
<div className="flex gap-2 items-center">
|
||||||
<span
|
<div className="flex flex-1 overflow-hidden items-center gap-[4px]">
|
||||||
className="flex items-center h-[22px] ai-setting-svg-container"
|
<span
|
||||||
dangerouslySetInnerHTML={{ __html: logo }}
|
className="flex items-center h-[22px] ai-setting-svg-container"
|
||||||
></span>
|
dangerouslySetInnerHTML={{ __html: logo }}
|
||||||
|
></span>
|
||||||
|
</div>
|
||||||
|
<span className="text-base text-gray-900 max-w-[180px] truncate">{name}</span>
|
||||||
|
<Icon icon={statusConfig?.icon} className={`text-xl ${statusConfig?.color}`} />
|
||||||
</div>
|
</div>
|
||||||
<span className="text-base text-gray-900 max-w-[180px] truncate">{name}</span>
|
|
||||||
<Icon icon={statusConfig?.icon} className={`text-xl ${statusConfig?.color}`} />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{/* Action buttons */}
|
{/* Action buttons */}
|
||||||
<div className="flex gap-2 transition-opacity duration-200">
|
<div className="flex gap-2 transition-opacity duration-200">
|
||||||
<Icon
|
<Icon
|
||||||
icon="mdi:cog"
|
icon="mdi:cog"
|
||||||
className="text-xl text-gray-400 cursor-pointer hover:text-[--primary-color]"
|
className="text-xl text-gray-400 cursor-pointer hover:text-[--primary-color]"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
openConfigModal({ id: data.id, defaultLlm: defaultLlm } as AiSettingListItem)
|
openConfigModal({ id: data.id, defaultLlm: defaultLlm } as AiSettingListItem)
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="mt-2 text-sm text-gray-500">
|
||||||
|
{$t('默认:')}
|
||||||
|
{defaultLlm}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="mt-2 text-sm text-gray-500">
|
|
||||||
{$t('默认:')}
|
|
||||||
{defaultLlm}
|
|
||||||
</div>
|
|
||||||
{status !== 'enabled' && alternativeModel && (
|
|
||||||
<div className="mt-1 text-sm text-gray-500">
|
|
||||||
{$t('关联 API 已转用')} {alternativeModel.name}/{alternativeModel.defaultLlm}
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
{status !== 'enabled' && alternativeModel && (
|
||||||
|
<div className="ml-4 mt-1 text-sm text-gray-500">
|
||||||
|
{$t('关联 API 已转用')} {alternativeModel.name}/{alternativeModel.defaultLlm}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,11 +18,15 @@
|
|||||||
.react-flow__node {
|
.react-flow__node {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
min-width: 150px;
|
|
||||||
width: auto;
|
width: auto;
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.react-flow__node-modelCard,
|
||||||
|
.react-flow__node-serviceCard {
|
||||||
|
min-width: 150px;
|
||||||
|
}
|
||||||
|
|
||||||
/* Custom Node Styles */
|
/* Custom Node Styles */
|
||||||
.custom-node {
|
.custom-node {
|
||||||
background: white;
|
background: white;
|
||||||
|
|||||||
+11
-18
@@ -535,15 +535,15 @@ func (i *imlProviderModule) UpdateProviderConfig(ctx context.Context, id string,
|
|||||||
Priority: input.Priority,
|
Priority: input.Priority,
|
||||||
Status: &status,
|
Status: &status,
|
||||||
}
|
}
|
||||||
_, err = i.aiKeyService.DefaultKey(ctx, id)
|
_, err = i.aiKeyService.DefaultKey(txCtx, id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if !errors.Is(err, gorm.ErrRecordNotFound) {
|
if !errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
err = i.aiKeyService.Create(ctx, &ai_key.Create{
|
err = i.aiKeyService.Create(txCtx, &ai_key.Create{
|
||||||
ID: id,
|
ID: id,
|
||||||
Name: info.Name,
|
Name: info.Name,
|
||||||
Config: info.Config,
|
Config: input.Config,
|
||||||
Provider: id,
|
Provider: id,
|
||||||
Status: 1,
|
Status: 1,
|
||||||
ExpireTime: 0,
|
ExpireTime: 0,
|
||||||
@@ -551,28 +551,21 @@ func (i *imlProviderModule) UpdateProviderConfig(ctx context.Context, id string,
|
|||||||
Priority: 1,
|
Priority: 1,
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
err = i.aiKeyService.Save(ctx, id, &ai_key.Edit{
|
err = i.aiKeyService.Save(txCtx, id, &ai_key.Edit{
|
||||||
Config: &info.Config,
|
Config: &input.Config,
|
||||||
|
Status: &status,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
err = i.providerService.Save(txCtx, id, pInfo)
|
||||||
//if input.Enable != nil {
|
|
||||||
// status = 0
|
|
||||||
// if *input.Enable {
|
|
||||||
// status = 1
|
|
||||||
// }
|
|
||||||
// pInfo.Status = &status
|
|
||||||
//}
|
|
||||||
err = i.providerService.Save(ctx, id, pInfo)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if *pInfo.Status == 0 {
|
if *pInfo.Status == 0 {
|
||||||
return i.syncGateway(ctx, cluster.DefaultClusterID, []*gateway.DynamicRelease{
|
return i.syncGateway(txCtx, cluster.DefaultClusterID, []*gateway.DynamicRelease{
|
||||||
{
|
{
|
||||||
BasicItem: &gateway.BasicItem{
|
BasicItem: &gateway.BasicItem{
|
||||||
ID: id,
|
ID: id,
|
||||||
@@ -581,8 +574,8 @@ func (i *imlProviderModule) UpdateProviderConfig(ctx context.Context, id string,
|
|||||||
},
|
},
|
||||||
}, false)
|
}, false)
|
||||||
}
|
}
|
||||||
// 获取当前供应商所有Key信息
|
// 获取当前供应商默认Key信息
|
||||||
defaultKey, err := i.aiKeyService.DefaultKey(ctx, id)
|
defaultKey, err := i.aiKeyService.DefaultKey(txCtx, id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -592,7 +585,7 @@ func (i *imlProviderModule) UpdateProviderConfig(ctx context.Context, id string,
|
|||||||
cfg["model_config"] = model.DefaultConfig()
|
cfg["model_config"] = model.DefaultConfig()
|
||||||
cfg["priority"] = info.Priority
|
cfg["priority"] = info.Priority
|
||||||
cfg["base"] = fmt.Sprintf("%s://%s", p.URI().Scheme(), p.URI().Host())
|
cfg["base"] = fmt.Sprintf("%s://%s", p.URI().Scheme(), p.URI().Host())
|
||||||
return i.syncGateway(ctx, cluster.DefaultClusterID, []*gateway.DynamicRelease{
|
return i.syncGateway(txCtx, cluster.DefaultClusterID, []*gateway.DynamicRelease{
|
||||||
{
|
{
|
||||||
BasicItem: &gateway.BasicItem{
|
BasicItem: &gateway.BasicItem{
|
||||||
ID: id,
|
ID: id,
|
||||||
|
|||||||
@@ -100,7 +100,8 @@ func (i *imlAuthorizationModule) getApplications(ctx context.Context, appIds []s
|
|||||||
Config: authCfg,
|
Config: authCfg,
|
||||||
HideCredential: a.HideCredential,
|
HideCredential: a.HideCredential,
|
||||||
Label: map[string]string{
|
Label: map[string]string{
|
||||||
"authorization": a.UUID,
|
"authorization": a.UUID,
|
||||||
|
"authorization_name": a.Name,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
@@ -157,7 +158,8 @@ func (i *imlAuthorizationModule) online(ctx context.Context, s *service.Service)
|
|||||||
Config: authCfg,
|
Config: authCfg,
|
||||||
HideCredential: a.HideCredential,
|
HideCredential: a.HideCredential,
|
||||||
Label: map[string]string{
|
Label: map[string]string{
|
||||||
"authorization": a.UUID,
|
"authorization": a.UUID,
|
||||||
|
"authorization_name": a.Name,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
|
|||||||
Reference in New Issue
Block a user