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