feat(llmhub): 添加 Nacos 配置并支持 Webflux- 新增 Nacos 配置文件 application.yml

- 更新 build.gradle.kts 文件,替换 USE_SPRING_BOOT 为 USE_SPRING_BOOT_WEB
- 添加 USE_SPRING_BOOT_WEBFLUX 标志并支持 Webflux
- 修改 ChatController 和 LLMProvider,添加 MediaType.APPLICATION_NDJSON_VALUE
This commit is contained in:
gewuyou 2025-05-02 14:09:47 +08:00
parent c945e5920f
commit 77006f51c4
8 changed files with 43 additions and 9 deletions

View File

@ -19,7 +19,8 @@ configurations.implementation {
allprojects { allprojects {
// 设置全局属性 // 设置全局属性
ext { ext {
set(ProjectFlags.USE_SPRING_BOOT, false) set(ProjectFlags.USE_SPRING_BOOT_WEB, false)
set(ProjectFlags.USE_SPRING_BOOT_WEBFLUX, false)
set(ProjectFlags.USE_LLM_CORE_SPI, false) set(ProjectFlags.USE_LLM_CORE_SPI, false)
set(ProjectFlags.USE_SPRING_CLOUD_BOM, false) set(ProjectFlags.USE_SPRING_CLOUD_BOM, false)
set(ProjectFlags.IS_ROOT_MODULE, false) set(ProjectFlags.IS_ROOT_MODULE, false)
@ -67,7 +68,7 @@ allprojects {
subprojects { subprojects {
afterEvaluate { afterEvaluate {
// springbootWeb // springbootWeb
if (project.getPropertyByBoolean(ProjectFlags.USE_SPRING_BOOT)) { if (project.getPropertyByBoolean(ProjectFlags.USE_SPRING_BOOT_WEB)) {
apply { apply {
plugin(libs.plugins.spring.dependency.management.get().pluginId) plugin(libs.plugins.spring.dependency.management.get().pluginId)
plugin(libs.plugins.spring.boot.get().pluginId) plugin(libs.plugins.spring.boot.get().pluginId)
@ -80,6 +81,16 @@ subprojects {
testRuntimeOnly(libs.junitPlatform.launcher) testRuntimeOnly(libs.junitPlatform.launcher)
} }
} }
if(project.getPropertyByBoolean(ProjectFlags.USE_SPRING_BOOT_WEBFLUX)){
apply {
plugin(libs.plugins.spring.dependency.management.get().pluginId)
plugin(libs.plugins.spring.boot.get().pluginId)
plugin(libs.plugins.kotlin.plugin.spring.get().pluginId)
}
dependencies {
implementation(libs.springBootStarter.webflux)
}
}
// llm-core-spi // llm-core-spi
if (project.getPropertyByBoolean(ProjectFlags.USE_LLM_CORE_SPI)) { if (project.getPropertyByBoolean(ProjectFlags.USE_LLM_CORE_SPI)) {
dependencies { dependencies {
@ -99,7 +110,7 @@ subprojects {
plugin(libs.plugins.kotlin.jvm.get().pluginId) plugin(libs.plugins.kotlin.jvm.get().pluginId)
plugin(libs.plugins.jibLocalPlugin.get().pluginId) plugin(libs.plugins.jibLocalPlugin.get().pluginId)
} }
println(project.name + ":" + project.getPropertyByBoolean(ProjectFlags.USE_SPRING_BOOT)) println(project.name + ":" + project.getPropertyByBoolean(ProjectFlags.USE_SPRING_BOOT_WEB))
kotlin { kotlin {
compilerOptions { compilerOptions {

View File

@ -1,5 +1,6 @@
object ProjectFlags { object ProjectFlags {
const val USE_SPRING_BOOT = "useSpringBoot" const val USE_SPRING_BOOT_WEB = "useSpringBootWeb"
const val USE_SPRING_BOOT_WEBFLUX = "useSpringBootWebflux"
const val USE_SPRING_CLOUD_BOM = "useSpringCloudBom" const val USE_SPRING_CLOUD_BOM = "useSpringCloudBom"
const val USE_LLM_CORE_SPI = "useLLMCoreSPI" const val USE_LLM_CORE_SPI = "useLLMCoreSPI"
const val IS_ROOT_MODULE = "isRootModule" const val IS_ROOT_MODULE = "isRootModule"

View File

@ -1,6 +1,6 @@
extra { extra {
// 开启springboot // 开启springboot
setProperty(ProjectFlags.USE_SPRING_BOOT, true) setProperty(ProjectFlags.USE_SPRING_BOOT_WEB, true)
setProperty(ProjectFlags.USE_SPRING_CLOUD_BOM,true) setProperty(ProjectFlags.USE_SPRING_CLOUD_BOM,true)
} }
dependencies { dependencies {

View File

@ -5,6 +5,7 @@ import kotlinx.coroutines.flow.Flow
import org.jcnc.llmhub.core.service.service.impl.LLMServiceImpl import org.jcnc.llmhub.core.service.service.impl.LLMServiceImpl
import org.jcnc.llmhub.core.spi.entities.request.ChatRequest import org.jcnc.llmhub.core.spi.entities.request.ChatRequest
import org.jcnc.llmhub.core.spi.entities.response.ChatResponsePart import org.jcnc.llmhub.core.spi.entities.response.ChatResponsePart
import org.springframework.http.MediaType
import org.springframework.web.bind.annotation.PostMapping import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestBody import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RequestMapping
@ -32,7 +33,7 @@ class ChatController(
* @param request 聊天请求对象包含了发起聊天所需的各种参数和用户信息 * @param request 聊天请求对象包含了发起聊天所需的各种参数和用户信息
* @return 返回一个Flow流流中依次提供了聊天响应的部分数据允许异步处理和逐步消费响应内容 * @return 返回一个Flow流流中依次提供了聊天响应的部分数据允许异步处理和逐步消费响应内容
*/ */
@PostMapping("/stream") @PostMapping("/stream", produces = [MediaType.APPLICATION_NDJSON_VALUE])
fun chat(@RequestBody request: ChatRequest): Flow<ChatResponsePart> { fun chat(@RequestBody request: ChatRequest): Flow<ChatResponsePart> {
return llmServiceImpl.chat(request) return llmServiceImpl.chat(request)
} }

View File

@ -5,6 +5,7 @@ import org.jcnc.llmhub.core.spi.entities.request.ChatRequest
import org.jcnc.llmhub.core.spi.entities.request.EmbeddingRequest import org.jcnc.llmhub.core.spi.entities.request.EmbeddingRequest
import org.jcnc.llmhub.core.spi.entities.response.ChatResponsePart import org.jcnc.llmhub.core.spi.entities.response.ChatResponsePart
import org.jcnc.llmhub.core.spi.entities.response.EmbeddingResponse import org.jcnc.llmhub.core.spi.entities.response.EmbeddingResponse
import org.springframework.http.MediaType
import org.springframework.web.bind.annotation.PostMapping import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RequestMapping
@ -28,7 +29,7 @@ interface LLMProvider {
* @param request 聊天请求对象包含建立聊天所需的信息如用户标识会话标识等 * @param request 聊天请求对象包含建立聊天所需的信息如用户标识会话标识等
* @return 返回一个Flow流通过该流可以接收到聊天响应的部分数据如消息状态更新等 * @return 返回一个Flow流通过该流可以接收到聊天响应的部分数据如消息状态更新等
*/ */
@PostMapping("/chat") @PostMapping("/chat", produces = [MediaType.APPLICATION_NDJSON_VALUE])
fun chat(request: ChatRequest): Flow<ChatResponsePart> fun chat(request: ChatRequest): Flow<ChatResponsePart>
/** /**

View File

@ -1,6 +1,6 @@
// 开启springboot // 开启springboot
extra[ProjectFlags.USE_SPRING_BOOT] = true extra[ProjectFlags.USE_SPRING_BOOT_WEB] = true
setProperty(ProjectFlags.USE_SPRING_CLOUD_BOM,true) setProperty(ProjectFlags.USE_SPRING_CLOUD_BOM,true)
dependencies { dependencies {
// Nacos 服务发现和配置 // Nacos 服务发现和配置

View File

@ -1,5 +1,5 @@
// 开启springboot // 开启springboot
extra[ProjectFlags.USE_SPRING_BOOT] = true extra[ProjectFlags.USE_SPRING_BOOT_WEB] = true
setProperty(ProjectFlags.USE_SPRING_CLOUD_BOM,true) setProperty(ProjectFlags.USE_SPRING_CLOUD_BOM,true)
dependencies { dependencies {
// Nacos 服务发现和配置 // Nacos 服务发现和配置

View File

@ -0,0 +1,20 @@
spring:
application:
name: llmhub-impl-openAi
cloud:
nacos:
access-key: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTc0NTc1NjkwOH0.86TmeN27gXbpw55jMmOVNz42B9u8dXtGwCvyGlWbYVo
username: nacos
password: L4s6f9y3
server-addr: 49.235.96.75:8848
discovery:
server-addr: ${spring.cloud.nacos.server-addr}
access-key: ${spring.cloud.nacos.access-key}
username: ${spring.cloud.nacos.username}
password: ${spring.cloud.nacos.password}
# profiles:
# active: dev
server:
port: 8083