class ChatGpt {
protected static $instance;
protected const API_TOKEN = "тут Ваш токен";
public const TYPE_CHAT = ['gpt-4o-mini', 'gpt-4o', 'claude-3-haiku', 'claude-3-opus', 'claude-3.5-sonnet'];
private static $messages = [];
private function __construct(){
}
private function __clone(){
}
private function __wakeup(){
}
public static function getInstance(){
if (is_null(self::$instance)) {
self::$instance = new self;
}
return self::$instance;
}
public static function getHistory(){
return self::$messages;
}
public static function clearHistory(){
self::$messages = [];
}
public static function updateHistory($messages){
self::$messages = $messages;
}
private static function get($url, $headers, $data){
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($data),
]);
$result = curl_exec($curl);
curl_close($curl);
if ($result === false) {
return json_decode( 'Curl error: ' . curl_error($curl));
}
return json_decode($result,true);
}
public static function ask($question, $type=0){
$answer = "";
if(!empty($question)){
$token = self::API_TOKEN;
$type = self::TYPE_CHAT[$type] ?? self::TYPE_CHAT[0];
if($token){
$url = "https://ask.chadgpt.ru/api/public/".$type;
$headers = [
'Content-Type: application/json'
];
$data = [
"message" => $question,
"api_key" => $token,
"history" => [
["role" => "system", "content" => "Отвечай максимально коротко."],
],
"temperature" => 0.7,
];
if (!empty(self::$messages)) {
$lastMessage = end(self::$messages);
$data['history'][] = ['role' => 'user', 'content' => $lastMessage['user']];
$data['history'][] = ['role' => 'assistant', 'content' => $lastMessage['assistant']];
}
$result = self::get($url, $headers, $data);
$answer = $result['response'] ?? $result['error'] ?? '';
if(!empty($answer)){
self::$messages[] = [
"user" => $question,
"assistant"=> $answer
];
}
}
}
return $answer;
}
} |