ChaoticEconomist commited on
Commit
c1e69c8
·
verified ·
1 Parent(s): c56b847

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +93 -69
app.py CHANGED
@@ -5,7 +5,7 @@ import boto3
5
  import re
6
 
7
  # -----------------------------
8
- # STATE HELPERS
9
  # -----------------------------
10
 
11
  def create_block(block_type):
@@ -21,7 +21,11 @@ def create_block(block_type):
21
  }
22
 
23
  def resolve_vars(text, variables):
24
- return re.sub(r"\{\{(\w+)\}\}", lambda m: variables.get(m.group(1), m.group(0)), text or "")
 
 
 
 
25
 
26
  # -----------------------------
27
  # AI CALL
@@ -45,7 +49,7 @@ def call_claude(prompt, system):
45
  return result["content"][0]["text"]
46
 
47
  # -----------------------------
48
- # CORE ENGINE
49
  # -----------------------------
50
 
51
  def run_flow(blocks):
@@ -73,47 +77,62 @@ def run_flow(blocks):
73
  return blocks, variables, "\n".join(logs)
74
 
75
  # -----------------------------
76
- # UI ACTIONS
77
  # -----------------------------
78
 
79
  def add_block(blocks, block_type):
80
  blocks.append(create_block(block_type))
81
- return blocks, blocks
82
 
83
- def select_block(blocks, idx):
84
- return blocks, idx, blocks[idx]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85
 
86
- def update_block(blocks, idx, data):
87
- blocks[idx].update(data)
88
  return blocks
89
 
90
  # -----------------------------
91
- # MAIN UI
92
  # -----------------------------
93
 
94
- with gr.Blocks(css="""
95
- body {background-color: #0f172a; color: white;}
96
- """) as demo:
97
 
98
  blocks_state = gr.State([])
99
- selected_idx = gr.State(None)
100
 
101
  gr.Markdown("# ⚡ Blocksmith AI")
102
 
103
  with gr.Row():
104
 
105
- # -----------------------------
106
- # 🧱 SIDEBAR
107
- # -----------------------------
108
  with gr.Column(scale=1):
109
  gr.Markdown("## 🧩 Blocks")
110
 
111
  add_text = gr.Button("➕ Text Input")
112
  add_ai = gr.Button("➕ AI Block")
113
 
114
- # -----------------------------
115
- # 🎨 CANVAS
116
- # -----------------------------
117
  with gr.Column(scale=2):
118
  gr.Markdown("## 🧠 Canvas")
119
 
@@ -123,68 +142,73 @@ body {background-color: #0f172a; color: white;}
123
  interactive=True
124
  )
125
 
126
- # -----------------------------
127
- # ⚙️ INSPECTOR PANEL
128
- # -----------------------------
129
  with gr.Column(scale=2):
130
  gr.Markdown("## ⚙️ Inspector")
131
 
132
  var = gr.Textbox(label="Variable")
133
  value = gr.Textbox(label="Value")
134
  prompt = gr.Textbox(label="Prompt")
135
- system = gr.Textbox(label="System")
136
  output = gr.Textbox(label="Output", interactive=False)
137
 
138
- # -----------------------------
139
- # ▶ RUN + LOGS
140
- # -----------------------------
141
  run_btn = gr.Button("▶ Run Flow")
142
 
143
  variables_out = gr.JSON(label="Variables")
144
  logs = gr.Textbox(label="Logs")
145
 
146
- # -----------------------------
147
- # EVENTS
148
- # -----------------------------
149
-
150
- # Add blocks
151
- add_text.click(lambda b: add_block(b, "text"), blocks_state, [blocks_state, block_list])
152
- add_ai.click(lambda b: add_block(b, "ai"), blocks_state, [blocks_state, block_list])
153
-
154
- # Update block list display
155
- def refresh_list(blocks):
156
- return [f"{i}: {b['title']}" for i, b in enumerate(blocks)]
157
-
158
- blocks_state.change(refresh_list, blocks_state, block_list)
159
-
160
- # Select block
161
- def load_block(blocks, idx):
162
- if idx is None:
163
- return "", "", "", "", ""
164
- b = blocks[int(idx.split(":")[0])]
165
- return b["var"], b["value"], b["prompt"], b["system"], b["output"]
166
-
167
- block_list.change(load_block, [blocks_state, block_list], [var, value, prompt, system, output])
168
-
169
- # Update block fields
170
- def save_block(blocks, idx, v, val, p, s):
171
- if idx is None:
172
- return blocks
173
- i = int(idx.split(":")[0])
174
- blocks[i].update({
175
- "var": v,
176
- "value": val,
177
- "prompt": p,
178
- "system": s
179
- })
180
- return blocks
181
 
182
- var.change(save_block, [blocks_state, block_list, var, value, prompt, system], blocks_state)
183
- value.change(save_block, [blocks_state, block_list, var, value, prompt, system], blocks_state)
184
- prompt.change(save_block, [blocks_state, block_list, var, value, prompt, system], blocks_state)
185
- system.change(save_block, [blocks_state, block_list, var, value, prompt, system], blocks_state)
 
186
 
187
- # Run flow
188
- run_btn.click(run_flow, blocks_state, [blocks_state, variables_out, logs])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
189
 
190
- demo.launch()
 
 
 
 
5
  import re
6
 
7
  # -----------------------------
8
+ # HELPERS
9
  # -----------------------------
10
 
11
  def create_block(block_type):
 
21
  }
22
 
23
  def resolve_vars(text, variables):
24
+ return re.sub(
25
+ r"\{\{(\w+)\}\}",
26
+ lambda m: variables.get(m.group(1), m.group(0)),
27
+ text or ""
28
+ )
29
 
30
  # -----------------------------
31
  # AI CALL
 
49
  return result["content"][0]["text"]
50
 
51
  # -----------------------------
52
+ # ENGINE
53
  # -----------------------------
54
 
55
  def run_flow(blocks):
 
77
  return blocks, variables, "\n".join(logs)
78
 
79
  # -----------------------------
80
+ # ACTIONS
81
  # -----------------------------
82
 
83
  def add_block(blocks, block_type):
84
  blocks.append(create_block(block_type))
 
85
 
86
+ choices = [
87
+ f"{i}: {b['title']}" for i, b in enumerate(blocks)
88
+ ]
89
+
90
+ return blocks, choices
91
+
92
+ def load_block(blocks, selected):
93
+ if not selected:
94
+ return "", "", "", "", ""
95
+
96
+ idx = int(selected.split(":")[0])
97
+ b = blocks[idx]
98
+
99
+ return b["var"], b["value"], b["prompt"], b["system"], b["output"]
100
+
101
+ def save_block(blocks, selected, var, value, prompt, system):
102
+ if not selected:
103
+ return blocks
104
+
105
+ idx = int(selected.split(":")[0])
106
+
107
+ blocks[idx].update({
108
+ "var": var,
109
+ "value": value,
110
+ "prompt": prompt,
111
+ "system": system
112
+ })
113
 
 
 
114
  return blocks
115
 
116
  # -----------------------------
117
+ # UI
118
  # -----------------------------
119
 
120
+ with gr.Blocks() as demo:
 
 
121
 
122
  blocks_state = gr.State([])
 
123
 
124
  gr.Markdown("# ⚡ Blocksmith AI")
125
 
126
  with gr.Row():
127
 
128
+ # ---------------- SIDEBAR ----------------
 
 
129
  with gr.Column(scale=1):
130
  gr.Markdown("## 🧩 Blocks")
131
 
132
  add_text = gr.Button("➕ Text Input")
133
  add_ai = gr.Button("➕ AI Block")
134
 
135
+ # ---------------- CANVAS ----------------
 
 
136
  with gr.Column(scale=2):
137
  gr.Markdown("## 🧠 Canvas")
138
 
 
142
  interactive=True
143
  )
144
 
145
+ # ---------------- INSPECTOR ----------------
 
 
146
  with gr.Column(scale=2):
147
  gr.Markdown("## ⚙️ Inspector")
148
 
149
  var = gr.Textbox(label="Variable")
150
  value = gr.Textbox(label="Value")
151
  prompt = gr.Textbox(label="Prompt")
152
+ system = gr.Textbox(label="System Prompt")
153
  output = gr.Textbox(label="Output", interactive=False)
154
 
155
+ # ---------------- RUN ----------------
 
 
156
  run_btn = gr.Button("▶ Run Flow")
157
 
158
  variables_out = gr.JSON(label="Variables")
159
  logs = gr.Textbox(label="Logs")
160
 
161
+ # ---------------- EVENTS ----------------
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
162
 
163
+ add_text.click(
164
+ fn=lambda b: add_block(b, "text"),
165
+ inputs=blocks_state,
166
+ outputs=[blocks_state, block_list]
167
+ )
168
 
169
+ add_ai.click(
170
+ fn=lambda b: add_block(b, "ai"),
171
+ inputs=blocks_state,
172
+ outputs=[blocks_state, block_list]
173
+ )
174
+
175
+ block_list.change(
176
+ fn=load_block,
177
+ inputs=[blocks_state, block_list],
178
+ outputs=[var, value, prompt, system, output]
179
+ )
180
+
181
+ var.change(
182
+ fn=save_block,
183
+ inputs=[blocks_state, block_list, var, value, prompt, system],
184
+ outputs=blocks_state
185
+ )
186
+
187
+ value.change(
188
+ fn=save_block,
189
+ inputs=[blocks_state, block_list, var, value, prompt, system],
190
+ outputs=blocks_state
191
+ )
192
+
193
+ prompt.change(
194
+ fn=save_block,
195
+ inputs=[blocks_state, block_list, var, value, prompt, system],
196
+ outputs=blocks_state
197
+ )
198
+
199
+ system.change(
200
+ fn=save_block,
201
+ inputs=[blocks_state, block_list, var, value, prompt, system],
202
+ outputs=blocks_state
203
+ )
204
+
205
+ run_btn.click(
206
+ fn=run_flow,
207
+ inputs=blocks_state,
208
+ outputs=[blocks_state, variables_out, logs]
209
+ )
210
 
211
+ # ✅ FIXED CSS placement (Gradio 6+)
212
+ demo.launch(css="""
213
+ body { background-color: #0f172a; color: white; }
214
+ """)