Przeglądaj źródła

add buildRequestPayload

visuddhinanda 4 miesięcy temu
rodzic
commit
1d1e805b40

+ 26 - 33
dashboard-v4/dashboard/src/services/modelAdapters/openai.ts

@@ -1,15 +1,36 @@
+// dashboard-v4/dashboard/src/services/modelAdapters/openai.ts
+
 import { BaseModelAdapter } from "./base";
 import {
   OpenAIMessage,
   SendOptions,
   ParsedChunk,
-  ToolCall,
+  ChatCompletionChunk,
 } from "../../types/chat";
+import { IAiModel } from "../../components/api/ai";
+import { tools } from "../agentApi";
 
 export class OpenAIAdapter extends BaseModelAdapter {
+  model: IAiModel | undefined;
   name = "gpt-4";
   supportsFunctionCall = true;
 
+  protected buildRequestPayload(
+    messages: OpenAIMessage[],
+    options: SendOptions
+  ) {
+    return {
+      model: this.model?.name,
+      messages,
+      stream: true,
+      temperature: options.temperature || 0.7,
+      max_completion_tokens: options.max_tokens || 2048,
+      top_p: options.top_p || 1,
+      tools: tools,
+      tool_choice: "auto",
+    };
+  }
+
   // 修改这个方法
   async sendMessage(
     messages: OpenAIMessage[],
@@ -20,8 +41,8 @@ export class OpenAIAdapter extends BaseModelAdapter {
     return this.createStreamIterable(payload);
   }
 
-  // 新增这个私有方法
   private async *createStreamIterable(payload: any): AsyncIterable<string> {
+    console.log("ai chat send message", payload);
     const response = await fetch(process.env.REACT_APP_OPENAI_PROXY!, {
       method: "POST",
       headers: {
@@ -29,7 +50,7 @@ export class OpenAIAdapter extends BaseModelAdapter {
         Authorization: `Bearer ${process.env.REACT_APP_OPENAI_KEY}`,
       },
       body: JSON.stringify({
-        model_id: "gpt-4",
+        model_id: this.model?.uid,
         payload,
       }),
     });
@@ -71,45 +92,17 @@ export class OpenAIAdapter extends BaseModelAdapter {
   // 其他方法保持不变
   parseStreamChunk(chunk: string): ParsedChunk | null {
     try {
-      const parsed = JSON.parse(chunk);
+      const parsed: ChatCompletionChunk = JSON.parse(chunk);
       const delta = parsed.choices?.[0]?.delta;
       const finishReason = parsed.choices?.[0]?.finish_reason;
 
       return {
         content: delta?.content,
-        function_call: delta?.function_call,
+        tool_calls: delta?.tool_calls,
         finish_reason: finishReason,
       };
     } catch {
       return null;
     }
   }
-
-  async handleFunctionCall(functionCall: ToolCall): Promise<any> {
-    switch (functionCall.function) {
-      case "searchTerm":
-        return await this.searchTerm(functionCall.arguments.term);
-      case "getWeather":
-        return await this.getWeather(functionCall.arguments.city);
-      default:
-        throw new Error(`未知函数: ${functionCall.function}`);
-    }
-  }
-
-  private async searchTerm(term: string) {
-    const response = await fetch(
-      `/v2/search-pali-wbw?view=pali&key=${term}&limit=20&offset=0`
-    );
-    const result = await response.json();
-    return result.ok ? result.data.rows : { error: "搜索失败" };
-  }
-
-  private async getWeather(city: string) {
-    return {
-      city,
-      temperature: "25°C",
-      condition: "晴朗",
-      humidity: "60%",
-    };
-  }
 }