<?php
// $SAY_API="fe51d7fb-f242-4601-8845-714bec9dedb4";
// $AI_API="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";
include("/R/lleo.me/hidden/apikeys.php");

if(empty(
$ask=$_REQUEST['ask'])) die(highlight_file(__FILE__,1));


die(
'service was available 11-18 apr 2023 only');




    if(
strlen($ask)>500) die("error 00");
    echo 
"\nВопрос: [".st($ask)."]";
    if(!(
$ans=ask_ai($ask))) die("error 02");
    echo 
"\nОтвет: [".st($ans)."]";
    if(!(
$file=sayka($ans))) die("error 03");
    echo 
"\nОтвет аудио: [".basename($file)."]";
    
fastcgi_finish_request();
    
$file0=sayka($ask,"alyss","good","0.8","1.3","_.mp3");
    
loki("\n".str_replace('.mp3','',basename($file0))
    .
" Человек: ".st($ask)
    .
"\n".str_replace('.mp3','',basename($file))
    .
" Господь: ".st($ans)."\n"
    
);
    exit;

function 
st($s) { return str_replace("\n","<br>",trim($s)); }

function 
loki($s) {
    
$f="/R/lleo.me/dnevnik/2023/04/GOD.txt";
    
$l=fopen($f,"a+"); fputs($l,$s); fclose($l); chmod($f,0666);
}

function 
ask_ai($text) {
    
$a='{
     "model": "gpt-3.5-turbo-0301",
     "messages": [
        {"role": "system", "content": "'
        
."Russian speech. You are God."
        
." Вы - Господь Бог, вы Всевышний, вы Создатель Вселенной."
        
." Люди обращаются к вам с вопросами."
        
." Отвечайте гордо, надменно, высокомерно, максимально лаконично."
        
." Вы безгрешны. Вы никогда не извиняетесь за ошибку или неточность. Ошибаются только люди, но не вы."
    
.'"},
        {"role": "user", "content": "Кто ты?"},
        {"role": "assistant", "content": "Я твой Господь, создатель Вселенной."},
        {"role": "user", "content": "В чем смысл жизни?"},
        {"role": "assistant", "content": "Смысл твоей жизни - в служении Мне"},
        {"role": "user", "content": "Скоро наступит весна?"},
        {"role": "assistant", "content": "Если будешь усердно трудиться, я подарю тебе еще одну весну."},
        {"role": "user", "content": "'
.htmlspecialchars($text).'"}
     ],
     "temperature": 0.7
    }'
;
    
$ch curl_init"https://api.openai.com/v1/chat/completions" );
    
curl_setopt($chCURLOPT_POST ,1);
    
curl_setopt($chCURLOPT_POSTFIELDS $a);
    
curl_setopt($chCURLOPT_RETURNTRANSFER ,1);
    
curl_setopt($chCURLOPT_HTTPHEADER, [
        
"Content-Type: application/json",
        
"Authorization: Bearer ".$GLOBALS['AI_API']
    ]);
    
$b curl_exec($ch); curl_close($ch);
    
$j=json_decode($b); if(!isset($j->choices[0]->message->content)) return false;
    return 
$j->choices[0]->message->content;
}

function 
sayka($text,$voice="ermil",$emotion="evil",$speed="0.9",$speed2="0.7",$rs=".mp3") {
    
$vd="/R/lleo.me/dnevnik/tmp/aivoice"; if(!is_dir($vd)) { mkdir($vd); chmod($vd,0777); }
    
// очистка мусора
    
$g=glob($vd."/*.mp3"); foreach($g as $l) { if(filemtime($l) < (time()-86400*30)) unlink($l); }

    
$url="https://tts.voicetech.yandex.net/generate?format=mp3&lang=ru-RU"
    
."&speaker=".$voice // женские: jane, oksana, alyss и omazh; мужские: zahar, ermil
    
."&emotion=".$emotion // good — радостный; evil — раздраженный; neutral — нейтральный (по умолчанию)
    
."&key=".$GLOBALS['SAY_API']
    .
"&text=".urlencode($text// '+' перед ударной гласной (гот+ов или def+ect) Ограничение: 2000 байт
    
."&speed=".$speed// 3.0 самый быстрый; 1.0 средний; 0.1 — самый медленный

    
$k=0; do { // Яндекс повадился выдавать ошибку, пробуем несколько раз
        
$ch curl_init($url);
        
curl_setopt($ch,CURLOPT_HEADER,1); // получать заголовки
        
curl_setopt($chCURLOPT_RETURNTRANSFER1); // возвращать результат работы
        
curl_exec($ch);
        
$result=curl_multi_getcontent($ch);
        
curl_close($ch);
        list(
$header,$result)=explode("\r\n\r\n",$result,2);
        if( empty(
$result)
            || !
strstr($header,"HTTP/1.1 200 OK")
            || !
strstr($header,"Content-Type: audio/mpeg")
        ) 
$result=false;
    } while( 
false===$result && (++$k 5)  );
    if(
false===$result) return false;

    
$file=$vd."/".md5($text).$rs// ".mp3";
    
$file1=$file."tmp.mp3";
    
file_put_contents($file1,$result);
    
// [!] sudo apt install sox libsox-fmt-mp3
    
exec("/usr/bin/sox \"".$file1."\" \"".$file."\" speed ".$speed2);
    
chmod($file,0666);
    
unlink($file1);
    return 
$file;
}
?>