diff --git a/src/Api/Providers/AwsBedrock/Client.php b/src/Api/Providers/AwsBedrock/Client.php index 807c01f..292c7b7 100644 --- a/src/Api/Providers/AwsBedrock/Client.php +++ b/src/Api/Providers/AwsBedrock/Client.php @@ -23,6 +23,8 @@ use Hyperf\Odin\Api\Response\ChatCompletionStreamResponse; use Hyperf\Odin\Api\Response\EmbeddingResponse; use Hyperf\Odin\Contract\Message\MessageInterface; +use Hyperf\Odin\Event\AfterChatCompletionsEvent; +use Hyperf\Odin\Event\AfterChatCompletionsStreamEvent; use Hyperf\Odin\Exception\LLMException; use Hyperf\Odin\Exception\LLMException\Api\LLMInvalidRequestException; use Hyperf\Odin\Exception\LLMException\Api\LLMRateLimitException; @@ -32,6 +34,7 @@ use Hyperf\Odin\Message\SystemMessage; use Hyperf\Odin\Message\ToolMessage; use Hyperf\Odin\Message\UserMessage; +use Hyperf\Odin\Utils\EventUtil; use Hyperf\Odin\Utils\LogUtil; use Psr\Log\LoggerInterface; use RuntimeException; @@ -102,6 +105,8 @@ public function chatCompletions(ChatCompletionRequest $chatRequest): ChatComplet 'content' => $chatCompletionResponse->getContent(), ]); + EventUtil::dispatch(new AfterChatCompletionsEvent($chatRequest, $chatCompletionResponse, $duration)); + return $chatCompletionResponse; } catch (AwsException $e) { throw $this->convertAwsException($e); @@ -151,8 +156,10 @@ public function chatCompletionsStream(ChatCompletionRequest $chatRequest): ChatC // 创建 AWS Bedrock 格式转换器,负责将 AWS Bedrock 格式转换为 OpenAI 格式 $bedrockConverter = new AwsBedrockFormatConverter($result, $this->logger); - // 创建流式响应对象并返回 - return new ChatCompletionStreamResponse(logger: $this->logger, streamIterator: $bedrockConverter); + $chatCompletionStreamResponse = new ChatCompletionStreamResponse(logger: $this->logger, streamIterator: $bedrockConverter); + $chatCompletionStreamResponse->setAfterChatCompletionsStreamEvent(new AfterChatCompletionsStreamEvent($chatRequest, $firstResponseDuration)); + + return $chatCompletionStreamResponse; } catch (AwsException $e) { throw $this->convertAwsException($e); } catch (Throwable $e) { diff --git a/src/Api/Providers/AwsBedrock/ConverseClient.php b/src/Api/Providers/AwsBedrock/ConverseClient.php index 9c08c8c..408acfc 100644 --- a/src/Api/Providers/AwsBedrock/ConverseClient.php +++ b/src/Api/Providers/AwsBedrock/ConverseClient.php @@ -18,10 +18,13 @@ use Hyperf\Odin\Api\Response\ChatCompletionResponse; use Hyperf\Odin\Api\Response\ChatCompletionStreamResponse; use Hyperf\Odin\Contract\Message\MessageInterface; +use Hyperf\Odin\Event\AfterChatCompletionsEvent; +use Hyperf\Odin\Event\AfterChatCompletionsStreamEvent; use Hyperf\Odin\Message\AssistantMessage; use Hyperf\Odin\Message\SystemMessage; use Hyperf\Odin\Message\ToolMessage; use Hyperf\Odin\Message\UserMessage; +use Hyperf\Odin\Utils\EventUtil; use Hyperf\Odin\Utils\LogUtil; use Throwable; @@ -70,6 +73,8 @@ public function chatCompletions(ChatCompletionRequest $chatRequest): ChatComplet 'content' => $chatCompletionResponse->getContent(), ]); + EventUtil::dispatch(new AfterChatCompletionsEvent($chatRequest, $chatCompletionResponse, $duration)); + return $chatCompletionResponse; } catch (AwsException $e) { throw $this->convertAwsException($e); @@ -119,8 +124,10 @@ public function chatCompletionsStream(ChatCompletionRequest $chatRequest): ChatC // 创建 AWS Bedrock 格式转换器,负责将 AWS Bedrock 格式转换为 OpenAI 格式 $bedrockConverter = new AwsBedrockConverseFormatConverter($result, $this->logger, $modelId); - // 创建流式响应对象并返回 - return new ChatCompletionStreamResponse(logger: $this->logger, streamIterator: $bedrockConverter); + $chatCompletionStreamResponse = new ChatCompletionStreamResponse(logger: $this->logger, streamIterator: $bedrockConverter); + $chatCompletionStreamResponse->setAfterChatCompletionsStreamEvent(new AfterChatCompletionsStreamEvent($chatRequest, $firstResponseDuration)); + + return $chatCompletionStreamResponse; } catch (AwsException $e) { throw $this->convertAwsException($e); } catch (Throwable $e) {