From 402c42137017039394bb671e43ca8accc61dce0c Mon Sep 17 00:00:00 2001 From: Chuck1sn Date: Sun, 25 May 2025 18:17:50 +0800 Subject: [PATCH] llm config fix --- backend/src/main/java/com/zl/mjga/dto/ai/LlmVm.java | 2 ++ .../java/com/zl/mjga/repository/LlmRepository.java | 3 ++- .../src/main/java/com/zl/mjga/service/LlmService.java | 8 +++++++- frontend/src/api/schema/openapi.json | 4 ++++ frontend/src/api/types/schema.d.ts | 1 + frontend/src/components/LlmUpdateModal.vue | 11 +++++++++++ frontend/src/composables/ai/useAiAction.ts | 11 +++++++++++ frontend/src/views/LlmConfigView.vue | 4 ++++ 8 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 frontend/src/composables/ai/useAiAction.ts diff --git a/backend/src/main/java/com/zl/mjga/dto/ai/LlmVm.java b/backend/src/main/java/com/zl/mjga/dto/ai/LlmVm.java index a188528..554fc07 100644 --- a/backend/src/main/java/com/zl/mjga/dto/ai/LlmVm.java +++ b/backend/src/main/java/com/zl/mjga/dto/ai/LlmVm.java @@ -12,6 +12,8 @@ public class LlmVm { @NotEmpty(message = "模型名称不能为空") private String modelName; + @NotEmpty(message = "模型类型不能为空") private String type; + @NotEmpty(message = "apikey 不能为空") private String apiKey; @NotEmpty(message = "url 不能为空") private String url; diff --git a/backend/src/main/java/com/zl/mjga/repository/LlmRepository.java b/backend/src/main/java/com/zl/mjga/repository/LlmRepository.java index ff23bde..b0b4d61 100644 --- a/backend/src/main/java/com/zl/mjga/repository/LlmRepository.java +++ b/backend/src/main/java/com/zl/mjga/repository/LlmRepository.java @@ -26,7 +26,8 @@ public class LlmRepository extends AiLlmConfigDao { public Result pageFetchBy(PageRequestDto pageRequestDto, LlmQueryDto llmQueryDto) { return ctx() .select( - AI_LLM_CONFIG.asterisk(), DSL.count().over().as("total_llm").convertFrom(Long::valueOf)) + AI_LLM_CONFIG.asterisk(), + DSL.count().over().as("total_llm").convertFrom(Long::valueOf)) .from(AI_LLM_CONFIG) .where( StringUtils.isNotEmpty(llmQueryDto.name()) diff --git a/backend/src/main/java/com/zl/mjga/service/LlmService.java b/backend/src/main/java/com/zl/mjga/service/LlmService.java index d90a2ba..3ab30d9 100644 --- a/backend/src/main/java/com/zl/mjga/service/LlmService.java +++ b/backend/src/main/java/com/zl/mjga/service/LlmService.java @@ -18,6 +18,8 @@ import org.jooq.generated.mjga.tables.pojos.AiLlmConfig; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; +import static org.jooq.generated.mjga.Tables.AI_LLM_CONFIG; + @Service @RequiredArgsConstructor @Slf4j @@ -42,7 +44,11 @@ public class LlmService { if (records.isEmpty()) { return PageResponseDto.empty(); } - List llmVms = records.into(LlmVm.class); + List llmVms = records.map((record) -> { + LlmVm into = record.into(LlmVm.class); + into.setType(record.get(AI_LLM_CONFIG.TYPE).getLiteral()); + return into; + }); Long totalLlm = records.get(0).getValue("total_llm", Long.class); return new PageResponseDto<>(totalLlm, llmVms); } diff --git a/frontend/src/api/schema/openapi.json b/frontend/src/api/schema/openapi.json index bffdf22..c947a72 100644 --- a/frontend/src/api/schema/openapi.json +++ b/frontend/src/api/schema/openapi.json @@ -1129,6 +1129,7 @@ "modelName", "name", "priority", + "type", "url" ], "type": "object", @@ -1143,6 +1144,9 @@ "modelName": { "type": "string" }, + "type": { + "type": "string" + }, "apiKey": { "type": "string" }, diff --git a/frontend/src/api/types/schema.d.ts b/frontend/src/api/types/schema.d.ts index 6045993..c0edb20 100644 --- a/frontend/src/api/types/schema.d.ts +++ b/frontend/src/api/types/schema.d.ts @@ -545,6 +545,7 @@ export interface components { id: number; name: string; modelName: string; + type: string; apiKey: string; url: string; enable: boolean; diff --git a/frontend/src/components/LlmUpdateModal.vue b/frontend/src/components/LlmUpdateModal.vue index 40efce4..bb70572 100644 --- a/frontend/src/components/LlmUpdateModal.vue +++ b/frontend/src/components/LlmUpdateModal.vue @@ -34,6 +34,14 @@ class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 " required /> +
+ + +
{ priority: z.number({ message: "优先级必须为数字", }), + type: z.string({ + message: "类型不能为空", + }), }); const validatedData = llmSchema.parse(formData.value); await onSubmit(validatedData); diff --git a/frontend/src/composables/ai/useAiAction.ts b/frontend/src/composables/ai/useAiAction.ts new file mode 100644 index 0000000..d11e06c --- /dev/null +++ b/frontend/src/composables/ai/useAiAction.ts @@ -0,0 +1,11 @@ +import client from "../../api/client"; + +const useAiAction = () => { + const actionChat = (message: string) => { + return client.POST("/ai/action/chat", { + body: message, + }); + }; + + return { actionChat }; +}; diff --git a/frontend/src/views/LlmConfigView.vue b/frontend/src/views/LlmConfigView.vue index 41cbefd..d311541 100644 --- a/frontend/src/views/LlmConfigView.vue +++ b/frontend/src/views/LlmConfigView.vue @@ -40,6 +40,7 @@ 名称 模型名称 + 类型 apiKey url 状态 @@ -62,6 +63,9 @@ {{ `${llm.modelName}` }} + {{ + llm.type === 'CHAT' ? '聊天' : '嵌入' }} + {{ llm.apiKey }}