Spaces:
Sleeping
Sleeping
File size: 9,017 Bytes
f24d252 d637e02 f24d252 d637e02 f24d252 d637e02 cb8f33f d637e02 cb8f33f d637e02 cb8f33f d637e02 7b1f6d1 cb8f33f d637e02 f24d252 cb8f33f f24d252 7b1f6d1 f24d252 7b1f6d1 f24d252 7b1f6d1 f24d252 7b1f6d1 f24d252 cb8f33f f24d252 d637e02 ee4435a d637e02 ee4435a cb8f33f d637e02 7b1f6d1 cb8f33f f24d252 7b1f6d1 d637e02 87cf40b d637e02 f24d252 7b1f6d1 f24d252 7b1f6d1 f24d252 7b1f6d1 f24d252 7b1f6d1 f24d252 7b1f6d1 f24d252 7b1f6d1 f24d252 d637e02 |
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 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 |
import gradio as gr
import json
import os
from datetime import datetime
# File to store model data
MODEL_FILE = "models.json"
# Load existing data or create a new file if it doesn't exist
def load_models():
if os.path.exists(MODEL_FILE):
with open(MODEL_FILE, "r") as f:
return json.load(f)
return []
# Save data to the JSON file
def save_models(models):
with open(MODEL_FILE, "w") as f:
json.dump(models, f, indent=4)
# Helper function to calculate time differences between releases
def calculate_time_difference(models):
for i in range(1, len(models)):
prev_date = datetime.strptime(models[i - 1]['dateOfRelease'], "%Y-%m-%d")
curr_date = datetime.strptime(models[i]['dateOfRelease'], "%Y-%m-%d")
models[i]['time_difference'] = (curr_date - prev_date).days
return models
# Function to display all models with optional filters
def display_models(developer=None, use_case=None, year_range=None):
models = load_models()
if not models:
return "No models have been added yet."
# Apply filters if provided
if developer:
models = [m for m in models if m.get('developer') == developer]
if use_case:
models = [m for m in models if m.get('use_case') == use_case]
if year_range:
start_year, end_year = year_range
models = [m for m in models if start_year <= int(m['dateOfRelease'][:4]) <= end_year]
models = sorted(models, key=lambda x: x['dateOfRelease'], reverse=True) # Sort by release date
# Calculate time differences before using them
models = calculate_time_difference(models) # Ensure time differences are calculated here
output = "<div style='display: flex; flex-direction: column; align-items: flex-start; gap: 20px;'>"
for i, model in enumerate(models):
time_gap = model.get('time_difference', 0) * 2 # Scale time gap for visualization
if i < len(models) - 1: # To show time difference text only between cards, not after the last one
# Safely access the time difference and display it
time_diff = model.get('time_difference', None)
if time_diff is not None:
time_diff_text = f"<div style='color: #ccc; font-style: italic;'>"
time_diff_text += f"{time_diff} days between releases</div>"
output += time_diff_text
# Add the model card with the time gap applied between models
# output += f"<div class='ai-card' style='margin-top: {time_gap}px;'>"
output += f"<div class='ai-card'>"
output += f"<h3 style='color: #2d89ef;'>{model['name']} ({model['dateOfRelease']})</h3>"
output += f"<p><strong>Description:</strong> {model['description']}</p>"
output += f"<p><strong>Developer:</strong> {model.get('developer', 'Unknown')}</p>"
output += f"<p><strong>Use Case:</strong> {model.get('use_case', 'General')}</p>"
output += f"<p><strong>Impact:</strong> {model.get('impact', 'Not specified')}</p>"
output += "</div>"
output += "</div>"
return output
# Function to add a new model
def add_model(name, description, dateOfRelease, developer, use_case, impact):
models = load_models()
models.append({
"name": name,
"description": description,
"dateOfRelease": dateOfRelease,
"developer": developer,
"use_case": use_case,
"impact": impact
})
save_models(models)
return "Model added successfully!", display_models()
# Function to edit an existing model
def edit_model(index, name, description, dateOfRelease, developer, use_case, impact):
models = load_models()
if index < 1 or index > len(models):
return "Invalid index. Please provide a valid model number.", display_models()
models[index - 1] = {
"name": name,
"description": description,
"dateOfRelease": dateOfRelease,
"developer": developer,
"use_case": use_case,
"impact": impact
}
save_models(models)
return "Model updated successfully!", display_models()
# Get the current month
def get_current_month():
return datetime.now().strftime("%B %Y")
# Gradio interface
with gr.Blocks(css="""
body {
font-family: 'Arial', sans-serif;
background-color: #121212; /* Dark background color */
color: white; /* White text color for better contrast */
margin: 0;
padding: 0;
}
.gradio-container {
width: 80%;
margin: auto;
padding: 20px;
}
.gradio-markdown {
color: white; /* Ensure markdown text is white */
}
.gr-button {
background-color: #333; /* Dark button background */
color: white; /* White button text */
}
.gr-button:hover {
background-color: #555; /* Lighter shade on hover */
}
.gr-dropdown, .gr-textbox {
background-color: #333; /* Dark input fields */
color: white; /* White text */
border: 1px solid #555; /* Lighter border */
}
/* Styling for the AI cards */
.ai-card {
background-color: #2b2b2b; /* Dark background for cards */
color: white; /* White text on cards */
border-radius: 10px;
padding: 15px;
margin: 10px 0;
border: 1px solid #444; /* Lighter border for card separation */
box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.5); /* Shadow effect */
}
.ai-card h3 {
color: #2d89ef; /* Blue color for card titles */
}
.ai-card p {
color: #ccc; /* Lighter text color for card description */
}
.ai-card strong {
color: #bbb; /* Lighter color for strong text */
}
""") as app:
gr.Markdown("# AI Timeline\n\nVisualize the development of AI models through an interactive timeline.")
current_month = get_current_month() # Get the current month
# Display current month in the interface
gr.Markdown(f"## Current Month: {current_month}")
with gr.Tab("View Timeline"):
with gr.Row():
developer_filter = gr.Dropdown(label="Filter by Developer", choices=["All"] + list(set([m['developer'] for m in load_models()])), value="All")
use_case_filter = gr.Dropdown(label="Filter by Use Case", choices=["All"] + list(set([m['use_case'] for m in load_models()])), value="All")
year_range_filter = gr.Slider(label="Filter by Year Range", minimum=2000, maximum=2025, value=(2000, 2025), step=1)
filter_button = gr.Button("Apply Filters")
view_output = gr.HTML()
def apply_filters(developer, use_case, year_range):
dev = None if developer == "All" else developer
use = None if use_case == "All" else use_case
return display_models(developer=dev, use_case=use, year_range=year_range)
filter_button.click(apply_filters, inputs=[developer_filter, use_case_filter, year_range_filter], outputs=view_output)
with gr.Tab("Add Model"):
with gr.Row():
name_input = gr.Textbox(label="Model Name", placeholder="Enter model name")
year_input = gr.Textbox(label="Publication Date", placeholder="Enter date of publication (YYYY-MM-DD)")
description_input = gr.Textbox(label="Description", placeholder="Enter a short description")
developer_input = gr.Textbox(label="Developer", placeholder="Enter the developer or organization")
use_case_input = gr.Textbox(label="Use Case", placeholder="Enter the primary use case")
impact_input = gr.Textbox(label="Impact", placeholder="Enter the model's impact")
add_button = gr.Button("Add Model")
add_output = gr.Markdown()
add_button.click(
add_model,
inputs=[name_input, description_input, year_input, developer_input, use_case_input, impact_input],
outputs=[add_output, view_output]
)
with gr.Tab("Edit Model"):
edit_index = gr.Number(label="Model Number", precision=0)
with gr.Row():
edit_name = gr.Textbox(label="New Model Name", placeholder="Enter new model name")
edit_year = gr.Textbox(label="New Publication Date", placeholder="Enter new date of publication (YYYY-MM-DD)")
edit_description = gr.Textbox(label="New Description", placeholder="Enter new description")
edit_developer = gr.Textbox(label="New Developer", placeholder="Enter new developer or organization")
edit_use_case = gr.Textbox(label="New Use Case", placeholder="Enter new primary use case")
edit_impact = gr.Textbox(label="New Impact", placeholder="Enter new impact")
edit_button = gr.Button("Edit Model")
edit_output = gr.Markdown()
edit_button.click(
edit_model,
inputs=[edit_index, edit_name, edit_description, edit_year, edit_developer, edit_use_case, edit_impact],
outputs=[edit_output, view_output]
)
# Run the app
app.launch()
|