Lyte commited on
Commit
d044180
·
verified ·
1 Parent(s): 981e3c6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +14 -72
app.py CHANGED
@@ -7,7 +7,7 @@ from typing import List
7
 
8
  model = Llama(
9
  model_path=hf_hub_download(
10
- repo_id=os.environ.get("REPO_ID", "Lyte/QuadConnect2.5-1.5B-v0.1.0b"), #"Lyte/QuadConnect2.5-0.5B-v0.0.9b"),#"Lyte/QuadConnect2.5-0.5B-v0.0.8b"), #"Lyte/QuadConnect2.5-0.5B-v0.0.6b"), #"Lyte/QuadConnect-Llama-1B-v0.0.7b"),#"
11
  filename=os.environ.get("MODEL_FILE", "unsloth.Q8_0.gguf"), #"quadconnect.Q8_0.gguf"),
12
  ),
13
  n_ctx=16384
@@ -47,16 +47,6 @@ def extract_xml_move(text: str) -> str:
47
  return match.group(1)
48
  return ""
49
 
50
- def extract_xml_reasoning(text: str) -> str:
51
- """
52
- Extracts the reasoning section from the XML format.
53
- """
54
- import re
55
- match = re.search(r'<reasoning>(.*?)</reasoning>', text, re.DOTALL)
56
- if match:
57
- return match.group(1).strip()
58
- return ""
59
-
60
  def convert_moves_to_coordinate_list(moves_list: List[str]) -> str:
61
  """
62
  Converts a list of moves to a coordinate list representation.
@@ -301,7 +291,6 @@ def create_interface():
301
  margin: 15px 0;
302
  font-family: monospace;
303
  min-height: 100px;
304
- color: white;
305
  }
306
  .reasoning-box {
307
  border-left: 4px solid #2196F3;
@@ -309,7 +298,6 @@ def create_interface():
309
  margin: 10px 0;
310
  background: #22004d;
311
  border-radius: 0 10px 10px 0;
312
- color: white;
313
  }
314
  #column-buttons {
315
  display: flex;
@@ -325,14 +313,6 @@ def create_interface():
325
  div.svelte-1nguped {
326
  display: block;
327
  }
328
- .thinking-indicator {
329
- color: #ffc107;
330
- font-style: italic;
331
- }
332
- .move-highlight {
333
- font-weight: bold;
334
- color: #4CAF50;
335
- }
336
  """
337
 
338
  with gr.Blocks(css=css) as interface:
@@ -404,63 +384,26 @@ def create_interface():
404
 
405
  # Use the new game state formatting
406
  game_state = game.format_game_state()
 
407
 
408
- # Initialize the reasoning display with a "thinking" message
409
- reasoning_html = '<div id="ai-reasoning"><p class="thinking-indicator">Thinking...</p></div>'
410
- yield [render_board(game.board), "AI is thinking...", reasoning_html]
411
-
412
- # Prepare to stream AI's response
413
- full_response = ""
414
- current_reasoning = ""
415
-
416
- # Get AI response with streaming
417
- for chunk in model.create_chat_completion(
418
  messages=[
419
  {"role": "system", "content": SYSTEM_PROMPT},
420
  {"role": "user", "content": game_state}
421
  ],
422
  temperature=temperature,
423
  top_p=0.95,
424
- max_tokens=1024,
425
- stream=True # Enable streaming!
426
- ):
427
- if 'choices' in chunk and len(chunk['choices']) > 0:
428
- content = chunk['choices'][0].get('delta', {}).get('content', '')
429
- if content:
430
- full_response += content
431
-
432
- # Try to extract current reasoning for display
433
- try:
434
- # Update the displayed reasoning as it comes in
435
- current_reasoning = extract_xml_reasoning(full_response)
436
- if current_reasoning:
437
- # Format reasoning for display
438
- reasoning_html = f'''
439
- <div id="ai-reasoning">
440
- <div class="reasoning-box">
441
- <p><strong>🤔 Reasoning:</strong></p>
442
- <p>{current_reasoning}</p>
443
- <p class="thinking-indicator">Deciding on next move...</p>
444
- </div>
445
- </div>
446
- '''
447
- yield [render_board(game.board), "AI is thinking...", reasoning_html]
448
- except:
449
- # If we can't extract reasoning yet, just show what we have
450
- reasoning_html = f'''
451
- <div id="ai-reasoning">
452
- <div class="reasoning-box">
453
- <p><strong>🤔 Reasoning:</strong></p>
454
- <p class="thinking-indicator">Analyzing the board...</p>
455
- </div>
456
- </div>
457
- '''
458
- yield [render_board(game.board), "AI is thinking...", reasoning_html]
459
 
460
- # Process the complete response
461
  try:
462
- reasoning = extract_xml_reasoning(full_response)
463
- move_str = extract_xml_move(full_response)
464
 
465
  if not move_str:
466
  raise ValueError("Invalid move format from AI")
@@ -470,18 +413,17 @@ def create_interface():
470
  if ai_col == -1:
471
  raise ValueError("Invalid move format from AI")
472
 
473
- # Format final reasoning with move for display
474
  reasoning_html = f'''
475
  <div id="ai-reasoning">
476
  <div class="reasoning-box">
477
  <p><strong>🤔 Reasoning:</strong></p>
478
  <p>{reasoning}</p>
479
- <p><strong>📍 Move chosen:</strong> <span class="move-highlight">Column {move_str.upper()}</span></p>
480
  </div>
481
  </div>
482
  '''
483
 
484
- # Make the AI's move
485
  success, _ = game.make_move(ai_col)
486
  if success:
487
  # Check for AI winner
 
7
 
8
  model = Llama(
9
  model_path=hf_hub_download(
10
+ repo_id=os.environ.get("REPO_ID", "Lyte/QuadConnect2.5-1.5B-v0.0.9b"), #"Lyte/QuadConnect2.5-0.5B-v0.0.9b"),#"Lyte/QuadConnect2.5-0.5B-v0.0.8b"), #"Lyte/QuadConnect2.5-0.5B-v0.0.6b"), #"Lyte/QuadConnect-Llama-1B-v0.0.7b"),#"
11
  filename=os.environ.get("MODEL_FILE", "unsloth.Q8_0.gguf"), #"quadconnect.Q8_0.gguf"),
12
  ),
13
  n_ctx=16384
 
47
  return match.group(1)
48
  return ""
49
 
 
 
 
 
 
 
 
 
 
 
50
  def convert_moves_to_coordinate_list(moves_list: List[str]) -> str:
51
  """
52
  Converts a list of moves to a coordinate list representation.
 
291
  margin: 15px 0;
292
  font-family: monospace;
293
  min-height: 100px;
 
294
  }
295
  .reasoning-box {
296
  border-left: 4px solid #2196F3;
 
298
  margin: 10px 0;
299
  background: #22004d;
300
  border-radius: 0 10px 10px 0;
 
301
  }
302
  #column-buttons {
303
  display: flex;
 
313
  div.svelte-1nguped {
314
  display: block;
315
  }
 
 
 
 
 
 
 
 
316
  """
317
 
318
  with gr.Blocks(css=css) as interface:
 
384
 
385
  # Use the new game state formatting
386
  game_state = game.format_game_state()
387
+ print(game_state)
388
 
389
+ # Get AI response with user-defined temperature
390
+ response = model.create_chat_completion(
 
 
 
 
 
 
 
 
391
  messages=[
392
  {"role": "system", "content": SYSTEM_PROMPT},
393
  {"role": "user", "content": game_state}
394
  ],
395
  temperature=temperature,
396
  top_p=0.95,
397
+ max_tokens=1024
398
+ )
399
+
400
+ ai_response = response['choices'][0]['message']['content']
401
+ print(ai_response)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
402
 
403
+ # Extract reasoning and move
404
  try:
405
+ reasoning = ai_response.split("<reasoning>")[1].split("</reasoning>")[0].strip()
406
+ move_str = extract_xml_move(ai_response)
407
 
408
  if not move_str:
409
  raise ValueError("Invalid move format from AI")
 
413
  if ai_col == -1:
414
  raise ValueError("Invalid move format from AI")
415
 
416
+ # Format reasoning for display
417
  reasoning_html = f'''
418
  <div id="ai-reasoning">
419
  <div class="reasoning-box">
420
  <p><strong>🤔 Reasoning:</strong></p>
421
  <p>{reasoning}</p>
422
+ <p><strong>📍 Move chosen:</strong> Column {move_str.upper()}</p>
423
  </div>
424
  </div>
425
  '''
426
 
 
427
  success, _ = game.make_move(ai_col)
428
  if success:
429
  # Check for AI winner