mirror of
https://github.com/ccmjga/zhilu-admin
synced 2026-04-04 19:27:32 +00:00
pageQueryLlm
This commit is contained in:
@@ -1,15 +1,20 @@
|
|||||||
package com.zl.mjga.controller;
|
package com.zl.mjga.controller;
|
||||||
|
|
||||||
import com.zl.mjga.dto.ai.LlmUpdateDto;
|
import com.zl.mjga.dto.PageRequestDto;
|
||||||
|
import com.zl.mjga.dto.PageResponseDto;
|
||||||
|
import com.zl.mjga.dto.ai.LlmVm;
|
||||||
import com.zl.mjga.service.AiChatService;
|
import com.zl.mjga.service.AiChatService;
|
||||||
import com.zl.mjga.service.LlmService;
|
import com.zl.mjga.service.LlmService;
|
||||||
import dev.langchain4j.service.TokenStream;
|
import dev.langchain4j.service.TokenStream;
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
import java.security.Principal;
|
import java.security.Principal;
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
|
import java.util.List;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import reactor.core.publisher.Flux;
|
import reactor.core.publisher.Flux;
|
||||||
import reactor.core.publisher.Sinks;
|
import reactor.core.publisher.Sinks;
|
||||||
@@ -38,8 +43,16 @@ public class AiController {
|
|||||||
return sink.asFlux().timeout(Duration.ofSeconds(120));
|
return sink.asFlux().timeout(Duration.ofSeconds(120));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PreAuthorize("hasAuthority(T(com.zl.mjga.model.urp.EPermission).WRITE_LLM_CONFIG_PERMISSION)")
|
||||||
@PutMapping(value = "/llm")
|
@PutMapping(value = "/llm")
|
||||||
public void updateLlm(@RequestBody @Valid LlmUpdateDto llmUpdateDto) {
|
public void updateLlm(@RequestBody @Valid LlmVm llmVm) {
|
||||||
llmService.update(llmUpdateDto);
|
llmService.update(llmVm);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PreAuthorize("hasAuthority(T(com.zl.mjga.model.urp.EPermission).READ_LLM_CONFIG_PERMISSION)")
|
||||||
|
@GetMapping("/llm/page-query")
|
||||||
|
@ResponseStatus(HttpStatus.OK)
|
||||||
|
public PageResponseDto<List<LlmVm>> pageQueryLlm(@ModelAttribute PageRequestDto pageRequestDto) {
|
||||||
|
return llmService.pageQueryLlm(pageRequestDto);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +0,0 @@
|
|||||||
package com.zl.mjga.dto.ai;
|
|
||||||
|
|
||||||
import jakarta.validation.constraints.NotEmpty;
|
|
||||||
import jakarta.validation.constraints.NotNull;
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
@Data
|
|
||||||
public class LlmUpdateDto {
|
|
||||||
@NotNull private Long id;
|
|
||||||
@NotEmpty private String name;
|
|
||||||
@NotEmpty private String modelName;
|
|
||||||
@NotEmpty private String apiKey;
|
|
||||||
@NotEmpty private String url;
|
|
||||||
@NotNull private Boolean enable;
|
|
||||||
@NotNull private Short priority;
|
|
||||||
}
|
|
||||||
22
backend/src/main/java/com/zl/mjga/dto/ai/LlmVm.java
Normal file
22
backend/src/main/java/com/zl/mjga/dto/ai/LlmVm.java
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
package com.zl.mjga.dto.ai;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.NotEmpty;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class LlmVm {
|
||||||
|
@NotNull private Long id;
|
||||||
|
|
||||||
|
@NotEmpty(message = "名称不能为空") private String name;
|
||||||
|
|
||||||
|
@NotEmpty(message = "模型名称不能为空") private String modelName;
|
||||||
|
|
||||||
|
@NotEmpty(message = "apikey 不能为空") private String apiKey;
|
||||||
|
|
||||||
|
@NotEmpty(message = "url 不能为空") private String url;
|
||||||
|
|
||||||
|
@NotNull(message = "是否启用不能为空") private Boolean enable;
|
||||||
|
|
||||||
|
@NotNull(message = "优先级不能为空") private Short priority;
|
||||||
|
}
|
||||||
@@ -9,5 +9,7 @@ public enum EPermission {
|
|||||||
WRITE_SCHEDULER_PERMISSION,
|
WRITE_SCHEDULER_PERMISSION,
|
||||||
WRITE_USER_ROLE_PERMISSION,
|
WRITE_USER_ROLE_PERMISSION,
|
||||||
DELETE_USER_ROLE_PERMISSION,
|
DELETE_USER_ROLE_PERMISSION,
|
||||||
READ_USER_ROLE_PERMISSION
|
READ_USER_ROLE_PERMISSION,
|
||||||
|
READ_LLM_CONFIG_PERMISSION,
|
||||||
|
WRITE_LLM_CONFIG_PERMISSION,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package com.zl.mjga.repository;
|
||||||
|
|
||||||
|
import static org.jooq.generated.mjga.Tables.AI_LLM_CONFIG;
|
||||||
|
|
||||||
|
import com.zl.mjga.dto.PageRequestDto;
|
||||||
|
import org.jooq.Configuration;
|
||||||
|
import org.jooq.Record;
|
||||||
|
import org.jooq.Result;
|
||||||
|
import org.jooq.generated.mjga.tables.daos.AiLlmConfigDao;
|
||||||
|
import org.jooq.impl.DSL;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
public class LlmRepository extends AiLlmConfigDao {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
public LlmRepository(Configuration configuration) {
|
||||||
|
super(configuration);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Result<Record> pageFetchBy(PageRequestDto pageRequestDto) {
|
||||||
|
return ctx()
|
||||||
|
.select(
|
||||||
|
AI_LLM_CONFIG.asterisk(), DSL.count().over().as("total_llm").convertFrom(Long::valueOf))
|
||||||
|
.from(AI_LLM_CONFIG)
|
||||||
|
.orderBy(pageRequestDto.getSortFields())
|
||||||
|
.limit(pageRequestDto.getSize())
|
||||||
|
.offset(pageRequestDto.getOffset())
|
||||||
|
.fetch();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,13 +1,16 @@
|
|||||||
package com.zl.mjga.service;
|
package com.zl.mjga.service;
|
||||||
|
|
||||||
import com.zl.mjga.dto.ai.LlmUpdateDto;
|
import com.zl.mjga.dto.PageRequestDto;
|
||||||
|
import com.zl.mjga.dto.PageResponseDto;
|
||||||
|
import com.zl.mjga.dto.ai.LlmVm;
|
||||||
|
import com.zl.mjga.repository.LlmRepository;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.jooq.Record;
|
||||||
|
import org.jooq.Result;
|
||||||
import org.jooq.generated.default_schema.enums.LlmCodeEnum;
|
import org.jooq.generated.default_schema.enums.LlmCodeEnum;
|
||||||
import org.jooq.generated.mjga.tables.daos.AiLlmConfigDao;
|
|
||||||
import org.jooq.generated.mjga.tables.pojos.AiLlmConfig;
|
import org.jooq.generated.mjga.tables.pojos.AiLlmConfig;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@@ -17,25 +20,35 @@ import org.springframework.stereotype.Service;
|
|||||||
@Slf4j
|
@Slf4j
|
||||||
public class LlmService {
|
public class LlmService {
|
||||||
|
|
||||||
private final AiLlmConfigDao aiLlmConfigDao;
|
private final LlmRepository llmRepository;
|
||||||
|
|
||||||
public AiLlmConfig loadConfig(LlmCodeEnum llmCodeEnum) {
|
public AiLlmConfig loadConfig(LlmCodeEnum llmCodeEnum) {
|
||||||
return aiLlmConfigDao.fetchOneByCode(llmCodeEnum);
|
return llmRepository.fetchOneByCode(llmCodeEnum);
|
||||||
}
|
}
|
||||||
|
|
||||||
public AiLlmConfig getPrecedenceLlmBy(Boolean enable) {
|
public AiLlmConfig getPrecedenceLlmBy(Boolean enable) {
|
||||||
List<AiLlmConfig> aiLlmConfigs = aiLlmConfigDao.fetchByEnable(enable);
|
List<AiLlmConfig> aiLlmConfigs = llmRepository.fetchByEnable(enable);
|
||||||
//noinspection OptionalGetWithoutIsPresent
|
//noinspection OptionalGetWithoutIsPresent
|
||||||
return aiLlmConfigs.stream()
|
return aiLlmConfigs.stream()
|
||||||
.max((o1, o2) -> o2.getPriority().compareTo(o1.getPriority()))
|
.max((o1, o2) -> o2.getPriority().compareTo(o1.getPriority()))
|
||||||
.get();
|
.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void update(LlmUpdateDto llmUpdateDto) {
|
public PageResponseDto<List<LlmVm>> pageQueryLlm(PageRequestDto pageRequestDto) {
|
||||||
|
Result<Record> records = llmRepository.pageFetchBy(pageRequestDto);
|
||||||
|
if (records.isEmpty()) {
|
||||||
|
return PageResponseDto.empty();
|
||||||
|
}
|
||||||
|
List<LlmVm> llmVms = records.into(LlmVm.class);
|
||||||
|
Long totalLlm = records.get(0).getValue("total_llm", Long.class);
|
||||||
|
return new PageResponseDto<>(totalLlm, llmVms);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void update(LlmVm llmVm) {
|
||||||
AiLlmConfig aiLlmConfig = new AiLlmConfig();
|
AiLlmConfig aiLlmConfig = new AiLlmConfig();
|
||||||
BeanUtils.copyProperties(llmUpdateDto, aiLlmConfig);
|
BeanUtils.copyProperties(llmVm, aiLlmConfig);
|
||||||
AiLlmConfig byId = aiLlmConfigDao.findById(llmUpdateDto.getId());
|
AiLlmConfig byId = llmRepository.findById(llmVm.getId());
|
||||||
aiLlmConfig.setCode(Objects.requireNonNull(byId).getCode());
|
aiLlmConfig.setCode(Objects.requireNonNull(byId).getCode());
|
||||||
aiLlmConfigDao.merge(aiLlmConfig);
|
llmRepository.merge(aiLlmConfig);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user