Chat-ai / app.py
CORVO-AI's picture
Update app.py
7e534ac verified
from flask import Flask, request, session, render_template_string, jsonify
import requests
import json
app = Flask(__name__)
app.secret_key = "retro_terminal_ai_chat_2026" # required for sessions
API_URL = "https://corvo-ai-xx-claude-4-5.hf.space/chat"
HTML_PAGE = """
<html>
<head>
<title>AI Terminal Chat</title>
<style type="text/css">
body {
background-color: black;
color: #00FF00;
font-family: Courier;
margin: 0;
padding: 0;
}
#chat {
height: 400px;
overflow: auto;
border-bottom: 1px solid #00FF00;
padding: 10px;
}
textarea {
width: 98%;
height: 80px;
background: black;
color: #00FF00;
border: 1px solid #00FF00;
font-family: Courier;
font-size: 16px;
}
input[type=button] {
width: 100%;
background: black;
color: #00FF00;
border: 1px solid #00FF00;
padding: 8px;
font-family: Courier;
}
.user, .ai {
white-space: pre-wrap; /* preserves indentation and spaces */
}
.user { color: #00FFFF; }
.ai { color: #00FF00; }
</style>
<script type="text/javascript">
function addMessage(text, className) {
var chat = document.getElementById("chat");
var div = document.createElement("div");
div.className = className;
div.textContent = text; // preserve spaces and indentation
chat.appendChild(div);
chat.scrollTop = chat.scrollHeight;
}
// ENTER = new line only, SEND = send
function handleKey(e) {
var key = e.keyCode || e.which;
if (key == 13 && !e.shiftKey) {
e.preventDefault();
var textarea = document.getElementById("message");
textarea.value += "\\n";
}
}
function sendMessage() {
var textarea = document.getElementById("message");
var message = textarea.value.trim();
if (message == "") return;
addMessage("YOU: " + message, "user");
textarea.value = "";
var xhr = new XMLHttpRequest();
xhr.open("POST", "/chat", true);
xhr.setRequestHeader("Content-type", "application/json");
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var response = JSON.parse(xhr.responseText);
addMessage("AI: " + response.reply, "ai");
}
};
xhr.send(JSON.stringify({message: message}));
}
// Load previous history from server
function loadHistory() {
var xhr = new XMLHttpRequest();
xhr.open("GET", "/history", true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var response = JSON.parse(xhr.responseText);
for (var i=0; i<response.length; i++) {
var entry = response[i];
addMessage(entry.role.toUpperCase() + ": " + entry.content,
entry.role=="user"?"user":"ai");
}
}
};
xhr.send();
}
window.onload = function() {
loadHistory();
};
</script>
</head>
<body>
<div id="chat"></div>
<div style="padding:10px;">
<textarea id="message" onkeydown="handleKey(event)" placeholder="Type your message..."></textarea>
<br>
<input type="button" value="SEND" onclick="sendMessage()">
</div>
</body>
</html>
"""
# Serve main page
@app.route("/")
def index():
return render_template_string(HTML_PAGE)
# Get chat history for session
@app.route("/history")
def history():
chat_history = session.get("chat_history", [])
return jsonify(chat_history)
# Chat API
@app.route("/chat", methods=["POST"])
def chat():
user_message = request.json.get("message")
if not user_message:
return jsonify({"reply": "No message received."})
# Initialize session chat if not exists
if "chat_history" not in session:
session["chat_history"] = []
chat_history = session["chat_history"]
# Append user message
chat_history.append({"role": "user", "content": user_message})
payload = {
"chat_history": chat_history,
"temperature": 0.1,
"top_p": 0.95,
"max_tokens": 2000
}
try:
response = requests.post(API_URL, json=payload, timeout=120)
response.raise_for_status()
assistant_reply = response.json().get("assistant_response", "No response.")
except Exception as e:
assistant_reply = "ERROR: " + str(e)
# Append AI reply
chat_history.append({"role": "assistant", "content": assistant_reply})
# Save back to session
session["chat_history"] = chat_history
return jsonify({"reply": assistant_reply})
if __name__ == "__main__":
app.run(host="0.0.0.0", port=7860)