cazyundee commited on
Commit
6c771e9
·
verified ·
1 Parent(s): 2456ebd

Add debug logging to benchmark parsing

Browse files
Files changed (1) hide show
  1. app.py +26 -19
app.py CHANGED
@@ -503,31 +503,38 @@ def _run_benchmark():
503
  wall_time = time.time() - t0
504
  output_text = proc.stdout.strip()
505
 
 
 
 
 
506
  # Parse llama.cpp stderr for timing info
507
- # llama.cpp outputs: "llama_perf_sampler_print: ... prompt N tokens ... M tokens/s"
508
- # and "llama_perf_sampler_print: ... eval N tokens ... M tokens/s"
 
509
  prompt_tps = 0.0
510
  gen_tps = 0.0
511
  prompt_tok = 0
512
  gen_tok = 0
 
513
  for line in proc.stderr.splitlines():
514
- if "prompt eval time" in line:
515
- # e.g. "prompt eval time = 1234.56 ms / 12 tokens (102.88 ms per token, 9.72 tokens per second)"
516
- import re
517
- m = re.search(r"(\d+\.?\d*) tokens per second", line)
518
- if m:
519
- prompt_tps = float(m.group(1))
520
- m2 = re.search(r"/ (\d+) tokens", line)
521
- if m2:
522
- prompt_tok = int(m2.group(1))
523
- elif "eval time" in line and "prompt" not in line:
524
- import re
525
- m = re.search(r"(\d+\.?\d*) tokens per second", line)
526
- if m:
527
- gen_tps = float(m.group(1))
528
- m2 = re.search(r"/ (\d+) tokens", line)
529
- if m2:
530
- gen_tok = int(m2.group(1))
 
531
 
532
  result.update({
533
  "status": "success",
 
503
  wall_time = time.time() - t0
504
  output_text = proc.stdout.strip()
505
 
506
+ # Log raw output for debugging
507
+ _log(f"Benchmark: {model_info['name']} stdout ({len(output_text)} chars): {output_text[:200]}")
508
+ _log(f"Benchmark: {model_info['name']} stderr ({len(proc.stderr)} chars): {proc.stderr[-500:]}")
509
+
510
  # Parse llama.cpp stderr for timing info
511
+ # Various formats depending on version:
512
+ # "prompt eval time = 1234.56 ms / 12 tokens (102.88 ms per token, 9.72 tokens per second)"
513
+ # "eval time = 5678.90 ms / 64 tokens (88.73 ms per token, 11.27 tokens per second)"
514
  prompt_tps = 0.0
515
  gen_tps = 0.0
516
  prompt_tok = 0
517
  gen_tok = 0
518
+ import re
519
  for line in proc.stderr.splitlines():
520
+ # Match: "N.NN tokens per second"
521
+ tps_match = re.search(r"(\d+\.?\d*) tokens per second", line)
522
+ tok_match = re.search(r"/ (\d+) tokens", line)
523
+ if "prompt eval" in line.lower() or "prompt_eval" in line.lower():
524
+ if tps_match:
525
+ prompt_tps = float(tps_match.group(1))
526
+ if tok_match:
527
+ prompt_tok = int(tok_match.group(1))
528
+ elif ("eval time" in line.lower() or "eval_time" in line.lower()) and "prompt" not in line.lower():
529
+ if tps_match:
530
+ gen_tps = float(tps_match.group(1))
531
+ if tok_match:
532
+ gen_tok = int(tok_match.group(1))
533
+
534
+ # If parsing failed, try counting newlines as rough token estimate
535
+ if gen_tok == 0 and output_text:
536
+ gen_tok = len(output_text.split())
537
+ _log(f"Benchmark: parsing failed, estimated {gen_tok} tokens from word count")
538
 
539
  result.update({
540
  "status": "success",