diff --git a/composer.json b/composer.json index d662461..2e87153 100644 --- a/composer.json +++ b/composer.json @@ -22,7 +22,7 @@ "php": "^8.2", "laravel/framework": "^11.0|^12.0", "aws/aws-sdk-php": "^3.339", - "prism-php/prism": ">=0.77.1" + "prism-php/prism": ">=0.88.0" }, "config": { "allow-plugins": { @@ -34,17 +34,17 @@ "require-dev": { "pestphp/pest": "^3.0", "laravel/pint": "^1.14", - "phpstan/phpstan": "^1.11", + "phpstan/phpstan": "^2.1", "pestphp/pest-plugin-arch": "^3.0", "pestphp/pest-plugin-laravel": "^3.0", "phpstan/extension-installer": "^1.3", - "phpstan/phpstan-deprecation-rules": "^1.2", - "rector/rector": "^1.1", + "phpstan/phpstan-deprecation-rules": "^2.0", + "rector/rector": "^2.1", "projektgopher/whisky": "^0.7.0", "orchestra/testbench": "^9.4", "mockery/mockery": "^1.6", "symplify/rule-doc-generator-contracts": "^11.2", - "phpstan/phpdoc-parser": "^1.24", + "phpstan/phpdoc-parser": "^2.0", "spatie/laravel-ray": "^1.40" }, "autoload-dev": { diff --git a/rector.php b/rector.php index 43032ed..0d49c75 100644 --- a/rector.php +++ b/rector.php @@ -3,7 +3,6 @@ declare(strict_types=1); use Prism\Bedrock\Rectors\ReorderMethodsRector; -use Rector\CodeQuality\Rector\Class_\InlineConstructorDefaultToPropertyRector; use Rector\Config\RectorConfig; use Rector\Set\ValueObject\LevelSetList; use Rector\Set\ValueObject\SetList; @@ -15,7 +14,6 @@ __DIR__.'/tests', ]) ->withRules([ - InlineConstructorDefaultToPropertyRector::class, ReorderMethodsRector::class, ]) ->withSets([ diff --git a/src/Rectors/ReorderMethodsRector.php b/src/Rectors/ReorderMethodsRector.php index d75ef09..5ad23a2 100644 --- a/src/Rectors/ReorderMethodsRector.php +++ b/src/Rectors/ReorderMethodsRector.php @@ -6,8 +6,6 @@ use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\ClassMethod; use Rector\Rector\AbstractRector; -use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; -use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; class ReorderMethodsRector extends AbstractRector { @@ -36,66 +34,13 @@ public function refactor(Node $node): ?Node } $node->stmts = array_merge( - array_filter($node->stmts, fn ($stmt): bool => ! $stmt instanceof ClassMethod), + array_filter($node->stmts, fn (\PhpParser\Node\Stmt $stmt): bool => ! $stmt instanceof ClassMethod), $reorderedMethods ); return $node; } - #[\Override] - public function getRuleDefinition(): RuleDefinition - { - return new RuleDefinition( - 'Reorders class methods: magic methods first, then public, protected, and private.', - [ - new CodeSample( - <<<'CODE_SAMPLE' -class SomeClass -{ - private function privateMethod() - { - } - - public function publicMethod() - { - } - - protected function protectedMethod() - { - } - - public function __construct() - { - } -} -CODE_SAMPLE - , - <<<'CODE_SAMPLE' -class SomeClass -{ - public function __construct() - { - } - - public function publicMethod() - { - } - - protected function protectedMethod() - { - } - - private function privateMethod() - { - } -} -CODE_SAMPLE - ), - ] - ); - } - /** * @param array $methods * @return array diff --git a/src/Schemas/Anthropic/AnthropicStructuredHandler.php b/src/Schemas/Anthropic/AnthropicStructuredHandler.php index 6b8edf1..0c74177 100644 --- a/src/Schemas/Anthropic/AnthropicStructuredHandler.php +++ b/src/Schemas/Anthropic/AnthropicStructuredHandler.php @@ -52,7 +52,6 @@ public function handle(Request $request): StructuredResponse ); $request->addMessage($responseMessage); - $this->responseBuilder->addResponseMessage($responseMessage); $this->responseBuilder->addStep(new Step( text: $this->tempResponse->text, @@ -79,7 +78,7 @@ public static function buildPayload(Request $request, ?string $apiVersion): arra 'system' => MessageMap::mapSystemMessages($request->systemPrompts()), 'temperature' => $request->temperature(), 'top_p' => $request->topP(), - ], fn ($value): bool => $value !== null); + ], fn (mixed $value): bool => $value !== null); } protected function sendRequest(Request $request): void @@ -100,7 +99,6 @@ protected function prepareTempResponse(): void $this->tempResponse = new StructuredResponse( steps: new Collection, - responseMessages: new Collection, text: $this->extractText($data), structured: [], finishReason: FinishReasonMap::map(data_get($data, 'stop_reason', '')), diff --git a/src/Schemas/Anthropic/AnthropicTextHandler.php b/src/Schemas/Anthropic/AnthropicTextHandler.php index 03a2d33..5033b62 100644 --- a/src/Schemas/Anthropic/AnthropicTextHandler.php +++ b/src/Schemas/Anthropic/AnthropicTextHandler.php @@ -55,8 +55,6 @@ public function handle(Request $request): TextResponse $this->tempResponse->additionalContent, ); - $this->responseBuilder->addResponseMessage($responseMessage); - $request->addMessage($responseMessage); return match ($this->tempResponse->finishReason) { @@ -80,7 +78,7 @@ public static function buildPayload(Request $request, ?string $apiVersion): arra 'top_p' => $request->topP(), 'tools' => ToolMap::map($request->tools()), 'tool_choice' => ToolChoiceMap::map($request->toolChoice()), - ], fn ($value): bool => $value !== null); + ], fn (mixed $value): bool => $value !== null); } protected function sendRequest(Request $request): void @@ -101,8 +99,6 @@ protected function prepareTempResponse(): void $this->tempResponse = new TextResponse( steps: new Collection, - responseMessages: new Collection, - messages: new Collection, text: $this->extractText($data), finishReason: FinishReasonMap::map(data_get($data, 'stop_reason', '')), toolCalls: $this->extractToolCalls($data), @@ -116,7 +112,8 @@ protected function prepareTempResponse(): void meta: new Meta( id: data_get($data, 'id'), model: data_get($data, 'model'), - ) + ), + messages: new Collection ); } diff --git a/src/Schemas/Anthropic/Concerns/ExtractsToolCalls.php b/src/Schemas/Anthropic/Concerns/ExtractsToolCalls.php index f7ca4ca..68d0593 100644 --- a/src/Schemas/Anthropic/Concerns/ExtractsToolCalls.php +++ b/src/Schemas/Anthropic/Concerns/ExtractsToolCalls.php @@ -12,7 +12,7 @@ trait ExtractsToolCalls */ protected function extractToolCalls(array $data): array { - $toolCalls = array_map(function ($content) { + $toolCalls = array_map(function ($content): ?ToolCall { if (data_get($content, 'type') === 'tool_use') { return new ToolCall( id: data_get($content, 'id'), @@ -20,8 +20,10 @@ protected function extractToolCalls(array $data): array arguments: data_get($content, 'input') ); } + + return null; }, data_get($data, 'content', [])); - return array_values(array_filter($toolCalls)); + return array_values(array_filter($toolCalls, fn (?ToolCall $toolCall): bool => $toolCall instanceof ToolCall)); } } diff --git a/src/Schemas/Anthropic/Maps/MessageMap.php b/src/Schemas/Anthropic/Maps/MessageMap.php index 8e98014..4f2451b 100644 --- a/src/Schemas/Anthropic/Maps/MessageMap.php +++ b/src/Schemas/Anthropic/Maps/MessageMap.php @@ -8,8 +8,8 @@ use Exception; use Prism\Prism\Contracts\Message; use Prism\Prism\Exceptions\PrismException; +use Prism\Prism\ValueObjects\Media\Image; use Prism\Prism\ValueObjects\Messages\AssistantMessage; -use Prism\Prism\ValueObjects\Messages\Support\Image; use Prism\Prism\ValueObjects\Messages\SystemMessage; use Prism\Prism\ValueObjects\Messages\ToolResultMessage; use Prism\Prism\ValueObjects\Messages\UserMessage; diff --git a/src/Schemas/Converse/ConverseStructuredHandler.php b/src/Schemas/Converse/ConverseStructuredHandler.php index aa92e40..5752470 100644 --- a/src/Schemas/Converse/ConverseStructuredHandler.php +++ b/src/Schemas/Converse/ConverseStructuredHandler.php @@ -49,7 +49,6 @@ public function handle(Request $request): StructuredResponse ); $request->addMessage($responseMessage); - $this->responseBuilder->addResponseMessage($responseMessage); $this->responseBuilder->addStep(new Step( text: $this->tempResponse->text, @@ -77,7 +76,7 @@ public static function buildPayload(Request $request): array 'maxTokens' => $request->maxTokens(), 'temperature' => $request->temperature(), 'topP' => $request->topP(), - ], fn ($value): bool => $value !== null), + ], fn (mixed $value): bool => $value !== null), 'messages' => MessageMap::map($request->messages()), 'performanceConfig' => $request->providerOptions('performanceConfig'), 'promptVariables' => $request->providerOptions('promptVariables'), @@ -104,7 +103,6 @@ protected function prepareTempResponse(): void $this->tempResponse = new StructuredResponse( steps: new Collection, - responseMessages: new Collection, text: data_get($data, 'output.message.content.0.text', ''), structured: [], finishReason: FinishReasonMap::map(data_get($data, 'stopReason')), @@ -113,7 +111,6 @@ protected function prepareTempResponse(): void completionTokens: data_get($data, 'usage.outputTokens') ), meta: new Meta(id: '', model: '') // Not provided in Converse response. - ); } diff --git a/src/Schemas/Converse/ConverseTextHandler.php b/src/Schemas/Converse/ConverseTextHandler.php index c84da55..eb18aca 100644 --- a/src/Schemas/Converse/ConverseTextHandler.php +++ b/src/Schemas/Converse/ConverseTextHandler.php @@ -54,8 +54,6 @@ public function handle(Request $request): TextResponse $this->tempResponse->additionalContent, ); - $this->responseBuilder->addResponseMessage($responseMessage); - $request->addMessage($responseMessage); return match ($this->tempResponse->finishReason) { @@ -75,7 +73,7 @@ public static function buildPayload(Request $request, int $stepCount = 0): array 'maxTokens' => $request->maxTokens(), 'temperature' => $request->temperature(), 'topP' => $request->topP(), - ], fn ($value): bool => $value !== null), + ], fn (mixed $value): bool => $value !== null), 'messages' => MessageMap::map($request->messages()), 'system' => MessageMap::mapSystemMessages($request->systemPrompts()), 'toolConfig' => $request->tools() === [] @@ -111,8 +109,6 @@ protected function prepareTempResponse(): void $this->tempResponse = new TextResponse( steps: new Collection, - responseMessages: new Collection, - messages: new Collection, text: data_get($data, 'output.message.content.0.text', ''), finishReason: FinishReasonMap::map(data_get($data, 'stopReason')), toolCalls: $this->extractToolCalls($data), @@ -121,7 +117,8 @@ protected function prepareTempResponse(): void promptTokens: data_get($data, 'usage.inputTokens'), completionTokens: data_get($data, 'usage.outputTokens') ), - meta: new Meta(id: '', model: '') // Not provided in Converse response. + meta: new Meta(id: '', model: ''), // Not provided in Converse response. + messages: new Collection ); } diff --git a/src/Schemas/Converse/Maps/DocumentMapper.php b/src/Schemas/Converse/Maps/DocumentMapper.php index c7fa7fd..a19d790 100644 --- a/src/Schemas/Converse/Maps/DocumentMapper.php +++ b/src/Schemas/Converse/Maps/DocumentMapper.php @@ -5,8 +5,8 @@ use Prism\Bedrock\Enums\Mimes; use Prism\Prism\Contracts\ProviderMediaMapper; use Prism\Prism\Enums\Provider; -use Prism\Prism\ValueObjects\Messages\Support\Document; -use Prism\Prism\ValueObjects\Messages\Support\Media; +use Prism\Prism\ValueObjects\Media\Document; +use Prism\Prism\ValueObjects\Media\Media; class DocumentMapper extends ProviderMediaMapper { diff --git a/src/Schemas/Converse/Maps/ImageMapper.php b/src/Schemas/Converse/Maps/ImageMapper.php index a4387f5..fa8f9c4 100644 --- a/src/Schemas/Converse/Maps/ImageMapper.php +++ b/src/Schemas/Converse/Maps/ImageMapper.php @@ -5,8 +5,8 @@ use Prism\Bedrock\Enums\Mimes; use Prism\Prism\Contracts\ProviderMediaMapper; use Prism\Prism\Enums\Provider; -use Prism\Prism\ValueObjects\Messages\Support\Image; -use Prism\Prism\ValueObjects\Messages\Support\Media; +use Prism\Prism\ValueObjects\Media\Image; +use Prism\Prism\ValueObjects\Media\Media; class ImageMapper extends ProviderMediaMapper { diff --git a/src/Schemas/Converse/Maps/MessageMap.php b/src/Schemas/Converse/Maps/MessageMap.php index 8370636..5170266 100644 --- a/src/Schemas/Converse/Maps/MessageMap.php +++ b/src/Schemas/Converse/Maps/MessageMap.php @@ -7,9 +7,9 @@ use Exception; use Prism\Prism\Contracts\Message; use Prism\Prism\Exceptions\PrismException; +use Prism\Prism\ValueObjects\Media\Document; +use Prism\Prism\ValueObjects\Media\Image; use Prism\Prism\ValueObjects\Messages\AssistantMessage; -use Prism\Prism\ValueObjects\Messages\Support\Document; -use Prism\Prism\ValueObjects\Messages\Support\Image; use Prism\Prism\ValueObjects\Messages\SystemMessage; use Prism\Prism\ValueObjects\Messages\ToolResultMessage; use Prism\Prism\ValueObjects\Messages\UserMessage; diff --git a/tests/Schemas/Anthropic/AnthropicTextHandlerTest.php b/tests/Schemas/Anthropic/AnthropicTextHandlerTest.php index 202f1fc..e678916 100644 --- a/tests/Schemas/Anthropic/AnthropicTextHandlerTest.php +++ b/tests/Schemas/Anthropic/AnthropicTextHandlerTest.php @@ -6,7 +6,7 @@ use Illuminate\Support\Facades\Http; use Prism\Prism\Facades\Tool; use Prism\Prism\Prism; -use Prism\Prism\ValueObjects\Messages\Support\Image; +use Prism\Prism\ValueObjects\Media\Image; use Prism\Prism\ValueObjects\Messages\SystemMessage; use Prism\Prism\ValueObjects\Messages\UserMessage; use Tests\Fixtures\FixtureResponse; diff --git a/tests/Schemas/Anthropic/Maps/MessageMapTest.php b/tests/Schemas/Anthropic/Maps/MessageMapTest.php index 50cfff0..8be9954 100644 --- a/tests/Schemas/Anthropic/Maps/MessageMapTest.php +++ b/tests/Schemas/Anthropic/Maps/MessageMapTest.php @@ -7,8 +7,8 @@ use Prism\Bedrock\Schemas\Anthropic\Maps\MessageMap; use Prism\Prism\Exceptions\PrismException; use Prism\Prism\Providers\Anthropic\Enums\AnthropicCacheType; +use Prism\Prism\ValueObjects\Media\Image; use Prism\Prism\ValueObjects\Messages\AssistantMessage; -use Prism\Prism\ValueObjects\Messages\Support\Image; use Prism\Prism\ValueObjects\Messages\SystemMessage; use Prism\Prism\ValueObjects\Messages\ToolResultMessage; use Prism\Prism\ValueObjects\Messages\UserMessage; diff --git a/tests/Schemas/Converse/ConverseTextHandlerTest.php b/tests/Schemas/Converse/ConverseTextHandlerTest.php index 3e7a4d0..b2b7f1f 100644 --- a/tests/Schemas/Converse/ConverseTextHandlerTest.php +++ b/tests/Schemas/Converse/ConverseTextHandlerTest.php @@ -11,8 +11,8 @@ use Prism\Prism\Prism; use Prism\Prism\Testing\TextStepFake; use Prism\Prism\Text\ResponseBuilder; -use Prism\Prism\ValueObjects\Messages\Support\Document; -use Prism\Prism\ValueObjects\Messages\Support\Image; +use Prism\Prism\ValueObjects\Media\Document; +use Prism\Prism\ValueObjects\Media\Image; use Prism\Prism\ValueObjects\Messages\UserMessage; use Tests\Fixtures\FixtureResponse; diff --git a/tests/Schemas/Converse/Maps/MessageMapTest.php b/tests/Schemas/Converse/Maps/MessageMapTest.php index d148669..ce03ec7 100644 --- a/tests/Schemas/Converse/Maps/MessageMapTest.php +++ b/tests/Schemas/Converse/Maps/MessageMapTest.php @@ -5,9 +5,9 @@ namespace Tests\Schemas\Converse\Maps; use Prism\Bedrock\Schemas\Converse\Maps\MessageMap; +use Prism\Prism\ValueObjects\Media\Document; +use Prism\Prism\ValueObjects\Media\Image; use Prism\Prism\ValueObjects\Messages\AssistantMessage; -use Prism\Prism\ValueObjects\Messages\Support\Document; -use Prism\Prism\ValueObjects\Messages\Support\Image; use Prism\Prism\ValueObjects\Messages\SystemMessage; use Prism\Prism\ValueObjects\Messages\ToolResultMessage; use Prism\Prism\ValueObjects\Messages\UserMessage;