evalpair 0.1.0__tar.gz → 0.1.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (22) hide show
  1. {evalpair-0.1.0 → evalpair-0.1.1}/PKG-INFO +4 -4
  2. {evalpair-0.1.0 → evalpair-0.1.1}/README.md +3 -3
  3. {evalpair-0.1.0 → evalpair-0.1.1}/pyproject.toml +1 -1
  4. {evalpair-0.1.0 → evalpair-0.1.1}/pyproject.toml.orig +1 -1
  5. {evalpair-0.1.0 → evalpair-0.1.1}/src/evalpair/__init__.py +1 -1
  6. {evalpair-0.1.0 → evalpair-0.1.1}/src/evalpair/cli.py +5 -5
  7. {evalpair-0.1.0 → evalpair-0.1.1}/LICENSE +0 -0
  8. {evalpair-0.1.0 → evalpair-0.1.1}/src/evalpair/__main__.py +0 -0
  9. {evalpair-0.1.0 → evalpair-0.1.1}/src/evalpair/analysis.py +0 -0
  10. {evalpair-0.1.0 → evalpair-0.1.1}/src/evalpair/backends.py +0 -0
  11. {evalpair-0.1.0 → evalpair-0.1.1}/src/evalpair/checkers.py +0 -0
  12. {evalpair-0.1.0 → evalpair-0.1.1}/src/evalpair/runner.py +0 -0
  13. {evalpair-0.1.0 → evalpair-0.1.1}/src/evalpair/server.py +0 -0
  14. {evalpair-0.1.0 → evalpair-0.1.1}/src/evalpair/stats.py +0 -0
  15. {evalpair-0.1.0 → evalpair-0.1.1}/src/evalpair/store.py +0 -0
  16. {evalpair-0.1.0 → evalpair-0.1.1}/src/evalpair/suites/e2e-extract-150/items.jsonl +0 -0
  17. {evalpair-0.1.0 → evalpair-0.1.1}/src/evalpair/suites/e2e-extract-150/suite.toml +0 -0
  18. {evalpair-0.1.0 → evalpair-0.1.1}/src/evalpair/suites/gsm8k-160/items.jsonl +0 -0
  19. {evalpair-0.1.0 → evalpair-0.1.1}/src/evalpair/suites/gsm8k-160/suite.toml +0 -0
  20. {evalpair-0.1.0 → evalpair-0.1.1}/src/evalpair/suites/mmlu-hs-160/items.jsonl +0 -0
  21. {evalpair-0.1.0 → evalpair-0.1.1}/src/evalpair/suites/mmlu-hs-160/suite.toml +0 -0
  22. {evalpair-0.1.0 → evalpair-0.1.1}/src/evalpair/suites.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: evalpair
3
- Version: 0.1.0
3
+ Version: 0.1.1
4
4
  Summary: Run an LLM eval suite against a local or hosted model, cache every call, and compare two runs item by item with bootstrap intervals and a measured noise floor. CLI and MCP server.
5
5
  Keywords: llm,evaluation,eval,benchmark,bootstrap,ollama,mcp,cli
6
6
  Author: Kameswara Sai Srikar Manda
@@ -61,8 +61,8 @@ A real comparison: Ollama's default 4-bit Llama 3.1 8B against its 2-bit build,
61
61
 
62
62
  ```
63
63
  $ evalpair compare llama-q4 llama-q2
64
- A llama-q4: 84.4% [79.4%, 90.0%]
65
- B llama-q2: 60.6% [53.1%, 68.1%]
64
+ A llama-q4: 84.4% [79.4%, 90.0%]
65
+ B llama-q2: 60.6% [53.1%, 68.1%]
66
66
  B − A -23.8 pp [-31.9 pp, -16.2 pp]
67
67
  changed 40.6% [33.1%, 48.1%] of 160 items (43 worse in B, 5 better)
68
68
  floor (A) 0.0% [0.0%, 0.0%]; excess +40.6 pp [+33.1 pp, +48.1 pp]
@@ -70,7 +70,7 @@ floor (A) 0.0% [0.0%, 0.0%]; excess +40.6 pp [+33.1 pp, +48.1 pp]
70
70
  B scores lower than A: -23.8 pp [-31.9 pp, -16.2 pp], paired over 160 items. Answers changed on 40.6% of
71
71
  items (43 got worse, 5 better). The noise floor (the same model asked twice) is 0.0% for A, so the change
72
72
  is beyond noise.
73
- worse in b: gsm8k-0259 '168' → '52'
73
+ worse in B: gsm8k-0259 '168' → '52'
74
74
  ...
75
75
  ```
76
76
 
@@ -34,8 +34,8 @@ A real comparison: Ollama's default 4-bit Llama 3.1 8B against its 2-bit build,
34
34
 
35
35
  ```
36
36
  $ evalpair compare llama-q4 llama-q2
37
- A llama-q4: 84.4% [79.4%, 90.0%]
38
- B llama-q2: 60.6% [53.1%, 68.1%]
37
+ A llama-q4: 84.4% [79.4%, 90.0%]
38
+ B llama-q2: 60.6% [53.1%, 68.1%]
39
39
  B − A -23.8 pp [-31.9 pp, -16.2 pp]
40
40
  changed 40.6% [33.1%, 48.1%] of 160 items (43 worse in B, 5 better)
41
41
  floor (A) 0.0% [0.0%, 0.0%]; excess +40.6 pp [+33.1 pp, +48.1 pp]
@@ -43,7 +43,7 @@ floor (A) 0.0% [0.0%, 0.0%]; excess +40.6 pp [+33.1 pp, +48.1 pp]
43
43
  B scores lower than A: -23.8 pp [-31.9 pp, -16.2 pp], paired over 160 items. Answers changed on 40.6% of
44
44
  items (43 got worse, 5 better). The noise floor (the same model asked twice) is 0.0% for A, so the change
45
45
  is beyond noise.
46
- worse in b: gsm8k-0259 '168' → '52'
46
+ worse in B: gsm8k-0259 '168' → '52'
47
47
  ...
48
48
  ```
49
49
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "evalpair"
3
- version = "0.1.0"
3
+ version = "0.1.1"
4
4
  description = "Run an LLM eval suite against a local or hosted model, cache every call, and compare two runs item by item with bootstrap intervals and a measured noise floor. CLI and MCP server."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "evalpair"
3
- version = "0.1.0"
3
+ version = "0.1.1"
4
4
  description = "Run an LLM eval suite against a local or hosted model, cache every call, and compare two runs item by item with bootstrap intervals and a measured noise floor. CLI and MCP server."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -1,3 +1,3 @@
1
1
  """Run an LLM eval suite, cache every call, and compare two runs item by item with intervals."""
2
2
 
3
- __version__ = "0.1.0"
3
+ __version__ = "0.1.1"
@@ -48,7 +48,7 @@ def text_summary(s: dict) -> str:
48
48
  if s["failures"]:
49
49
  lines.append(" failures (unparsed and truncated first):")
50
50
  for f in s["failures"]:
51
- end = f["reply_end"].replace("\n", " ")[-160:]
51
+ end = " ".join(f["reply_end"].split())[-160:] # newlines and tabs as single spaces
52
52
  lines.append(f" {f['id']}: answer {f['answer']!r} via {f['how']}"
53
53
  f"{', truncated' if f['truncated'] else ''} …{end}")
54
54
  return "\n".join(lines)
@@ -57,17 +57,17 @@ def text_summary(s: dict) -> str:
57
57
  def text_compare(c: dict) -> str:
58
58
  if not c.get("items"):
59
59
  return "\n".join(c["notes"])
60
- lines = [f"A {c['a']['run']}: {c['a']['score']['text']}",
61
- f"B {c['b']['run']}: {c['b']['score']['text']}",
60
+ lines = [f"A {c['a']['run']}: {c['a']['score']['text']}",
61
+ f"B {c['b']['run']}: {c['b']['score']['text']}",
62
62
  f"B − A {c['difference']['text']}",
63
63
  f"changed {c['answers_changed']['text']} of {c['items']} items "
64
64
  f"({c['worse_in_b']} worse in B, {c['better_in_b']} better)"]
65
65
  for k, f in (c.get("noise_floor") or {}).items():
66
66
  lines.append(f"floor ({k.upper()}) {f['change_rate']['text']}; excess {f['excess_over_floor']['text']}")
67
67
  lines += ["", c["verdict"]] + [f"Note: {n}" for n in c["notes"]]
68
- for kind in ("worse_in_b", "better_in_b"):
68
+ for kind, label in (("worse_in_b", "worse in B"), ("better_in_b", "better in B")):
69
69
  for e in c["examples"][kind]:
70
- lines.append(f" {kind.replace('_', ' ')}: {e['id']} {e['a_answer']!r} → {e['b_answer']!r}")
70
+ lines.append(f" {label + ':':<13}{e['id']} {e['a_answer']!r} → {e['b_answer']!r}")
71
71
  return "\n".join(lines)
72
72
 
73
73
 
File without changes
File without changes
File without changes