Spaces:
Sleeping
Sleeping
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() | |