diff --git a/backend/api-gateway/pom.xml b/backend/api-gateway/pom.xml index c6284e6f..87c3cf4a 100644 --- a/backend/api-gateway/pom.xml +++ b/backend/api-gateway/pom.xml @@ -7,7 +7,7 @@ com.datamate - data-mate-platform + datamate 1.0.0-SNAPSHOT ../pom.xml diff --git a/backend/pom.xml b/backend/pom.xml index 682eaa06..8a7a795d 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -6,11 +6,11 @@ 4.0.0 com.datamate - data-mate-platform + datamate 1.0.0-SNAPSHOT pom - DataMatePlatform + DataMate 一站式数据工作平台,面向模型微调与RAG检索 diff --git a/backend/services/data-annotation-service/pom.xml b/backend/services/data-annotation-service/pom.xml index a91d058c..387d7cb6 100644 --- a/backend/services/data-annotation-service/pom.xml +++ b/backend/services/data-annotation-service/pom.xml @@ -7,7 +7,7 @@ com.datamate - data-mate-platform + datamate 1.0.0-SNAPSHOT ../../pom.xml diff --git a/backend/services/data-cleaning-service/pom.xml b/backend/services/data-cleaning-service/pom.xml index 56b70fc5..9e622b49 100644 --- a/backend/services/data-cleaning-service/pom.xml +++ b/backend/services/data-cleaning-service/pom.xml @@ -7,7 +7,7 @@ com.datamate - data-mate-platform + datamate 1.0.0-SNAPSHOT ../../pom.xml diff --git a/backend/services/data-collection-service/pom.xml b/backend/services/data-collection-service/pom.xml index 9261ad74..d946b696 100644 --- a/backend/services/data-collection-service/pom.xml +++ b/backend/services/data-collection-service/pom.xml @@ -6,7 +6,7 @@ com.datamate - data-mate-platform + datamate 1.0.0-SNAPSHOT ../../pom.xml diff --git a/backend/services/data-evaluation-service/pom.xml b/backend/services/data-evaluation-service/pom.xml index c976d19d..a572467b 100644 --- a/backend/services/data-evaluation-service/pom.xml +++ b/backend/services/data-evaluation-service/pom.xml @@ -7,7 +7,7 @@ com.datamate - data-mate-platform + datamate 1.0.0-SNAPSHOT ../../pom.xml diff --git a/backend/services/data-management-service/pom.xml b/backend/services/data-management-service/pom.xml index e6f0c16b..2b351077 100644 --- a/backend/services/data-management-service/pom.xml +++ b/backend/services/data-management-service/pom.xml @@ -7,7 +7,7 @@ com.datamate - data-mate-platform + datamate 1.0.0-SNAPSHOT ../../pom.xml diff --git a/backend/services/data-synthesis-service/pom.xml b/backend/services/data-synthesis-service/pom.xml index bc146a44..9a7baf9f 100644 --- a/backend/services/data-synthesis-service/pom.xml +++ b/backend/services/data-synthesis-service/pom.xml @@ -7,7 +7,7 @@ com.datamate - data-mate-platform + datamate 1.0.0-SNAPSHOT ../../pom.xml diff --git a/backend/services/execution-engine-service/pom.xml b/backend/services/execution-engine-service/pom.xml index 42f94843..58c4fcbe 100644 --- a/backend/services/execution-engine-service/pom.xml +++ b/backend/services/execution-engine-service/pom.xml @@ -7,7 +7,7 @@ com.datamate - data-mate-platform + datamate 1.0.0-SNAPSHOT ../../pom.xml diff --git a/backend/services/main-application/pom.xml b/backend/services/main-application/pom.xml index 33e48625..4fb6f00c 100644 --- a/backend/services/main-application/pom.xml +++ b/backend/services/main-application/pom.xml @@ -7,7 +7,7 @@ com.datamate - data-mate-platform + datamate 1.0.0-SNAPSHOT ../../pom.xml diff --git a/backend/services/main-application/src/main/resources/application.yml b/backend/services/main-application/src/main/resources/application.yml index 4becb3c6..51206ba9 100644 --- a/backend/services/main-application/src/main/resources/application.yml +++ b/backend/services/main-application/src/main/resources/application.yml @@ -1,7 +1,7 @@ # 数据引擎平台 - 主应用配置 spring: application: - name: data-mate-platform + name: datamate # 暂时排除Spring Security自动配置(开发阶段使用) autoconfigure: diff --git a/backend/services/operator-market-service/pom.xml b/backend/services/operator-market-service/pom.xml index 6543a1e0..b63c681c 100644 --- a/backend/services/operator-market-service/pom.xml +++ b/backend/services/operator-market-service/pom.xml @@ -7,7 +7,7 @@ com.datamate - data-mate-platform + datamate 1.0.0-SNAPSHOT ../../pom.xml diff --git a/backend/services/pipeline-orchestration-service/pom.xml b/backend/services/pipeline-orchestration-service/pom.xml index d5dfe1d5..ab75ae5a 100644 --- a/backend/services/pipeline-orchestration-service/pom.xml +++ b/backend/services/pipeline-orchestration-service/pom.xml @@ -7,7 +7,7 @@ com.datamate - data-mate-platform + datamate 1.0.0-SNAPSHOT ../../pom.xml diff --git a/backend/services/rag-indexer-service/pom.xml b/backend/services/rag-indexer-service/pom.xml index f9e0441e..040a9f8f 100644 --- a/backend/services/rag-indexer-service/pom.xml +++ b/backend/services/rag-indexer-service/pom.xml @@ -7,7 +7,7 @@ com.datamate - data-mate-platform + datamate 1.0.0-SNAPSHOT ../../pom.xml diff --git a/backend/services/rag-query-service/pom.xml b/backend/services/rag-query-service/pom.xml index cc407ef5..ed6c226b 100644 --- a/backend/services/rag-query-service/pom.xml +++ b/backend/services/rag-query-service/pom.xml @@ -7,7 +7,7 @@ com.datamate - data-mate-platform + datamate 1.0.0-SNAPSHOT ../../pom.xml diff --git a/backend/shared/domain-common/pom.xml b/backend/shared/domain-common/pom.xml index bf1e9330..6cb2b22c 100644 --- a/backend/shared/domain-common/pom.xml +++ b/backend/shared/domain-common/pom.xml @@ -7,7 +7,7 @@ com.datamate - data-mate-platform + datamate 1.0.0-SNAPSHOT ../../pom.xml @@ -33,5 +33,10 @@ com.fasterxml.jackson.datatype jackson-datatype-jsr310 + + dev.langchain4j + langchain4j-open-ai + 1.8.0 + diff --git a/backend/shared/domain-common/src/main/java/com/datamate/common/infrastructure/exception/KnowledgeBaseErrorCode.java b/backend/shared/domain-common/src/main/java/com/datamate/common/infrastructure/exception/KnowledgeBaseErrorCode.java new file mode 100644 index 00000000..d56bdb9a --- /dev/null +++ b/backend/shared/domain-common/src/main/java/com/datamate/common/infrastructure/exception/KnowledgeBaseErrorCode.java @@ -0,0 +1,23 @@ +package com.datamate.common.infrastructure.exception; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 知识库错误码 + * + * @author dallas + * @since 2025-10-24 + */ + +@Getter +@AllArgsConstructor +public enum KnowledgeBaseErrorCode implements ErrorCode { + /** + * 知识库不存在 + */ + KNOWLEDGE_BASE_NOT_FOUND("knowledge.0001", "知识库不存在"); + + private final String code; + private final String message; +} diff --git a/backend/shared/domain-common/src/main/java/com/datamate/common/models/application/ModelConfigApplicationService.java b/backend/shared/domain-common/src/main/java/com/datamate/common/models/application/ModelConfigApplicationService.java new file mode 100644 index 00000000..1c3435b9 --- /dev/null +++ b/backend/shared/domain-common/src/main/java/com/datamate/common/models/application/ModelConfigApplicationService.java @@ -0,0 +1,85 @@ +package com.datamate.common.models.application; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.datamate.common.infrastructure.exception.BusinessAssert; +import com.datamate.common.interfaces.PagedResponse; +import com.datamate.common.models.domain.entity.ModelConfig; +import com.datamate.common.models.domain.repository.ModelConfigRepository; +import com.datamate.common.models.infrastructure.client.ModelClient; +import com.datamate.common.models.infrastructure.exception.ModelsErrorCode; +import com.datamate.common.models.interfaces.rest.dto.CreateModelRequest; +import com.datamate.common.models.interfaces.rest.dto.QueryModelRequest; +import dev.langchain4j.model.chat.ChatModel; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * 模型配置应用服务类 + * + * @author dallas + * @since 2025-10-27 + */ +@Service +@RequiredArgsConstructor +public class ModelConfigApplicationService { + private final ModelConfigRepository modelConfigRepository; + + public List getProviders() { + List providers = new ArrayList<>(); + providers.add(ModelConfig.builder().provider("ModelEngine").baseUrl("http://localhost:9981").build()); + providers.add(ModelConfig.builder().provider("Ollama").baseUrl("http://localhost:11434").build()); + providers.add(ModelConfig.builder().provider("OpenAI").baseUrl("https://api.openai.com/v1").build()); + providers.add(ModelConfig.builder().provider("DeepSeek").baseUrl("https://api.deepseek.cn/v1").build()); + providers.add(ModelConfig.builder().provider("火山方舟").baseUrl("https://ark.cn-beijing.volces.com/api/v3").build()); + providers.add(ModelConfig.builder().provider("阿里云百炼").baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1").build()); + providers.add(ModelConfig.builder().provider("硅基流动").baseUrl("https://api.siliconflow.cn/v1").build()); + providers.add(ModelConfig.builder().provider("智谱AI").baseUrl("https://open.bigmodel.cn/api/paas/v4").build()); + return providers; + } + + public PagedResponse getModels(QueryModelRequest queryModelRequest) { + // 从数据库查询模型配置 + IPage page = modelConfigRepository.page(queryModelRequest); + return PagedResponse.of(page.getRecords(), page.getCurrent(), page.getTotal(), page.getPages()); + } + + public ModelConfig getModelDetail(String modelId) { + return modelConfigRepository.getById(modelId); + } + + public ModelConfig createModel(CreateModelRequest modelConfig) { + ModelConfig newConfig = ModelConfig.builder() + .provider(modelConfig.getProvider()) + .modelName(modelConfig.getModelName()) + .type(modelConfig.getType()) + .baseUrl(modelConfig.getBaseUrl()) + .apiKey(modelConfig.getApiKey()) + .isEnabled(true) + .build(); + ModelClient.checkHealth(newConfig); + modelConfigRepository.save(newConfig); + return newConfig; + } + + public ModelConfig updateModel(String modelId, @Valid CreateModelRequest updateModelRequest) { + ModelConfig modelConfig = modelConfigRepository.getById(modelId); + BusinessAssert.notNull(modelConfig, ModelsErrorCode.MODEL_CONFIG_NOT_FOUND); + modelConfig.setProvider(updateModelRequest.getProvider()); + modelConfig.setModelName(updateModelRequest.getModelName()); + modelConfig.setType(updateModelRequest.getType()); + modelConfig.setBaseUrl(updateModelRequest.getBaseUrl()); + modelConfig.setApiKey(updateModelRequest.getApiKey()); + modelConfig.setIsEnabled(true); + ModelClient.checkHealth(modelConfig); + modelConfigRepository.updateById(modelConfig); + return modelConfig; + } + + public void deleteModel(String modelId) { + modelConfigRepository.removeById(modelId); + } +} diff --git a/backend/shared/domain-common/src/main/java/com/datamate/common/models/domain/entity/ModelConfig.java b/backend/shared/domain-common/src/main/java/com/datamate/common/models/domain/entity/ModelConfig.java new file mode 100644 index 00000000..1eecd8ee --- /dev/null +++ b/backend/shared/domain-common/src/main/java/com/datamate/common/models/domain/entity/ModelConfig.java @@ -0,0 +1,44 @@ +package com.datamate.common.models.domain.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.datamate.common.domain.model.base.BaseEntity; +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; + +/** + * 模型配置实体类 + * + * @author dallas + * @since 2025-10-27 + */ +@Getter +@Setter +@TableName("t_model_config") +@Builder +public class ModelConfig extends BaseEntity { + /** + * 模型名称(如 qwen2) + */ + private String modelName; + /** + * 模型提供商(如 Ollama、OpenAI、DeepSeek) + */ + private String provider; + /** + * API 基础地址 + */ + private String baseUrl; + /** + * API 密钥(无密钥则为空) + */ + private String apiKey; + /** + * 模型类型(如 chat、embedding) + */ + private ModelType type; + /** + * 是否启用:1-启用,0-禁用 + */ + private Boolean isEnabled; +} diff --git a/backend/shared/domain-common/src/main/java/com/datamate/common/models/domain/entity/ModelType.java b/backend/shared/domain-common/src/main/java/com/datamate/common/models/domain/entity/ModelType.java new file mode 100644 index 00000000..7b056728 --- /dev/null +++ b/backend/shared/domain-common/src/main/java/com/datamate/common/models/domain/entity/ModelType.java @@ -0,0 +1,18 @@ +package com.datamate.common.models.domain.entity; + +/** + * 模型类型枚举类 + * + * @author dallas + * @since 2025-10-27 + */ +public enum ModelType { + /** + * 语言模型 + */ + CHAT, + /** + * 嵌入模型 + */ + EMBEDDING +} diff --git a/backend/shared/domain-common/src/main/java/com/datamate/common/models/domain/repository/ModelConfigRepository.java b/backend/shared/domain-common/src/main/java/com/datamate/common/models/domain/repository/ModelConfigRepository.java new file mode 100644 index 00000000..2c70b348 --- /dev/null +++ b/backend/shared/domain-common/src/main/java/com/datamate/common/models/domain/repository/ModelConfigRepository.java @@ -0,0 +1,22 @@ +package com.datamate.common.models.domain.repository; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.repository.IRepository; +import com.datamate.common.models.domain.entity.ModelConfig; +import com.datamate.common.models.interfaces.rest.dto.QueryModelRequest; + +/** + * 模型配置仓库接口 + * + * @author dallas + * @since 2025-10-27 + */ +public interface ModelConfigRepository extends IRepository { + /** + * 分页查询模型配置 + * + * @param queryModelRequest 分页查询参数 + * @return 模型配置列表 + */ + IPage page(QueryModelRequest queryModelRequest); +} diff --git a/backend/shared/domain-common/src/main/java/com/datamate/common/models/infrastructure/client/ModelClient.java b/backend/shared/domain-common/src/main/java/com/datamate/common/models/infrastructure/client/ModelClient.java new file mode 100644 index 00000000..5246c031 --- /dev/null +++ b/backend/shared/domain-common/src/main/java/com/datamate/common/models/infrastructure/client/ModelClient.java @@ -0,0 +1,44 @@ +package com.datamate.common.models.infrastructure.client; + +import com.datamate.common.models.domain.entity.ModelConfig; +import com.datamate.common.models.domain.entity.ModelType; +import dev.langchain4j.model.chat.ChatModel; +import dev.langchain4j.model.embedding.EmbeddingModel; +import dev.langchain4j.model.openai.OpenAiChatModel; +import dev.langchain4j.model.openai.OpenAiEmbeddingModel; + +import java.util.function.Consumer; + +/** + * 模型客户端接口 + * + * @author dallas + * @since 2025-10-27 + */ +public class ModelClient { + public static T invokeModel(ModelConfig modelConfig, Class modelInterface) { + return switch (modelConfig.getType()) { + case CHAT -> modelInterface.cast(invokeChatModel(modelConfig)); + case EMBEDDING -> modelInterface.cast(invokeEmbeddingModel(modelConfig)); + }; + } + + private static EmbeddingModel invokeEmbeddingModel(ModelConfig modelConfig) { + return OpenAiEmbeddingModel.builder() + .baseUrl(modelConfig.getBaseUrl()) + .apiKey(modelConfig.getApiKey()) + .modelName(modelConfig.getModelName()) + .build(); + } + + private static ChatModel invokeChatModel(ModelConfig modelConfig) { + return OpenAiChatModel.builder() + .baseUrl(modelConfig.getBaseUrl()) + .apiKey(modelConfig.getApiKey()) + .modelName(modelConfig.getModelName()) + .build(); + } + + public static void checkHealth(ModelConfig modelConfig) { + } +} diff --git a/backend/shared/domain-common/src/main/java/com/datamate/common/models/infrastructure/exception/ModelsErrorCode.java b/backend/shared/domain-common/src/main/java/com/datamate/common/models/infrastructure/exception/ModelsErrorCode.java new file mode 100644 index 00000000..e0835838 --- /dev/null +++ b/backend/shared/domain-common/src/main/java/com/datamate/common/models/infrastructure/exception/ModelsErrorCode.java @@ -0,0 +1,27 @@ +package com.datamate.common.models.infrastructure.exception; + +import com.datamate.common.infrastructure.exception.ErrorCode; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 模型配置错误码枚举类 + * + * @author dallas + * @since 2025-10-27 + */ +@Getter +@AllArgsConstructor +public enum ModelsErrorCode implements ErrorCode { + /** + * 模型配置不存在 + */ + MODEL_CONFIG_NOT_FOUND("model.0001", "模型配置不存在"), + /** + * 模型配置已存在 + */ + MODEL_CONFIG_ALREADY_EXISTS("model.0002", "模型配置已存在"); + + private final String code; + private final String message; +} diff --git a/backend/shared/domain-common/src/main/java/com/datamate/common/models/infrastructure/persistence/impl/ModelConfigRepositoryImpl.java b/backend/shared/domain-common/src/main/java/com/datamate/common/models/infrastructure/persistence/impl/ModelConfigRepositoryImpl.java new file mode 100644 index 00000000..0d4239fa --- /dev/null +++ b/backend/shared/domain-common/src/main/java/com/datamate/common/models/infrastructure/persistence/impl/ModelConfigRepositoryImpl.java @@ -0,0 +1,37 @@ +package com.datamate.common.models.infrastructure.persistence.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.repository.CrudRepository; +import com.datamate.common.models.domain.entity.ModelConfig; +import com.datamate.common.models.domain.repository.ModelConfigRepository; +import com.datamate.common.models.infrastructure.persistence.mapper.ModelConfigMapper; +import com.datamate.common.models.interfaces.rest.dto.QueryModelRequest; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; +import org.springframework.util.StringUtils; + +import java.util.Objects; + +/** + * 模型配置仓库实现类 + * + * @author dallas + * @since 2025-10-27 + */ +@Repository +@RequiredArgsConstructor +public class ModelConfigRepositoryImpl extends CrudRepository implements ModelConfigRepository { + private final ModelConfigMapper modelConfigMapper; + + + @Override + public IPage page(QueryModelRequest queryModelRequest) { + IPage page = new Page<>(queryModelRequest.getPage(), queryModelRequest.getSize()); + return this.page(page, new LambdaQueryWrapper() + .eq(StringUtils.hasText(queryModelRequest.getProvider()), ModelConfig::getProvider, queryModelRequest.getProvider()) + .eq(Objects.nonNull(queryModelRequest.getType()), ModelConfig::getType, queryModelRequest.getType()) + .eq(Objects.nonNull(queryModelRequest.getIsEnabled()), ModelConfig::getIsEnabled, queryModelRequest.getIsEnabled())); + } +} diff --git a/backend/shared/domain-common/src/main/java/com/datamate/common/models/infrastructure/persistence/mapper/ModelConfigMapper.java b/backend/shared/domain-common/src/main/java/com/datamate/common/models/infrastructure/persistence/mapper/ModelConfigMapper.java new file mode 100644 index 00000000..970f3fa9 --- /dev/null +++ b/backend/shared/domain-common/src/main/java/com/datamate/common/models/infrastructure/persistence/mapper/ModelConfigMapper.java @@ -0,0 +1,15 @@ +package com.datamate.common.models.infrastructure.persistence.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.datamate.common.models.domain.entity.ModelConfig; +import org.apache.ibatis.annotations.Mapper; + +/** + * 模型配置映射器接口 + * + * @author dallas + * @since 2025-10-27 + */ +@Mapper +public interface ModelConfigMapper extends BaseMapper { +} \ No newline at end of file diff --git a/backend/shared/domain-common/src/main/java/com/datamate/common/models/interfaces/rest/ModelConfigController.java b/backend/shared/domain-common/src/main/java/com/datamate/common/models/interfaces/rest/ModelConfigController.java new file mode 100644 index 00000000..e05ddc51 --- /dev/null +++ b/backend/shared/domain-common/src/main/java/com/datamate/common/models/interfaces/rest/ModelConfigController.java @@ -0,0 +1,90 @@ +package com.datamate.common.models.interfaces.rest; + + +import com.datamate.common.interfaces.PagedResponse; +import com.datamate.common.models.application.ModelConfigApplicationService; +import com.datamate.common.models.domain.entity.ModelConfig; +import com.datamate.common.models.interfaces.rest.dto.CreateModelRequest; +import com.datamate.common.models.interfaces.rest.dto.QueryModelRequest; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 模型配置控制器类 + * + * @author dallas + * @since 2025-10-27 + */ +@RestController +@RequestMapping("/api/models") +@RequiredArgsConstructor +public class ModelConfigController { + private final ModelConfigApplicationService modelConfigApplicationService; + + /** + * 获取厂商列表 + * + * @return 厂商列表 + */ + @GetMapping("/providers") + public List getProviders() { + return modelConfigApplicationService.getProviders(); + } + + /** + * 获取模型列表 + * + * @return 模型列表 + */ + @GetMapping("/list") + public PagedResponse getModels(@RequestParam QueryModelRequest queryModelRequest) { + return modelConfigApplicationService.getModels(queryModelRequest); + } + + /** + * 获取模型详情 + * + * @param modelId 模型 ID + * @return 模型详情 + */ + @GetMapping("/{modelId}") + public ModelConfig getModelDetail(@PathVariable String modelId) { + return modelConfigApplicationService.getModelDetail(modelId); + } + + /** + * 创建模型配置 + * + * @param createModelRequest 创建模型配置请求 + * @return 创建的模型配置 + */ + @PostMapping("/create") + public ModelConfig createModel(@RequestBody @Valid CreateModelRequest createModelRequest) { + return modelConfigApplicationService.createModel(createModelRequest); + } + + /** + * 更新模型配置 + * + * @param modelId 模型 ID + * @param updateModelRequest 更新模型配置请求 + * @return 更新后的模型配置 + */ + @PutMapping("/{modelId}") + public ModelConfig updateModel(@PathVariable String modelId, @RequestBody @Valid CreateModelRequest updateModelRequest) { + return modelConfigApplicationService.updateModel(modelId, updateModelRequest); + } + + /** + * 删除模型配置 + * + * @param modelId 模型 ID + */ + @DeleteMapping("/{modelId}") + public void deleteModel(@PathVariable String modelId) { + modelConfigApplicationService.deleteModel(modelId); + } +} diff --git a/backend/shared/domain-common/src/main/java/com/datamate/common/models/interfaces/rest/dto/CreateModelRequest.java b/backend/shared/domain-common/src/main/java/com/datamate/common/models/interfaces/rest/dto/CreateModelRequest.java new file mode 100644 index 00000000..54678e5f --- /dev/null +++ b/backend/shared/domain-common/src/main/java/com/datamate/common/models/interfaces/rest/dto/CreateModelRequest.java @@ -0,0 +1,46 @@ +package com.datamate.common.models.interfaces.rest.dto; + +import com.datamate.common.models.domain.entity.ModelType; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Getter; +import lombok.Setter; + +/** + * 创建模型配置请求类 + * + * @author dallas + * @since 2025-10-27 + */ +@Setter +@Getter +public class CreateModelRequest { + /** + * 模型名称(如 qwen2) + */ + @NotEmpty(message = "模型名称不能为空") + private String modelName; + /** + * 模型提供商(如 Ollama、OpenAI、DeepSeek) + */ + @NotEmpty(message = "模型提供商不能为空") + private String provider; + /** + * API 基础地址 + */ + @NotEmpty(message = "API 基础地址不能为空") + private String baseUrl; + /** + * API 密钥(无密钥则为空) + */ + private String apiKey; + /** + * 模型类型(如 chat、embedding) + */ + @NotNull(message = "模型类型不能为空") + private ModelType type; + /** + * 是否启用:1-启用,0-禁用 + */ + private Boolean isEnabled; +} diff --git a/backend/shared/domain-common/src/main/java/com/datamate/common/models/interfaces/rest/dto/QueryModelRequest.java b/backend/shared/domain-common/src/main/java/com/datamate/common/models/interfaces/rest/dto/QueryModelRequest.java new file mode 100644 index 00000000..5c17c0f9 --- /dev/null +++ b/backend/shared/domain-common/src/main/java/com/datamate/common/models/interfaces/rest/dto/QueryModelRequest.java @@ -0,0 +1,27 @@ +package com.datamate.common.models.interfaces.rest.dto; + +import com.datamate.common.interfaces.PagingQuery; +import com.datamate.common.models.domain.entity.ModelType; +import lombok.Getter; +import lombok.Setter; + +/** + * 模型查询请求 DTO + * + * @author dallas + * @since 2025-10-27 + */ +@Getter +@Setter +public class QueryModelRequest extends PagingQuery { + /** + * 模型提供商(如 Ollama、OpenAI、DeepSeek) + */ + private String provider; + /** + * 模型类型(如 chat、embedding) + */ + private ModelType type; + + private Boolean isEnabled; +} diff --git a/backend/shared/security-common/pom.xml b/backend/shared/security-common/pom.xml index 686234bb..5f3a8ca4 100644 --- a/backend/shared/security-common/pom.xml +++ b/backend/shared/security-common/pom.xml @@ -7,7 +7,7 @@ com.datamate - data-mate-platform + datamate 1.0.0-SNAPSHOT ../../pom.xml diff --git a/editions/community/config/application.yml b/editions/community/config/application.yml index d6b251de..0d468f4b 100644 --- a/editions/community/config/application.yml +++ b/editions/community/config/application.yml @@ -1,7 +1,7 @@ # 数据引擎平台 - 主应用配置 spring: application: - name: data-mate-platform + name: datamate # 暂时排除Spring Security自动配置(开发阶段使用) autoconfigure: diff --git a/editions/enterprise/config/application.yml b/editions/enterprise/config/application.yml index 671a27f7..9326ab62 100644 --- a/editions/enterprise/config/application.yml +++ b/editions/enterprise/config/application.yml @@ -1,7 +1,7 @@ # 数据引擎平台 - 主应用配置 spring: application: - name: data-mate-platform + name: datamate # 暂时排除Spring Security自动配置(开发阶段使用) autoconfigure: diff --git a/scripts/db/model-management-init.sql b/scripts/db/model-management-init.sql new file mode 100644 index 00000000..993ba5a3 --- /dev/null +++ b/scripts/db/model-management-init.sql @@ -0,0 +1,17 @@ +CREATE TABLE t_model_config +( + id VARCHAR(36) AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID', + model_name VARCHAR(100) NOT NULL COMMENT '模型名称(如 qwen2)', + provider VARCHAR(50) NOT NULL COMMENT '模型提供商(如 Ollama、OpenAI、DeepSeek)', + base_url VARCHAR(255) NOT NULL COMMENT 'API 基础地址', + api_key VARCHAR(255) DEFAULT '' COMMENT 'API 密钥(无密钥则为空)', + type VARCHAR(50) NOT NULL COMMENT '模型类型(如 chat、embedding)', + is_enabled TINYINT DEFAULT 1 COMMENT '是否启用:1-启用,0-禁用', + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + created_by VARCHAR(255) COMMENT '创建者', + updated_by VARCHAR(255) COMMENT '更新者', + UNIQUE KEY uk_model_provider (model_name, provider) COMMENT '避免同一提供商下模型名称重复' +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 COMMENT ='模型配置表'; +