<?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($ch, CURLOPT_POST ,1);
    curl_setopt($ch, CURLOPT_POSTFIELDS , $a);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER ,1);
    curl_setopt($ch, CURLOPT_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($ch, CURLOPT_RETURNTRANSFER, 1); // возвращать результат работы
        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;
}
?>