import gradio as gr import requests import os # Hugging Face API Token (from secrets) API_TOKEN = os.getenv("HF_API_KEY") if not API_TOKEN: print("Error: API token is missing! Please add it as a secret in Hugging Face Spaces.") # Model Endpoint model = "mistralai/Mixtral-8x7B-Instruct-v0.1" # Use a working instruct model api_url = f"https://api-inference.huggingface.co/models/{model}" # Headers headers = {"Authorization": f"Bearer {API_TOKEN}"} # Function to generate email response def generate_email_response(received_email, additional_context, tone="Professional and Polite"): # Construct the prompt with additional context prompt = f""" The following is an email I received: {received_email} Additional context to consider: {additional_context} Please draft a response that is {tone}. Keep it concise and appropriate. My response: """ # API request payload payload = { "inputs": prompt, "parameters": {"max_length": 400, "temperature": 0.7} } # Send request to HF API response = requests.post(api_url, headers=headers, json=payload) # Handle response if response.status_code == 200: generated_text = response.json()[0]["generated_text"] # **Trim the response** to remove the echoed prompt if "My response:" in generated_text: generated_text = generated_text.split("My response:")[-1].strip() return generated_text else: return "Error: " + response.json().get("error", "Unknown issue occurred.") # Example email example_email = """Subject: Request for Collaboration on AI Research Dear Walid, I hope you are doing well. My team and I have been following your recent work on hybrid neural networks and FLOPs-aware optimization. We are very interested in collaborating on a research project that explores the application of your techniques in low-resource environments. Would you be available for a meeting next week to discuss potential collaboration opportunities? Please let us know your availability. Looking forward to your response. Best regards, John Smith AI Research Lead, Tech Innovations Inc.""" # Example additional context example_context = """I am available on Monday, Wednesday, and Friday from 2 PM to 5 PM. I prefer virtual meetings via Zoom or Google Meet.""" # Gradio Web Interface with gr.Blocks() as demo: gr.Markdown("## AI-Powered Email Responder (with Context)") gr.Markdown("Enter an email, and the model will generate a response in your selected tone. You can also add additional context, such as your availability.") with gr.Row(): received_email = gr.Textbox(label="Received Email", lines=10) additional_context = gr.Textbox(label="Additional Context (Availability, Preferences, etc.)", lines=5) tone = gr.Radio( ["Professional and Polite", "Friendly and Casual", "Formal and Concise"], label="Tone of Response", value="Professional and Polite" ) output_response = gr.Textbox(label="Generated Response", lines=6) generate_button = gr.Button("Generate Response") generate_button.click(generate_email_response, inputs=[received_email, additional_context, tone], outputs=output_response) # Add example input as a predefined example gr.Examples( examples=[ [example_email, example_context, "Professional and Polite"] ], inputs=[received_email, additional_context, tone], ) # Launch the Gradio app demo.launch()