PHP Classes

File: chatController.php

Recommend this page to a friend!
  Classes of Rodrigo Faustino   Deepseek Offline   chatController.php   Download  
File: chatController.php
Role: Auxiliary script
Content type: text/plain
Description: Configuration script
Class: Deepseek Offline
Chat with DeepSeek bot in the local machine
Author: By
Last change: atualização para funcionar em dois chats
Date: 1 month ago
Size: 3,467 bytes
 

Contents

Class file image Download
<?php
session_start
();

ini_set('memory_limit', '512M');
set_time_limit(0);
ini_set('display_errors', 1);
ini_set('log_errors', 1);
ini_set('error_log', __DIR__ . '/logs/php_errors.log');
error_reporting(E_ALL);

header('Content-Type: text/plain');
header('Cache-Control: no-cache');
header('Access-Control-Allow-Origin: *');
$message =[];
if (
$_SERVER['REQUEST_METHOD'] !== 'POST') {
    echo
json_encode(["error" => "Método inválido"]);
    exit;
}

$userMessage = $_POST['userMessage'] ?? '';
$selectedModel = $_POST['modelSelect'] ?? 'gemma-3-4b-it:2';
$streamEnabled = $_POST['streamToggle'] === 'true' ? true : false;
$useOllama = $_POST['ollamaToggle'] === 'true' ? true : false;

$apiUrl = $useOllama ? "http://localhost:11434/api/generate" : "http://127.0.0.1:1234/v1/chat/completions";

$message = [];


$imageBase64 = null;
if (isset(
$_FILES['image']) && $_FILES['image']['error'] === UPLOAD_ERR_OK) {
   
$imageData = file_get_contents($_FILES['image']['tmp_name']);
   
$imageBase64 = base64_encode($imageData);
}

if (
$useOllama) {
   
$message = [
       
"model" => $selectedModel,
       
"prompt" => $userMessage,
       
"stream" => $streamEnabled,
    ];
    if (
$imageBase64) {
        
$message['images'] = [$imageBase64];
    }

} else {
   
$message = [
       
"model" => $selectedModel,
       
"messages" => [
            [
"role" => "system", "content" => "Você é uma inteligência artificial que responde qualquer pergunta com base no seu conhecimento." ],
            [
"role" => "user", "content" => $userMessage ]
        ],
       
"temperature" => 0.7,
       
"max_tokens" => -1,
       
"stream" => $streamEnabled
   
];
    if (
$imageBase64) {
       
$message['messages'][1]['content'] = [
            [
"type" => "text", "text" => $userMessage],
            [
"type" => "image_url", "image_url" => [
               
"url" => "data:image/jpeg;base64," . $imageBase64
           
]]
        ];
    }
}


if (!
$userMessage) {
    echo
json_encode(["error" => "Mensagem inválida"]);
    exit;
}

$curl = curl_init();
curl_setopt_array($curl, [
   
CURLOPT_URL => $apiUrl ,
   
CURLOPT_RETURNTRANSFER => true,
   
CURLOPT_ENCODING => '',
   
CURLOPT_MAXREDIRS => 10,
   
CURLOPT_TIMEOUT => 120,
   
CURLOPT_FOLLOWLOCATION => true,
   
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
   
CURLOPT_CUSTOMREQUEST => 'POST',
   
CURLOPT_POSTFIELDS => json_encode($message),
   
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
   
CURLOPT_WRITEFUNCTION => function ($ch, $chunk) use ($useOllama) {
        if (
$useOllama && $chunk !== "\n") {
           
$data = json_decode($chunk, true);
            if (isset(
$data['response'])) {
                echo
$data['response'];
            }
            if (isset(
$data['done']) && $data['done'] === true) {
            }
        } elseif (!
$useOllama && strpos($chunk, 'data: ') === 0) {
            
$data = json_decode(substr($chunk, 6), true);
             if (isset(
$data['choices'][0]['delta']['content'])) {
                 echo
$data['choices'][0]['delta']['content'];
             }
             if (isset(
$data['choices'][0]['finish_reason']) && $data['choices'][0]['finish_reason'] !== null) {
             }

        } else {
             echo
$chunk;
        }

       
ob_flush();
       
flush();
        return
strlen($chunk);
    },
]);

curl_exec($curl);

if (
curl_errno($curl)) {
    echo
json_encode(["error" => curl_error($curl)]);
}

curl_close($curl);
exit;