Spaces:
Running
Running
import os | |
import streamlit as st | |
import requests | |
import re | |
from dotenv import load_dotenv | |
import tempfile | |
# Load environment variables (for FLOWISE_API token) | |
load_dotenv() | |
# Define API settings | |
API_URL = "https://nakheeltech.com:8030/api/v1/prediction/c1681ef1-8f47-4004-b4ab-594fbbd3eb3f" | |
headers = {"Authorization": f"Bearer {os.getenv('FLOWISE_API')}"} | |
# Function to send a query to the API | |
def query(payload): | |
response = requests.post(API_URL, headers=headers, json=payload) | |
return response.json() | |
# Extract only Python code from text | |
def extract_python_code(text): | |
code_pattern = r"```(?:python)?(.*?)```" | |
match = re.search(code_pattern, text, re.DOTALL) | |
if match: | |
return match.group(1).strip() | |
return "No Python code found in response." | |
# Streamlit UI | |
st.title("Architecture Diagram Generator") | |
# Get input from the user | |
user_input = st.text_area("Describe your architecture:", | |
placeholder="Enter a description of your architecture here...") | |
if st.button("Generate Diagram"): | |
if user_input: | |
# Send the user's input to the API | |
payload = {"question":"make sure to import from diagrams import Diagram" + user_input + " architecture"} | |
output = query(payload) | |
print(output) | |
# Check and display the Python code from the API response | |
if "text" in output: | |
python_code = extract_python_code(output["text"]) | |
st.code(python_code, language="python") | |
# Save the generated code to a temporary file and execute it | |
with tempfile.TemporaryDirectory() as tmpdirname: | |
temp_file = os.path.join(tmpdirname, "architecture_diagram.py") | |
with open(temp_file, "w") as f: | |
f.write(python_code) | |
# Change directory to temp and execute the code | |
original_dir = os.getcwd() | |
os.chdir(tmpdirname) | |
try: | |
exec(open(temp_file).read()) | |
diagram_path = os.path.join(tmpdirname, "diagram.jpg") | |
# Display the generated image | |
if os.path.exists(diagram_path): | |
st.image(diagram_path, caption="Generated Architecture Diagram") | |
else: | |
st.error("No diagram image was generated.") | |
except Exception as e: | |
st.error(f"Error executing the Python code: {e}") | |
finally: | |
os.chdir(original_dir) # Restore the original directory | |
else: | |
st.write("Response:", output) | |
else: | |
st.warning("Please enter an architecture description.") | |