diff --git a/llmx-core/llmx-core-service/src/main/kotlin/org/jcnc/llmx/core/service/config/AppConfiguration.kt b/llmx-core/llmx-core-service/src/main/kotlin/org/jcnc/llmx/core/service/config/AppConfiguration.kt index 6d400c3..bb50d8c 100644 --- a/llmx-core/llmx-core-service/src/main/kotlin/org/jcnc/llmx/core/service/config/AppConfiguration.kt +++ b/llmx-core/llmx-core-service/src/main/kotlin/org/jcnc/llmx/core/service/config/AppConfiguration.kt @@ -1,6 +1,5 @@ package org.jcnc.llmx.core.service.config -import org.springframework.boot.context.properties.EnableConfigurationProperties import org.springframework.cloud.client.loadbalancer.LoadBalanced import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration @@ -13,7 +12,6 @@ import org.springframework.web.reactive.function.client.WebClient * @author gewuyou */ @Configuration -@EnableConfigurationProperties(ModelProperties::class) open class AppConfiguration { /** * 创建一个配置了负载均衡的WebClient构建器 diff --git a/llmx-core/llmx-core-service/src/main/kotlin/org/jcnc/llmx/core/service/config/ModelProperties.kt b/llmx-core/llmx-core-service/src/main/kotlin/org/jcnc/llmx/core/service/config/ModelProperties.kt deleted file mode 100644 index 4e705c1..0000000 --- a/llmx-core/llmx-core-service/src/main/kotlin/org/jcnc/llmx/core/service/config/ModelProperties.kt +++ /dev/null @@ -1,21 +0,0 @@ -package org.jcnc.llmx.core.service.config - -import org.springframework.boot.context.properties.ConfigurationProperties -import org.springframework.cloud.context.config.annotation.RefreshScope - -/** - *模型属性 - * - * @since 2025-04-26 18:01:48 - * @author gewuyou - */ -@ConfigurationProperties(prefix = "llmx.model-route") -@RefreshScope -open class ModelProperties { - /** - * 模型名前缀 -> 服务名映射 - * 该映射表存储了模型名前缀与服务名的对应关系,用于快速查找模型对应的服务 - * 例:openai -> llmhub-impl-openai - */ - var modelServiceMap: Map = emptyMap() -} \ No newline at end of file diff --git a/llmx-core/llmx-core-service/src/main/kotlin/org/jcnc/llmx/core/service/domain/model/ModelRouteMapping.kt b/llmx-core/llmx-core-service/src/main/kotlin/org/jcnc/llmx/core/service/domain/model/ModelRouteMapping.kt new file mode 100644 index 0000000..a4dea5c --- /dev/null +++ b/llmx-core/llmx-core-service/src/main/kotlin/org/jcnc/llmx/core/service/domain/model/ModelRouteMapping.kt @@ -0,0 +1,74 @@ +package org.jcnc.llmx.core.service.domain.model + +import jakarta.persistence.* +import org.hibernate.annotations.ColumnDefault +import java.time.OffsetDateTime + +/** + * 表示模型与其路由信息之间的映射关系。 + * 该类用于定义模型与对应服务之间的关联, + * 包括相关的描述信息和状态信息。 + * + * 使用注解来定义表名、主键生成策略以及字段与数据库列的映射关系。 + */ +@Entity +@Table(name = "model_route_mapping", schema = "core") +open class ModelRouteMapping { + /** + * 映射关系的唯一标识符。 + * 使用序列生成器来自动生成ID。 + */ + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "model_route_mapping_id_gen") + @SequenceGenerator( + name = "model_route_mapping_id_gen", + sequenceName = "model_route_mapping_id_seq", + allocationSize = 1 + ) + @Column(name = "id", nullable = false) + open var id: Long? = null + + /** + * 模型名称。 + * 用于标识与路由信息相关联的模型。 + */ + @Column(name = "model", nullable = false, length = 50) + open lateinit var model: String + + /** + * 对应的服务名称。 + * 表示该模型所关联的具体服务实例。 + */ + @Column(name = "service_name", nullable = false, length = 50) + open lateinit var serviceName: String + + /** + * 映射描述。 + * 提供有关映射的额外信息,便于理解和维护。 + */ + @Column(name = "description", length = 150) + open var description: String? = null + + /** + * 映射状态。 + * 表示当前映射是否启用。默认情况下,新映射是启用的。 + */ + @ColumnDefault("true") + @Column(name = "enabled") + open var enabled: Boolean=true + + /** + * 创建时间。 + * 默认为创建新映射时的当前时间戳。 + */ + @ColumnDefault("CURRENT_TIMESTAMP") + @Column(name = "create_at", nullable = false) + open var createAt: OffsetDateTime? = null + + /** + * 最后更新时间。 + * 记录映射信息的最后修改时间。 + */ + @Column(name = "update_at") + open var updateAt: OffsetDateTime? = null +} diff --git a/llmx-core/llmx-core-service/src/main/kotlin/org/jcnc/llmx/core/service/manager/ModelRouteManager.kt b/llmx-core/llmx-core-service/src/main/kotlin/org/jcnc/llmx/core/service/manager/ModelRouteManager.kt index 88324e1..3c59b71 100644 --- a/llmx-core/llmx-core-service/src/main/kotlin/org/jcnc/llmx/core/service/manager/ModelRouteManager.kt +++ b/llmx-core/llmx-core-service/src/main/kotlin/org/jcnc/llmx/core/service/manager/ModelRouteManager.kt @@ -2,7 +2,7 @@ package org.jcnc.llmx.core.service.manager import com.gewuyou.forgeboot.core.extension.log -import org.jcnc.llmx.core.service.config.ModelProperties +import org.jcnc.llmx.core.service.repositories.ModelRouteMappingRepository import org.springframework.stereotype.Component /** @@ -16,7 +16,7 @@ import org.springframework.stereotype.Component */ @Component class ModelRouteManager( - private val modelProperties: ModelProperties + private val modelRouteMappingRepository: ModelRouteMappingRepository, ) { /** * 根据模型名查找对应服务 @@ -29,10 +29,11 @@ class ModelRouteManager( * @throws IllegalArgumentException 如果模型名不匹配任何已知前缀,抛出此异常 */ fun resolveServiceName(model: String): String { - val modelServiceMap = modelProperties.modelServiceMap + val modelServiceMap = modelRouteMappingRepository.findAllByEnabled(true) + .associate { it.model to it.serviceName } log.info("modelServiceMap: $modelServiceMap") - for ((prefix, serviceName) in modelServiceMap) { - if (model.startsWith(prefix)) { + for ((model, serviceName) in modelServiceMap) { + if (model.startsWith(model)) { return serviceName } } diff --git a/llmx-core/llmx-core-service/src/main/kotlin/org/jcnc/llmx/core/service/repositories/ModelRouteMappingRepository.kt b/llmx-core/llmx-core-service/src/main/kotlin/org/jcnc/llmx/core/service/repositories/ModelRouteMappingRepository.kt new file mode 100644 index 0000000..cf4b7ec --- /dev/null +++ b/llmx-core/llmx-core-service/src/main/kotlin/org/jcnc/llmx/core/service/repositories/ModelRouteMappingRepository.kt @@ -0,0 +1,10 @@ +package org.jcnc.llmx.core.service.repositories + +import org.jcnc.llmx.core.service.domain.model.ModelRouteMapping +import org.springframework.data.jpa.repository.JpaRepository +import org.springframework.data.jpa.repository.JpaSpecificationExecutor + +interface ModelRouteMappingRepository : JpaRepository, + JpaSpecificationExecutor { + fun findAllByEnabled(isEnabled: Boolean): List +} \ No newline at end of file diff --git a/llmx-core/llmx-core-service/src/main/resources/bootstrap-dev.yml b/llmx-core/llmx-core-service/src/main/resources/bootstrap-dev.yml index 0e4cf07..62646f9 100644 --- a/llmx-core/llmx-core-service/src/main/resources/bootstrap-dev.yml +++ b/llmx-core/llmx-core-service/src/main/resources/bootstrap-dev.yml @@ -1,7 +1,7 @@ spring: cloud: nacos: - ip: 192.168.1.8 + ip: 127.0.0.1 username: nacos password: L4s6f9y3, server-addr: 49.235.96.75:8848 diff --git a/llmx-impl/llmx-impl-bailian/src/main/resources/bootstrap-dev.yml b/llmx-impl/llmx-impl-bailian/src/main/resources/bootstrap-dev.yml index d23f760..2b145bd 100644 --- a/llmx-impl/llmx-impl-bailian/src/main/resources/bootstrap-dev.yml +++ b/llmx-impl/llmx-impl-bailian/src/main/resources/bootstrap-dev.yml @@ -1,7 +1,7 @@ spring: cloud: nacos: - ip: 192.168.1.8 + ip: 127.0.0.1 username: nacos password: L4s6f9y3, server-addr: 49.235.96.75:8848