| | <!DOCTYPE html> |
| | <html lang="en"> |
| | <head> |
| | <meta charset="UTF-8"> |
| | <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| | <title>Crypton.Agi - Quantum Chatbot Wizardry</title> |
| | <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> |
| | <style> |
| | :root { |
| | --primary: #6e48aa; |
| | --secondary: #9d50bb; |
| | --accent: #4776E6; |
| | --dark: #1a1a2e; |
| | --light: #f8f9fa; |
| | --success: #4BB543; |
| | --warning: #FFCC00; |
| | --danger: #FF3333; |
| | } |
| | |
| | * { |
| | margin: 0; |
| | padding: 0; |
| | box-sizing: border-box; |
| | font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; |
| | } |
| | |
| | body { |
| | background: linear-gradient(135deg, var(--dark) 0%, #16213e 100%); |
| | color: var(--light); |
| | min-height: 100vh; |
| | display: flex; |
| | flex-direction: column; |
| | } |
| | |
| | .container { |
| | max-width: 1200px; |
| | margin: 0 auto; |
| | padding: 2rem; |
| | flex: 1; |
| | } |
| | |
| | header { |
| | text-align: center; |
| | margin-bottom: 2rem; |
| | animation: fadeIn 1s ease-out; |
| | } |
| | |
| | h1 { |
| | font-size: 2.5rem; |
| | margin-bottom: 0.5rem; |
| | background: linear-gradient(to right, var(--primary), var(--secondary)); |
| | -webkit-background-clip: text; |
| | background-clip: text; |
| | color: transparent; |
| | } |
| | |
| | .subtitle { |
| | font-size: 1.1rem; |
| | opacity: 0.8; |
| | } |
| | |
| | .chat-container { |
| | background: rgba(255, 255, 255, 0.05); |
| | backdrop-filter: blur(10px); |
| | border-radius: 1rem; |
| | padding: 1.5rem; |
| | box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2); |
| | height: 60vh; |
| | display: flex; |
| | flex-direction: column; |
| | } |
| | |
| | .chat-messages { |
| | flex: 1; |
| | overflow-y: auto; |
| | padding: 1rem; |
| | margin-bottom: 1rem; |
| | display: flex; |
| | flex-direction: column; |
| | gap: 1rem; |
| | } |
| | |
| | .message { |
| | max-width: 80%; |
| | padding: 0.8rem 1.2rem; |
| | border-radius: 1rem; |
| | animation: fadeIn 0.3s ease-out; |
| | } |
| | |
| | .user-message { |
| | align-self: flex-end; |
| | background: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%); |
| | color: white; |
| | border-bottom-right-radius: 0.2rem; |
| | } |
| | |
| | .bot-message { |
| | align-self: flex-start; |
| | background: rgba(255, 255, 255, 0.1); |
| | border-bottom-left-radius: 0.2rem; |
| | } |
| | |
| | .typing-indicator { |
| | display: flex; |
| | align-items: center; |
| | gap: 0.5rem; |
| | padding: 0.8rem 1.2rem; |
| | background: rgba(255, 255, 255, 0.1); |
| | border-radius: 1rem; |
| | width: fit-content; |
| | margin-bottom: 1rem; |
| | } |
| | |
| | .typing-dot { |
| | width: 8px; |
| | height: 8px; |
| | background-color: var(--light); |
| | border-radius: 50%; |
| | opacity: 0.6; |
| | animation: typingAnimation 1.4s infinite ease-in-out; |
| | } |
| | |
| | .typing-dot:nth-child(1) { animation-delay: 0s; } |
| | .typing-dot:nth-child(2) { animation-delay: 0.2s; } |
| | .typing-dot:nth-child(3) { animation-delay: 0.4s; } |
| | |
| | .chat-input { |
| | display: flex; |
| | gap: 1rem; |
| | } |
| | |
| | #messageInput { |
| | flex: 1; |
| | padding: 0.8rem 1.2rem; |
| | border: none; |
| | border-radius: 2rem; |
| | background: rgba(255, 255, 255, 0.1); |
| | color: var(--light); |
| | font-size: 1rem; |
| | outline: none; |
| | transition: all 0.3s ease; |
| | } |
| | |
| | #messageInput:focus { |
| | background: rgba(255, 255, 255, 0.2); |
| | box-shadow: 0 0 0 2px var(--primary); |
| | } |
| | |
| | #sendButton { |
| | background: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%); |
| | color: white; |
| | border: none; |
| | border-radius: 2rem; |
| | padding: 0 1.5rem; |
| | cursor: pointer; |
| | transition: all 0.3s ease; |
| | display: flex; |
| | align-items: center; |
| | justify-content: center; |
| | } |
| | |
| | #sendButton:hover { |
| | transform: translateY(-2px); |
| | box-shadow: 0 5px 15px rgba(110, 72, 170, 0.4); |
| | } |
| | |
| | #sendButton:active { |
| | transform: translateY(0); |
| | } |
| | |
| | .model-info { |
| | margin-top: 1rem; |
| | font-size: 0.9rem; |
| | opacity: 0.7; |
| | text-align: center; |
| | } |
| | |
| | @keyframes fadeIn { |
| | from { opacity: 0; transform: translateY(10px); } |
| | to { opacity: 1; transform: translateY(0); } |
| | } |
| | |
| | @keyframes typingAnimation { |
| | 0%, 60%, 100% { transform: translateY(0); opacity: 0.6; } |
| | 30% { transform: translateY(-5px); opacity: 1; } |
| | } |
| | |
| | |
| | @media (max-width: 768px) { |
| | .container { |
| | padding: 1rem; |
| | } |
| | |
| | h1 { |
| | font-size: 2rem; |
| | } |
| | |
| | .chat-container { |
| | height: 70vh; |
| | } |
| | |
| | .message { |
| | max-width: 90%; |
| | } |
| | } |
| | </style> |
| | </head> |
| | <body> |
| | <div class="container"> |
| | <header> |
| | <h1>Crypton.Agi</h1> |
| | <p class="subtitle">Your quantum-powered AI assistant</p> |
| | </header> |
| | |
| | <div class="chat-container"> |
| | <div class="chat-messages" id="chatMessages"> |
| | <div class="message bot-message"> |
| | Hello! I'm Crypton.Agi, your AI assistant. How can I help you today? |
| | </div> |
| | </div> |
| | |
| | <div class="chat-input"> |
| | <input type="text" id="messageInput" placeholder="Type your message here..." autocomplete="off"> |
| | <button id="sendButton"> |
| | <i class="fas fa-paper-plane"></i> |
| | </button> |
| | </div> |
| | |
| | <p class="model-info">Powered by Hugging Face Transformers</p> |
| | </div> |
| | </div> |
| |
|
| | <script> |
| | document.addEventListener('DOMContentLoaded', () => { |
| | const chatMessages = document.getElementById('chatMessages'); |
| | const messageInput = document.getElementById('messageInput'); |
| | const sendButton = document.getElementById('sendButton'); |
| | |
| | |
| | const API_URL = 'https://api-inference.huggingface.co/models/'; |
| | const MODEL_NAME = 'gpt2'; |
| | |
| | |
| | function addMessage(text, isUser) { |
| | const messageDiv = document.createElement('div'); |
| | messageDiv.classList.add('message'); |
| | messageDiv.classList.add(isUser ? 'user-message' : 'bot-message'); |
| | messageDiv.textContent = text; |
| | chatMessages.appendChild(messageDiv); |
| | chatMessages.scrollTop = chatMessages.scrollHeight; |
| | } |
| | |
| | |
| | function showTyping() { |
| | const typingDiv = document.createElement('div'); |
| | typingDiv.classList.add('typing-indicator'); |
| | typingDiv.id = 'typingIndicator'; |
| | |
| | for (let i = 0; i < 3; i++) { |
| | const dot = document.createElement('div'); |
| | dot.classList.add('typing-dot'); |
| | typingDiv.appendChild(dot); |
| | } |
| | |
| | chatMessages.appendChild(typingDiv); |
| | chatMessages.scrollTop = chatMessages.scrollHeight; |
| | } |
| | |
| | |
| | function hideTyping() { |
| | const typingIndicator = document.getElementById('typingIndicator'); |
| | if (typingIndicator) { |
| | typingIndicator.remove(); |
| | } |
| | } |
| | |
| | |
| | async function sendMessage() { |
| | const message = messageInput.value.trim(); |
| | if (!message) return; |
| | |
| | |
| | addMessage(message, true); |
| | messageInput.value = ''; |
| | |
| | |
| | showTyping(); |
| | |
| | try { |
| | |
| | |
| | const response = await fetch(`${API_URL}${MODEL_NAME}`, { |
| | method: 'POST', |
| | headers: { |
| | 'Content-Type': 'application/json', |
| | 'Authorization': 'Bearer YOUR_HUGGING_FACE_TOKEN' |
| | }, |
| | body: JSON.stringify({ inputs: message }) |
| | }); |
| | |
| | if (!response.ok) { |
| | throw new Error(`API request failed with status ${response.status}`); |
| | } |
| | |
| | const data = await response.json(); |
| | |
| | |
| | hideTyping(); |
| | |
| | |
| | if (data && data[0] && data[0].generated_text) { |
| | addMessage(data[0].generated_text.replace(message, '').trim(), false); |
| | } else { |
| | addMessage("I received your message but couldn't process it properly.", false); |
| | } |
| | } catch (error) { |
| | hideTyping(); |
| | addMessage(`Sorry, I encountered an error: ${error.message}`, false); |
| | console.error('API Error:', error); |
| | } |
| | } |
| | |
| | |
| | sendButton.addEventListener('click', sendMessage); |
| | messageInput.addEventListener('keypress', (e) => { |
| | if (e.key === 'Enter') { |
| | sendMessage(); |
| | } |
| | }); |
| | }); |
| | </script> |
| | </body> |
| | </html> |