Я вот сегодня написал графический интерфейс к ИИ (скачанных на свой компьютер) на PHP

Потом наверное ещё доделаю когда надо будет
(текст в облаке это мысли ИИ)
Написано очень коротко, всего 131 строка (программа занимает только 31 строку, а всё остальное только разметка), за один день всё написал
Код:<?php
if ($_GET['clearconversation'] != null) {
setcookie('conversation', '');
header("Location: ".strtok($_SERVER["REQUEST_URI"], '?'));
die();
}
global $conversation;
$conversation = json_decode($_COOKIE['conversation'], true);
if ($_GET['prompt'] != null && $_GET['set'] == "0") {
if ($_COOKIE['conversation'] == null) {
$conversation = '{"model": "DeepSeek-R1-Distill-Qwen-7B-Q3_K_M","messages": [{"role": "developer","content": "You are a helpful assistant."},{"role": "user","content": "'.$_GET['prompt'].'"}]}';
$conversation = json_decode($conversation, true);
} else {
$conversation = json_decode($_COOKIE['conversation'], true);
array_push($conversation['messages'], ['role' => 'user', 'content' => $_GET['prompt']]);
}
$json = shell_exec("curl http://localhost:8080/v1/chat/completions -H \"Content-Type: application/json\" -d '".json_encode($conversation)."'");
$result = json_decode($json, true);
array_push($conversation['messages'], $result['choices'][0]['message']);
setcookie('conversation', json_encode($conversation), 2147483647);
header("Location: ".str_replace("set=0","set=1",$_SERVER['REQUEST_URI']));
die();
}
?>
<!DOCTYPE html>
<html>
<head>
<style>
p {
margin: 5px;
}
body {
font-family: sans-serif;
color: #cbccc6;
background: #1f2430;
font-size: 16px;
}
.prompt {
left: 0;
width: 100%;
background: #2f3648;
border-radius: 5px;
border-width: 0;
color: #cbccc6;
transition: 1s;
padding: 3px;
height: 25px;
}
.prompt:hover {
height: 35px;
}
.send {
background: #3b435a;
border-radius: 5px;
border-width: 0;
color: #cbccc6;
padding: 5px;
margin-left: 5px;
}
.form1 {
width: 100%;
display: flex;
margin-top: auto;
margin-bottom: 0;
}
.message {
border-width: 0;
color: #cbccc6;
padding: 5px;
margin-bottom: 5px;
width: max-content;
max-width: 70%;
box-shadow: rgba(0, 0, 0, 0.30) 0px 3px 8px;
}
.messages {
height: 100%;
}
think {
display: block;
background: #6a79a2;
border-width: 0;
border-radius: 15px 15px 5px 15px;
color: #cbccc6;
padding: 5px;
margin-bottom: 5px;
width: max-content;
max-width: 99%;
/* box-shadow: rgba(0, 0, 0, 0.24) 0px 3px 8px; */
box-shadow: rgba(0, 0, 0, 0.17) 0px -23px 25px 0px inset, rgba(0, 0, 0, 0.15) 0px -36px 30px 0px inset, rgba(0, 0, 0, 0.1) 0px -79px 40px 0px inset, rgba(0, 0, 0, 0.06) 0px 2px 1px, rgba(0, 0, 0, 0.09) 0px 4px 2px, rgba(0, 0, 0, 0.09) 0px 8px 4px, rgba(0, 0, 0, 0.09) 0px 16px 8px, rgba(0, 0, 0, 0.09) 0px 32px 16px;
}
.role-developer {
color: #999;
font-style: italic;
box-shadow: none;
}
.role-user {
background: #3b5a40;
border-radius: 10px 5px 5px 10px;
margin-left: auto;
margin-right: 0;
}
.role-assistant {
background: #3b435a;
border-radius: 5px 10px 10px 5px;
}
</style>
</head>
<body>
<div class="messages">
<?php
if ($conversation != null) {
foreach ($conversation['messages'] as $value) {
$replaced = str_replace("<think>\n\n</think>\n\n", '', $value['content']);
$markdowned = shell_exec("echo \"".$replaced."\" | markdown");
echo '<div class="message role-'.$value['role'].'">'.$markdowned.'</div>';
}
}
?>
</div>
<form action="index.php" method="GET" class="form1">
<input type="text" name="prompt" class="prompt" />
<input type="hidden" name="set" readonly=true value="0" />
<input type="submit" class="send" value="Send"/>
</form><br />
<form action="index.php" method="GET">
<input type="hidden" name="clearconversation" readonly=true value="true" />
<input type="submit" id="clearconversation" value="Clear Conversation"/>
</form>
</body>
</html>
Отредактировано Gregon (2025-03-20 21:27:57)
- Подпись автора
Нет аккаунта на Telegram и Discord, но есть на Matrix, который лучше них: @gregon123:matrix.org