mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/exchange-2.0.git
synced 2026-08-19 04:23:55 +00:00
63 lines
2.1 KiB
PHP
63 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace App\Classes\Modules\Anthropic\Services;
|
|
|
|
|
|
use Illuminate\Support\Facades\Http;
|
|
use App\Classes\Exceptions\MalformedRequestException;
|
|
use App\Classes\Exceptions\ConnectionErrorException;
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
class CreatesClaudeResponse
|
|
{
|
|
/**
|
|
* @param string $userPrompt
|
|
* @param string $model
|
|
* @return null|object
|
|
* @throws MalformedRequestException
|
|
*/
|
|
public function execute(string $userPrompt, string $model = "") {
|
|
try {
|
|
// Default to the latest recommended Claude model
|
|
$modelId = $model ?? config('anthropic.default_model', 'claude-sonnet-4-5-20250929');
|
|
|
|
$data = [
|
|
'model' => $modelId,
|
|
'messages' => [
|
|
[
|
|
'role' => 'user',
|
|
'content' => $userPrompt
|
|
]
|
|
]
|
|
];
|
|
|
|
$response = Http::withHeaders([
|
|
'x-api-key' => config('anthropic.api_key'),
|
|
'anthropic-version' => config('anthropic.api_version', '2023-06-01'),
|
|
])->post(config('anthropic.base_url') . '/v1/messages', $data);
|
|
|
|
if ($response->successful()) {
|
|
return (object) $response->json();
|
|
} else {
|
|
Log::info('CreatesClaudeResponse error: ' . $response->body());
|
|
return null;
|
|
}
|
|
}
|
|
catch (\Illuminate\Http\Client\ConnectionException $exception) {
|
|
Log::info('ConnectionException' . json_encode($exception));
|
|
throw new ConnectionErrorException(
|
|
'Failed to connect to Claude API',
|
|
$exception->getMessage(),
|
|
$userPrompt,
|
|
$exception->getTraceAsString()
|
|
);
|
|
}
|
|
catch (\Exception $exception) {
|
|
Log::info('Exception' . json_encode($exception));
|
|
throw new MalformedRequestException(
|
|
'Unable to get correct response from Claude API: ' . $exception->getMessage()
|
|
);
|
|
}
|
|
}
|
|
}
|