Llm_Bench / app.py
AravindS2006's picture
Update app.py
f4acf21 verified
Raw
History Blame Contribute Delete
2.2 kB
import streamlit as st
import requests
import pandas as pd
import plotly.express as px
from app.data_handling import save_results_to_csv
import os
BACKEND_URL = os.getenv("BACKEND_URL", "http://localhost:8000") # Local backend URL if running locally. HF Spaces need the correct backend URL
st.title("GenAI Model Evaluator By ARAVINDSELVAN")
# Input fields
prompt = st.text_area("Enter your prompt:")
llm_names = st.multiselect("Select LLMs to compare:", ["openai", "gemini"], default=["openai", "gemini"])
dataset_file = st.file_uploader("Upload a CSV dataset (optional)", type=["csv"])
# Button to run the benchmark
if st.button("Run Benchmark"):
results = []
if dataset_file:
# Process dataset file
df = pd.read_csv(dataset_file)
if "prompt" not in df.columns:
st.error("CSV file must have a 'prompt' column.")
st.stop()
prompts = df["prompt"].tolist()
else:
prompts = [prompt]
for llm_name in llm_names:
for p in prompts:
try:
response = requests.post(f"{BACKEND_URL}/generate", json={"prompt": p, "llm_name": llm_name})
response.raise_for_status() # Raise HTTPError for bad responses (4xx or 5xx)
data = response.json()
results.append({"llm": llm_name, "prompt": p, **data})
except requests.exceptions.RequestException as e:
st.error(f"Error calling backend for {llm_name}: {e}")
continue
if results:
# Display results
results_df = pd.DataFrame(results)
st.dataframe(results_df)
# Visualization - Response Time
fig_time = px.bar(results_df, x="llm", y="response_time", title="Response Time Comparison")
st.plotly_chart(fig_time)
# Visualization - Cost Comparison
fig_cost = px.bar(results_df, x="llm", y="cost", title="Cost Comparison")
st.plotly_chart(fig_cost)
if st.button("Save Results to CSV"):
save_results_to_csv(results, "benchmark_results.csv")
st.success("Results saved to benchmark_results.csv")
else:
st.warning("No results to display.")