nikunjcepatel's picture
Update app.py
f67b086 verified
raw
history blame
4.65 kB
import gradio as gr
import requests
import json
import os
import datetime
# Retrieve the OpenRouter API Key from the Space secrets
API_KEY = os.getenv("OpenRounter_API_KEY")
# Define available models for selection
MODEL_OPTIONS = [
"openai/gpt-4o-mini-2024-07-18",
"meta-llama/llama-3.1-405b-instruct",
"nvidia/llama-3.1-nemotron-70b-instruct",
"qwen/qwen-2.5-7b-instruct",
"mistralai/mistral-large-2411",
"microsoft/phi-3-medium-128k-instruct",
"meta-llama/llama-3.1-405b-instruct:free",
"nousresearch/hermes-3-llama-3.1-405b:free",
"mistralai/mistral-7b-instruct:free",
"microsoft/phi-3-medium-128k-instruct:free",
"liquid/lfm-40b:free"
]
# History storage
history = []
def generate_model_outputs_with_history(input_text, selected_models):
global history
results = {}
for model in selected_models:
response = requests.post(
url="https://openrouter.ai/api/v1/chat/completions",
headers={
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
},
data=json.dumps({
"model": model,
"messages": [{"role": "user", "content": input_text}],
"top_p": 1,
"temperature": 1,
"frequency_penalty": 0,
"presence_penalty": 0,
"repetition_penalty": 1,
"top_k": 0,
})
)
# Parse the response
if response.status_code == 200:
try:
response_json = response.json()
results[model] = response_json.get("choices", [{}])[0].get("message", {}).get("content", "No content returned.")
except json.JSONDecodeError:
results[model] = "Error: Unable to parse response."
else:
results[model] = f"Error: {response.status_code}, {response.text}"
# Add input and results to history
history_entry = {
"input": input_text,
"selected_models": selected_models,
"outputs": results,
"timestamp": str(datetime.datetime.now())
}
history.append(history_entry)
return results # Return the results for the selected models
# Create a dynamic number of outputs based on model selection
def create_outputs(selected_models):
return [
gr.Textbox(
label=f"Output from {model}",
interactive=False,
lines=5, # Adjust lines as needed
max_lines=10, # Max lines before scrolling
show_label=False, # Hide label in the tabbed view
elem_id=f"output_{model}", # Unique ID for styling
css=".output-window { overflow-y: auto; max-height: 200px; }" # Styling for scrollable output
)
for model in selected_models
]
def clear_history():
global history
history = []
return "History Cleared!", []
def export_history():
global history
# Save history to a file (e.g., JSON)
file_name = f"history_{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}.json"
with open(file_name, 'w') as f:
json.dump(history, f, indent=4)
return f"History exported to {file_name}", []
# Gradio interface with dynamic outputs and history
with gr.Blocks() as demo:
with gr.Row():
input_text = gr.Textbox(lines=2, label="Input Text", placeholder="Enter your query here")
selected_models = gr.CheckboxGroup(choices=MODEL_OPTIONS, label="Select Models", value=[MODEL_OPTIONS[0]])
output_placeholder = gr.State([]) # Placeholder for dynamic output components
history_placeholder = gr.State(history) # Maintain history state
# Button to generate outputs and maintain history
generate_button = gr.Button("Generate Outputs")
def generate_and_update(input_text, selected_models):
results = generate_model_outputs_with_history(input_text, selected_models)
output_components = create_outputs(selected_models)
return output_components, results
generate_button.click(
fn=generate_and_update,
inputs=[input_text, selected_models],
outputs=[output_placeholder, history_placeholder]
)
# Clear History button
clear_history_button = gr.Button("Clear History")
clear_history_button.click(fn=clear_history, outputs=[gr.Textbox(value="History Cleared!"), history_placeholder])
# Export History button
export_history_button = gr.Button("Export History")
export_history_button.click(fn=export_history, outputs=[gr.Textbox(value="History Exported Successfully!")])
demo.launch()