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("
Ask me anything about coding! Enter your Hugging Face API key to start.
") # 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()