X commited on
Commit
94d2ddc
·
verified ·
1 Parent(s): d1913ca

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +46 -14
app.py CHANGED
@@ -234,12 +234,16 @@ def train_ppo(episodes=300, steps_per_update=256, lr=3e-4):
234
  # ==========================================
235
  # 4. HF SPACE DEMO
236
  # ==========================================
 
 
 
237
  def create_demo():
238
  print("🏗️ Обучение PPO-агента в бесконечном мире...")
239
  agent, history = train_ppo(episodes=100)
240
  agent.eval()
241
 
242
- def run_exploration(n_steps=200):
 
243
  env = InfiniteWorld(seed=random.randint(0, 99999))
244
  obs = env.reset()
245
  hidden = None
@@ -247,7 +251,7 @@ def create_demo():
247
  positions = []
248
 
249
  with torch.no_grad():
250
- for _ in range(n_steps):
251
  fig, ax = plt.subplots(figsize=(5, 5))
252
  ax.imshow(obs)
253
  ax.set_title(f"Pos: {env.agent_pos} | Chunks: {len(env.chunks)}")
@@ -262,26 +266,54 @@ def create_demo():
262
  if done:
263
  break
264
 
265
- # Карта посещённых позиций
266
- fig2, ax2 = plt.subplots(figsize=(6, 6))
267
- xs, ys = zip(*positions)
268
- ax2.scatter(xs, ys, c=range(len(positions)), cmap='viridis', s=1)
269
- ax2.set_title("Траектория исследования")
270
- ax2.set_aspect('equal')
271
- frames.append(fig2)
272
- plt.close(fig2)
 
273
 
274
  return frames
275
 
 
276
  with gr.Blocks(title="Infinite Builder Agent") as demo:
277
  gr.Markdown("# 🌍 Бесконечный мир: PPO-агент с нуля")
278
  gr.Markdown("Агент видит только локальный патч 16×16, имеет GRU-память и исследует процедурный мир.")
279
- btn = gr.Button("▶️ Запустить исследование (200 шагов)")
280
- gallery = gr.Gallery(label="Процесс", columns=5, height="auto")
281
- btn.click(fn=run_exploration, outputs=gallery)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
282
 
283
  return demo
284
 
 
285
  if __name__ == "__main__":
286
  demo = create_demo()
287
- demo.launch()
 
 
 
 
 
 
 
 
234
  # ==========================================
235
  # 4. HF SPACE DEMO
236
  # ==========================================
237
+ # ==========================================
238
+ # 4. HF SPACE DEMO (ИСПРАВЛЕНО ДЛЯ HF SPACES)
239
+ # ==========================================
240
  def create_demo():
241
  print("🏗️ Обучение PPO-агента в бесконечном мире...")
242
  agent, history = train_ppo(episodes=100)
243
  agent.eval()
244
 
245
+ def run_exploration(n_steps: int = 200):
246
+ """Функция с явной типизацией для избежания бага schema в Gradio"""
247
  env = InfiniteWorld(seed=random.randint(0, 99999))
248
  obs = env.reset()
249
  hidden = None
 
251
  positions = []
252
 
253
  with torch.no_grad():
254
+ for _ in range(min(n_steps, 500)): # Ограничиваем макс шаги
255
  fig, ax = plt.subplots(figsize=(5, 5))
256
  ax.imshow(obs)
257
  ax.set_title(f"Pos: {env.agent_pos} | Chunks: {len(env.chunks)}")
 
266
  if done:
267
  break
268
 
269
+ # Карта траектории
270
+ if positions:
271
+ fig2, ax2 = plt.subplots(figsize=(6, 6))
272
+ xs, ys = zip(*positions)
273
+ ax2.scatter(xs, ys, c=range(len(positions)), cmap='viridis', s=1)
274
+ ax2.set_title("Траектория исследования")
275
+ ax2.set_aspect('equal')
276
+ frames.append(fig2)
277
+ plt.close(fig2)
278
 
279
  return frames
280
 
281
+ # Явное указание типов компонентов устраняет баг schema
282
  with gr.Blocks(title="Infinite Builder Agent") as demo:
283
  gr.Markdown("# 🌍 Бесконечный мир: PPO-агент с нуля")
284
  gr.Markdown("Агент видит только локальный патч 16×16, имеет GRU-память и исследует процедурный мир.")
285
+
286
+ steps_input = gr.Slider(
287
+ minimum=50,
288
+ maximum=500,
289
+ step=50,
290
+ value=200,
291
+ label="Количество шагов исследования"
292
+ )
293
+ btn = gr.Button("▶️ Запустить исследование", variant="primary")
294
+ gallery = gr.Gallery(
295
+ label="Процесс строительства и исследования",
296
+ columns=4,
297
+ height="auto",
298
+ object_fit="contain"
299
+ )
300
+
301
+ btn.click(
302
+ fn=run_exploration,
303
+ inputs=[steps_input],
304
+ outputs=[gallery]
305
+ )
306
 
307
  return demo
308
 
309
+
310
  if __name__ == "__main__":
311
  demo = create_demo()
312
+ # КРИТИЧНО: Для HF Spaces обязательно server_name="0.0.0.0"
313
+ # share=False на Spaces, т.к. прокси сам маршрутизирует трафик
314
+ demo.launch(
315
+ server_name="0.0.0.0",
316
+ server_port=7860,
317
+ share=False,
318
+ show_api=False
319
+ )