# Krok 13 - Architektúra promptov a DAIAPI klient ## Kontext projektu Systém využíva lokálne DAIAPI na generovanie textového obsahu (JSON content layer). AI nesmie generovať HTML, ale štruktúrované dáta podľa dodaného promptu. ## Pred implementáciou si preštuduj - `docs/mvp.md` - Sekcia 7 (AI workflow). - `docs/architecture.md` - Sekcia 10 (AI workflow). ## Cieľ Implementovať klienta pre DAIAPI a vytvoriť generátor promptov, ktorý na základe `wizard_data` pripraví zadanie pre AI. ## Požadované zmeny 1. Vytvorenie triedy `App\Services\DAIClient` v `src/Services/DAIClient.php`: - Metóda `sendRequest(string $prompt): ?string` (použitie `curl` alebo `file_get_contents` pre POST na lokalne API). - Spracovanie odpovede a ošetrenie timeoutov. 2. Vytvorenie triedy `App\Prompts\ContentPrompt` v `src/Prompts/ContentPrompt.php`: - Metóda `generate(array $wizardData): string`. - Prompt musí obsahovať: - Kontext projektu. - Inštrukcie pre "Content Layer" (SEO, Hero, Služby, atď.). - Striktný zákaz HTML výstupu. - Príklad požadovaného JSON formátu. - Vstupné fakty z `wizard_data`. ## Implementačné pravidlá - Prompt musí byť v slovenskom jazyku (alebo podľa `wizard_data.language`). - Klient musí logovať chyby komunikácie s API. - Použi systémovú premennú alebo konfiguračný súbor pre URL DAIAPI. ## Súbory ktoré je potrebné vytvoriť - `src/Services/DAIClient.php` - `src/Prompts/ContentPrompt.php` ## Súbory ktoré je potrebné upraviť Žiadne. ## API a dátové štruktúry DAIAPI je proprietarne API, ktore sa da pouzivat volanim na VPN adresu 10.2.8.1 a port 9001, prakticka implementacia v PHP: ```php function daiAPIrun(string $prompt): ?string { $url = "http://192.168.122.10:9001/run"; $payload = json_encode([ "prompt" => $prompt ]); if ($payload === false) { return null; } $ch = curl_init($url); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_HTTPHEADER => [ "Content-Type: application/json", "Content-Length: " . strlen($payload) ], CURLOPT_POSTFIELDS => $payload, CURLOPT_TIMEOUT => 60, ]); $response = curl_exec($ch); if ($response === false) { curl_close($ch); return null; } $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($httpCode !== 200) { return null; } $data = json_decode($response, true); if (!is_array($data)) { return null; } // očakávame: { "success": true, "answer": "...", ... } if (empty($data["success"]) || !isset($data["answer"])) { return null; } return $data["answer"]; } ``` ## Frontend požiadavky Nerelevantné. ## Backend požiadavky - Povolené rozšírenie `curl` v PHP. ## Testovací scenár 1. Vytvor testovací skript, ktorý vygeneruje prompt pre mock `wizard_data`. 2. Over, či prompt obsahuje všetky kľúčové informácie (názov firmy, služby). 3. Skús (ak máš prístup k API) poslať testovací dopyt a over, či vráti validný JSON bez HTML. ## Definition of Done - Klient pre AI je funkčný. - Prompt je správne navrhnutý a generuje štruktúrované zadanie. - Systém je pripravený na integráciu s workerom. ## Obmedzenia - AI nesmie v žiadnom prípade generovať tagy ako `
`, `

` a pod. v rámci content layer. ## Výstup - zoznam vytvorených súborov - zoznam upravených súborov - stručné zhrnutie vykonaných zmien - prípadné otvorené problémy