blog/llama.html
mayx 8f7d02697d Update 5 files
- /card.html
- /llama.html
- /index.html
- /Live2dHistoire/live2d/js/message.js
- /js/main.js
2024-01-01 10:53:46 +00:00

385 lines
9.7 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html>
<head>
<title>Cloudflare AI</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon"
href="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2016%2016'%3E%3Ctext%20x='0'%20y='14'%20style='filter:%20invert(100%);'%3E☁%3C/text%3E%3C/svg%3E"
type="image/svg+xml" />
<style>
body {
font-family: 'Raleway', sans-serif;
margin: 0;
padding: 20px;
background-color: #222;
color: #fff;
backdrop-filter: blur(10px);
overflow: hidden;
height: 100vh;
}
h1 {
text-align: center;
font-weight: 900;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5);
font-size: 64px;
}
h2 {
text-align: center;
font-weight: bold;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5);
font-size: 20px;
}
form {
margin-bottom: 20px;
display: flex;
justify-content: center;
/* Center items horizontally */
align-items: center;
/* Center items vertically */
position: fixed;
bottom: 12px;
width: 100vw;
border-radius: 10px;
padding: 10px;
/* Add some padding to give space around the items */
}
label {
font-weight: bold;
color: #ccc;
}
input[type="text"] {
width: 50%;
padding: 10px;
background-color: rgba(0, 0, 0, 0.3);
color: #fff;
border: none;
border-radius: 5px;
}
textarea {
width: 50%;
padding: 9px;
color: whitesmoke;
border: none;
border-radius: 5px;
font-size: 18px;
background-color: #222222;
}
textarea::-webkit-scrollbar {
display: none;
}
textarea:focus {
outline: none;
}
#response {
max-width: 80%;
height: calc(100% - 250px);
margin-left: 10%;
overflow-y: scroll;
}
#response::-webkit-scrollbar {
width: 10px;
border-radius: 50%;
}
.user-message {
background-color: rgba(71, 71, 71, 0.3);
padding: 10px;
margin-bottom: 10px;
margin-left: 40%;
max-width: 60%;
border-radius: 10px;
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
backdrop-filter: blur(4px);
-webkit-backdrop-filter: blur(4px);
border-radius: 10px;
border: 1px solid rgba(255, 255, 255, 0.18);
color: whitesmoke;
}
.ai-message {
background-color: rgba(71, 71, 71, 0.3);
padding: 10px;
margin-bottom: 10px;
margin-right: 40%;
max-width: 60%;
border-radius: 10px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
color: whitesmoke;
}
p {
margin: 0;
padding: 0;
}
.smaller {
font-size: 15;
}
.fa-github {
text-decoration: none;
color: inherit;
position: fixed;
bottom: 0;
right: 0;
padding: 15px;
}
.dropbtn {
background-color: #191b1c;
color: white;
padding: 16px;
font-size: 16px;
border: none;
cursor: pointer;
}
.dropdown {
position: relative;
display: inline-block;
position: absolute;
top: 5px;
left: 5px;
padding: 10px;
color: #fff;
border: none;
border-radius: 5px;
cursor: pointer;
}
.dropdown-content {
display: none;
position: absolute;
background-color: #191b1c;
min-width: 160px;
box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
z-index: 1;
}
.dropdown-content a {
color: #fff;
padding: 12px 16px;
text-decoration: none;
display: block;
}
.dropdown-content a:hover {
background-color: black
}
.dropdown:hover .dropdown-content {
display: block;
}
.dropdown:hover .dropbtn {
background-color: #444;
}
button {
font-size: 18px;
color: #e1e1e1;
font-family: inherit;
font-weight: 800;
cursor: pointer;
position: relative;
border: none;
background: none;
text-transform: uppercase;
transition-timing-function: cubic-bezier(0.25, 0.8, 0.25, 1);
transition-duration: 400ms;
transition-property: color;
}
button:focus,
button:hover {
color: #fff;
}
button:focus:after,
button:hover:after {
width: 100%;
left: 0%;
}
button:after {
content: "";
pointer-events: none;
bottom: -2px;
left: 50%;
position: absolute;
width: 0%;
height: 2px;
background-color: #fff;
transition-timing-function: cubic-bezier(0.25, 0.8, 0.25, 1);
transition-duration: 400ms;
transition-property: width, left;
}
.github-icon {
position: fixed;
right: 50px;
bottom: 50px;
}
/* if screen width<1000 then max -width=100% */
@media screen and (max-width: 1000px) {
#response {
max-width: 100%;
margin-left: 0;
height: calc(100% - 280px);
}
textarea {
width: 80%;
}
.github-icon {
visibility: hidden;
}
form {
bottom: 0;
}
.ai-message {
max-width: 80%;
min-width: 80%;
}
}
</style>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Raleway:wght@700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
</head>
<body>
<h1>Cloudflare AI</h1>
<div class="dropdown">
<button class="dropbtn">Settings</button>
<div class="dropdown-content">
<a href="#" onclick='setApiUrl()'>Custom API URL</a>
<a href="#" onclick='setIDsession()'>Custom ID Session</a>
</div>
</div>
<div id="response">
<div class="ai-message">Hey there, how can i assist you?</div>
</div>
<form id="chatForm">
<textarea id="input" type="text" placeholder="Send a message"></textarea>
<button type="submit"></button>
</form>
<a class="fa fa-github github-icon" href="https://github.com/localuser-isback/Cloudflare-AI" style="font-size:36px">
<script>
// --------------- CONFIG --------------- //
// modify URL to your API
let apiUrl = "https://llama.mayx.eu.org"
// ----------- END OF CONFIG ------------ //
let uuid = '';
function setApiUrl() {
const customUrl = prompt("Enter custom API URL: ");
if (customUrl) {
apiUrl = customUrl;
}
}
function setIDsession() {
const customUUID = prompt("Enter custom session ID: ");
if (customUUID) {
uuid = customUUID;
}
}
function generateUUID() {
let newUUID = '';
const chars = 'abcdef0123456789';
for (let i = 0; i < 32; i++) {
const charIndex = Math.floor(Math.random() * chars.length);
newUUID += chars[charIndex];
if (i === 7 || i === 11 || i === 15 || i === 19) {
newUUID += '-';
}
}
return newUUID;
}
const chatForm = document.getElementById('chatForm');
const inputField = document.getElementById('input');
const responseDiv = document.getElementById('response');
function chat() {
var input = inputField.value;
input = encodeURIComponent(input)
const userMessageDiv = document.createElement('div');
userMessageDiv.className = 'user-message';
userMessageDiv.innerText = decodeURIComponent(input);
responseDiv.appendChild(userMessageDiv);
const loadingDiv = document.createElement('div');
loadingDiv.className = 'loading';
loadingDiv.innerHTML = `<svg width="30" height="30" viewBox="0 0 50 50"><circle cx="25" cy="25" r="20" stroke="black" stroke-width="4" fill="none" /><circle cx="25" cy="25" r="20" stroke="#3498db" stroke-width="4" fill="none" stroke-dasharray="90" stroke-dashoffset="0"><animateTransform attributeName="transform" type="rotate" from="0 25 25" to="360 25 25" dur="1s" repeatCount="indefinite"/></circle></svg><center class="smaller">If you recive an error than wait 1-2 minutes refresh and try again.</center>`;
responseDiv.appendChild(loadingDiv);
axios.get(`${apiUrl}/${uuid}?q=${encodeURIComponent(input)}`)
.then((response) => {
responseDiv.removeChild(loadingDiv);
const aiMessages = response.data[0].response.filter(message => message.role === 'system' && message.content.response);
if (aiMessages.length > 0) {
const lastAiMessage = aiMessages[aiMessages.length - 1];
const aiMessageDiv = document.createElement('div');
aiMessageDiv.className = 'ai-message';
aiMessageDiv.innerHTML = marked.parse(lastAiMessage.content.response);
responseDiv.appendChild(aiMessageDiv);
}
inputField.value = '';
})
.catch((error) => {
console.log("Error receiving response:", error);
});
}
chatForm.addEventListener('submit', (event) => {
event.preventDefault();
chat()
});
inputField.addEventListener('keydown', (event) => {
if (event.key === 'Enter') {
if (!event.shiftKey) {
event.preventDefault();
chat()
}
}
});
if (!uuid) {
uuid = generateUUID();
}
</script>
</body>
</html>