chatbot.php 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <?php
  2. require_once 'CsvReader.php';
  3. header('Content-Type: application/json');
  4. // only accept POST requests
  5. if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
  6. http_response_code(405);
  7. echo json_encode(['error' => 'Only POST allowed']);
  8. exit;
  9. }
  10. function extractPdfText($file) {
  11. $tmp = tempnam(sys_get_temp_dir(), 'pdftext');
  12. exec("pdftotext " . escapeshellarg($file) . " " . escapeshellarg($tmp));
  13. $text = file_get_contents($tmp);
  14. unlink($tmp);
  15. return $text ?: '';
  16. }
  17. // ### Build prompt for deepseek
  18. $input = json_decode(file_get_contents('php://input'), true);
  19. $question = isset($input['question']) ? $input['question'] : '';
  20. $roleFile = __DIR__ . '/data/role.txt';
  21. $role = file_exists($roleFile) ? file_get_contents($roleFile) : '';
  22. $reader = new CsvReader(__DIR__ . '/data/csv');
  23. $rows = $reader->readAll();
  24. $contextText = "";
  25. foreach ($rows as $row) {
  26. $contextText .= "- " . implode(" | ", $row) . "\n";
  27. }
  28. $pdf1 = extractPdfText(__DIR__ . '/data/pdf/onboarding.pdf');
  29. $pdf2 = extractPdfText(__DIR__ . '/data/pdf/urlaub.pdf');
  30. $pdfContext = "\n\nAus Onboarding-Dokument:\n" . $pdf1 . "\n\nAus Urlaubsdokument:\n" . $pdf2;
  31. $prompt = "Deine Rolle ist: ". $role;
  32. $prompt .= "\nDeine Frage ist: " . $question;
  33. $prompt .= "\nCSV-Daten:\n" . $contextText;
  34. $prompt .= "\nPDF-Kontext:\n" . $pdfContext;
  35. $payload = json_encode([
  36. "model" => "deepseek-r1",
  37. "prompt" => $prompt,
  38. "stream" => false
  39. ]);
  40. // ### Send Request
  41. $ch = curl_init('http://localhost:11434/api/generate');
  42. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  43. curl_setopt($ch, CURLOPT_POST, true);
  44. curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
  45. curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
  46. $response = curl_exec($ch);
  47. curl_close($ch);
  48. $data = json_decode($response, true);
  49. // ### Prepare Response
  50. $responseText = isset($data['response']) ? $data['response'] : 'No answer from Deepseek!';
  51. $responseText = preg_replace('/<think>.*?<\/think>/s', ' ', $responseText);
  52. $responseText = trim($responseText);
  53. echo json_encode([
  54. 'reply' => $responseText,
  55. 'misc' => $pdfContext
  56. ]);