Spaces:
Sleeping
Sleeping
File size: 5,563 Bytes
66ff3e9 8658e51 b944409 2c87791 b944409 991d86a 2c87791 66ff3e9 991d86a 2a23908 c1a4bd7 991d86a c62ab32 2c87791 c62ab32 991d86a 2c87791 991d86a 4394f5b c62ab32 2c87791 c62ab32 2c87791 66ff3e9 2c87791 c9c1004 a4f3f3a 2c87791 a4f3f3a 2c87791 66ff3e9 2c87791 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
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.get(model, "No output") for model in selected_models], history
# 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
def update_outputs_and_history(input_text, selected_models):
# Ensure selected_models is treated as a list
selected_models = selected_models
output_components = create_outputs(selected_models)
output_placeholder.set(output_components)
return output_components
# Button to generate outputs and maintain history
generate_button = gr.Button("Generate Outputs")
generate_button.click(
fn=generate_model_outputs_with_history,
inputs=[input_text, selected_models],
outputs=[update_outputs_and_history(selected_models), history_placeholder],
)
# Create tabs for each selected model and display scrollable outputs
with gr.TabbedInterface() as tabs:
with gr.Tab("History"):
gr.JSON(label="History", value=history_placeholder)
for model in MODEL_OPTIONS:
with gr.Tab(f"{model} Output"):
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
)
# 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()
|