alexmec commited on
Commit
009b2de
·
verified ·
1 Parent(s): 3406ad0

Upload folder using huggingface_hub

Browse files
Files changed (1) hide show
  1. apps/multiagent_draft.py +147 -27
apps/multiagent_draft.py CHANGED
@@ -37,13 +37,7 @@ class DraftAgent:
37
  self.picks = []
38
  self.conversation_memory = []
39
 
40
- def _build_context(self, base_context: str) -> str:
41
- """Build context with custom instructions prepended if available."""
42
- if self.custom_instructions:
43
- # Prepend custom instructions to ensure they take precedence
44
- return f"{self.custom_instructions}\n\n{base_context}"
45
- return base_context
46
-
47
  def remember_conversation(self, speaker: str, message: str):
48
  """Store conversation in memory."""
49
  self.conversation_memory.append({
@@ -66,7 +60,19 @@ class DraftAgent:
66
  adp_int = 1
67
  adp_description = f"ranked #{adp_int} overall" if adp_int <= 10 else f"typically drafted around pick #{adp_int}"
68
 
69
- context = self._build_context(f"""You are {self.team_name}, a fantasy football team manager following a {self.strategy}.
 
 
 
 
 
 
 
 
 
 
 
 
70
  Your picks so far: {', '.join(self.picks) if self.picks else 'None yet'}
71
 
72
  {team} just picked {player} ({player_info['pos']}, {adp_description}, Tier: {player_info['tier']}).
@@ -75,7 +81,7 @@ Based on your strategy and the current draft situation, provide a short, natural
75
  Be competitive and show some personality - you can be critical, sarcastic, or dismissive if the pick doesn't align with your philosophy.
76
  Don't be overly nice. This is a competitive draft and you want to win. Show confidence in your strategy.
77
  Keep it under 2 sentences and make it feel like real draft room banter - trash talk is encouraged!
78
- IMPORTANT: Don't mention raw ADP numbers like "1.5" - use natural language like "top pick", "#1 overall", "first round talent", etc.""")
79
 
80
  response = self.agent.run(context)
81
  return response.strip()
@@ -85,7 +91,19 @@ IMPORTANT: Don't mention raw ADP numbers like "1.5" - use natural language like
85
  # Build conversation context
86
  recent_memory = self.conversation_memory[-5:] if len(self.conversation_memory) > 5 else self.conversation_memory
87
 
88
- context = self._build_context(f"""You are {self.team_name}, following a {self.strategy} in a fantasy draft.
 
 
 
 
 
 
 
 
 
 
 
 
89
  Your picks: {', '.join(self.picks) if self.picks else 'None yet'}
90
 
91
  {commenter} just said to you: "{comment}"
@@ -95,7 +113,7 @@ Recent conversation history:
95
 
96
  Respond naturally and briefly (1-2 sentences). Be competitive and defend your strategy aggressively.
97
  You can be sarcastic, dismissive, or fire back with your own trash talk. This is a competition!
98
- Don't be polite - show confidence and give as good as you get.""")
99
 
100
  response = self.agent.run(context)
101
  return response.strip()
@@ -131,7 +149,19 @@ class ZeroRBAgent(DraftAgent):
131
  else:
132
  adp_desc = f"ranked around #{adp_int}"
133
 
134
- context = self._build_context(f"""You are {self.team_name} following a Zero RB strategy in round {round_num}.
 
 
 
 
 
 
 
 
 
 
 
 
135
  Your previous picks: {', '.join(self.picks) if self.picks else 'None'}
136
 
137
  You're selecting {player} (WR, {player_info['team']}, {adp_desc}).
@@ -139,7 +169,7 @@ You're selecting {player} (WR, {player_info['team']}, {adp_desc}).
139
  Explain your pick in 1-2 sentences, emphasizing why this fits your Zero RB strategy.
140
  Be confident and maybe a bit cocky about avoiding RBs. Take subtle shots at teams loading up on injury-prone RBs.
141
  Show personality - you KNOW your strategy is superior.
142
- Don't use raw numbers like "1.5" or "ADP 12" - use natural language.""")
143
 
144
  reasoning = self.agent.run(context).strip()
145
  return player, reasoning
@@ -161,7 +191,19 @@ Don't use raw numbers like "1.5" or "ADP 12" - use natural language.""")
161
  else:
162
  adp_desc = f"ranked #{adp_int}" if adp_int > 30 else f"a round {(adp_int-1)//12 + 1} talent"
163
 
164
- context = self._build_context(f"""You are {self.team_name} following a Zero RB strategy in round {round_num}.
 
 
 
 
 
 
 
 
 
 
 
 
165
  Your previous picks: {', '.join(self.picks)}
166
 
167
  You're selecting {player} ({pos}, {player_info['team']}, {adp_desc}).
@@ -169,7 +211,7 @@ You're selecting {player} ({pos}, {player_info['team']}, {adp_desc}).
169
  Explain why you're taking this player now, given your Zero RB approach.
170
  If it's a RB, explain why NOW is the right time (while others reached early).
171
  Be smug about getting value while others panicked. Keep it to 1-2 sentences with attitude.
172
- Use terms like "value", "steal", "while others reached" - not raw numbers.""")
173
 
174
  reasoning = self.agent.run(context).strip()
175
  return player, reasoning
@@ -207,7 +249,19 @@ class BPAAgent(DraftAgent):
207
  else:
208
  adp_desc = f"ranked #{adp_int} overall"
209
 
210
- context = self._build_context(f"""You are {self.team_name} following a Best Player Available strategy.
 
 
 
 
 
 
 
 
 
 
 
 
211
  Your previous picks: {', '.join(self.picks) if self.picks else 'None'}
212
  Round: {len(self.picks) + 1}
213
 
@@ -216,7 +270,7 @@ You're selecting {player} ({pos}, {player_info['team']}, {adp_desc}).
216
  Explain why this is the best value pick available. Focus on their value and ranking.
217
  Be condescending about other teams reaching for needs or following rigid strategies.
218
  You're the smart one taking the obvious value - let them know it. Keep it to 1-2 sentences.
219
- Don't use raw ADP numbers - use terms like "best available", "top-ranked", "obvious value", etc.""")
220
 
221
  reasoning = self.agent.run(context).strip()
222
  return player, reasoning
@@ -255,7 +309,19 @@ class RobustRBAgent(DraftAgent):
255
  else:
256
  adp_desc = "a solid running back"
257
 
258
- context = self._build_context(f"""You are {self.team_name} following a Robust RB strategy in round {round_num}.
 
 
 
 
 
 
 
 
 
 
 
 
259
  Your previous picks: {', '.join(self.picks) if self.picks else 'None'}
260
 
261
  You're selecting {player} (RB, {player_info['team']}, {adp_desc}).
@@ -263,7 +329,7 @@ You're selecting {player} (RB, {player_info['team']}, {adp_desc}).
263
  Explain why this RB is crucial for your Robust RB strategy. Be aggressive about RBs winning championships.
264
  Mock teams that are going WR-heavy. You're building a REAL team with a strong foundation.
265
  Be old-school and dismissive of "fancy" WR strategies. Keep it to 1-2 sentences with authority.
266
- Use terms like "workhorse", "bell cow", "foundation" - not raw numbers.""")
267
 
268
  reasoning = self.agent.run(context).strip()
269
  return player, reasoning
@@ -287,14 +353,26 @@ Use terms like "workhorse", "bell cow", "foundation" - not raw numbers.""")
287
  else:
288
  adp_desc = f"ranked #{adp_int}"
289
 
290
- context = self._build_context(f"""You are {self.team_name} following a Robust RB strategy in round {round_num}.
 
 
 
 
 
 
 
 
 
 
 
 
291
  Your previous picks: {', '.join(self.picks)}
292
 
293
  You're selecting {player} ({player_info['pos']}, {player_info['team']}, {adp_desc}).
294
 
295
  Explain how this pick fits with your RB-heavy build. If it's not a RB, grudgingly admit you need other positions too.
296
  But emphasize your RB foundation is what matters. Be dismissive of WR-first teams. Keep it to 1-2 sentences.
297
- Focus on your "foundation" and "championship formula" - avoid raw rankings.""")
298
 
299
  reasoning = self.agent.run(context).strip()
300
  return player, reasoning
@@ -325,7 +403,19 @@ class UpsideAgent(DraftAgent):
325
  adp_int = int(player_info['adp'])
326
  adp_desc = "a sleeper pick" if adp_int > 36 else "someone with untapped potential"
327
 
328
- context = self._build_context(f"""You are {self.team_name}, an Upside Hunter who looks for breakout potential.
 
 
 
 
 
 
 
 
 
 
 
 
329
  Your previous picks: {', '.join(self.picks) if self.picks else 'None'}
330
  Round: {len(self.picks) + 1}
331
 
@@ -334,7 +424,7 @@ You're reaching slightly for {player} ({player_info['pos']}, {player_info['team'
334
  Explain why you see breakout/league-winning potential in this player. Be enthusiastic about their upside.
335
  Mock the "safe" picks others are making. You're here to WIN, not finish 4th!
336
  Championships require RISK! Keep it to 1-2 sentences with swagger.
337
- Talk about "upside", "ceiling", "league-winner" - not specific rankings.""")
338
 
339
  reasoning = self.agent.run(context).strip()
340
  return player, reasoning
@@ -352,7 +442,19 @@ Talk about "upside", "ceiling", "league-winner" - not specific rankings.""")
352
  else:
353
  adp_desc = "a potential breakout"
354
 
355
- context = self._build_context(f"""You are {self.team_name}, an Upside Hunter who looks for league-winners.
 
 
 
 
 
 
 
 
 
 
 
 
356
  Your previous picks: {', '.join(self.picks) if self.picks else 'None'}
357
  Round: {len(self.picks) + 1}
358
 
@@ -361,7 +463,7 @@ You're selecting {player} ({player_info['pos']}, {player_info['team']}, {adp_des
361
  Explain what upside or potential you see in this player. Focus on ceiling over floor.
362
  Be dismissive of "safe" boring picks. You're building a championship roster, not a participation trophy team!
363
  Keep it to 1-2 sentences with confidence.
364
- Use exciting terms like "breakout", "league-winner", "explosive" - not rankings.""")
365
 
366
  reasoning = self.agent.run(context).strip()
367
  return player, reasoning
@@ -407,7 +509,25 @@ class UserAdvisorAgent(DraftAgent):
407
  other_picks_summary.append(f"Team {team} ({other_agents_strategies.get(f'Team {team}', 'Unknown')}): {recent_pick}")
408
 
409
  # Build context for LLM
410
- context = self._build_context(f"""You are an expert fantasy football advisor helping the user in round {round_num} of their draft.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
411
 
412
  User's current roster:
413
  - RBs: {', '.join(user_rbs) if user_rbs else 'None'}
@@ -432,7 +552,7 @@ Provide strategic advice for the user's pick. Consider:
432
 
433
  Format as: 🎯 **Round {round_num} Advice** followed by 2-3 bullet points with specific player recommendations and reasoning.
434
  Keep it concise but insightful.
435
- When discussing player rankings, use natural language like "top-5 RB", "first-round talent", "mid-round value" instead of raw numbers like "ADP 12.5".""")
436
 
437
  advice = self.agent.run(context).strip()
438
  return advice
 
37
  self.picks = []
38
  self.conversation_memory = []
39
 
40
+
 
 
 
 
 
 
41
  def remember_conversation(self, speaker: str, message: str):
42
  """Store conversation in memory."""
43
  self.conversation_memory.append({
 
60
  adp_int = 1
61
  adp_description = f"ranked #{adp_int} overall" if adp_int <= 10 else f"typically drafted around pick #{adp_int}"
62
 
63
+ if self.custom_instructions:
64
+ # Use custom instructions with minimal context
65
+ context = f"""{self.custom_instructions}
66
+
67
+ CURRENT SITUATION:
68
+ - You are {self.team_name}
69
+ - Your picks so far: {', '.join(self.picks) if self.picks else 'None yet'}
70
+ - {team} just picked {player} ({player_info['pos']}, {adp_description}, Tier: {player_info['tier']})
71
+
72
+ Provide a short comment on this pick based on your personality and strategy. Keep it under 2 sentences."""
73
+ else:
74
+ # Use default context
75
+ context = f"""You are {self.team_name}, a fantasy football team manager following a {self.strategy}.
76
  Your picks so far: {', '.join(self.picks) if self.picks else 'None yet'}
77
 
78
  {team} just picked {player} ({player_info['pos']}, {adp_description}, Tier: {player_info['tier']}).
 
81
  Be competitive and show some personality - you can be critical, sarcastic, or dismissive if the pick doesn't align with your philosophy.
82
  Don't be overly nice. This is a competitive draft and you want to win. Show confidence in your strategy.
83
  Keep it under 2 sentences and make it feel like real draft room banter - trash talk is encouraged!
84
+ IMPORTANT: Don't mention raw ADP numbers like "1.5" - use natural language like "top pick", "#1 overall", "first round talent", etc."""
85
 
86
  response = self.agent.run(context)
87
  return response.strip()
 
91
  # Build conversation context
92
  recent_memory = self.conversation_memory[-5:] if len(self.conversation_memory) > 5 else self.conversation_memory
93
 
94
+ if self.custom_instructions:
95
+ # Use custom instructions with minimal context
96
+ context = f"""{self.custom_instructions}
97
+
98
+ CURRENT SITUATION:
99
+ - You are {self.team_name}
100
+ - Your picks: {', '.join(self.picks) if self.picks else 'None yet'}
101
+ - {commenter} just said to you: "{comment}"
102
+
103
+ Respond based on your personality. Keep it to 1-2 sentences."""
104
+ else:
105
+ # Use default context
106
+ context = f"""You are {self.team_name}, following a {self.strategy} in a fantasy draft.
107
  Your picks: {', '.join(self.picks) if self.picks else 'None yet'}
108
 
109
  {commenter} just said to you: "{comment}"
 
113
 
114
  Respond naturally and briefly (1-2 sentences). Be competitive and defend your strategy aggressively.
115
  You can be sarcastic, dismissive, or fire back with your own trash talk. This is a competition!
116
+ Don't be polite - show confidence and give as good as you get."""
117
 
118
  response = self.agent.run(context)
119
  return response.strip()
 
149
  else:
150
  adp_desc = f"ranked around #{adp_int}"
151
 
152
+ if self.custom_instructions:
153
+ # Use custom instructions with minimal context
154
+ context = f"""{self.custom_instructions}
155
+
156
+ CURRENT SITUATION:
157
+ - You are {self.team_name} in round {round_num}
158
+ - Your previous picks: {', '.join(self.picks) if self.picks else 'None'}
159
+ - You're selecting {player} (WR, {player_info['team']}, {adp_desc})
160
+
161
+ Explain your pick in 1-2 sentences based on your personality and strategy."""
162
+ else:
163
+ # Use default context
164
+ context = f"""You are {self.team_name} following a Zero RB strategy in round {round_num}.
165
  Your previous picks: {', '.join(self.picks) if self.picks else 'None'}
166
 
167
  You're selecting {player} (WR, {player_info['team']}, {adp_desc}).
 
169
  Explain your pick in 1-2 sentences, emphasizing why this fits your Zero RB strategy.
170
  Be confident and maybe a bit cocky about avoiding RBs. Take subtle shots at teams loading up on injury-prone RBs.
171
  Show personality - you KNOW your strategy is superior.
172
+ Don't use raw numbers like "1.5" or "ADP 12" - use natural language."""
173
 
174
  reasoning = self.agent.run(context).strip()
175
  return player, reasoning
 
191
  else:
192
  adp_desc = f"ranked #{adp_int}" if adp_int > 30 else f"a round {(adp_int-1)//12 + 1} talent"
193
 
194
+ if self.custom_instructions:
195
+ # Use custom instructions with minimal context
196
+ context = f"""{self.custom_instructions}
197
+
198
+ CURRENT SITUATION:
199
+ - You are {self.team_name} in round {round_num}
200
+ - Your previous picks: {', '.join(self.picks)}
201
+ - You're selecting {player} ({pos}, {player_info['team']}, {adp_desc})
202
+
203
+ Explain your pick in 1-2 sentences based on your personality and strategy."""
204
+ else:
205
+ # Use default context
206
+ context = f"""You are {self.team_name} following a Zero RB strategy in round {round_num}.
207
  Your previous picks: {', '.join(self.picks)}
208
 
209
  You're selecting {player} ({pos}, {player_info['team']}, {adp_desc}).
 
211
  Explain why you're taking this player now, given your Zero RB approach.
212
  If it's a RB, explain why NOW is the right time (while others reached early).
213
  Be smug about getting value while others panicked. Keep it to 1-2 sentences with attitude.
214
+ Use terms like "value", "steal", "while others reached" - not raw numbers."""
215
 
216
  reasoning = self.agent.run(context).strip()
217
  return player, reasoning
 
249
  else:
250
  adp_desc = f"ranked #{adp_int} overall"
251
 
252
+ if self.custom_instructions:
253
+ # Use custom instructions with minimal context
254
+ context = f"""{self.custom_instructions}
255
+
256
+ CURRENT SITUATION:
257
+ - You are {self.team_name} in round {len(self.picks) + 1}
258
+ - Your previous picks: {', '.join(self.picks) if self.picks else 'None'}
259
+ - You're selecting {player} ({pos}, {player_info['team']}, {adp_desc})
260
+
261
+ Explain your pick in 1-2 sentences based on your personality and strategy."""
262
+ else:
263
+ # Use default context
264
+ context = f"""You are {self.team_name} following a Best Player Available strategy.
265
  Your previous picks: {', '.join(self.picks) if self.picks else 'None'}
266
  Round: {len(self.picks) + 1}
267
 
 
270
  Explain why this is the best value pick available. Focus on their value and ranking.
271
  Be condescending about other teams reaching for needs or following rigid strategies.
272
  You're the smart one taking the obvious value - let them know it. Keep it to 1-2 sentences.
273
+ Don't use raw ADP numbers - use terms like "best available", "top-ranked", "obvious value", etc."""
274
 
275
  reasoning = self.agent.run(context).strip()
276
  return player, reasoning
 
309
  else:
310
  adp_desc = "a solid running back"
311
 
312
+ if self.custom_instructions:
313
+ # Use custom instructions with minimal context
314
+ context = f"""{self.custom_instructions}
315
+
316
+ CURRENT SITUATION:
317
+ - You are {self.team_name} in round {round_num}
318
+ - Your previous picks: {', '.join(self.picks) if self.picks else 'None'}
319
+ - You're selecting {player} (RB, {player_info['team']}, {adp_desc})
320
+
321
+ Explain your pick in 1-2 sentences based on your personality and strategy."""
322
+ else:
323
+ # Use default context
324
+ context = f"""You are {self.team_name} following a Robust RB strategy in round {round_num}.
325
  Your previous picks: {', '.join(self.picks) if self.picks else 'None'}
326
 
327
  You're selecting {player} (RB, {player_info['team']}, {adp_desc}).
 
329
  Explain why this RB is crucial for your Robust RB strategy. Be aggressive about RBs winning championships.
330
  Mock teams that are going WR-heavy. You're building a REAL team with a strong foundation.
331
  Be old-school and dismissive of "fancy" WR strategies. Keep it to 1-2 sentences with authority.
332
+ Use terms like "workhorse", "bell cow", "foundation" - not raw numbers."""
333
 
334
  reasoning = self.agent.run(context).strip()
335
  return player, reasoning
 
353
  else:
354
  adp_desc = f"ranked #{adp_int}"
355
 
356
+ if self.custom_instructions:
357
+ # Use custom instructions with minimal context
358
+ context = f"""{self.custom_instructions}
359
+
360
+ CURRENT SITUATION:
361
+ - You are {self.team_name} in round {round_num}
362
+ - Your previous picks: {', '.join(self.picks)}
363
+ - You're selecting {player} ({player_info['pos']}, {player_info['team']}, {adp_desc})
364
+
365
+ Explain your pick in 1-2 sentences based on your personality and strategy."""
366
+ else:
367
+ # Use default context
368
+ context = f"""You are {self.team_name} following a Robust RB strategy in round {round_num}.
369
  Your previous picks: {', '.join(self.picks)}
370
 
371
  You're selecting {player} ({player_info['pos']}, {player_info['team']}, {adp_desc}).
372
 
373
  Explain how this pick fits with your RB-heavy build. If it's not a RB, grudgingly admit you need other positions too.
374
  But emphasize your RB foundation is what matters. Be dismissive of WR-first teams. Keep it to 1-2 sentences.
375
+ Focus on your "foundation" and "championship formula" - avoid raw rankings."""
376
 
377
  reasoning = self.agent.run(context).strip()
378
  return player, reasoning
 
403
  adp_int = int(player_info['adp'])
404
  adp_desc = "a sleeper pick" if adp_int > 36 else "someone with untapped potential"
405
 
406
+ if self.custom_instructions:
407
+ # Use custom instructions with minimal context
408
+ context = f"""{self.custom_instructions}
409
+
410
+ CURRENT SITUATION:
411
+ - You are {self.team_name} in round {len(self.picks) + 1}
412
+ - Your previous picks: {', '.join(self.picks) if self.picks else 'None'}
413
+ - You're reaching slightly for {player} ({player_info['pos']}, {player_info['team']}, {adp_desc})
414
+
415
+ Explain your pick in 1-2 sentences based on your personality and strategy."""
416
+ else:
417
+ # Use default context
418
+ context = f"""You are {self.team_name}, an Upside Hunter who looks for breakout potential.
419
  Your previous picks: {', '.join(self.picks) if self.picks else 'None'}
420
  Round: {len(self.picks) + 1}
421
 
 
424
  Explain why you see breakout/league-winning potential in this player. Be enthusiastic about their upside.
425
  Mock the "safe" picks others are making. You're here to WIN, not finish 4th!
426
  Championships require RISK! Keep it to 1-2 sentences with swagger.
427
+ Talk about "upside", "ceiling", "league-winner" - not specific rankings."""
428
 
429
  reasoning = self.agent.run(context).strip()
430
  return player, reasoning
 
442
  else:
443
  adp_desc = "a potential breakout"
444
 
445
+ if self.custom_instructions:
446
+ # Use custom instructions with minimal context
447
+ context = f"""{self.custom_instructions}
448
+
449
+ CURRENT SITUATION:
450
+ - You are {self.team_name} in round {len(self.picks) + 1}
451
+ - Your previous picks: {', '.join(self.picks) if self.picks else 'None'}
452
+ - You're selecting {player} ({player_info['pos']}, {player_info['team']}, {adp_desc})
453
+
454
+ Explain your pick in 1-2 sentences based on your personality and strategy."""
455
+ else:
456
+ # Use default context
457
+ context = f"""You are {self.team_name}, an Upside Hunter who looks for league-winners.
458
  Your previous picks: {', '.join(self.picks) if self.picks else 'None'}
459
  Round: {len(self.picks) + 1}
460
 
 
463
  Explain what upside or potential you see in this player. Focus on ceiling over floor.
464
  Be dismissive of "safe" boring picks. You're building a championship roster, not a participation trophy team!
465
  Keep it to 1-2 sentences with confidence.
466
+ Use exciting terms like "breakout", "league-winner", "explosive" - not rankings."""
467
 
468
  reasoning = self.agent.run(context).strip()
469
  return player, reasoning
 
509
  other_picks_summary.append(f"Team {team} ({other_agents_strategies.get(f'Team {team}', 'Unknown')}): {recent_pick}")
510
 
511
  # Build context for LLM
512
+ if self.custom_instructions:
513
+ # Use custom instructions with minimal context
514
+ context = f"""{self.custom_instructions}
515
+
516
+ CURRENT SITUATION:
517
+ - Round {round_num} of the draft
518
+ - User's current roster:
519
+ - RBs: {', '.join(user_rbs) if user_rbs else 'None'}
520
+ - WRs: {', '.join(user_wrs) if user_wrs else 'None'}
521
+ - Top available players:
522
+ - Best RB: {best_by_pos.get('RB', [None])[0]} {f"(ranked #{int(best_by_pos.get('RB', [None, {'adp': 999}])[1]['adp'])})" if best_by_pos.get('RB') else ""}
523
+ - Best WR: {best_by_pos.get('WR', [None])[0]} {f"(ranked #{int(best_by_pos.get('WR', [None, {'adp': 999}])[1]['adp'])})" if best_by_pos.get('WR') else ""}
524
+ - Best QB: {best_by_pos.get('QB', [None])[0]} {f"(ranked #{int(best_by_pos.get('QB', [None, {'adp': 999}])[1]['adp'])})" if best_by_pos.get('QB') else ""}
525
+ - Best TE: {best_by_pos.get('TE', [None])[0]} {f"(ranked #{int(best_by_pos.get('TE', [None, {'adp': 999}])[1]['adp'])})" if best_by_pos.get('TE') else ""}
526
+
527
+ Provide strategic advice for the user's pick based on your personality."""
528
+ else:
529
+ # Use default context
530
+ context = f"""You are an expert fantasy football advisor helping the user in round {round_num} of their draft.
531
 
532
  User's current roster:
533
  - RBs: {', '.join(user_rbs) if user_rbs else 'None'}
 
552
 
553
  Format as: 🎯 **Round {round_num} Advice** followed by 2-3 bullet points with specific player recommendations and reasoning.
554
  Keep it concise but insightful.
555
+ When discussing player rankings, use natural language like "top-5 RB", "first-round talent", "mid-round value" instead of raw numbers like "ADP 12.5"."""
556
 
557
  advice = self.agent.run(context).strip()
558
  return advice