startrz's picture
Create app.py
da04961 verified
raw
history blame
2.37 kB
import streamlit as st
import openai
import pandas as pd
import datetime
# Initialize Streamlit app
st.set_page_config(page_title="OpenAI Usage Dashboard", layout="centered")
# Set up OpenAI API key
st.sidebar.title("OpenAI API Usage Dashboard")
api_key = st.sidebar.text_input("Enter your OpenAI API Key:", type="password")
openai.api_key = api_key
# Title and description
st.title("OpenAI Usage Tracker")
st.write("This app retrieves and displays your OpenAI API usage data for a specified date range.")
# Date selection
start_date = st.sidebar.date_input("Select Start Date:", datetime.date.today() - datetime.timedelta(days=30))
end_date = st.sidebar.date_input("Select End Date:", datetime.date.today())
# Ensure end date is not before start date
if start_date > end_date:
st.error("End Date must be after Start Date")
# Function to retrieve usage data
def get_usage_data(api_key, start_date, end_date):
try:
openai.api_key = api_key
usage = openai.api_usage.get(start_date=start_date, end_date=end_date)
usage_data = usage['data']
# Create a DataFrame from the usage data
data = pd.DataFrame(usage_data)
data['date'] = pd.to_datetime(data['date'])
data.set_index('date', inplace=True)
return data[['n_tokens_total']]
except Exception as e:
st.error(f"An error occurred: {e}")
return None
# Retrieve and display usage data if API key is provided
if api_key:
usage_data = get_usage_data(api_key, start_date.strftime("%Y-%m-%d"), end_date.strftime("%Y-%m-%d"))
# Display usage data as a table and line chart
if usage_data is not None:
st.subheader("Usage Data")
st.write("Displaying usage from", start_date, "to", end_date)
st.dataframe(usage_data)
# Display line chart for usage over time
st.subheader("Token Usage Over Time")
st.line_chart(usage_data['n_tokens_total'])
# Display statistics
total_usage = usage_data['n_tokens_total'].sum()
avg_usage = usage_data['n_tokens_total'].mean()
st.subheader("Statistics")
st.write(f"Total Token Usage: {total_usage}")
st.write(f"Average Daily Token Usage: {avg_usage:.2f}")
else:
st.info("Enter your API key to view usage data.")
else:
st.warning("Please enter your OpenAI API key to proceed.")