|
import gradio as gr |
|
import openai |
|
from openai import OpenAI |
|
import os |
|
|
|
def setup_client(): |
|
api_key = os.environ.get('OPENROUTER_API_KEY') |
|
if not api_key: |
|
raise ValueError("OPENROUTER_API_KEY environment variable not set") |
|
|
|
return OpenAI( |
|
base_url="https://openrouter.ai/api/v1", |
|
api_key=api_key, |
|
) |
|
|
|
def chat_with_grok(message, history): |
|
"""Main chat function""" |
|
if not message: |
|
return history, "" |
|
|
|
try: |
|
client = setup_client() |
|
|
|
|
|
completion = client.chat.completions.create( |
|
model="x-ai/grok-4", |
|
messages=[ |
|
{ |
|
"role": "user", |
|
"content": message |
|
} |
|
], |
|
max_tokens=1000, |
|
temperature=0.7 |
|
) |
|
|
|
response = completion.choices[0].message.content |
|
|
|
|
|
history.append((message, response)) |
|
|
|
return history, "" |
|
|
|
except Exception as e: |
|
error_msg = f"Error: {str(e)}" |
|
history.append((message, error_msg)) |
|
return history, "" |
|
|
|
def clear_chat(): |
|
"""Clear the chat history""" |
|
return [], "" |
|
|
|
|
|
with gr.Blocks(title="Grok 4 Chat Interface by Xhaheen ", theme=gr.themes.Soft()) as demo: |
|
gr.HTML(""" |
|
<div style="text-align: center; padding: 20px;"> |
|
<h1>π€ Grok 4 Chat Interface</h1> |
|
<p>Chat with xAI's Grok 4 model via OpenRouter</p> |
|
</div> |
|
""") |
|
|
|
with gr.Row(): |
|
with gr.Column(scale=1): |
|
clear_btn = gr.Button("ποΈ Clear Chat", variant="secondary", size="large") |
|
|
|
with gr.Column(scale=3): |
|
chatbot = gr.Chatbot( |
|
label="Chat with Grok 4", |
|
height=500, |
|
show_copy_button=True |
|
) |
|
|
|
msg_input = gr.Textbox( |
|
label="Message", |
|
placeholder="Type your message here...", |
|
lines=2, |
|
max_lines=5 |
|
) |
|
|
|
send_btn = gr.Button("Send π", variant="primary", size="large") |
|
|
|
|
|
def submit_message(message, history): |
|
if message: |
|
return chat_with_grok(message, history) |
|
return history, message |
|
|
|
|
|
send_btn.click( |
|
submit_message, |
|
inputs=[msg_input, chatbot], |
|
outputs=[chatbot, msg_input] |
|
) |
|
|
|
|
|
msg_input.submit( |
|
submit_message, |
|
inputs=[msg_input, chatbot], |
|
outputs=[chatbot, msg_input] |
|
) |
|
|
|
|
|
clear_btn.click( |
|
clear_chat, |
|
outputs=[chatbot, msg_input] |
|
) |
|
|
|
|
|
if __name__ == "__main__": |
|
demo.launch() |