Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -24,9 +24,6 @@ SYSTEM_INSTRUCTION = (
|
|
24 |
|
25 |
|
26 |
def start_app(gemini_key, hf_token, hf_username, repo_name):
|
27 |
-
"""
|
28 |
-
Initialize workspace and Gemini chat state.
|
29 |
-
"""
|
30 |
os.makedirs(WORKSPACE_DIR, exist_ok=True)
|
31 |
client = genai.Client(api_key=gemini_key)
|
32 |
config = types.GenerateContentConfig(system_instruction=SYSTEM_INSTRUCTION)
|
@@ -50,14 +47,10 @@ def start_app(gemini_key, hf_token, hf_username, repo_name):
|
|
50 |
|
51 |
|
52 |
def handle_message(user_msg, state):
|
53 |
-
"""
|
54 |
-
Send user message to Gemini, apply updates, commit to HF, and log steps.
|
55 |
-
"""
|
56 |
chat = state["chat"]
|
57 |
logs = state.get("logs", [])
|
58 |
logs.append(f"> User: {user_msg}")
|
59 |
|
60 |
-
# Generate or debug code via Gemini
|
61 |
resp = chat.send_message(user_msg)
|
62 |
logs.append("Received response from Gemini.")
|
63 |
text = resp.text
|
@@ -72,7 +65,6 @@ def handle_message(user_msg, state):
|
|
72 |
state["logs"] = logs
|
73 |
return "β οΈ Parsing error. Check logs.", state
|
74 |
|
75 |
-
# On first structured response, create the HF Space
|
76 |
if not state["created"]:
|
77 |
full_repo = f"{state['hf_username']}/{state['repo_name']}"
|
78 |
logs.append(f"Creating HF Space '{full_repo}' with template '{framework}'.")
|
@@ -87,7 +79,6 @@ def handle_message(user_msg, state):
|
|
87 |
state["repo_id"] = full_repo
|
88 |
state["embed_url"] = f"https://huggingface.co/spaces/{full_repo}"
|
89 |
|
90 |
-
# Write file updates
|
91 |
if files:
|
92 |
logs.append(f"Writing {len(files)} file(s): {list(files.keys())}")
|
93 |
for relpath, content in files.items():
|
@@ -96,7 +87,6 @@ def handle_message(user_msg, state):
|
|
96 |
with open(dest, "w", encoding="utf-8") as f:
|
97 |
f.write(content)
|
98 |
|
99 |
-
# Commit the snapshot via HfApi.upload_folder
|
100 |
logs.append("Uploading snapshot to Hugging Face...")
|
101 |
api = HfApi(token=state["hf_token"])
|
102 |
api.upload_folder(
|
@@ -112,20 +102,22 @@ def handle_message(user_msg, state):
|
|
112 |
|
113 |
# βββ Gradio UI βββ
|
114 |
with gr.Blocks() as demo:
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
|
|
|
|
129 |
|
130 |
def on_start(g_key, h_token, h_user, r_name):
|
131 |
s = start_app(g_key, h_token, h_user, r_name)
|
|
|
24 |
|
25 |
|
26 |
def start_app(gemini_key, hf_token, hf_username, repo_name):
|
|
|
|
|
|
|
27 |
os.makedirs(WORKSPACE_DIR, exist_ok=True)
|
28 |
client = genai.Client(api_key=gemini_key)
|
29 |
config = types.GenerateContentConfig(system_instruction=SYSTEM_INSTRUCTION)
|
|
|
47 |
|
48 |
|
49 |
def handle_message(user_msg, state):
|
|
|
|
|
|
|
50 |
chat = state["chat"]
|
51 |
logs = state.get("logs", [])
|
52 |
logs.append(f"> User: {user_msg}")
|
53 |
|
|
|
54 |
resp = chat.send_message(user_msg)
|
55 |
logs.append("Received response from Gemini.")
|
56 |
text = resp.text
|
|
|
65 |
state["logs"] = logs
|
66 |
return "β οΈ Parsing error. Check logs.", state
|
67 |
|
|
|
68 |
if not state["created"]:
|
69 |
full_repo = f"{state['hf_username']}/{state['repo_name']}"
|
70 |
logs.append(f"Creating HF Space '{full_repo}' with template '{framework}'.")
|
|
|
79 |
state["repo_id"] = full_repo
|
80 |
state["embed_url"] = f"https://huggingface.co/spaces/{full_repo}"
|
81 |
|
|
|
82 |
if files:
|
83 |
logs.append(f"Writing {len(files)} file(s): {list(files.keys())}")
|
84 |
for relpath, content in files.items():
|
|
|
87 |
with open(dest, "w", encoding="utf-8") as f:
|
88 |
f.write(content)
|
89 |
|
|
|
90 |
logs.append("Uploading snapshot to Hugging Face...")
|
91 |
api = HfApi(token=state["hf_token"])
|
92 |
api.upload_folder(
|
|
|
102 |
|
103 |
# βββ Gradio UI βββ
|
104 |
with gr.Blocks() as demo:
|
105 |
+
# Two-column layout: sidebar and main area
|
106 |
+
with gr.Row():
|
107 |
+
with gr.Column(scale=1):
|
108 |
+
gemini_key = gr.Textbox(label="Gemini API Key", type="password")
|
109 |
+
hf_token = gr.Textbox(label="Hugging Face Token", type="password")
|
110 |
+
hf_user = gr.Textbox(label="HF Username")
|
111 |
+
repo_name = gr.Textbox(label="New App (repo) name")
|
112 |
+
start_btn = gr.Button("Start a new app")
|
113 |
+
with gr.Column(scale=3):
|
114 |
+
chatbot = gr.Chatbot()
|
115 |
+
state = gr.State(value=None)
|
116 |
+
logs_display = gr.Textbox(label="Operation Logs", interactive=False, lines=8)
|
117 |
+
preview_iframe = gr.HTML("<p>No deployed app yet.</p>")
|
118 |
+
|
119 |
+
user_msg = gr.Textbox(label="Your message")
|
120 |
+
send_btn = gr.Button("Send")
|
121 |
|
122 |
def on_start(g_key, h_token, h_user, r_name):
|
123 |
s = start_app(g_key, h_token, h_user, r_name)
|