更新
This commit is contained in:
@@ -172,6 +172,31 @@ difyStreamExpect($decodedOpenAi['content'] === 'A中', 'OpenAI decoder handles a
|
||||
difyStreamExpect($decodedOpenAi['deltas'] === ['A', '中'], 'OpenAI decoder emits choices delta content only');
|
||||
difyStreamExpect($decodedOpenAi['finished'] === true, 'OpenAI [DONE] terminates parsing');
|
||||
|
||||
$pendingBuffer = '';
|
||||
$pendingState = callDifyStreamPrivate('newStreamState', []);
|
||||
$liveDeltas = [];
|
||||
$liveCallback = static function (string $delta) use (&$liveDeltas): void {
|
||||
$liveDeltas[] = $delta;
|
||||
};
|
||||
callDifyStreamPrivate('consumeStreamBytes', [
|
||||
'dify', &$pendingBuffer, "data: {\"event\":\"message\",\"answer\":\"首字\"}\r\n", &$pendingState, $liveCallback,
|
||||
]);
|
||||
difyStreamExpect($liveDeltas === [], 'a data line alone is not a complete SSE event');
|
||||
callDifyStreamPrivate('consumeStreamBytes', ['dify', &$pendingBuffer, "\r\n", &$pendingState, $liveCallback]);
|
||||
difyStreamExpect($liveDeltas === ['首字'], 'a complete delta is delivered before upstream EOF or a terminal event');
|
||||
difyStreamExpect($pendingState['finished'] === false, 'incremental delivery does not wait for message_end');
|
||||
|
||||
$multilineWire = "data: {\"event\":\"message\",\r\n"
|
||||
. "data: \"answer\":\"逐帧\"}\r\n\r\n"
|
||||
. "data: {\"event\":\"message_end\"}\r\n\r\n";
|
||||
foreach ([1, 2, strlen($multilineWire)] as $chunkSize) {
|
||||
$multiline = callDifyStreamPrivate('decodeStreamChunks', ['dify', str_split($multilineWire, $chunkSize)]);
|
||||
difyStreamExpect(
|
||||
$multiline['deltas'] === ['逐帧'] && $multiline['finished'] === true,
|
||||
'CRLF multiline data stays one event across arbitrary transport boundaries'
|
||||
);
|
||||
}
|
||||
|
||||
$malformed = callDifyStreamPrivate('decodeStreamChunks', [
|
||||
'dify',
|
||||
["data: not-json\n\n", "data: {\"event\":\"error\",\"message\":\"secret-upstream-body\"}\n\n"],
|
||||
|
||||
Reference in New Issue
Block a user