Commit e1ac83ab by haojie

1

parent a25ac6f6
......@@ -2,6 +2,7 @@
namespace App\Client;
use Illuminate\Support\Facades\Log;
use Orhanerday\OpenAi\OpenAi as BaseOpenAi;
class OpenAI extends BaseOpenAi
......
......@@ -103,7 +103,6 @@ public function translate(Request $request): JsonResponse
*/
public function stream(Request $request)
{
// Validate if the request is legitimate.
if ($request->session()->get('chat_id') != $request->input('chat_id')) {
throw new UserException(1, 'error');
}
......@@ -118,6 +117,7 @@ public function stream(Request $request)
// Real-time streaming response data sent to the client
$respData = '';
$apiKey = config('openai.api_key');
# 返回EventStream响应头
header('Access-Control-Allow-Origin: *');
header('Content-type: text/event-stream');
header('Cache-Control: no-cache');
......@@ -132,7 +132,7 @@ public function stream(Request $request)
}
} else {
$respData .= $data;
echo $data;;
echo $data;
}
ob_flush();
flush();
......@@ -155,6 +155,24 @@ public function stream(Request $request)
}
$messages[] = ['role' => 'assistant', 'content' => $respText];
$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