Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| import time | |
| from model_utils import list_trained_models, generate_code, get_model_info | |
| from utils import set_page_config, display_sidebar, add_log, format_code | |
| # Set page configuration | |
| set_page_config() | |
| # Display sidebar | |
| display_sidebar() | |
| # Title | |
| st.title("Code Generation") | |
| st.markdown("Generate Python code using your trained models.") | |
| # Get available models | |
| available_models = list_trained_models() | |
| if not available_models: | |
| st.warning("No trained models available. Please train a model in the Model Training section.") | |
| else: | |
| # Create main columns for layout | |
| col1, col2 = st.columns([1, 1]) | |
| with col1: | |
| st.markdown("### Code Generation Setup") | |
| # Model selection | |
| selected_model = st.selectbox("Select Model", available_models) | |
| # Display model info if available | |
| if selected_model: | |
| model_info = get_model_info(selected_model) | |
| if model_info: | |
| st.markdown("#### Model Information") | |
| # Create expandable section for model details | |
| with st.expander("Model Details", expanded=False): | |
| for key, value in model_info.items(): | |
| if key != 'id': # Skip ID as it's already shown in the selectbox | |
| st.markdown(f"**{key.replace('_', ' ').title()}:** {value}") | |
| # Generation parameters | |
| st.markdown("#### Generation Parameters") | |
| max_length = st.slider("Maximum Length", min_value=50, max_value=500, value=200, step=10) | |
| temperature = st.slider("Temperature", min_value=0.1, max_value=2.0, value=0.7, step=0.1, | |
| help="Higher values make output more random, lower values more deterministic") | |
| top_p = st.slider("Top P (Nucleus Sampling)", min_value=0.1, max_value=1.0, value=0.9, step=0.05, | |
| help="Controls diversity. 0.9 means consider tokens comprising the top 90% probability mass") | |
| # Input prompt | |
| st.markdown("#### Input Prompt") | |
| prompt = st.text_area( | |
| "Enter your code prompt", | |
| height=200, | |
| placeholder="# Function to calculate fibonacci sequence\ndef fibonacci(n):" | |
| ) | |
| # Generate button | |
| generate_button = st.button("Generate Code", disabled=not prompt) | |
| with col2: | |
| st.markdown("### Generated Code") | |
| # Create a placeholder for generated code | |
| code_placeholder = st.empty() | |
| # Initialize session state for code history if not exists | |
| if 'code_history' not in st.session_state: | |
| st.session_state.code_history = [] | |
| # Generate code when button is clicked | |
| if generate_button and prompt and selected_model: | |
| with st.spinner("Generating code..."): | |
| generated_code = generate_code( | |
| selected_model, | |
| prompt, | |
| max_length=max_length, | |
| temperature=temperature, | |
| top_p=top_p | |
| ) | |
| # Add to history | |
| st.session_state.code_history.append({ | |
| 'prompt': prompt, | |
| 'code': generated_code, | |
| 'model': selected_model, | |
| 'parameters': { | |
| 'max_length': max_length, | |
| 'temperature': temperature, | |
| 'top_p': top_p | |
| }, | |
| 'timestamp': time.strftime("%Y-%m-%d %H:%M:%S") | |
| }) | |
| # Display the generated code | |
| code_placeholder.code(format_code(generated_code), language='python') | |
| # Log the generation | |
| add_log(f"Generated code with model '{selected_model}' (length: {len(generated_code)})") | |
| # If there's code history but the generate button wasn't pressed, show the most recent one | |
| elif st.session_state.code_history: | |
| last_code = st.session_state.code_history[-1]['code'] | |
| code_placeholder.code(format_code(last_code), language='python') | |
| else: | |
| # Show empty placeholder when no code has been generated | |
| code_placeholder.code("# Generated code will appear here", language='python') | |
| # Code history section | |
| st.markdown("---") | |
| st.markdown("### Code Generation History") | |
| if not st.session_state.code_history: | |
| st.info("No code has been generated yet. Use the form above to generate code.") | |
| else: | |
| # Display code history | |
| for i, item in enumerate(reversed(st.session_state.code_history)): | |
| with st.expander(f"Generation {len(st.session_state.code_history) - i}: {item['timestamp']}"): | |
| st.markdown(f"**Model:** {item['model']}") | |
| st.markdown(f"**Parameters:** Max Length: {item['parameters']['max_length']}, " | |
| f"Temperature: {item['parameters']['temperature']}, " | |
| f"Top P: {item['parameters']['top_p']}") | |
| st.markdown("**Prompt:**") | |
| st.code(format_code(item['prompt']), language='python') | |
| st.markdown("**Generated Code:**") | |
| st.code(format_code(item['code']), language='python') | |
| # Clear history button | |
| if st.button("Clear History"): | |
| st.session_state.code_history = [] | |
| st.success("History cleared!") | |
| time.sleep(1) | |
| st.rerun() | |