Keeby-smilyai commited on
Commit
d3d626e
Β·
verified Β·
1 Parent(s): 6e90b51

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +94 -46
app.py CHANGED
@@ -1,83 +1,131 @@
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)
 
1
  import gradio as gr
2
+ from backend import (
3
+ create_user,
4
+ get_user_by_username,
5
+ verify_password,
6
+ create_project,
7
+ get_user_projects,
8
+ search_projects,
9
+ queue_job
10
+ )
11
+ import os
12
 
13
+ # ------------------------------ STATE ------------------------------
14
+ user_state = {"user_id": None, "username": ""}
15
 
16
+ # ------------------------------ PAGES ------------------------------
17
+
18
+ def page_login(username, password):
19
+ user = get_user_by_username(username)
20
+ if user and verify_password(password, user[1]):
21
+ user_state["user_id"] = user[0]
22
+ user_state["username"] = username
23
+ return gr.update(visible=False), gr.update(visible=True), f"Welcome back, {username}! πŸ‘¨β€πŸ’»"
24
  else:
25
+ # Try to create new user
26
+ user_id = create_user(username, password)
27
+ if user_id:
28
+ user_state["user_id"] = user_id
29
+ user_state["username"] = username
30
+ return gr.update(visible=False), gr.update(visible=True), f"Account created! Welcome, {username}!"
31
+ else:
32
+ return gr.update(), gr.update(), "Username already exists or invalid."
33
 
34
  def page_projects():
35
  if not user_state["user_id"]:
36
+ return "Please login first.", ""
37
  projects = get_user_projects(user_state["user_id"])
38
  if not projects:
39
+ return "No projects yet. Create one below!", ""
40
+
41
+ project_list = "\n".join([
42
+ f"πŸ“ [{p[0]}] {p[1]} ({p[3]}) - {p[5]}"
43
  for p in projects
44
  ])
45
+ return project_list, ""
46
 
47
+ def start_new_project(prompt):
48
  if not user_state["user_id"]:
49
+ return "❌ Please login first.", "", ""
50
+
51
+ # Check project limit (max 3)
52
+ projects = get_user_projects(user_state["user_id"])
53
+ if len(projects) >= 3:
54
+ return "⚠️ You can only have 3 projects. Delete one to create another.", "", ""
55
 
56
+ project_id = create_project(user_state["user_id"], "New Project", prompt)
57
+ queue_job(project_id, user_state["user_id"], prompt)
58
+
59
+ return f"βœ… Project #{project_id} started! You can leave this page β€” we'll notify you when it's ready.", "", ""
60
 
61
+ def search_projects_ui(query):
62
+ if not user_state["user_id"]:
63
+ return "Please login first."
64
+ results = search_projects(user_state["user_id"], query)
65
+ if not results:
66
+ return "No matching projects."
67
+ return "\n".join([
68
+ f"πŸ“ [{p[0]}] {p[1]} ({p[3]})"
69
+ for p in results
70
+ ])
71
+
72
+ # ------------------------------ UI ------------------------------
73
+
74
+ with gr.Blocks(title="Code Agents Pro") as demo:
75
+ gr.Markdown("# πŸ€– Code Agents Pro β€” AI Software Team, Fully Automated")
76
+
77
+ # ---- PAGE 1: LOGIN ----
78
  with gr.Group() as page_login_ui:
79
+ gr.Markdown("### πŸ” Login or Sign Up")
80
+ username_input = gr.Textbox(label="Username", placeholder="Choose a unique username")
81
+ password_input = gr.Textbox(label="Password", type="password", placeholder="Minimum 6 characters")
82
+ login_btn = gr.Button("Login / Sign Up", variant="primary")
83
  login_msg = gr.Markdown()
84
 
85
+ # ---- PAGE 2: PROJECTS ----
86
  with gr.Group(visible=False) as page_main_ui:
87
+ gr.Markdown("### πŸ“ Your Projects (Max 3)")
88
  refresh_btn = gr.Button("Refresh Projects")
89
+ projects_display = gr.Markdown(label="Your Projects", value="")
90
+ search_input = gr.Textbox(label="Search Projects", placeholder="Type to search...")
91
+ search_btn = gr.Button("πŸ” Search")
92
+ search_results = gr.Markdown(label="Search Results")
93
+
94
+ gr.Markdown("### βž• Start New Project")
95
+ project_prompt = gr.Textbox(
96
+ label="Describe your project (e.g., 'Build a Flask app that lets users upload images and label them.')",
97
+ lines=5,
98
+ placeholder="Be specific about files, libraries, and behavior."
99
  )
100
+ start_btn = gr.Button("πŸš€ Start AI Team Work", variant="primary")
101
+ status_msg = gr.Markdown()
 
102
 
103
+ # ------------------------------ EVENTS ------------------------------
 
 
 
104
 
105
  login_btn.click(
106
  page_login,
107
+ inputs=[username_input, password_input],
108
  outputs=[page_login_ui, page_main_ui, login_msg]
109
  )
110
 
111
  refresh_btn.click(
112
  page_projects,
113
+ outputs=[projects_display, search_results]
114
+ )
115
+
116
+ search_btn.click(
117
+ search_projects_ui,
118
+ inputs=search_input,
119
+ outputs=search_results
120
  )
121
 
122
  start_btn.click(
123
+ start_new_project,
124
+ inputs=project_prompt,
125
+ outputs=[status_msg, projects_display, search_results]
126
  ).then(
127
+ page_projects,
128
+ outputs=[projects_display, search_results]
 
 
 
129
  )
130
 
131
  demo.queue().launch(server_name="0.0.0.0", server_port=7860)