Quellcode durchsuchen

Merge pull request #2328 from visuddhinanda/development

Development
visuddhinanda vor 9 Monaten
Ursprung
Commit
f7c73b1aee

+ 1 - 1
api-v8/storage/resources

@@ -1 +1 @@
-Subproject commit 5f87f0be2352900d3614dc9d9f765141bb5140ce
+Subproject commit 13f2979cefbc5326caac3b8325a5e28aa2834704

+ 5 - 2
dashboard-v4/dashboard/src/components/chat/AiChat.tsx

@@ -25,6 +25,7 @@ import {
 import Marked from "../general/Marked";
 import { IAiModel, IAiModelListResponse } from "../api/ai";
 import { get } from "../../request";
+import User from "../auth/User";
 
 const { TextArea } = Input;
 
@@ -176,13 +177,15 @@ const AIChatComponent = ({
       }
       try {
         const payload = {
-          model: selectedModel,
+          model: models?.find((value) => value.uid === selectedModel)?.model,
           messages: messages,
           stream: true,
           temperature: 0.7,
           max_tokens: 2000,
         };
-        const response = await fetch(process.env.REACT_APP_OPENAI_PROXY, {
+        const url = process.env.REACT_APP_OPENAI_PROXY;
+        console.info("api request", url, payload);
+        const response = await fetch(url, {
           method: "POST",
           headers: {
             "Content-Type": "application/json",

+ 38 - 19
open-ai-server/src/server.js

@@ -16,6 +16,8 @@ app.post("/api/openai", async (req, res) => {
   try {
     const { model_id, open_ai_url, api_key, payload } = req.body;
 
+    let requestUrl = open_ai_url;
+    let apiKey = api_key;
     // 验证必需的参数
     if (!model_id) {
       if (!open_ai_url || !api_key || !payload) {
@@ -26,39 +28,57 @@ app.post("/api/openai", async (req, res) => {
       }
     } else {
       //get model info from api server
-      const url = api_server + `/v2/ai-model/${model_id}`;
-      const res = await fetch(url, {
-        method: "GET",
-        headers: {
-          "Content-Type": "application/json",
-        },
-      });
-      // 获取响应数据
-      const model = await res.json();
-      open_ai_url = model.url;
-      api_key = model.key;
+      try {
+        const url = api_server + `/v2/ai-model/${model_id}`;
+        logger.info("get model info from api server " + url);
+        const response = await fetch(url, {
+          method: "GET",
+          headers: {
+            "Content-Type": "application/json",
+          },
+        });
+        // 获取响应数据
+        const model = await response.json();
+        if (model.ok) {
+          requestUrl = model.data.url;
+          apiKey = model.data.key;
+        } else {
+          return res.status(400).json({
+            error:
+              "Missing required parameters: open_ai_url, api_key, or payload",
+          });
+        }
+      } catch (error) {
+        logger.error(error.message);
+        if (!res.headersSent) {
+          res.status(500).json({
+            error: "Proxy server error",
+            message: error.message,
+            type: "proxy_error",
+          });
+        }
+      }
     }
 
     // 检测不同的 AI 服务提供商
 
     const isClaudeAPI =
-      open_ai_url.includes("anthropic.com") || open_ai_url.includes("claude");
+      requestUrl.includes("anthropic.com") || requestUrl.includes("claude");
 
     const isStreaming = payload.stream === true;
 
     // 构建请求URL和headers
-    let requestUrl = open_ai_url;
+
     let headers = {
       "Content-Type": "application/json",
-      Authorization: `Bearer ${api_key}`,
+      Authorization: `Bearer ${apiKey}`,
     };
 
     if (isClaudeAPI) {
       // Claude API使用特殊的header格式
-      headers["x-api-key"] = api_key;
+      headers["x-api-key"] = apiKey;
       headers["anthropic-version"] = "2023-06-01";
     }
-
     if (isStreaming) {
       // 流式响应处理
       res.setHeader("Content-Type", "text/event-stream");
@@ -120,7 +140,7 @@ app.post("/api/openai", async (req, res) => {
 
         res.end();
       } catch (streamError) {
-        console.error("Streaming error:", streamError);
+        logger.error("Streaming error:" + streamError.message);
 
         // 网络错误或其他系统错误
         res.status(500);
@@ -161,7 +181,7 @@ app.post("/api/openai", async (req, res) => {
       res.json(responseData);
     }
   } catch (error) {
-    console.error("Proxy Error:", error);
+    logger.error("Proxy Error:" + error.message);
 
     // 只有在系统级错误时才返回代理服务器的错误信息
     // 比如网络错误、JSON解析错误等
@@ -181,4 +201,3 @@ app.get("/health", (req, res) => {
 });
 
 export default app;
-export { setConfig };