@liujitcn/kratos-admin-system 0.0.64 → 0.0.65

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/README.md +2 -2
  2. package/dist/package/declarations/src/api/system/admin/v1/ai_provider.d.ts +3 -1
  3. package/dist/package/declarations/src/locales/generated.d.ts +68 -0
  4. package/dist/package/declarations/src/rpc/base/v1/ai_provider.d.ts +13 -6
  5. package/dist/package/declarations/src/rpc/system/admin/v1/ai_provider.d.ts +23 -0
  6. package/dist/package/declarations/src/views/ai/chat/modelDisplay.d.ts +5 -0
  7. package/dist/package/declarations/src/views/ai/chat/modelSelection.d.ts +9 -0
  8. package/dist/package/src/api/system/admin/v1/ai_provider.ts +7 -0
  9. package/dist/package/src/locales/en-US.json +18 -1
  10. package/dist/package/src/locales/ja-JP.json +18 -1
  11. package/dist/package/src/locales/zh-CN.json +18 -1
  12. package/dist/package/src/locales/zh-TW.json +18 -1
  13. package/dist/package/src/rpc/base/v1/ai_provider.ts +14 -6
  14. package/dist/package/src/rpc/system/admin/v1/ai_provider.ts +26 -0
  15. package/dist/package/src/views/ai/chat/components/ChatPanel.vue +4 -1
  16. package/dist/package/src/views/ai/chat/components/XSender.vue +266 -71
  17. package/dist/package/src/views/ai/chat/index.vue +24 -6
  18. package/dist/package/src/views/ai/chat/modelDisplay.ts +67 -0
  19. package/dist/package/src/views/ai/chat/modelSelection.ts +31 -0
  20. package/dist/package/src/views/base/ai-provider/index.vue +123 -22
  21. package/dist/package/src/views/base/api-rate-limit-policy/index.vue +4 -3
  22. package/dist/package/src/views/base/message-provider/index.vue +7 -3
  23. package/dist/package/src/views/base/message-template/index.vue +2 -2
  24. package/dist/package/src/views/base/rate-limit-rule/index.vue +8 -3
  25. package/package.json +2 -2
package/README.md CHANGED
@@ -73,7 +73,7 @@ packages/modules/system
73
73
  | `src/api/system/admin/v1/auth.ts` | 个人中心认证服务请求。 |
74
74
  | `src/api/system/admin/v1/base_*.ts` | System 基础服务请求。 |
75
75
  | `src/api/system/admin/v1/base_rate_limit_rule.ts` | 限流规则模板服务请求。 |
76
- | `src/api/system/admin/v1/ai_provider.ts` | AI供应商及多模型配置服务请求。 |
76
+ | `src/api/system/admin/v1/ai_provider.ts` | AI供应商、多模型配置和批量连通性测试请求。 |
77
77
  | `src/api/system/admin/v1/base_api_rate_limit_policy.ts` | 接口限流策略服务请求,策略接口以数组维护。 |
78
78
  | `src/api/system/admin/v1/base_i18n_custom.ts` | 管理端固定文案自定义翻译请求。 |
79
79
  | `src/api/system/admin/v1/code_gen*.ts` | 代码生成服务请求。 |
@@ -202,7 +202,7 @@ System 的 API 与 RPC 都按 Proto 完整层级维护,API 文件名与对应
202
202
 
203
203
  ## AI 扩展
204
204
 
205
- AI Provider 在“AI助手 → AI供应商”维护;AI 对话页位于“AI助手 → AI助手”,顶部入口可直接打开该页面。单个供应商的 `models` JSON 结构保持不变。管理端、uni-app 和 Taro 对话页通过独立模型选项接口选择 Provider 与模型,快捷入口仍由独立快捷入口接口提供。模型 API Key 使用存储脱敏策略加密,管理接口只返回是否已配置状态。
205
+ AI Provider 在“AI助手 → AI供应商”维护;Provider 弹窗可对当前草稿中的全部模型逐个执行连通性测试,结果显示在对应模型条目中,并仅保存在当前页面状态;修改供应商或模型配置后清除旧结果。测试结果不写入数据库或模型配置。AI 对话页位于“AI助手 → AI助手”,顶部入口可直接打开该页面。单个供应商的 `models` JSON 结构保持不变。管理端、uni-app 和 Taro 对话页通过独立模型选项接口选择 Provider 与模型,快捷入口仍由独立快捷入口接口提供。模型 API Key 使用存储脱敏策略加密,管理接口只返回是否已配置状态。
206
206
 
207
207
  System 导出 `ADMIN_AI_EXTENSION`、`AdminAiExtension` 和 `getAdminAiExtension()`。其他业务模块可以在 `AdminModule.extensions` 中使用该扩展名提供 `flowBlocks` 组件,AI 会话页会读取并渲染它。
208
208
 
@@ -1,4 +1,4 @@
1
- import type { AiProviderForm, AiProviderService, CreateAiProviderRequest, DeleteAiProviderRequest, GetAiProviderRequest, PageAiProviderRequest, PageAiProviderResponse, SetAiProviderStatusRequest, UpdateAiProviderRequest } from "@liujitcn/kratos-admin-system/rpc/system/admin/v1/ai_provider";
1
+ import type { AiProviderForm, AiProviderService, CreateAiProviderRequest, DeleteAiProviderRequest, GetAiProviderRequest, PageAiProviderRequest, PageAiProviderResponse, SetAiProviderStatusRequest, TestAiProviderModelsRequest, TestAiProviderModelsResponse, UpdateAiProviderRequest } from "@liujitcn/kratos-admin-system/rpc/system/admin/v1/ai_provider";
2
2
  import type { Empty } from "@liujitcn/kratos-admin-system/rpc/google/protobuf/empty";
3
3
  /** AI供应商管理服务实现。 */
4
4
  export declare class AiProviderServiceImpl implements AiProviderService {
@@ -10,6 +10,8 @@ export declare class AiProviderServiceImpl implements AiProviderService {
10
10
  CreateAiProvider(request: CreateAiProviderRequest): Promise<Empty>;
11
11
  /** 更新AI供应商。 */
12
12
  UpdateAiProvider(request: UpdateAiProviderRequest): Promise<Empty>;
13
+ /** 测试供应商表单中的全部模型。 */
14
+ TestAiProviderModels(request: TestAiProviderModelsRequest): Promise<TestAiProviderModelsResponse>;
13
15
  /** 删除AI供应商。 */
14
16
  DeleteAiProvider(request: DeleteAiProviderRequest): Promise<Empty>;
15
17
  /** 设置AI供应商状态。 */
@@ -1781,6 +1781,10 @@ export declare const LOCALE_MESSAGES: {
1781
1781
  "system.base.ai_provider.placeholder.keep_api_key": string;
1782
1782
  "system.base.ai_provider.model.add": string;
1783
1783
  "system.base.ai_provider.model.edit": string;
1784
+ "system.base.ai_provider.model.test": string;
1785
+ "system.base.ai_provider.model.test_results": string;
1786
+ "system.base.ai_provider.model.test_success": string;
1787
+ "system.base.ai_provider.model.test_failed": string;
1784
1788
  "system.base.ai_provider.model.empty": string;
1785
1789
  "system.base.ai_provider.model.api_type.chat_completions": string;
1786
1790
  "system.base.ai_provider.model.api_type.responses": string;
@@ -1804,6 +1808,19 @@ export declare const LOCALE_MESSAGES: {
1804
1808
  "system.ai.model.provider_placeholder": string;
1805
1809
  "system.ai.model.model_placeholder": string;
1806
1810
  "system.ai.model.load_failed": string;
1811
+ "system.base.ai_provider.resource": string;
1812
+ "system.base.message_provider.validation.provider": string;
1813
+ "system.base.message_provider.validation.name": string;
1814
+ "system.base.message_template.validation.category": string;
1815
+ "system.base.message_template.validation.provider": string;
1816
+ "system.base.message_template.validation.title": string;
1817
+ "system.ai.model.title": string;
1818
+ "system.ai.model.provider_model_count": string;
1819
+ "system.ai.model.manage": string;
1820
+ "system.ai.model.empty": string;
1821
+ "system.base.ai_provider.field.display_name": string;
1822
+ "system.base.ai_provider.model.placeholder.display_name": string;
1823
+ "system.base.ai_provider.model.validation.display_name": string;
1807
1824
  };
1808
1825
  readonly 'en-US': {
1809
1826
  "system.base.config.tab.basic": string;
@@ -3587,6 +3604,10 @@ export declare const LOCALE_MESSAGES: {
3587
3604
  "system.base.ai_provider.placeholder.keep_api_key": string;
3588
3605
  "system.base.ai_provider.model.add": string;
3589
3606
  "system.base.ai_provider.model.edit": string;
3607
+ "system.base.ai_provider.model.test": string;
3608
+ "system.base.ai_provider.model.test_results": string;
3609
+ "system.base.ai_provider.model.test_success": string;
3610
+ "system.base.ai_provider.model.test_failed": string;
3590
3611
  "system.base.ai_provider.model.empty": string;
3591
3612
  "system.base.ai_provider.model.api_type.chat_completions": string;
3592
3613
  "system.base.ai_provider.model.api_type.responses": string;
@@ -3610,6 +3631,19 @@ export declare const LOCALE_MESSAGES: {
3610
3631
  "system.ai.model.provider_placeholder": string;
3611
3632
  "system.ai.model.model_placeholder": string;
3612
3633
  "system.ai.model.load_failed": string;
3634
+ "system.base.ai_provider.resource": string;
3635
+ "system.base.message_provider.validation.provider": string;
3636
+ "system.base.message_provider.validation.name": string;
3637
+ "system.base.message_template.validation.category": string;
3638
+ "system.base.message_template.validation.provider": string;
3639
+ "system.base.message_template.validation.title": string;
3640
+ "system.ai.model.title": string;
3641
+ "system.ai.model.provider_model_count": string;
3642
+ "system.ai.model.manage": string;
3643
+ "system.ai.model.empty": string;
3644
+ "system.base.ai_provider.field.display_name": string;
3645
+ "system.base.ai_provider.model.placeholder.display_name": string;
3646
+ "system.base.ai_provider.model.validation.display_name": string;
3613
3647
  };
3614
3648
  readonly 'ja-JP': {
3615
3649
  "system.base.config.tab.basic": string;
@@ -5393,6 +5427,10 @@ export declare const LOCALE_MESSAGES: {
5393
5427
  "system.base.ai_provider.placeholder.keep_api_key": string;
5394
5428
  "system.base.ai_provider.model.add": string;
5395
5429
  "system.base.ai_provider.model.edit": string;
5430
+ "system.base.ai_provider.model.test": string;
5431
+ "system.base.ai_provider.model.test_results": string;
5432
+ "system.base.ai_provider.model.test_success": string;
5433
+ "system.base.ai_provider.model.test_failed": string;
5396
5434
  "system.base.ai_provider.model.empty": string;
5397
5435
  "system.base.ai_provider.model.api_type.chat_completions": string;
5398
5436
  "system.base.ai_provider.model.api_type.responses": string;
@@ -5416,6 +5454,19 @@ export declare const LOCALE_MESSAGES: {
5416
5454
  "system.ai.model.provider_placeholder": string;
5417
5455
  "system.ai.model.model_placeholder": string;
5418
5456
  "system.ai.model.load_failed": string;
5457
+ "system.base.ai_provider.resource": string;
5458
+ "system.base.message_provider.validation.provider": string;
5459
+ "system.base.message_provider.validation.name": string;
5460
+ "system.base.message_template.validation.category": string;
5461
+ "system.base.message_template.validation.provider": string;
5462
+ "system.base.message_template.validation.title": string;
5463
+ "system.ai.model.title": string;
5464
+ "system.ai.model.provider_model_count": string;
5465
+ "system.ai.model.manage": string;
5466
+ "system.ai.model.empty": string;
5467
+ "system.base.ai_provider.field.display_name": string;
5468
+ "system.base.ai_provider.model.placeholder.display_name": string;
5469
+ "system.base.ai_provider.model.validation.display_name": string;
5419
5470
  };
5420
5471
  readonly 'zh-TW': {
5421
5472
  "system.base.config.tab.basic": string;
@@ -7199,6 +7250,10 @@ export declare const LOCALE_MESSAGES: {
7199
7250
  "system.base.ai_provider.placeholder.keep_api_key": string;
7200
7251
  "system.base.ai_provider.model.add": string;
7201
7252
  "system.base.ai_provider.model.edit": string;
7253
+ "system.base.ai_provider.model.test": string;
7254
+ "system.base.ai_provider.model.test_results": string;
7255
+ "system.base.ai_provider.model.test_success": string;
7256
+ "system.base.ai_provider.model.test_failed": string;
7202
7257
  "system.base.ai_provider.model.empty": string;
7203
7258
  "system.base.ai_provider.model.api_type.chat_completions": string;
7204
7259
  "system.base.ai_provider.model.api_type.responses": string;
@@ -7222,6 +7277,19 @@ export declare const LOCALE_MESSAGES: {
7222
7277
  "system.ai.model.provider_placeholder": string;
7223
7278
  "system.ai.model.model_placeholder": string;
7224
7279
  "system.ai.model.load_failed": string;
7280
+ "system.base.ai_provider.resource": string;
7281
+ "system.base.message_provider.validation.provider": string;
7282
+ "system.base.message_provider.validation.name": string;
7283
+ "system.base.message_template.validation.category": string;
7284
+ "system.base.message_template.validation.provider": string;
7285
+ "system.base.message_template.validation.title": string;
7286
+ "system.ai.model.title": string;
7287
+ "system.ai.model.provider_model_count": string;
7288
+ "system.ai.model.manage": string;
7289
+ "system.ai.model.empty": string;
7290
+ "system.base.ai_provider.field.display_name": string;
7291
+ "system.base.ai_provider.model.placeholder.display_name": string;
7292
+ "system.base.ai_provider.model.validation.display_name": string;
7225
7293
  };
7226
7294
  };
7227
7295
  export type GeneratedLocale = keyof typeof LOCALE_MESSAGES;
@@ -1,19 +1,26 @@
1
1
  /** AI Provider模型选项查询请求。 */
2
2
  export interface ListAiProviderModelOptionsRequest {
3
3
  }
4
+ /** AI Provider模型选项查询响应。 */
5
+ export interface ListAiProviderModelOptionsResponse {
6
+ /** Provider及其模型列表 */
7
+ providers: AiProviderModelOption[];
8
+ }
4
9
  /** 已启用的AI Provider及其模型选项。 */
5
10
  export interface AiProviderModelOption {
6
11
  /** Provider ID */
7
12
  provider_id: number;
8
13
  /** Provider名称 */
9
14
  name: string;
10
- /** 模型名称列表 */
11
- models: string[];
15
+ /** 模型选项列表 */
16
+ models: AiProviderModel[];
12
17
  }
13
- /** AI Provider模型选项查询响应。 */
14
- export interface ListAiProviderModelOptionsResponse {
15
- /** Provider及其模型列表 */
16
- providers: AiProviderModelOption[];
18
+ /** AI Provider下的单个模型选项。 */
19
+ export interface AiProviderModel {
20
+ /** 模型名称 */
21
+ model_name: string;
22
+ /** 展示名称 */
23
+ display_name: string;
17
24
  }
18
25
  /** AI Provider 可选模型查询服务。 */
19
26
  export interface AiModelService {
@@ -58,6 +58,27 @@ export interface UpdateAiProviderRequest {
58
58
  /** AI供应商表单 */
59
59
  ai_provider: AiProviderForm | undefined;
60
60
  }
61
+ /** 测试AI供应商全部模型请求。 */
62
+ export interface TestAiProviderModelsRequest {
63
+ /** 待测试的AI供应商草稿 */
64
+ ai_provider: AiProviderForm | undefined;
65
+ }
66
+ /** 单个AI模型连通性测试结果。 */
67
+ export interface AiProviderModelTestResult {
68
+ /** 模型名称 */
69
+ model_name: string;
70
+ /** 测试是否成功 */
71
+ success: boolean;
72
+ /** 测试耗时毫秒 */
73
+ duration_ms: number;
74
+ /** 失败原因;成功时为空 */
75
+ message: string;
76
+ }
77
+ /** 测试AI供应商全部模型响应。 */
78
+ export interface TestAiProviderModelsResponse {
79
+ /** 模型测试结果 */
80
+ results: AiProviderModelTestResult[];
81
+ }
61
82
  /** 删除AI供应商请求。 */
62
83
  export interface DeleteAiProviderRequest {
63
84
  /** 供应商ID */
@@ -103,6 +124,8 @@ export interface AiProviderService {
103
124
  CreateAiProvider(request: CreateAiProviderRequest): Promise<Empty>;
104
125
  /** 更新AI供应商。 */
105
126
  UpdateAiProvider(request: UpdateAiProviderRequest): Promise<Empty>;
127
+ /** 测试AI供应商表单中的全部模型。 */
128
+ TestAiProviderModels(request: TestAiProviderModelsRequest): Promise<TestAiProviderModelsResponse>;
106
129
  /** 删除AI供应商。 */
107
130
  DeleteAiProvider(request: DeleteAiProviderRequest): Promise<Empty>;
108
131
  /** 设置AI供应商状态。 */
@@ -0,0 +1,5 @@
1
+ import type { AiProviderModelOption } from "@liujitcn/kratos-admin-system/rpc/base/v1/ai_provider";
2
+ /** 对未配置展示名的模型名做通用美化。 */
3
+ export declare function fallbackModelDisplayName(modelName: string): string;
4
+ /** 从供应商模型选项中解析模型展示名称,兼容历史消息中「供应商 / 模型」格式的原始值。 */
5
+ export declare function resolveModelDisplayName(providers: AiProviderModelOption[] | undefined, modelName: string): string;
@@ -0,0 +1,9 @@
1
+ /** 用户最近一次选择的供应商与模型,仅保存在浏览器本地。 */
2
+ export interface AiModelSelection {
3
+ provider_id: number;
4
+ model_name: string;
5
+ }
6
+ /** 读取本地缓存的模型选择,缓存缺失或损坏时返回 undefined。 */
7
+ export declare function loadStoredModelSelection(): AiModelSelection | undefined;
8
+ /** 持久化模型选择,存储不可用时静默失败,选择仍对当前会话生效。 */
9
+ export declare function saveModelSelection(selection: AiModelSelection): void;
@@ -8,6 +8,8 @@ import type {
8
8
  PageAiProviderRequest,
9
9
  PageAiProviderResponse,
10
10
  SetAiProviderStatusRequest,
11
+ TestAiProviderModelsRequest,
12
+ TestAiProviderModelsResponse,
11
13
  UpdateAiProviderRequest
12
14
  } from "@liujitcn/kratos-admin-system/rpc/system/admin/v1/ai_provider";
13
15
  import type { Empty } from "@liujitcn/kratos-admin-system/rpc/google/protobuf/empty";
@@ -36,6 +38,11 @@ export class AiProviderServiceImpl implements AiProviderService {
36
38
  return service({ url: `${AI_PROVIDER_URL}/${request.ai_provider?.id ?? ""}`, method: "put", data: request.ai_provider });
37
39
  }
38
40
 
41
+ /** 测试供应商表单中的全部模型。 */
42
+ TestAiProviderModels(request: TestAiProviderModelsRequest): Promise<TestAiProviderModelsResponse> {
43
+ return service({ url: `${AI_PROVIDER_URL}/test-models`, method: "post", data: request.ai_provider });
44
+ }
45
+
39
46
  /** 删除AI供应商。 */
40
47
  DeleteAiProvider(request: DeleteAiProviderRequest): Promise<Empty> {
41
48
  return service({ url: `${AI_PROVIDER_URL}/${request.id}`, method: "delete" });
@@ -1780,6 +1780,10 @@
1780
1780
  "system.base.ai_provider.placeholder.keep_api_key": "Leave blank to keep the existing key",
1781
1781
  "system.base.ai_provider.model.add": "Add model",
1782
1782
  "system.base.ai_provider.model.edit": "Edit model",
1783
+ "system.base.ai_provider.model.test": "Test model",
1784
+ "system.base.ai_provider.model.test_results": "Model test results",
1785
+ "system.base.ai_provider.model.test_success": "Connection successful",
1786
+ "system.base.ai_provider.model.test_failed": "Connection failed",
1783
1787
  "system.base.ai_provider.model.empty": "No models added. Add at least one model.",
1784
1788
  "system.base.ai_provider.model.api_type.chat_completions": "Chat Completions API",
1785
1789
  "system.base.ai_provider.model.api_type.responses": "Responses API",
@@ -1802,5 +1806,18 @@
1802
1806
  "system.base.ai_provider.message.status_success": "Provider status updated",
1803
1807
  "system.ai.model.provider_placeholder": "Select a provider",
1804
1808
  "system.ai.model.model_placeholder": "Select a model",
1805
- "system.ai.model.load_failed": "Failed to load providers and models"
1809
+ "system.ai.model.load_failed": "Failed to load providers and models",
1810
+ "system.base.ai_provider.resource": "AI provider",
1811
+ "system.base.message_provider.validation.provider": "Please select the channel type",
1812
+ "system.base.message_provider.validation.name": "Please enter the channel name",
1813
+ "system.base.message_template.validation.category": "Please select the message category",
1814
+ "system.base.message_template.validation.provider": "Please select the delivery channel",
1815
+ "system.base.message_template.validation.title": "Please enter the template title",
1816
+ "system.ai.model.title": "Select Model",
1817
+ "system.ai.model.provider_model_count": "{providers} providers · {models} models",
1818
+ "system.ai.model.manage": "Manage Models",
1819
+ "system.ai.model.empty": "No models available. Add and enable one in AI Providers first.",
1820
+ "system.base.ai_provider.field.display_name": "Display Name",
1821
+ "system.base.ai_provider.model.placeholder.display_name": "Leave empty to auto-derive from the model name",
1822
+ "system.base.ai_provider.model.validation.display_name": "Display name cannot exceed 100 characters"
1806
1823
  }
@@ -1780,6 +1780,10 @@
1780
1780
  "system.base.ai_provider.placeholder.keep_api_key": "空欄の場合、既存のキーを保持します",
1781
1781
  "system.base.ai_provider.model.add": "モデルを追加",
1782
1782
  "system.base.ai_provider.model.edit": "モデルを編集",
1783
+ "system.base.ai_provider.model.test": "モデルをテスト",
1784
+ "system.base.ai_provider.model.test_results": "モデルテスト結果",
1785
+ "system.base.ai_provider.model.test_success": "接続成功",
1786
+ "system.base.ai_provider.model.test_failed": "接続失敗",
1783
1787
  "system.base.ai_provider.model.empty": "モデルがありません。少なくとも1つ追加してください。",
1784
1788
  "system.base.ai_provider.model.api_type.chat_completions": "Chat Completions API",
1785
1789
  "system.base.ai_provider.model.api_type.responses": "Responses API",
@@ -1802,5 +1806,18 @@
1802
1806
  "system.base.ai_provider.message.status_success": "プロバイダーの状態を更新しました",
1803
1807
  "system.ai.model.provider_placeholder": "プロバイダーを選択",
1804
1808
  "system.ai.model.model_placeholder": "モデルを選択",
1805
- "system.ai.model.load_failed": "プロバイダーとモデルを読み込めませんでした"
1809
+ "system.ai.model.load_failed": "プロバイダーとモデルを読み込めませんでした",
1810
+ "system.base.ai_provider.resource": "AI プロバイダー",
1811
+ "system.base.message_provider.validation.provider": "チャネル種別を選択してください",
1812
+ "system.base.message_provider.validation.name": "チャネル名を入力してください",
1813
+ "system.base.message_template.validation.category": "メッセージカテゴリを選択してください",
1814
+ "system.base.message_template.validation.provider": "送信チャネルを選択してください",
1815
+ "system.base.message_template.validation.title": "テンプレートタイトルを入力してください",
1816
+ "system.ai.model.title": "モデルを選択",
1817
+ "system.ai.model.provider_model_count": "{providers} プロバイダー · {models} モデル",
1818
+ "system.ai.model.manage": "モデルを管理",
1819
+ "system.ai.model.empty": "選択可能なモデルがありません。先に「AIプロバイダー」で追加して有効にしてください。",
1820
+ "system.base.ai_provider.field.display_name": "表示名",
1821
+ "system.base.ai_provider.model.placeholder.display_name": "空欄の場合はモデル名から自動で表示名を生成します",
1822
+ "system.base.ai_provider.model.validation.display_name": "表示名は100文字以内で入力してください"
1806
1823
  }
@@ -1780,6 +1780,10 @@
1780
1780
  "system.base.ai_provider.placeholder.keep_api_key": "留空表示保留现有密钥",
1781
1781
  "system.base.ai_provider.model.add": "添加模型",
1782
1782
  "system.base.ai_provider.model.edit": "编辑模型",
1783
+ "system.base.ai_provider.model.test": "测试模型",
1784
+ "system.base.ai_provider.model.test_results": "模型测试结果",
1785
+ "system.base.ai_provider.model.test_success": "连接成功",
1786
+ "system.base.ai_provider.model.test_failed": "连接失败",
1783
1787
  "system.base.ai_provider.model.empty": "尚未添加模型,请至少添加一个模型。",
1784
1788
  "system.base.ai_provider.model.api_type.chat_completions": "Chat Completions 接口",
1785
1789
  "system.base.ai_provider.model.api_type.responses": "Responses 接口",
@@ -1802,5 +1806,18 @@
1802
1806
  "system.base.ai_provider.message.status_success": "供应商状态更新成功",
1803
1807
  "system.ai.model.provider_placeholder": "选择供应商",
1804
1808
  "system.ai.model.model_placeholder": "选择模型",
1805
- "system.ai.model.load_failed": "加载供应商和模型失败"
1809
+ "system.ai.model.load_failed": "加载供应商和模型失败",
1810
+ "system.base.ai_provider.resource": "AI 供应商",
1811
+ "system.base.message_provider.validation.provider": "请选择渠道类型",
1812
+ "system.base.message_provider.validation.name": "请输入渠道名称",
1813
+ "system.base.message_template.validation.category": "请选择消息分类",
1814
+ "system.base.message_template.validation.provider": "请选择发送渠道",
1815
+ "system.base.message_template.validation.title": "请输入模板标题",
1816
+ "system.ai.model.title": "选择模型",
1817
+ "system.ai.model.provider_model_count": "{providers} 个供应商 · {models} 个模型",
1818
+ "system.ai.model.manage": "管理模型",
1819
+ "system.ai.model.empty": "暂无可选模型,请先在「AI 供应商」中添加并启用",
1820
+ "system.base.ai_provider.field.display_name": "显示名称",
1821
+ "system.base.ai_provider.model.placeholder.display_name": "留空时由前端按模型名自动映射",
1822
+ "system.base.ai_provider.model.validation.display_name": "显示名称不能超过100个字符"
1806
1823
  }
@@ -1780,6 +1780,10 @@
1780
1780
  "system.base.ai_provider.placeholder.keep_api_key": "留空表示保留現有金鑰",
1781
1781
  "system.base.ai_provider.model.add": "新增模型",
1782
1782
  "system.base.ai_provider.model.edit": "編輯模型",
1783
+ "system.base.ai_provider.model.test": "測試模型",
1784
+ "system.base.ai_provider.model.test_results": "模型測試結果",
1785
+ "system.base.ai_provider.model.test_success": "連線成功",
1786
+ "system.base.ai_provider.model.test_failed": "連線失敗",
1783
1787
  "system.base.ai_provider.model.empty": "尚未新增模型,請至少新增一個模型。",
1784
1788
  "system.base.ai_provider.model.api_type.chat_completions": "Chat Completions 介面",
1785
1789
  "system.base.ai_provider.model.api_type.responses": "Responses 介面",
@@ -1802,5 +1806,18 @@
1802
1806
  "system.base.ai_provider.message.status_success": "供應商狀態更新成功",
1803
1807
  "system.ai.model.provider_placeholder": "選擇供應商",
1804
1808
  "system.ai.model.model_placeholder": "選擇模型",
1805
- "system.ai.model.load_failed": "載入供應商與模型失敗"
1809
+ "system.ai.model.load_failed": "載入供應商與模型失敗",
1810
+ "system.base.ai_provider.resource": "AI 供應商",
1811
+ "system.base.message_provider.validation.provider": "請選擇渠道類型",
1812
+ "system.base.message_provider.validation.name": "請輸入渠道名稱",
1813
+ "system.base.message_template.validation.category": "請選擇訊息分類",
1814
+ "system.base.message_template.validation.provider": "請選擇發送渠道",
1815
+ "system.base.message_template.validation.title": "請輸入範本標題",
1816
+ "system.ai.model.title": "選擇模型",
1817
+ "system.ai.model.provider_model_count": "{providers} 個供應商 · {models} 個模型",
1818
+ "system.ai.model.manage": "管理模型",
1819
+ "system.ai.model.empty": "暫無可選模型,請先在「AI 供應商」中新增並啟用",
1820
+ "system.base.ai_provider.field.display_name": "顯示名稱",
1821
+ "system.base.ai_provider.model.placeholder.display_name": "留空時由前端按模型名自動對應",
1822
+ "system.base.ai_provider.model.validation.display_name": "顯示名稱不能超過100個字元"
1806
1823
  }
@@ -10,20 +10,28 @@
10
10
  export interface ListAiProviderModelOptionsRequest {
11
11
  }
12
12
 
13
+ /** AI Provider模型选项查询响应。 */
14
+ export interface ListAiProviderModelOptionsResponse {
15
+ /** Provider及其模型列表 */
16
+ providers: AiProviderModelOption[];
17
+ }
18
+
13
19
  /** 已启用的AI Provider及其模型选项。 */
14
20
  export interface AiProviderModelOption {
15
21
  /** Provider ID */
16
22
  provider_id: number;
17
23
  /** Provider名称 */
18
24
  name: string;
19
- /** 模型名称列表 */
20
- models: string[];
25
+ /** 模型选项列表 */
26
+ models: AiProviderModel[];
21
27
  }
22
28
 
23
- /** AI Provider模型选项查询响应。 */
24
- export interface ListAiProviderModelOptionsResponse {
25
- /** Provider及其模型列表 */
26
- providers: AiProviderModelOption[];
29
+ /** AI Provider下的单个模型选项。 */
30
+ export interface AiProviderModel {
31
+ /** 模型名称 */
32
+ model_name: string;
33
+ /** 展示名称 */
34
+ display_name: string;
27
35
  }
28
36
 
29
37
  /** AI Provider 可选模型查询服务。 */
@@ -74,6 +74,30 @@ export interface UpdateAiProviderRequest {
74
74
  ai_provider: AiProviderForm | undefined;
75
75
  }
76
76
 
77
+ /** 测试AI供应商全部模型请求。 */
78
+ export interface TestAiProviderModelsRequest {
79
+ /** 待测试的AI供应商草稿 */
80
+ ai_provider: AiProviderForm | undefined;
81
+ }
82
+
83
+ /** 单个AI模型连通性测试结果。 */
84
+ export interface AiProviderModelTestResult {
85
+ /** 模型名称 */
86
+ model_name: string;
87
+ /** 测试是否成功 */
88
+ success: boolean;
89
+ /** 测试耗时毫秒 */
90
+ duration_ms: number;
91
+ /** 失败原因;成功时为空 */
92
+ message: string;
93
+ }
94
+
95
+ /** 测试AI供应商全部模型响应。 */
96
+ export interface TestAiProviderModelsResponse {
97
+ /** 模型测试结果 */
98
+ results: AiProviderModelTestResult[];
99
+ }
100
+
77
101
  /** 删除AI供应商请求。 */
78
102
  export interface DeleteAiProviderRequest {
79
103
  /** 供应商ID */
@@ -122,6 +146,8 @@ export interface AiProviderService {
122
146
  CreateAiProvider(request: CreateAiProviderRequest): Promise<Empty>;
123
147
  /** 更新AI供应商。 */
124
148
  UpdateAiProvider(request: UpdateAiProviderRequest): Promise<Empty>;
149
+ /** 测试AI供应商表单中的全部模型。 */
150
+ TestAiProviderModels(request: TestAiProviderModelsRequest): Promise<TestAiProviderModelsResponse>;
125
151
  /** 删除AI供应商。 */
126
152
  DeleteAiProvider(request: DeleteAiProviderRequest): Promise<Empty>;
127
153
  /** 设置AI供应商状态。 */
@@ -78,7 +78,9 @@
78
78
  >
79
79
  {{ item.replySourceTag.text }}
80
80
  </span>
81
- <span v-if="item.model" class="agent-message-meta__model">{{ item.model }}</span>
81
+ <span v-if="item.model" class="agent-message-meta__model">{{
82
+ resolveModelDisplayName(modelProviders, item.model)
83
+ }}</span>
82
84
  <span v-if="resolveMessageReplyTime(item)" class="agent-message-meta__time">{{
83
85
  resolveMessageReplyTime(item)
84
86
  }}</span>
@@ -357,6 +359,7 @@ import type { AiProviderModelOption } from "@liujitcn/kratos-admin-system/rpc/ba
357
359
  import type { AiShortcut, AiToolCall } from "@liujitcn/kratos-admin-system/rpc/base/v1/ai_tool";
358
360
  import { AiMessageStatus } from "@liujitcn/kratos-admin-system/rpc/base/v1/ai_session";
359
361
  import { resolvePersistedMessage } from "../../../../utils/persisted-message";
362
+ import { resolveModelDisplayName } from "../modelDisplay";
360
363
  import XSender from "./XSender.vue";
361
364
 
362
365
  // AI Markdown 渲染器依赖较重,仅在真正出现助手消息时再加载。