Commit e1ac83ab by haojie

1

parent a25ac6f6
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
namespace App\Client; namespace App\Client;
use Illuminate\Support\Facades\Log;
use Orhanerday\OpenAi\OpenAi as BaseOpenAi; use Orhanerday\OpenAi\OpenAi as BaseOpenAi;
class OpenAI extends BaseOpenAi class OpenAI extends BaseOpenAi
......
...@@ -103,7 +103,6 @@ public function translate(Request $request): JsonResponse ...@@ -103,7 +103,6 @@ public function translate(Request $request): JsonResponse
*/ */
public function stream(Request $request) public function stream(Request $request)
{ {
// Validate if the request is legitimate.
if ($request->session()->get('chat_id') != $request->input('chat_id')) { if ($request->session()->get('chat_id') != $request->input('chat_id')) {
throw new UserException(1, 'error'); throw new UserException(1, 'error');
} }
...@@ -118,6 +117,7 @@ public function stream(Request $request) ...@@ -118,6 +117,7 @@ public function stream(Request $request)
// Real-time streaming response data sent to the client // Real-time streaming response data sent to the client
$respData = ''; $respData = '';
$apiKey = config('openai.api_key'); $apiKey = config('openai.api_key');
# 返回EventStream响应头
header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Origin: *');
header('Content-type: text/event-stream'); header('Content-type: text/event-stream');
header('Cache-Control: no-cache'); header('Cache-Control: no-cache');
...@@ -132,7 +132,7 @@ public function stream(Request $request) ...@@ -132,7 +132,7 @@ public function stream(Request $request)
} }
} else { } else {
$respData .= $data; $respData .= $data;
echo $data;; echo $data;
} }
ob_flush(); ob_flush();
flush(); flush();
...@@ -155,6 +155,24 @@ public function stream(Request $request) ...@@ -155,6 +155,24 @@ public function stream(Request $request)
} }
$messages[] = ['role' => 'assistant', 'content' => $respText]; $messages[] = ['role' => 'assistant', 'content' => $respText];
$request->session()->put('messages', $messages); $request->session()->put('messages', $messages);
} else {
# 空返回时--格式化event-stream
$lines = explode("\n\n", $respData);
$respText = '';
foreach ($lines as $line) {
$data = substr($line, 5); // The structure of each line of data is data: {...}.
if ($data === '[DONE]') {
break;
} else {
$segment = json_decode($data);
if (isset($segment->choices[0]->delta->content)) {
$respText .= $segment->choices[0]->delta->content;
}
}
}
$messages[] = ['role' => 'assistant', 'content' => $respText];
Log::info($messages);
$request->session()->put('messages', $messages);
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment