summaryrefslogtreecommitdiff
path: root/llama.html
diff options
context:
space:
mode:
authormayx <mayx@outlook.com>2024-01-01 11:53:46 +0100
committermayx <mayx@outlook.com>2024-01-01 11:53:46 +0100
commit8f7d02697dce507ff6b34fef41cf4d9e43124a52 (patch)
treef5673a9b6022bcce5d927b7329a5f7a32f9c70a4 /llama.html
parent4afea923c5f83d3bf056006abde80e8fbf83f04a (diff)
Update 5 files
- /card.html - /llama.html - /index.html - /Live2dHistoire/live2d/js/message.js - /js/main.js
Diffstat (limited to 'llama.html')
-rw-r--r--llama.html385
1 files changed, 385 insertions, 0 deletions
diff --git a/llama.html b/llama.html
new file mode 100644
index 0000000..f3e5a69
--- /dev/null
+++ b/llama.html
@@ -0,0 +1,385 @@
+<!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> \ No newline at end of file