diff --git a/evals/LLMModes/run.php b/evals/LLMModes/run.php index 2abcc69d..b881cb57 100644 --- a/evals/LLMModes/run.php +++ b/evals/LLMModes/run.php @@ -22,7 +22,7 @@ 'together' ]; -$streamingModes = [false, true]; +$streamingModes = [true]; $modes = [ Mode::Text, Mode::MdJson, diff --git a/src/Extras/LLM/Drivers/AnthropicDriver.php b/src/Extras/LLM/Drivers/AnthropicDriver.php index 7c1102ea..6c91f303 100644 --- a/src/Extras/LLM/Drivers/AnthropicDriver.php +++ b/src/Extras/LLM/Drivers/AnthropicDriver.php @@ -42,7 +42,7 @@ public function toApiResponse(array $data): ApiResponse { public function toPartialApiResponse(array $data) : PartialApiResponse { return new PartialApiResponse( - delta: $data['delta']['text'] ?? $data['delta']['partial_json'] ?? '', + delta: $this->makeDelta($data), responseData: $data, toolName: $data['content_block']['name'] ?? '', toolArgs: $data['delta']['partial_json'] ?? '', @@ -203,4 +203,8 @@ private function mapToolsData(array $data) : array { private function makeContent(array $data) : string { return $data['content'][0]['text'] ?? Json::encode($data['content'][0]['input']) ?? ''; } + + private function makeDelta(array $data) : string { + return $data['delta']['text'] ?? $data['delta']['partial_json'] ?? ''; + } } diff --git a/src/Extras/LLM/Drivers/CohereDriver.php b/src/Extras/LLM/Drivers/CohereDriver.php index e898ffe7..74dc2a53 100644 --- a/src/Extras/LLM/Drivers/CohereDriver.php +++ b/src/Extras/LLM/Drivers/CohereDriver.php @@ -40,7 +40,7 @@ public function toApiResponse(array $data): ApiResponse { public function toPartialApiResponse(array $data) : PartialApiResponse { return new PartialApiResponse( - delta: $data['text'] ?? $data['tool_calls'][0]['parameters'] ?? '', + delta: $this->makeDelta($data), responseData: $data, toolName: $data['tool_calls'][0]['name'] ?? '', toolArgs: Json::encode($data['tool_calls'][0]['parameters'] ?? []), @@ -182,4 +182,8 @@ private function makeContent(array $data) : string { : '' ); } -} \ No newline at end of file + + private function makeDelta(array $data) : string { + return $data['text'] ?? $data['tool_calls'][0]['parameters'] ?? ''; + } +} diff --git a/src/Extras/LLM/Drivers/GeminiDriver.php b/src/Extras/LLM/Drivers/GeminiDriver.php index cb6aefc9..70e1a67b 100644 --- a/src/Extras/LLM/Drivers/GeminiDriver.php +++ b/src/Extras/LLM/Drivers/GeminiDriver.php @@ -42,9 +42,7 @@ public function toApiResponse(array $data): ApiResponse { public function toPartialApiResponse(array $data) : PartialApiResponse { return new PartialApiResponse( - delta: $data['candidates'][0]['content']['parts'][0]['text'] - ?? Json::encode($data['candidates'][0]['content']['parts'][0]['functionCall']['args'] ?? []) - ?? '', + delta: $this->makeDelta($data), responseData: $data, toolName: $data['candidates'][0]['content']['parts'][0]['functionCall']['name'] ?? '', toolArgs: Json::encode($data['candidates'][0]['content']['parts'][0]['functionCall']['args'] ?? []), @@ -248,4 +246,10 @@ private function makeContent(array $data) : string { ?? Json::encode($data['candidates'][0]['content']['parts'][0]['functionCall']['args'] ?? []) ?? ''; } + + private function makeDelta(array $data): string { + return $data['candidates'][0]['content']['parts'][0]['text'] + ?? Json::encode($data['candidates'][0]['content']['parts'][0]['functionCall']['args'] ?? []) + ?? ''; + } } diff --git a/src/Extras/LLM/Drivers/OpenAIDriver.php b/src/Extras/LLM/Drivers/OpenAIDriver.php index fccf7508..60427dd3 100644 --- a/src/Extras/LLM/Drivers/OpenAIDriver.php +++ b/src/Extras/LLM/Drivers/OpenAIDriver.php @@ -38,7 +38,7 @@ public function toApiResponse(array $data): ApiResponse { public function toPartialApiResponse(array $data) : PartialApiResponse { return new PartialApiResponse( - delta: $this->getDelta($data), + delta: $this->makeDelta($data), responseData: $data, toolName: $data['choices'][0]['delta']['tool_calls'][0]['function']['name'] ?? '', toolArgs: $data['choices'][0]['delta']['tool_calls'][0]['function']['arguments'] ?? '', @@ -174,12 +174,12 @@ private function makeContent(array $data): string { }; } - private function getDelta(array $data): string { + private function makeDelta(array $data): string { $deltaContent = $data['choices'][0]['delta']['content'] ?? ''; $deltaFnArgs = $data['choices'][0]['delta']['tool_calls'][0]['function']['arguments'] ?? ''; return match(true) { - !empty($deltaContent) => $deltaContent, - !empty($deltaFnArgs) => $deltaFnArgs, + ('' !== $deltaContent) => $deltaContent, + ('' !== $deltaFnArgs) => $deltaFnArgs, default => '' }; } diff --git a/src/Extras/LLM/InferenceResponse.php b/src/Extras/LLM/InferenceResponse.php index f9ec91ab..704aae80 100644 --- a/src/Extras/LLM/InferenceResponse.php +++ b/src/Extras/LLM/InferenceResponse.php @@ -95,10 +95,10 @@ protected function streamIterator(StreamInterface $stream): Generator { } while (!$stream->eof()) { - if (($line = trim($this->readLine($stream))) === '') { + if ('' === ($line = trim($this->readLine($stream)))) { continue; } - if (($data = $this->driver->getData($line)) === false) { + if (false === ($data = $this->driver->getData($line))) { break; } yield $data; @@ -112,7 +112,7 @@ protected function readLine(StreamInterface $stream): string { return $buffer; } $buffer .= $byte; - if ($byte === "\n") { + if ("\n" === $byte) { break; } }