final / app.py
yoshizen's picture
Update app.py
eafab09 verified
"""
Minimal Gradio interface for a simple AI assistant without smolagents
This is a standalone version that uses only Hugging Face Inference API directly.
It creates a simple Gradio interface for text generation.
"""
import os
import sys
import json
import requests
import gradio as gr
# Check if running in Hugging Face Spaces
IS_HF_SPACES = os.environ.get("SPACE_ID") is not None
class MinimalAIAssistant:
"""
Minimal AI Assistant using Hugging Face Inference API directly
"""
def __init__(self, api_key=None, model_id="mistralai/Mixtral-8x7B-Instruct-v0.1"):
"""
Initialize the minimal AI assistant
Args:
api_key: Hugging Face API key
model_id: Model ID to use
"""
self.api_key = api_key or os.environ.get("HF_API_KEY", "")
self.model_id = model_id
self.api_url = f"https://api-inference.huggingface.co/models/{model_id}"
self.headers = {"Authorization": f"Bearer {self.api_key}"}
# System prompt
self.system_prompt = """
You are an advanced AI assistant designed to help with various tasks.
You can answer questions, provide information, and assist with problem-solving.
Always be helpful, accurate, and concise in your responses.
"""
def query(self, prompt):
"""
Query the model with a prompt
Args:
prompt: User prompt
Returns:
Model response
"""
try:
# Format the prompt with system message
formatted_prompt = f"{self.system_prompt}\n\nUser: {prompt}\n\nAssistant:"
# Prepare the payload
payload = {
"inputs": formatted_prompt,
"parameters": {
"max_new_tokens": 1024,
"temperature": 0.7,
"top_p": 0.95,
"do_sample": True
}
}
# Make the API request
response = requests.post(self.api_url, headers=self.headers, json=payload)
# Check for errors
if response.status_code != 200:
return f"Error: API returned status code {response.status_code}. {response.text}"
# Parse the response
result = response.json()
# Extract the generated text
if isinstance(result, list) and len(result) > 0:
generated_text = result[0].get("generated_text", "")
# Remove the prompt from the response
if generated_text.startswith(formatted_prompt):
generated_text = generated_text[len(formatted_prompt):].strip()
return generated_text
else:
return "Error: Unexpected response format from API"
except Exception as e:
return f"Error querying model: {str(e)}"
def create_gradio_interface():
"""
Create a Gradio interface for the minimal AI assistant
Returns:
Gradio interface
"""
# Initialize the assistant
assistant = MinimalAIAssistant()
def process_query(query, api_key=""):
"""
Process a user query
Args:
query: User query
api_key: Hugging Face API key (optional)
Returns:
Assistant's response
"""
# Update API key if provided
if api_key:
assistant.api_key = api_key
assistant.headers = {"Authorization": f"Bearer {api_key}"}
# Check if API key is set
if not assistant.api_key:
return "Error: No API key provided. Please enter your Hugging Face API key."
# Process the query
return assistant.query(query)
# Create the interface
with gr.Blocks(title="Minimal AI Assistant") as interface:
gr.Markdown("# Minimal AI Assistant")
gr.Markdown("""
This is a minimal AI assistant using the Hugging Face Inference API.
Enter your query below and the assistant will respond.
""")
api_key_input = gr.Textbox(
label="Hugging Face API Key",
placeholder="Enter your Hugging Face API key here...",
type="password"
)
query_input = gr.Textbox(
label="Your Query",
placeholder="Enter your query here...",
lines=3
)
submit_button = gr.Button("Submit")
response_output = gr.Textbox(
label="Assistant Response",
lines=15
)
# Sample queries
gr.Markdown("### Sample Queries")
sample_queries = [
"What is the capital of France?",
"Explain the concept of machine learning in simple terms.",
"Write a short poem about artificial intelligence."
]
for query in sample_queries:
sample_button = gr.Button(f"Try: {query}")
sample_button.click(
fn=lambda q=query: q,
outputs=query_input
)
# Set up event handlers
submit_button.click(
fn=process_query,
inputs=[query_input, api_key_input],
outputs=response_output
)
# Add examples
gr.Examples(
examples=sample_queries,
inputs=query_input
)
return interface
# Create and launch the interface
interface = create_gradio_interface()
# For Hugging Face Spaces
if __name__ == "__main__":
interface.launch()