Spaces:
Sleeping
Sleeping
import streamlit as st | |
from code_editor import code_editor | |
import json | |
import requests | |
import contextlib | |
import io | |
import streamlit.components.v1 as st1 | |
import subprocess | |
import sys | |
import os | |
# --- Sidebar info --- | |
st.sidebar.title("💡 About") | |
st.sidebar.info( | |
"This app generates Python code from your prompt using an AI model API.\n\n" | |
"Enter your prompt and click 'Generate Code' to see the result." | |
) | |
st.sidebar.markdown("---") | |
st.sidebar.write("Created with ❤️ using Streamlit and code_editor.") | |
st.sidebar.write("You can also edit your pyhton code in the code editor and lively run it.") | |
st.sidebar.subheader("📦 Install Python Library") | |
with st.sidebar.form("install_lib_form"): | |
lib_name = st.text_input("Library name (e.g., numpy, pandas)") | |
install_btn = st.form_submit_button("Install with pip") | |
if install_btn and lib_name.strip(): | |
with st.spinner(f"Installing {lib_name}..."): | |
try: | |
# Define target directory for installation | |
target_dir = "/.local/lib/python3.9/site-packages" | |
os.makedirs(target_dir, exist_ok=True) | |
# Add to sys.path so imports work immediately | |
if target_dir not in sys.path: | |
sys.path.insert(0, target_dir) | |
# Run pip install into target dir | |
result = subprocess.run( | |
[ | |
sys.executable, "-m", "pip", "install", | |
lib_name, | |
"--no-cache-dir", | |
"--target", target_dir | |
], | |
capture_output=True, text=True | |
) | |
if result.returncode == 0: | |
st.success(f"Successfully installed `{lib_name}`.") | |
else: | |
st.error(f"Error installing `{lib_name}`:\n{result.stderr}") | |
except Exception as e: | |
st.error(f"Exception: {e}") | |
st.title("🧠 Python Code Generator & Runner") | |
concepts=st.selectbox("Here are several examples that you can be familiar with the concept of our WebApp.", | |
("Write a Python program to plot the Gaussian distribution. Use Streamlit and Plotly Express for plotting.", | |
"Create a Python program to make the K-means algorithm with sklearn and plot the clusters. Use Streamlit and matplotlib for plotting the object.", | |
"Write a Python program to read my CSV file and describe it for me. The name of the CSV file is 'test.csv'")) | |
st.markdown("Here is the selected example prompt") | |
st.write(concepts) | |
# --- Initialize session state --- | |
if "code" not in st.session_state: | |
st.session_state.code = "print('Hello, world!')" | |
if "edited_code" not in st.session_state: | |
st.session_state.edited_code = st.session_state.code | |
# --- Prompt input --- | |
st.write("### Enter your prompt to generate Python code:") | |
user_prompt = st.text_area("Prompt", "Write a function to add two numbers") | |
# --- Buttons --- | |
col1, col2 = st.columns(2) | |
with col1: | |
generate_button = st.button("🚀 Generate Code") | |
with col2: | |
run_button = st.button("▶️ Run Code") | |
# --- Code generation logic --- | |
if generate_button: | |
if user_prompt.strip(): | |
with st.spinner("Generating code..."): | |
try: | |
api_url = "https://11434-dep-01jxanw2ryrzcfn2bv59eg2r87-d.cloudspaces.litng.ai/api/chat" | |
s = requests.Session() | |
s.headers.update({"Authorization": "Bearer bf54d08f-e88a-4a4a-bd14-444c984eaa6e"}) | |
response = s.post(api_url, json={ | |
"model": "hf.co/alibidaran/LLAMA3-inatructive_Python-GGUF:Q8_0", | |
"messages": [ | |
{"role": "system", "content": """ | |
You are an expert Python programmer. You task contians following instructions: | |
- You should answer the user questions about python. | |
- The output format must contain only python codes with ```python syntax format. | |
- You must use the user input variables in your code as code place holder. | |
"""}, | |
{"role": "user", "content": user_prompt}, | |
], | |
"options": { | |
'temperature': 0.5, | |
'top_p': 0.95 | |
}, | |
}) | |
full_response = "" | |
for line in response.iter_lines(): | |
if line: | |
data = json.loads(line.decode("utf-8")) | |
content = data.get("message", {}).get("content", "") | |
full_response += content | |
if data.get("done", False): | |
break | |
except Exception as e: | |
full_response = f"# Error: {str(e)}" | |
# Clean markdown formatting | |
if full_response.startswith("```python"): | |
full_response = full_response[9:] | |
if full_response.endswith("```"): | |
full_response = full_response[:-3] | |
# Update session state | |
st.session_state.code = full_response | |
st.session_state.edited_code = full_response | |
else: | |
st.warning("Please enter a prompt before generating.") | |
# --- Code Editor --- | |
editor_result = code_editor( | |
st.session_state.edited_code, | |
lang="python", | |
height=300 | |
) | |
# Update edited_code only if not empty | |
if editor_result and "text" in editor_result and editor_result["text"].strip() != "": | |
st.session_state.edited_code = editor_result["text"] | |
if run_button: | |
st.write("### 🧪 Output:") | |
print(st.session_state.edited_code) | |
# if 'edited_code' in st.session_state.edited_code: | |
# if 'matplotlib.pyplot' in st.session_state.edited_code: | |
try: | |
# Prepare an output buffer to capture printed text | |
output_buffer = io.StringIO() | |
exec_globals = {} | |
# Capture stdout during execution | |
with contextlib.redirect_stdout(output_buffer): | |
exec(st.session_state.edited_code, exec_globals) | |
# Show stdout (printed output) | |
output_text = output_buffer.getvalue() | |
if output_text.strip(): | |
st.code(output_text, language="text") | |
else: | |
st.info("Code ran, but produced no printed output.") | |
# # Optional: Display returned variables or functions | |
# user_vars = {k: v for k, v in exec_globals.items() if not k.startswith("__")} | |
# if user_vars: | |
# st.write("**Variables in scope:**") | |
# st.json(user_vars) | |
except Exception as e: | |
st.error(f"Execution error: {e}") | |
components.iframe( | |
src="https://cloudhand-sdk-lmpc.vercel.app/", | |
height=600) | |