> choicesConsumer) {
+ choicesConsumer.accept(this.tool_calls);
+ return this;
+ }
+
public Message build() {
return new Message(this);
}
diff --git a/src/main/java/xyz/wbsite/achat/core/chat/Role.java b/src/main/java/xyz/wbsite/achat/chat/Role.java
similarity index 85%
rename from src/main/java/xyz/wbsite/achat/core/chat/Role.java
rename to src/main/java/xyz/wbsite/achat/chat/Role.java
index af6ae0e..c6e643a 100644
--- a/src/main/java/xyz/wbsite/achat/core/chat/Role.java
+++ b/src/main/java/xyz/wbsite/achat/chat/Role.java
@@ -1,4 +1,4 @@
-package xyz.wbsite.achat.core.chat;
+package xyz.wbsite.achat.chat;
import com.fasterxml.jackson.annotation.JsonValue;
@@ -23,13 +23,11 @@ public enum Role {
this.value = value;
}
- // 序列化时返回小写字符串
@JsonValue
public String getValue() {
return value;
}
- // 反序列化时根据字符串匹配枚举
public static Role fromValue(String value) {
for (Role role : Role.values()) {
if (role.value.equalsIgnoreCase(value)) {
@@ -38,4 +36,9 @@ public enum Role {
}
throw new IllegalArgumentException("Invalid Role value: " + value);
}
+
+ @Override
+ public String toString() {
+ return this.value;
+ }
}
diff --git a/src/main/java/xyz/wbsite/achat/core/chat/Status.java b/src/main/java/xyz/wbsite/achat/chat/Status.java
similarity index 86%
rename from src/main/java/xyz/wbsite/achat/core/chat/Status.java
rename to src/main/java/xyz/wbsite/achat/chat/Status.java
index 2fbe72e..e08e75a 100644
--- a/src/main/java/xyz/wbsite/achat/core/chat/Status.java
+++ b/src/main/java/xyz/wbsite/achat/chat/Status.java
@@ -1,4 +1,4 @@
-package xyz.wbsite.achat.core.chat;
+package xyz.wbsite.achat.chat;
/**
* 消息状态枚举
diff --git a/src/main/java/xyz/wbsite/achat/core/chat/StreamEmitter.java b/src/main/java/xyz/wbsite/achat/chat/StreamEmitter.java
similarity index 99%
rename from src/main/java/xyz/wbsite/achat/core/chat/StreamEmitter.java
rename to src/main/java/xyz/wbsite/achat/chat/StreamEmitter.java
index 472c6ce..f8f8a33 100644
--- a/src/main/java/xyz/wbsite/achat/core/chat/StreamEmitter.java
+++ b/src/main/java/xyz/wbsite/achat/chat/StreamEmitter.java
@@ -1,4 +1,4 @@
-package xyz.wbsite.achat.core.chat;
+package xyz.wbsite.achat.chat;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
diff --git a/src/main/java/xyz/wbsite/achat/core/chat/Usage.java b/src/main/java/xyz/wbsite/achat/chat/Usage.java
similarity index 98%
rename from src/main/java/xyz/wbsite/achat/core/chat/Usage.java
rename to src/main/java/xyz/wbsite/achat/chat/Usage.java
index 447d54c..7786355 100644
--- a/src/main/java/xyz/wbsite/achat/core/chat/Usage.java
+++ b/src/main/java/xyz/wbsite/achat/chat/Usage.java
@@ -1,4 +1,4 @@
-package xyz.wbsite.achat.core.chat;
+package xyz.wbsite.achat.chat;
/**
* 令牌使用统计
diff --git a/src/main/java/xyz/wbsite/achat/chat/tool/Arg.java b/src/main/java/xyz/wbsite/achat/chat/tool/Arg.java
new file mode 100644
index 0000000..a464dc6
--- /dev/null
+++ b/src/main/java/xyz/wbsite/achat/chat/tool/Arg.java
@@ -0,0 +1,37 @@
+package xyz.wbsite.achat.chat.tool;
+
+/**
+ * 参数
+ *
+ * @author wangbing
+ * @version 0.0.1
+ * @since 1.8
+ */
+public class Arg {
+
+ /**
+ * 参数类型
+ */
+ private String type;
+
+ /**
+ * 参数描述
+ */
+ private String description;
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+}
diff --git a/src/main/java/xyz/wbsite/achat/chat/tool/Function.java b/src/main/java/xyz/wbsite/achat/chat/tool/Function.java
new file mode 100644
index 0000000..f3fbd0e
--- /dev/null
+++ b/src/main/java/xyz/wbsite/achat/chat/tool/Function.java
@@ -0,0 +1,77 @@
+package xyz.wbsite.achat.chat.tool;
+
+
+/**
+ * 工具函数定义 - 符合OpenAI官方API规范
+ *
+ * @author wangbing
+ * @version 0.0.1
+ * @since 1.8
+ */
+public class Function {
+ private String name;
+ private String description;
+ private Parameters parameters;
+
+ public Function() {
+ }
+
+ private Function(Builder builder) {
+ this.name = builder.name;
+ this.description = builder.description;
+ this.parameters = builder.parameters;
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public Parameters getParameters() {
+ return parameters;
+ }
+
+ public void setParameters(Parameters parameters) {
+ this.parameters = parameters;
+ }
+
+ public static class Builder {
+ private String name;
+ private String description;
+ private Parameters parameters;
+
+ public Builder name(String name) {
+ this.name = name;
+ return this;
+ }
+
+ public Builder description(String description) {
+ this.description = description;
+ return this;
+ }
+
+ public Builder parameters(Parameters parameters) {
+ this.parameters = parameters;
+ return this;
+ }
+
+ public Function build() {
+ return new Function(this);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/xyz/wbsite/achat/chat/tool/FunctionCall.java b/src/main/java/xyz/wbsite/achat/chat/tool/FunctionCall.java
new file mode 100644
index 0000000..c15d9f8
--- /dev/null
+++ b/src/main/java/xyz/wbsite/achat/chat/tool/FunctionCall.java
@@ -0,0 +1,70 @@
+package xyz.wbsite.achat.chat.tool;
+
+/**
+ * 函数调用
+ *
+ * @author wangbing
+ * @version 0.0.1
+ * @since 1.8
+ */
+public class FunctionCall {
+
+ /**
+ * 函数名称
+ */
+ private String name;
+
+ /**
+ * 函数参数
+ *
+ * 例如:{\"arg0\":\"泰州\"}
+ */
+ private String arguments;
+
+ public FunctionCall() {
+ }
+
+ private FunctionCall(Builder builder) {
+ this.name = builder.name;
+ this.arguments = builder.arguments;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getArguments() {
+ return arguments;
+ }
+
+ public void setArguments(String arguments) {
+ this.arguments = arguments;
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ public static class Builder {
+ private String name;
+ private String arguments;
+
+ public Builder name(String name) {
+ this.name = name;
+ return this;
+ }
+
+ public Builder arguments(String arguments) {
+ this.arguments = arguments;
+ return this;
+ }
+
+ public FunctionCall build() {
+ return new FunctionCall(this);
+ }
+ }
+}
diff --git a/src/main/java/xyz/wbsite/achat/chat/tool/Parameters.java b/src/main/java/xyz/wbsite/achat/chat/tool/Parameters.java
new file mode 100644
index 0000000..ab81de0
--- /dev/null
+++ b/src/main/java/xyz/wbsite/achat/chat/tool/Parameters.java
@@ -0,0 +1,51 @@
+package xyz.wbsite.achat.chat.tool;
+
+import java.util.List;
+
+/**
+ * 参数
+ *
+ * @author wangbing
+ * @version 0.0.1
+ * @since 1.8
+ */
+
+/**
+ * 参数
+ *
+ * @author wangbing
+ * @version 0.0.1
+ * @since 1.8
+ */
+public class Parameters {
+
+ private String type;
+
+ private List required;
+
+ private Properties properties;
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public List getRequired() {
+ return required;
+ }
+
+ public void setRequired(List required) {
+ this.required = required;
+ }
+
+ public Properties getProperties() {
+ return properties;
+ }
+
+ public void setProperties(Properties properties) {
+ this.properties = properties;
+ }
+}
diff --git a/src/main/java/xyz/wbsite/achat/chat/tool/Properties.java b/src/main/java/xyz/wbsite/achat/chat/tool/Properties.java
new file mode 100644
index 0000000..47e9f01
--- /dev/null
+++ b/src/main/java/xyz/wbsite/achat/chat/tool/Properties.java
@@ -0,0 +1,15 @@
+package xyz.wbsite.achat.chat.tool;
+
+
+import java.util.TreeMap;
+
+/**
+ * 参数
+ *
+ * @author wangbing
+ * @version 0.0.1
+ * @since 1.8
+ */
+public class Properties extends TreeMap {
+
+}
diff --git a/src/main/java/xyz/wbsite/achat/chat/tool/Tool.java b/src/main/java/xyz/wbsite/achat/chat/tool/Tool.java
new file mode 100644
index 0000000..9799797
--- /dev/null
+++ b/src/main/java/xyz/wbsite/achat/chat/tool/Tool.java
@@ -0,0 +1,60 @@
+package xyz.wbsite.achat.chat.tool;
+
+/**
+ * 工具定义 - 符合OpenAI官方API规范
+ *
+ * @author wangbing
+ * @version 0.0.1
+ * @since 1.8
+ */
+public class Tool {
+ private String type;
+ private Function function;
+
+ public Tool() {
+ }
+
+ private Tool(Builder builder) {
+ this.type = builder.type;
+ this.function = builder.function;
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public Function getFunction() {
+ return function;
+ }
+
+ public void setFunction(Function function) {
+ this.function = function;
+ }
+
+ public static class Builder {
+ private String type;
+ private Function function;
+
+ public Builder type(String type) {
+ this.type = type;
+ return this;
+ }
+
+ public Builder function(Function function) {
+ this.function = function;
+ return this;
+ }
+
+ public Tool build() {
+ return new Tool(this);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/xyz/wbsite/achat/chat/tool/ToolCall.java b/src/main/java/xyz/wbsite/achat/chat/tool/ToolCall.java
new file mode 100644
index 0000000..6931c46
--- /dev/null
+++ b/src/main/java/xyz/wbsite/achat/chat/tool/ToolCall.java
@@ -0,0 +1,83 @@
+package xyz.wbsite.achat.chat.tool;
+
+import cn.hutool.core.util.RandomUtil;
+
+/**
+ * 工具调用请求 - 符合OpenAI官方API规范
+ *
+ * @author wangbing
+ * @version 0.0.1
+ * @since 1.8
+ */
+public class ToolCall {
+ private final String id = "call_" + RandomUtil.randomNumbers(8);
+ private int index;
+ private String type;
+ private FunctionCall function;
+
+ public int getIndex() {
+ return index;
+ }
+
+ public void setIndex(int index) {
+ this.index = index;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public FunctionCall getFunction() {
+ return function;
+ }
+
+ public void setFunction(FunctionCall function) {
+ this.function = function;
+ }
+
+ private ToolCall(String id, int index, String type, FunctionCall function) {
+ this.index = index;
+ this.type = type;
+ this.function = function;
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ public static class Builder {
+ private String id;
+ private int index;
+ private String type;
+ private FunctionCall function;
+
+ // 链式设置id(可选,不设置则使用默认值)
+ public Builder id(String id) {
+ this.id = id;
+ return this;
+ }
+
+ public Builder index(int index) {
+ this.index = index;
+ return this;
+ }
+
+ public Builder type(String type) {
+ this.type = type;
+ return this;
+ }
+
+ public Builder function(FunctionCall function) {
+ this.function = function;
+ return this;
+ }
+
+ public ToolCall build() {
+ return new ToolCall(id, index, type, function);
+ }
+ }
+}
diff --git a/src/main/java/xyz/wbsite/achat/config/WebConfig.java b/src/main/java/xyz/wbsite/achat/config/WebConfig.java
deleted file mode 100644
index 4a60dfb..0000000
--- a/src/main/java/xyz/wbsite/achat/config/WebConfig.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package xyz.wbsite.achat.config;
-
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.servlet.config.annotation.CorsRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
-/**
- * Web相关配置(跨域配置,序列化配置).
- *
- * @author wangbing
- * @version 0.0.1
- * @since 1.8
- */
-@Configuration
-public class WebConfig implements WebMvcConfigurer {
-
- /**
- * 跨域配置
- *
- * @param registry
- */
- @Override
- public void addCorsMappings(CorsRegistry registry) {
- // 注意,如果授权认认证未通过会直接返回,此跨域配置则不会生效,前端仍然会提示跨域
- registry.addMapping("/**")
- //允许的域,不要写*,否则cookie就无法使用了
- .allowedOriginPatterns("http://localhost:5173")
- .allowedHeaders("*")
- //是否发送Cookie
- .allowCredentials(true)
- .allowedMethods("GET", "POST", "DELETE", "PUT")
- .exposedHeaders("*")
- .maxAge(3600);
- }
-}
diff --git a/src/main/java/xyz/wbsite/achat/core/embed/EmbeddingsRequest.java b/src/main/java/xyz/wbsite/achat/embed/EmbeddingsRequest.java
similarity index 97%
rename from src/main/java/xyz/wbsite/achat/core/embed/EmbeddingsRequest.java
rename to src/main/java/xyz/wbsite/achat/embed/EmbeddingsRequest.java
index 630eddb..099cc86 100644
--- a/src/main/java/xyz/wbsite/achat/core/embed/EmbeddingsRequest.java
+++ b/src/main/java/xyz/wbsite/achat/embed/EmbeddingsRequest.java
@@ -1,4 +1,4 @@
-package xyz.wbsite.achat.core.embed;
+package xyz.wbsite.achat.embed;
import java.util.ArrayList;
import java.util.List;
diff --git a/src/main/java/xyz/wbsite/achat/core/embed/EmbeddingsResponse.java b/src/main/java/xyz/wbsite/achat/embed/EmbeddingsResponse.java
similarity index 98%
rename from src/main/java/xyz/wbsite/achat/core/embed/EmbeddingsResponse.java
rename to src/main/java/xyz/wbsite/achat/embed/EmbeddingsResponse.java
index 38ba9c8..c931f6f 100644
--- a/src/main/java/xyz/wbsite/achat/core/embed/EmbeddingsResponse.java
+++ b/src/main/java/xyz/wbsite/achat/embed/EmbeddingsResponse.java
@@ -1,6 +1,6 @@
-package xyz.wbsite.achat.core.embed;
+package xyz.wbsite.achat.embed;
-import xyz.wbsite.achat.core.chat.Usage;
+import xyz.wbsite.achat.chat.Usage;
import java.util.ArrayList;
import java.util.List;
diff --git a/src/main/java/xyz/wbsite/achat/core/model/Model.java b/src/main/java/xyz/wbsite/achat/model/Model.java
similarity index 98%
rename from src/main/java/xyz/wbsite/achat/core/model/Model.java
rename to src/main/java/xyz/wbsite/achat/model/Model.java
index d77d74d..7792173 100644
--- a/src/main/java/xyz/wbsite/achat/core/model/Model.java
+++ b/src/main/java/xyz/wbsite/achat/model/Model.java
@@ -1,4 +1,4 @@
-package xyz.wbsite.achat.core.model;
+package xyz.wbsite.achat.model;
import java.util.List;
diff --git a/src/main/java/xyz/wbsite/achat/core/model/ModelListResponse.java b/src/main/java/xyz/wbsite/achat/model/ModelListResponse.java
similarity index 92%
rename from src/main/java/xyz/wbsite/achat/core/model/ModelListResponse.java
rename to src/main/java/xyz/wbsite/achat/model/ModelListResponse.java
index 9024d8f..ae7a3ff 100644
--- a/src/main/java/xyz/wbsite/achat/core/model/ModelListResponse.java
+++ b/src/main/java/xyz/wbsite/achat/model/ModelListResponse.java
@@ -1,4 +1,4 @@
-package xyz.wbsite.achat.core.model;
+package xyz.wbsite.achat.model;
import java.util.List;
diff --git a/src/main/java/xyz/wbsite/achat/core/session/Message.java b/src/main/java/xyz/wbsite/achat/session/Message.java
similarity index 81%
rename from src/main/java/xyz/wbsite/achat/core/session/Message.java
rename to src/main/java/xyz/wbsite/achat/session/Message.java
index b1f38fb..abdffec 100644
--- a/src/main/java/xyz/wbsite/achat/core/session/Message.java
+++ b/src/main/java/xyz/wbsite/achat/session/Message.java
@@ -1,9 +1,9 @@
-package xyz.wbsite.achat.core.session;
+package xyz.wbsite.achat.session;
/**
*
*/
-public class Message extends xyz.wbsite.achat.core.chat.Message {
+public class Message extends xyz.wbsite.achat.chat.Message {
private String id;
private String uid;
private String sid;
diff --git a/src/main/java/xyz/wbsite/achat/core/session/Result.java b/src/main/java/xyz/wbsite/achat/session/Result.java
similarity index 98%
rename from src/main/java/xyz/wbsite/achat/core/session/Result.java
rename to src/main/java/xyz/wbsite/achat/session/Result.java
index 2c1cb04..d562b63 100644
--- a/src/main/java/xyz/wbsite/achat/core/session/Result.java
+++ b/src/main/java/xyz/wbsite/achat/session/Result.java
@@ -1,4 +1,4 @@
-package xyz.wbsite.achat.core.session;
+package xyz.wbsite.achat.session;
/**
* 接口响应结果基类
diff --git a/src/main/java/xyz/wbsite/achat/core/session/Session.java b/src/main/java/xyz/wbsite/achat/session/Session.java
similarity index 98%
rename from src/main/java/xyz/wbsite/achat/core/session/Session.java
rename to src/main/java/xyz/wbsite/achat/session/Session.java
index cde66ff..bb4dcc9 100644
--- a/src/main/java/xyz/wbsite/achat/core/session/Session.java
+++ b/src/main/java/xyz/wbsite/achat/session/Session.java
@@ -1,4 +1,4 @@
-package xyz.wbsite.achat.core.session;
+package xyz.wbsite.achat.session;
import java.util.List;
diff --git a/src/main/java/xyz/wbsite/achat/core/session/SessionService.java b/src/main/java/xyz/wbsite/achat/session/SessionService.java
similarity index 92%
rename from src/main/java/xyz/wbsite/achat/core/session/SessionService.java
rename to src/main/java/xyz/wbsite/achat/session/SessionService.java
index 93d7fd5..ff10b6d 100644
--- a/src/main/java/xyz/wbsite/achat/core/session/SessionService.java
+++ b/src/main/java/xyz/wbsite/achat/session/SessionService.java
@@ -1,6 +1,4 @@
-package xyz.wbsite.achat.core.session;
-
-import xyz.wbsite.achat.core.chat.Message;
+package xyz.wbsite.achat.session;
import java.util.List;
diff --git a/src/main/java/xyz/wbsite/achat/core/session/SessionServiceMemoryImpl.java b/src/main/java/xyz/wbsite/achat/session/SessionServiceMemoryImpl.java
similarity index 99%
rename from src/main/java/xyz/wbsite/achat/core/session/SessionServiceMemoryImpl.java
rename to src/main/java/xyz/wbsite/achat/session/SessionServiceMemoryImpl.java
index 7057d1d..b436228 100644
--- a/src/main/java/xyz/wbsite/achat/core/session/SessionServiceMemoryImpl.java
+++ b/src/main/java/xyz/wbsite/achat/session/SessionServiceMemoryImpl.java
@@ -1,4 +1,4 @@
-package xyz.wbsite.achat.core.session;
+package xyz.wbsite.achat.session;
import java.util.ArrayList;
import java.util.List;
diff --git a/src/main/java/xyz/wbsite/achat/config/ChatConfig.java b/src/main/java/xyz/wbsite/config/ChatConfig.java
similarity index 68%
rename from src/main/java/xyz/wbsite/achat/config/ChatConfig.java
rename to src/main/java/xyz/wbsite/config/ChatConfig.java
index 854bb68..e582bc7 100644
--- a/src/main/java/xyz/wbsite/achat/config/ChatConfig.java
+++ b/src/main/java/xyz/wbsite/config/ChatConfig.java
@@ -1,12 +1,12 @@
-package xyz.wbsite.achat.config;
+package xyz.wbsite.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-import xyz.wbsite.achat.core.chat.ChatService;
-import xyz.wbsite.achat.core.chat.ChatServiceSampleImpl;
-import xyz.wbsite.achat.core.session.SessionService;
-import xyz.wbsite.achat.core.session.SessionServiceMemoryImpl;
+import xyz.wbsite.achat.chat.ChatService;
+import xyz.wbsite.achat.chat.ChatServiceSampleImpl;
+import xyz.wbsite.achat.session.SessionService;
+import xyz.wbsite.achat.session.SessionServiceMemoryImpl;
/**
* 对话配置
diff --git a/src/main/java/xyz/wbsite/achat/config/PoolConfig.java b/src/main/java/xyz/wbsite/config/PoolConfig.java
similarity index 98%
rename from src/main/java/xyz/wbsite/achat/config/PoolConfig.java
rename to src/main/java/xyz/wbsite/config/PoolConfig.java
index ba79bb5..8704b16 100644
--- a/src/main/java/xyz/wbsite/achat/config/PoolConfig.java
+++ b/src/main/java/xyz/wbsite/config/PoolConfig.java
@@ -1,4 +1,4 @@
-package xyz.wbsite.achat.config;
+package xyz.wbsite.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
diff --git a/src/main/java/xyz/wbsite/config/WebConfig.java b/src/main/java/xyz/wbsite/config/WebConfig.java
new file mode 100644
index 0000000..93aa6c7
--- /dev/null
+++ b/src/main/java/xyz/wbsite/config/WebConfig.java
@@ -0,0 +1,82 @@
+package xyz.wbsite.config;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.MediaType;
+import org.springframework.web.servlet.HandlerInterceptor;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+/**
+ * Web相关配置(跨域配置,序列化配置).
+ *
+ * @author wangbing
+ * @version 0.0.1
+ * @since 1.8
+ */
+@Configuration
+public class WebConfig implements WebMvcConfigurer {
+
+ @Value("${cfg.api.key}")
+ private String key;
+
+ /**
+ * 跨域配置
+ *
+ * @param registry
+ */
+ @Override
+ public void addCorsMappings(CorsRegistry registry) {
+ // 注意,如果授权认认证未通过会直接返回,此跨域配置则不会生效,前端仍然会提示跨域
+ registry.addMapping("/**")
+ //允许的域,不要写*,否则cookie就无法使用了
+ .allowedOriginPatterns("http://localhost:5173")
+ .allowedHeaders("*")
+ //是否发送Cookie
+ .allowCredentials(true)
+ .allowedMethods("GET", "POST", "DELETE", "PUT")
+ .exposedHeaders("*")
+ .maxAge(3600);
+ }
+
+
+
+ /**
+ * 增加全局拦截器
+ *
+ * @param registry
+ */
+ @Override
+ public void addInterceptors(InterceptorRegistry registry) {
+ // 自定义拦截器
+ InterceptorRegistration interceptorRegistration = registry.addInterceptor(new HandlerInterceptor() {
+ //处理器运行之前执行
+ @Override
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+ String authorization = request.getHeader("authorization");
+ if (authorization == null || !authorization.equals("Bearer " + key)){
+ response.setHeader("Content-Type", MediaType.APPLICATION_JSON.toString());
+ try {
+ PrintWriter writer = response.getWriter();
+ writer.print("{\"error\":\"Incorrect API key\",\"code\":401}");
+ writer.flush();
+ writer.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return false;
+ }
+ return true;
+ }
+ });
+
+ interceptorRegistration.addPathPatterns("/**");
+ }
+}
diff --git a/src/main/java/xyz/wbsite/achat/HelloController.java b/src/main/java/xyz/wbsite/openai/HelloController.java
similarity index 93%
rename from src/main/java/xyz/wbsite/achat/HelloController.java
rename to src/main/java/xyz/wbsite/openai/HelloController.java
index c46ac18..c31310e 100644
--- a/src/main/java/xyz/wbsite/achat/HelloController.java
+++ b/src/main/java/xyz/wbsite/openai/HelloController.java
@@ -1,4 +1,4 @@
-package xyz.wbsite.achat;
+package xyz.wbsite.openai;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
diff --git a/src/main/java/xyz/wbsite/achat/OpenAiController.java b/src/main/java/xyz/wbsite/openai/OpenAiController.java
similarity index 75%
rename from src/main/java/xyz/wbsite/achat/OpenAiController.java
rename to src/main/java/xyz/wbsite/openai/OpenAiController.java
index 0bc004a..9308b9a 100644
--- a/src/main/java/xyz/wbsite/achat/OpenAiController.java
+++ b/src/main/java/xyz/wbsite/openai/OpenAiController.java
@@ -1,18 +1,19 @@
-package xyz.wbsite.achat;
+package xyz.wbsite.openai;
+import cn.hutool.json.JSONUtil;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
-import xyz.wbsite.achat.core.chat.ChatCompletionRequest;
-import xyz.wbsite.achat.core.chat.CompletionRequest;
-import xyz.wbsite.achat.core.chat.CompletionResponse;
-import xyz.wbsite.achat.core.embed.EmbeddingsRequest;
-import xyz.wbsite.achat.core.embed.EmbeddingsResponse;
-import xyz.wbsite.achat.core.model.ModelListResponse;
-import xyz.wbsite.achat.core.chat.ChatService;
+import xyz.wbsite.achat.chat.ChatCompletionRequest;
+import xyz.wbsite.achat.chat.ChatService;
+import xyz.wbsite.achat.chat.CompletionRequest;
+import xyz.wbsite.achat.chat.CompletionResponse;
+import xyz.wbsite.achat.embed.EmbeddingsRequest;
+import xyz.wbsite.achat.embed.EmbeddingsResponse;
+import xyz.wbsite.achat.model.ModelListResponse;
import javax.annotation.Resource;
@@ -72,7 +73,12 @@ public class OpenAiController {
* POST /v1/chat/completions
*/
@PostMapping("/chat/completions")
- public Object createChatCompletion(@RequestBody ChatCompletionRequest request) {
+ public Object createChatCompletion(@RequestBody String ss) {
+ System.out.println("原始请求");
+ System.out.println(ss);
+ ChatCompletionRequest request = JSONUtil.toBean(ss, ChatCompletionRequest.class);
+ System.out.println("转换后请求");
+ System.out.println(JSONUtil.toJsonStr(request));
if (Boolean.TRUE.equals(request.getStream())) {
// 流式响应处理
return chatService.streamChat(request);
diff --git a/src/main/java/xyz/wbsite/achat/SessionController.java b/src/main/java/xyz/wbsite/openai/SessionController.java
similarity index 93%
rename from src/main/java/xyz/wbsite/achat/SessionController.java
rename to src/main/java/xyz/wbsite/openai/SessionController.java
index a216028..0c4f1f0 100644
--- a/src/main/java/xyz/wbsite/achat/SessionController.java
+++ b/src/main/java/xyz/wbsite/openai/SessionController.java
@@ -1,13 +1,13 @@
-package xyz.wbsite.achat;
+package xyz.wbsite.openai;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
-import xyz.wbsite.achat.core.session.Result;
-import xyz.wbsite.achat.core.session.Session;
-import xyz.wbsite.achat.core.session.SessionService;
+import xyz.wbsite.achat.session.Result;
+import xyz.wbsite.achat.session.Session;
+import xyz.wbsite.achat.session.SessionService;
import javax.annotation.Resource;
import java.util.List;
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 132a9e5..eb047aa 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1,2 +1,3 @@
server.port=8080
spring.application.name=achat
+cfg.api.key=qazwsxedc741852963