Spaces:
Sleeping
Sleeping
Create app.py
Browse files
app.py
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import gradio as gr
|
| 2 |
+
from backend import verify_hf_token, get_user_projects, run_code_agents
|
| 3 |
+
|
| 4 |
+
user_state = {"user_id": None, "hf_token": "", "current_project": None}
|
| 5 |
+
|
| 6 |
+
def page_login(hf_token):
|
| 7 |
+
user_id, msg = verify_hf_token(hf_token)
|
| 8 |
+
if user_id:
|
| 9 |
+
user_state["user_id"] = user_id
|
| 10 |
+
user_state["hf_token"] = hf_token
|
| 11 |
+
return gr.update(visible=False), gr.update(visible=True), msg
|
| 12 |
+
else:
|
| 13 |
+
return gr.update(), gr.update(), msg
|
| 14 |
+
|
| 15 |
+
def page_projects():
|
| 16 |
+
if not user_state["user_id"]:
|
| 17 |
+
return "Please login first."
|
| 18 |
+
projects = get_user_projects(user_state["user_id"])
|
| 19 |
+
if not projects:
|
| 20 |
+
return "No projects yet. Describe your idea below!"
|
| 21 |
+
return "\n".join([
|
| 22 |
+
f"Project #{p[0]}: {p[1]} ({p[4]}) | [Download]({p[3]})"
|
| 23 |
+
for p in projects
|
| 24 |
+
])
|
| 25 |
+
|
| 26 |
+
def start_code_agents(project_description):
|
| 27 |
+
if not user_state["user_id"]:
|
| 28 |
+
return "Please login first.", None, []
|
| 29 |
+
logs, zip_path, timeline = run_code_agents(user_state["user_id"], project_description)
|
| 30 |
+
return logs, zip_path, timeline
|
| 31 |
+
|
| 32 |
+
with gr.Blocks(title="Code Agents") as demo:
|
| 33 |
+
gr.Markdown("# Code Agents — AI Teams That Build Software From Prompts")
|
| 34 |
+
|
| 35 |
+
with gr.Group() as page_login_ui:
|
| 36 |
+
gr.Markdown("### Step 1: Login with Hugging Face Token")
|
| 37 |
+
token_input = gr.Textbox(label="HF Token (starts with 'hf_')", type="password")
|
| 38 |
+
login_btn = gr.Button("Login to Code Agents", variant="primary")
|
| 39 |
+
login_msg = gr.Markdown()
|
| 40 |
+
|
| 41 |
+
with gr.Group(visible=False) as page_main_ui:
|
| 42 |
+
gr.Markdown("### Your Projects")
|
| 43 |
+
refresh_btn = gr.Button("Refresh Projects")
|
| 44 |
+
projects_display = gr.Markdown(label="Your Projects", value="Loading...")
|
| 45 |
+
gr.Markdown("### Describe Your Project")
|
| 46 |
+
project_input = gr.Textbox(
|
| 47 |
+
label="What do you want to build?",
|
| 48 |
+
placeholder="Example: A Python CLI tool that downloads YouTube videos as MP3. Use yt-dlp and saves them to ./downloads/",
|
| 49 |
+
lines=5
|
| 50 |
+
)
|
| 51 |
+
start_btn = gr.Button("Start AI Team Work", variant="primary")
|
| 52 |
+
agent_logs = gr.Markdown("Waiting for agents to begin...")
|
| 53 |
+
timeline = gr.JSON(label="Timeline", visible=False)
|
| 54 |
+
|
| 55 |
+
with gr.Group(visible=False) as page_download_ui:
|
| 56 |
+
gr.Markdown("### Download Project")
|
| 57 |
+
zip_download = gr.File(label="Download Complete Project (.zip)")
|
| 58 |
+
gr.Markdown("This project is saved under your account. Refresh to see it in 'Your Projects'.")
|
| 59 |
+
|
| 60 |
+
login_btn.click(
|
| 61 |
+
page_login,
|
| 62 |
+
inputs=token_input,
|
| 63 |
+
outputs=[page_login_ui, page_main_ui, login_msg]
|
| 64 |
+
)
|
| 65 |
+
|
| 66 |
+
refresh_btn.click(
|
| 67 |
+
page_projects,
|
| 68 |
+
outputs=projects_display
|
| 69 |
+
)
|
| 70 |
+
|
| 71 |
+
start_btn.click(
|
| 72 |
+
start_code_agents,
|
| 73 |
+
inputs=project_input,
|
| 74 |
+
outputs=[agent_logs, zip_download, timeline]
|
| 75 |
+
).then(
|
| 76 |
+
lambda: (gr.update(visible=True), gr.update(visible=False)),
|
| 77 |
+
outputs=[page_download_ui, page_main_ui]
|
| 78 |
+
).then(
|
| 79 |
+
lambda: (gr.update(visible=True), gr.update(visible=False)),
|
| 80 |
+
outputs=[page_main_ui, page_download_ui]
|
| 81 |
+
)
|
| 82 |
+
|
| 83 |
+
demo.queue().launch(server_name="0.0.0.0", server_port=7860)
|