Manojajj's picture
Update app.py
35c839b verified
import gradio as gr
from huggingface_hub import InferenceClient
# Initialize a list to store the conversation history
conversation_history = []
# Function to interact with the model using the Inference API
def chat_with_model(user_input, hf_api_key):
global conversation_history
if not hf_api_key:
return "Error: Please provide your Hugging Face API key."
try:
# Initialize the InferenceClient with the provided API key
client = InferenceClient(api_key=hf_api_key)
# Add the user's message to the conversation history
conversation_history.append({"role": "user", "content": user_input})
# Define the system message (defining the assistant role)
system_message = {
"role": "system",
"content": "You are a code assistant that helps with code generation, debugging, and explanations."
}
# Add system message to the conversation history
if len(conversation_history) == 1: # Add system message only once
conversation_history.insert(0, system_message)
# Ensure the conversation history doesn't exceed token limits
if len(conversation_history) > 10: # Keep the last 10 messages
conversation_history = [system_message] + conversation_history[-10:]
# Create a stream for chat completions using the API
stream = client.chat.completions.create(
model="Qwen/Qwen2.5-Coder-32B-Instruct",
messages=conversation_history,
max_tokens=500,
stream=True
)
# Collect the generated response from the model
response = ""
for chunk in stream:
response += chunk.choices[0].delta.content
# Add the assistant's response to the conversation history
conversation_history.append({"role": "assistant", "content": response})
return response
except Exception as e:
return f"Error: {e}"
# Create the Gradio interface with a light theme and black text
with gr.Blocks(
css="""
body {
background-color: #f9f9f9;
color: #000000;
}
.gradio-container {
background-color: #ffffff;
color: #000000;
}
.gradio-container input, .gradio-container textarea, .gradio-container button {
color: #000000;
background-color: #ffffff;
border: 1px solid #cccccc;
}
.gradio-container textarea::placeholder, .gradio-container input::placeholder {
color: #777777;
}
.gradio-container button {
background-color: #f0f0f0;
border: 1px solid #cccccc;
}
.gradio-container button:hover {
background-color: #e6e6e6;
}
#title, #description {
color: #000000 !important;
}
"""
) as demo:
gr.Markdown("<h1 id='title'>Code Assistant with Qwen2.5-Coder</h1>")
gr.Markdown("<p id='description'>Ask me anything about coding! Enter your Hugging Face API key to start.</p>")
# Create the input and output interface
with gr.Row():
user_input = gr.Textbox(lines=5, placeholder="Ask me anything about coding...")
api_key = gr.Textbox(lines=1, placeholder="Enter your Hugging Face API key", type="password")
# Create the output display
output = gr.Textbox(label="Response")
# Button for submitting queries
submit_button = gr.Button("Submit")
submit_button.click(chat_with_model, inputs=[user_input, api_key], outputs=output)
# Launch the app
demo.launch()