import json import matplotlib.pyplot as plt import streamlit as st from utils import client def analyze_vfx_potential(thread_id, additional_context=None): run = client.beta.threads.runs.create( thread_id=thread_id, assistant_id="asst_WZPuGYRu6zU3XomrOietVAS5" ) while run.status in ['queued', 'in_progress', 'cancelling']: run = client.beta.threads.runs.retrieve( thread_id=thread_id, run_id=run.id ) if run.status == 'completed': messages = client.beta.threads.messages.list(thread_id=thread_id) analysis = next((msg.content[0].text.value for msg in reversed(list(messages)) if msg.role == "assistant"), "") return analysis else: return f"Error: Run status is {run.status}" def process_vfx_potential(analysis): try: analysis = json.loads(analysis) st.subheader("VFX Potential Analysis") # Overall VFX Score scene_names = list(analysis.keys()) vfx_potential = [analysis[scene]['vfx_potential'] for scene in scene_names] vfx_complexity = [analysis[scene]['vfx_complexity'] for scene in scene_names] budget_percentage = [analysis[scene]['budget_percentage'] for scene in scene_names] # Create subplots for the charts fig, ax = plt.subplots(3, 1, figsize=(10, 12), sharex=True) # Plot VFX potential ax[0].bar(scene_names, vfx_potential, color='b', alpha=0.7) ax[0].set_title('VFX Potential for Each Scene') ax[0].set_ylabel('VFX Potential (0 to 1)') ax[0].set_ylim(0, 1) # Plot VFX complexity ax[1].bar(scene_names, vfx_complexity, color='g', alpha=0.7) ax[1].set_title('VFX Complexity for Each Scene') ax[1].set_ylabel('VFX Complexity (0 to 1)') ax[1].set_ylim(0, 1) # Plot Budget Percentage Allocation ax[2].bar(scene_names, budget_percentage, color='r', alpha=0.7) ax[2].set_title('Budget Allocation for Each Scene') ax[2].set_ylabel('Budget Percentage (%)') ax[2].set_ylim(0, max(budget_percentage) + 5) ax[2].set_xlabel('Scene Names') # Rotate x-axis labels for better readability plt.xticks(rotation=45, ha='right') # Adjust layout to prevent overlap plt.tight_layout() st.pyplot(fig) except Exception as e: st.error(f"Error processing data for VFX Potential: {e}") st.write("Please check the structure of the JSON data:") st.json(analysis)