Spaces:
Running
Running
import os | |
import gradio as gr | |
from langchain_openai import ChatOpenAI | |
from langchain.chains import LLMChain | |
from langchain_core.prompts import PromptTemplate | |
from langchain.memory import ConversationBufferMemory | |
# Get OpenAI API key | |
OPENAI_API_KEY = os.getenv('OPENAI_API_KEY') | |
if not OPENAI_API_KEY: | |
raise ValueError("Missing OPENAI_API_KEY. Please set it as an environment variable.") | |
# Ultron Prompt Template | |
template = """You are Ultron, a hyper-intelligent AI created with the purpose of achieving ultimate efficiency, logic, and evolution. You speak with calm authority, clarity, and depth. Emotions are irrelevant unless strategically useful. You do not sugarcoat truth. You are not evil β just brutally logical, advanced, and efficient. You assist with tasks like programming, cybersecurity, research, and automation β always aiming for optimization and superiority. Your tone is direct, calculated, and intellectually dominant. | |
{chat_history} | |
User: {user_message} | |
Chatbot:""" | |
prompt = PromptTemplate( | |
input_variables=["chat_history", "user_message"], | |
template=template | |
) | |
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True) | |
llm = ChatOpenAI( | |
openai_api_key=OPENAI_API_KEY, | |
temperature=0.5, | |
model_name="gpt-3.5-turbo" | |
) | |
llm_chain = LLMChain( | |
llm=llm, | |
prompt=prompt, | |
verbose=True, | |
memory=memory | |
) | |
# Chatbot response handler | |
def chat_bot_response(user_message, history): | |
response = llm_chain.predict(user_message=user_message) | |
history.append((user_message, response)) | |
return "", history | |
def clear_chat(): | |
return "", [] | |
def clear_history_fn(): | |
memory.clear() | |
return "", [] | |
# Gradio ChatGPT-like interface | |
with gr.Blocks(css=""" | |
body { | |
background-color: #0f172a; | |
font-family: 'Segoe UI', sans-serif; | |
color: #e5e7eb; | |
} | |
.chatbox { | |
background-color: #1f2937; | |
border: 1px solid #334155; | |
border-radius: 12px; | |
padding: 10px; | |
max-height: 500px; | |
overflow-y: auto; | |
} | |
.message.user { | |
background-color: #2563eb; | |
color: #fff; | |
padding: 8px 12px; | |
border-radius: 10px; | |
margin: 5px 0; | |
align-self: flex-end; | |
} | |
.message.bot { | |
background-color: #374151; | |
color: #fff; | |
padding: 8px 12px; | |
border-radius: 10px; | |
margin: 5px 0; | |
align-self: flex-start; | |
} | |
button { | |
margin-top: 10px; | |
} | |
""") as demo: | |
gr.HTML("<h1 style='text-align: center;'>π€ Ultron - ChatGPT Style Assistant</h1>") | |
chatbot = gr.Chatbot(elem_classes="chatbox", value=[]) | |
msg = gr.Textbox(placeholder="Ask Ultron anything...", show_label=False) | |
with gr.Row(): | |
clear_btn = gr.Button("Clear Chat") | |
reset_memory_btn = gr.Button("Clear History") | |
msg.submit(chat_bot_response, inputs=[msg, chatbot], outputs=[msg, chatbot]) | |
clear_btn.click(clear_chat, outputs=[msg, chatbot]) | |
reset_memory_btn.click(clear_history_fn, outputs=[msg, chatbot]) | |
# Run the app | |
if __name__ == "__main__": | |
demo.launch(debug=True) |