Lilli98 commited on
Commit
f9bdcf7
·
verified ·
1 Parent(s): eaa9a52

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +35 -16
app.py CHANGED
@@ -272,16 +272,26 @@ def step_game(state: dict, distributor_order: int):
272
  demand_history_visible = state["customer_demand"][start_idx:(week - 1)]
273
 
274
  llm_outputs = {}
275
- for role in ["retailer", "wholesaler", "factory"]:
276
- order_val, raw = call_llm_for_order(role, state_snapshot_for_prompt(state), state.get("info_sharing", False), demand_history_visible)
 
 
 
 
 
277
  order_val = max(0, int(order_val))
278
- state["orders_history"][role].append(order_val)
279
  llm_outputs[role] = {"order": order_val, "raw": raw}
280
- # set incoming_orders for upstream parties (visible next week)
281
- if role == "retailer":
282
- state["incoming_orders"]["distributor"] = order_val
283
- elif role == "wholesaler":
284
- state["incoming_orders"]["factory"] = order_val
 
 
 
 
 
 
285
 
286
  # 6) place orders into pipelines (will arrive after SHIPPING_LEAD_TIME)
287
  downstream_map = {"factory": "wholesaler", "wholesaler": "distributor", "distributor": "retailer", "retailer": None}
@@ -418,14 +428,23 @@ with col_main:
418
  st.markdown("---")
419
  # Distributor form
420
  with st.form(key=f"order_form_{participant_id}", clear_on_submit=False):
421
- st.write("### Your (Distributor) decision this week")
422
- default_val = state["incoming_orders"].get("distributor", 4) or 4
423
- distributor_order = st.number_input("Order to place to upstream (Wholesaler):", min_value=0, step=1, value=default_val)
424
- submitted = st.form_submit_button("Submit Order (locks your decision)")
425
- if submitted:
426
- st.session_state.setdefault("pending_orders", {})
427
- st.session_state["pending_orders"][participant_id] = int(distributor_order)
428
- st.success(f"Order submitted: {distributor_order}. Now click 'Next Week' to process the week.")
 
 
 
 
 
 
 
 
 
429
 
430
  st.markdown("---")
431
  pending = st.session_state.get("pending_orders", {}).get(participant_id, None)
 
272
  demand_history_visible = state["customer_demand"][start_idx:(week - 1)]
273
 
274
  llm_outputs = {}
275
+ for role in ["retailer", "wholesaler", "factory", "distributor"]:
276
+ order_val, raw = call_llm_for_order(
277
+ role,
278
+ state_snapshot_for_prompt(state),
279
+ state.get("info_sharing", False),
280
+ demand_history_visible
281
+ )
282
  order_val = max(0, int(order_val))
 
283
  llm_outputs[role] = {"order": order_val, "raw": raw}
284
+
285
+ if role != "distributor": # AI 决策直接生效
286
+ state["orders_history"][role].append(order_val)
287
+ if role == "retailer":
288
+ state["incoming_orders"]["distributor"] = order_val
289
+ elif role == "wholesaler":
290
+ state["incoming_orders"]["factory"] = order_val
291
+
292
+ # 人类 distributor 的真实 order 后面会覆盖
293
+ state["orders_history"]["distributor"].append(int(distributor_order))
294
+ state["incoming_orders"]["wholesaler"] = int(distributor_order)
295
 
296
  # 6) place orders into pipelines (will arrive after SHIPPING_LEAD_TIME)
297
  downstream_map = {"factory": "wholesaler", "wholesaler": "distributor", "distributor": "retailer", "retailer": None}
 
428
  st.markdown("---")
429
  # Distributor form
430
  with st.form(key=f"order_form_{participant_id}", clear_on_submit=False):
431
+ st.write("### Your (Distributor) decision this week")
432
+
433
+ # 如果有 LLM 给的建议,就显示出来
434
+ last_log = state["logs"][-1] if state.get("logs") else None
435
+ if last_log and "llm_raw" in last_log and "distributor" in last_log["llm_raw"]:
436
+ suggestion = last_log["llm_raw"]["distributor"]
437
+ st.info(f"💡 AI suggests you order: **{suggestion}** units (you can follow or override)")
438
+ else:
439
+ st.info("💡 AI suggestion will appear after the first processed week.")
440
+
441
+ default_val = state["incoming_orders"].get("distributor", 4) or 4
442
+ distributor_order = st.number_input("Order to place to upstream (Wholesaler):", min_value=0, step=1, value=default_val)
443
+ submitted = st.form_submit_button("Submit Order (locks your decision)")
444
+ if submitted:
445
+ st.session_state.setdefault("pending_orders", {})
446
+ st.session_state["pending_orders"][participant_id] = int(distributor_order)
447
+ st.success(f"Order submitted: {distributor_order}. Now click 'Next Week' to process the week.")
448
 
449
  st.markdown("---")
450
  pending = st.session_state.get("pending_orders", {}).get(participant_id, None)