Skip to content

Commit bac7aea

Browse files
committed
refactor(providers): rename ValidateResponse to HandleResponseError
Make handleResponseError abstract
1 parent 6be3143 commit bac7aea

File tree

33 files changed

+86
-119
lines changed

33 files changed

+86
-119
lines changed

src/Providers/Anthropic/Handlers/Text.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,4 +154,6 @@ protected function extractToolCalls(array $data): array
154154

155155
return $toolCalls;
156156
}
157+
158+
protected function handleResponseError(): void {}
157159
}

src/Providers/DeepSeek/Concerns/ValidatesResponses.php renamed to src/Providers/DeepSeek/Concerns/HandleResponseError.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@
44

55
namespace Prism\Prism\Providers\DeepSeek\Concerns;
66

7+
use Illuminate\Http\Client\Response;
78
use Prism\Prism\Exceptions\PrismException;
89

9-
trait ValidatesResponses
10+
trait HandleResponseError
1011
{
11-
protected function validateResponse(): void
12+
protected Response $httpResponse;
13+
14+
protected function handleResponseError(): void
1215
{
1316
if ($this->httpResponse->json() === []) {
1417
throw PrismException::providerResponseError('DeepSeek Error: Empty response');

src/Providers/DeepSeek/Handlers/Structured.php

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,8 @@
44

55
use Illuminate\Http\Client\PendingRequest;
66
use Illuminate\Support\Arr;
7-
use Prism\Prism\Exceptions\PrismException;
7+
use Prism\Prism\Providers\DeepSeek\Concerns\HandleResponseError;
88
use Prism\Prism\Providers\DeepSeek\Concerns\MapsFinishReason;
9-
use Prism\Prism\Providers\DeepSeek\Concerns\ValidatesResponses;
109
use Prism\Prism\Providers\DeepSeek\Maps\FinishReasonMap;
1110
use Prism\Prism\Providers\DeepSeek\Maps\MessageMap;
1211
use Prism\Prism\Structured\Request;
@@ -20,8 +19,8 @@
2019

2120
class Structured
2221
{
22+
use HandleResponseError;
2323
use MapsFinishReason;
24-
use ValidatesResponses;
2524

2625
protected ResponseBuilder $responseBuilder;
2726

@@ -36,7 +35,7 @@ public function handle(Request $request): StructuredResponse
3635

3736
$data = $this->sendRequest($request);
3837

39-
$this->validateResponse($data);
38+
$this->handleResponseError();
4039

4140
return $this->createResponse($request, $data);
4241
}
@@ -46,7 +45,7 @@ public function handle(Request $request): StructuredResponse
4645
*/
4746
protected function sendRequest(Request $request): array
4847
{
49-
$response = $this->client->post(
48+
$this->httpResponse = $this->client->post(
5049
'chat/completions',
5150
array_merge([
5251
'model' => $request->model(),
@@ -59,17 +58,7 @@ protected function sendRequest(Request $request): array
5958
]))
6059
);
6160

62-
return $response->json();
63-
}
64-
65-
/**
66-
* @param array<string, mixed> $data
67-
*/
68-
protected function validateResponse(array $data): void
69-
{
70-
if ($data === []) {
71-
throw PrismException::providerResponseError('DeepSeek Error: Empty response');
72-
}
61+
return $this->httpResponse->json();
7362
}
7463

7564
/**

src/Providers/DeepSeek/Handlers/Text.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
use Illuminate\Support\Collection;
99
use Prism\Prism\Concerns\CallsTools;
1010
use Prism\Prism\Contracts\PrismRequest;
11+
use Prism\Prism\Providers\DeepSeek\Concerns\HandleResponseError;
1112
use Prism\Prism\Providers\DeepSeek\Concerns\MapsFinishReason;
12-
use Prism\Prism\Providers\DeepSeek\Concerns\ValidatesResponses;
1313
use Prism\Prism\Providers\DeepSeek\Maps\MessageMap;
1414
use Prism\Prism\Providers\DeepSeek\Maps\ToolCallMap;
1515
use Prism\Prism\Providers\DeepSeek\Maps\ToolChoiceMap;
@@ -24,8 +24,8 @@
2424
class Text extends TextHandler
2525
{
2626
use CallsTools;
27+
use HandleResponseError;
2728
use MapsFinishReason;
28-
use ValidatesResponses;
2929

3030
/**
3131
* @param TextRequest $request

src/Providers/Gemini/Concerns/ValidatesResponse.php renamed to src/Providers/Gemini/Concerns/HandleResponseError.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@
44

55
namespace Prism\Prism\Providers\Gemini\Concerns;
66

7+
use Illuminate\Http\Client\Response;
78
use Prism\Prism\Exceptions\PrismException;
89

9-
trait ValidatesResponse
10+
trait HandleResponseError
1011
{
11-
protected function validateResponse(): void
12+
protected Response $httpResponse;
13+
14+
protected function handleResponseError(): void
1215
{
1316
$data = $this->httpResponse->json();
1417

src/Providers/Gemini/Handlers/Structured.php

Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44

55
use Illuminate\Http\Client\PendingRequest;
66
use Illuminate\Support\Arr;
7-
use Prism\Prism\Exceptions\PrismException;
8-
use Prism\Prism\Providers\Gemini\Concerns\ValidatesResponse;
7+
use Prism\Prism\Providers\Gemini\Concerns\HandleResponseError;
98
use Prism\Prism\Providers\Gemini\Maps\FinishReasonMap;
109
use Prism\Prism\Providers\Gemini\Maps\MessageMap;
1110
use Prism\Prism\Providers\Gemini\Maps\SchemaMap;
@@ -19,7 +18,7 @@
1918

2019
class Structured
2120
{
22-
use ValidatesResponse;
21+
use HandleResponseError;
2322

2423
protected ResponseBuilder $responseBuilder;
2524

@@ -32,7 +31,7 @@ public function handle(Request $request): StructuredResponse
3231
{
3332
$data = $this->sendRequest($request);
3433

35-
$this->validateResponse($data);
34+
$this->handleResponseError();
3635

3736
$responseMessage = new AssistantMessage(data_get($data, 'candidates.0.content.parts.0.text') ?? '');
3837

@@ -52,7 +51,7 @@ public function sendRequest(Request $request): array
5251
{
5352
$providerOptions = $request->providerOptions();
5453

55-
$response = $this->client->post(
54+
$this->httpResponse = $this->client->post(
5655
"{$request->model()}:generateContent",
5756
Arr::whereNotNull([
5857
...(new MessageMap($request->messages(), $request->systemPrompts()))(),
@@ -71,23 +70,7 @@ public function sendRequest(Request $request): array
7170
])
7271
);
7372

74-
return $response->json();
75-
}
76-
77-
/**
78-
* @param array<string, mixed> $data
79-
*/
80-
protected function validateResponse(array $data): void
81-
{
82-
if (! $data || data_get($data, 'error')) {
83-
throw PrismException::providerResponseError(vsprintf(
84-
'Gemini Error: [%s] %s',
85-
[
86-
data_get($data, 'error.code', 'unknown'),
87-
data_get($data, 'error.message', 'unknown'),
88-
]
89-
));
90-
}
73+
return $this->httpResponse->json();
9174
}
9275

9376
/**

src/Providers/Gemini/Handlers/Text.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
use Prism\Prism\Contracts\PrismRequest;
1111
use Prism\Prism\Exceptions\PrismException;
1212
use Prism\Prism\Providers\Gemini\Concerns\ExtractSearchGroundings;
13-
use Prism\Prism\Providers\Gemini\Concerns\ValidatesResponse;
13+
use Prism\Prism\Providers\Gemini\Concerns\HandleResponseError;
1414
use Prism\Prism\Providers\Gemini\Maps\FinishReasonMap;
1515
use Prism\Prism\Providers\Gemini\Maps\MessageMap;
1616
use Prism\Prism\Providers\Gemini\Maps\ToolCallMap;
@@ -27,7 +27,7 @@
2727

2828
class Text extends TextHandler
2929
{
30-
use CallsTools, ExtractSearchGroundings, ValidatesResponse;
30+
use CallsTools, ExtractSearchGroundings, HandleResponseError;
3131

3232
/**
3333
* @param TextRequest $request

src/Providers/Groq/Concerns/ValidateResponse.php renamed to src/Providers/Groq/Concerns/HandleResponseError.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@
88
use Prism\Prism\Exceptions\PrismException;
99
use Prism\Prism\ValueObjects\ProviderRateLimit;
1010

11-
trait ValidateResponse
11+
trait HandleResponseError
1212
{
13-
protected function validateResponse(): void
13+
protected Response $httpResponse;
14+
15+
protected function handleResponseError(): void
1416
{
1517
$data = $this->httpResponse->json();
1618

src/Providers/Groq/Handlers/Stream.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
use Prism\Prism\Exceptions\PrismChunkDecodeException;
1515
use Prism\Prism\Exceptions\PrismException;
1616
use Prism\Prism\Exceptions\PrismRateLimitedException;
17+
use Prism\Prism\Providers\Groq\Concerns\HandleResponseError;
1718
use Prism\Prism\Providers\Groq\Concerns\ProcessRateLimits;
18-
use Prism\Prism\Providers\Groq\Concerns\ValidateResponse;
1919
use Prism\Prism\Providers\Groq\Maps\FinishReasonMap;
2020
use Prism\Prism\Providers\Groq\Maps\MessageMap;
2121
use Prism\Prism\Providers\Groq\Maps\ToolChoiceMap;
@@ -30,7 +30,7 @@
3030

3131
class Stream
3232
{
33-
use CallsTools, ProcessRateLimits, ValidateResponse;
33+
use CallsTools, HandleResponseError, ProcessRateLimits;
3434

3535
public function __construct(protected PendingRequest $client) {}
3636

src/Providers/Groq/Handlers/Structured.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
use Illuminate\Http\Client\PendingRequest;
66
use Illuminate\Http\Client\Response as ClientResponse;
77
use Illuminate\Support\Arr;
8+
use Prism\Prism\Providers\Groq\Concerns\HandleResponseError;
89
use Prism\Prism\Providers\Groq\Concerns\ProcessRateLimits;
9-
use Prism\Prism\Providers\Groq\Concerns\ValidateResponse;
1010
use Prism\Prism\Providers\Groq\Maps\FinishReasonMap;
1111
use Prism\Prism\Providers\Groq\Maps\MessageMap;
1212
use Prism\Prism\Structured\Request;
@@ -20,7 +20,7 @@
2020

2121
class Structured
2222
{
23-
use ProcessRateLimits, ValidateResponse;
23+
use HandleResponseError, ProcessRateLimits;
2424

2525
protected ClientResponse $httpResponse;
2626

@@ -37,7 +37,7 @@ public function handle(Request $request): StructuredResponse
3737

3838
$response = $this->sendRequest($request);
3939

40-
$this->validateResponse();
40+
$this->handleResponseError();
4141

4242
$data = $response->json();
4343

0 commit comments

Comments
 (0)