tuieval 0.2.0.dev65__py3-none-any.whl → 0.2.0.dev66__py3-none-any.whl
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.
- tuieval/_version.py +2 -2
- tuieval/pta.py +41 -21
- tuieval/tui.py +4 -3
- {tuieval-0.2.0.dev65.dist-info → tuieval-0.2.0.dev66.dist-info}/METADATA +1 -1
- {tuieval-0.2.0.dev65.dist-info → tuieval-0.2.0.dev66.dist-info}/RECORD +8 -8
- {tuieval-0.2.0.dev65.dist-info → tuieval-0.2.0.dev66.dist-info}/WHEEL +0 -0
- {tuieval-0.2.0.dev65.dist-info → tuieval-0.2.0.dev66.dist-info}/entry_points.txt +0 -0
- {tuieval-0.2.0.dev65.dist-info → tuieval-0.2.0.dev66.dist-info}/licenses/LICENSE +0 -0
tuieval/_version.py
CHANGED
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '0.2.0.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 2, 0, '
|
|
21
|
+
__version__ = version = '0.2.0.dev66'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 2, 0, 'dev66')
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
tuieval/pta.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""PTA index: parsimony (tokens), time and accuracy per model, a bar each
|
|
1
|
+
"""PTA index: parsimony (tokens), time and accuracy per model, a bar each.
|
|
2
2
|
|
|
3
3
|
P parsimony (tokens) the tokens (reasoning and answer) used on every question compared (each
|
|
4
4
|
question at its median over repeats), shown as how many times the leanest
|
|
@@ -7,8 +7,10 @@
|
|
|
7
7
|
model's ("28×").
|
|
8
8
|
A accuracy the share of answers to those questions that passed (%).
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
The P and T bars are as long as the tokens and time used (the model that used the most fills its bar,
|
|
11
|
+
the others in proportion, at least one block), so shorter is better; the A bar: longer is better.
|
|
12
|
+
P and T also carry a 0-100 score (100 for the best, POINTS_PER_DOUBLING points less for every
|
|
13
|
+
doubling), used to order models with the same accuracy.
|
|
12
14
|
|
|
13
15
|
Models are compared on the questions all of them answered, so one that skipped some never looks
|
|
14
16
|
faster. Server and connection errors aren't answers. By default a model with fewer than half as many
|
|
@@ -93,9 +95,11 @@ def index(rows, models=None, memory=None):
|
|
|
93
95
|
"most": most}
|
|
94
96
|
|
|
95
97
|
|
|
96
|
-
# (letter, name, what the
|
|
97
|
-
|
|
98
|
-
|
|
98
|
+
# (letter, name, which way is better, what the bar measures, the number beside it, colour). P and T bars
|
|
99
|
+
# are the amount itself (tokens, time: shorter is better); the A bar is the share right (longer is better).
|
|
100
|
+
LETTERS = (("P", "parsimony (tokens)", "▼ shorter is better", "tokens", "tokens_x", "cyan"),
|
|
101
|
+
("T", "time", "▼ shorter is better", "total_s", "time_x", "magenta"),
|
|
102
|
+
("A", "accuracy", "▲ longer is better", "A", "A", "green"))
|
|
99
103
|
|
|
100
104
|
|
|
101
105
|
def times(v):
|
|
@@ -103,26 +107,41 @@ def times(v):
|
|
|
103
107
|
return "-" if v is None else f"{v:.1f}×" if v < 9.95 else f"{v:.0f}×"
|
|
104
108
|
|
|
105
109
|
|
|
110
|
+
def _blocks(width, v, most):
|
|
111
|
+
"""How many of width blocks a bar fills: v as a share of most, at least one block when v > 0."""
|
|
112
|
+
if not v or not most:
|
|
113
|
+
return 0
|
|
114
|
+
return max(1, min(width, round(width * v / most)))
|
|
115
|
+
|
|
116
|
+
|
|
106
117
|
def bars(result, width=20, markup=True):
|
|
107
|
-
"""Lines with a row per model and a bar
|
|
108
|
-
|
|
109
|
-
|
|
118
|
+
"""Lines with a row per model and a bar each for P, T and A: the at-a-glance view. The P and T bars
|
|
119
|
+
are proportional to tokens and time (the longest is the model that used most; shorter is better),
|
|
120
|
+
with how many times the leanest / fastest model's beside them; the A bar is the share of answers
|
|
121
|
+
right (longer is better, full only when every answer passed). markup=False gives plain text."""
|
|
110
122
|
if not result["models"]:
|
|
111
123
|
return []
|
|
112
124
|
name_w = max(len(x["model"]) for x in result["models"])
|
|
113
|
-
# each column: the bar, a space, "100%" or "9.8×" (
|
|
114
|
-
cell_w = max(width + 9, *(len(
|
|
115
|
-
|
|
116
|
-
|
|
125
|
+
# each column: the bar, a space, "100%" or "9.8×" (6), then a gap; at least as wide as its heading
|
|
126
|
+
cell_w = max(width + 9, *(len(t) + 2 for k, name, better, *_ in LETTERS for t in (f"{k} {name}", better)))
|
|
127
|
+
pad = " " * (name_w + 2)
|
|
128
|
+
head = pad + "".join(f"{f'{k} {name}':<{cell_w}}" for k, name, *_ in LETTERS)
|
|
129
|
+
sub = pad + "".join(f"{better:<{cell_w}}" for _, _, better, *_ in LETTERS)
|
|
130
|
+
lines = [f"[b]{head.rstrip()}[/b]" if markup else head.rstrip(), f"[dim]{sub.rstrip()}[/dim]" if markup else sub.rstrip()]
|
|
131
|
+
most = {m: max((x.get(m) or 0 for x in result["models"]), default=0) for _, _, _, m, _, _ in LETTERS}
|
|
117
132
|
for x in result["models"]:
|
|
118
133
|
cells = []
|
|
119
|
-
for k, _, shown, color in LETTERS:
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
134
|
+
for k, _, _, measure, shown, color in LETTERS:
|
|
135
|
+
if k == "A":
|
|
136
|
+
v = x["A"]
|
|
137
|
+
full = 0 if v is None else round(width * max(0, min(100, v)) / 100)
|
|
138
|
+
if v is not None and v < 100: # full only when every answer passed
|
|
139
|
+
full = min(full, width - 1)
|
|
140
|
+
num = "-" if v is None else compare.pct(v / 100)
|
|
141
|
+
else:
|
|
142
|
+
full = _blocks(width, x.get(measure), most[measure])
|
|
143
|
+
num = times(x.get(shown))
|
|
124
144
|
bar, rest = "█" * full, "░" * (width - full)
|
|
125
|
-
num = (("-" if v is None else compare.pct(v / 100)) if shown == "A" else times(x.get(shown)))
|
|
126
145
|
bar = f"[{color}]{bar}[/][grey37]{rest}[/]" if markup else bar + rest
|
|
127
146
|
cells.append(f"{bar} {num:>6}" + " " * (cell_w - width - 7))
|
|
128
147
|
name = f"{x['model']:<{name_w}}"
|
|
@@ -183,8 +202,9 @@ def scope_note(result, models):
|
|
|
183
202
|
if not result["questions"]:
|
|
184
203
|
return "These models have no question in common yet, so there's nothing to compare."
|
|
185
204
|
return (f"Compared on the {result['questions']} questions all {len(result['models'])} model(s) answered. "
|
|
186
|
-
"
|
|
187
|
-
"model's (1.0×, ★ in the table). A accuracy: answers right
|
|
205
|
+
"P parsimony (tokens) and T time: bars as long as the tokens / time used (shorter is better), "
|
|
206
|
+
"and how many times the leanest / fastest model's (1.0×, ★ in the table). A accuracy: answers right "
|
|
207
|
+
"(longer is better).")
|
|
188
208
|
|
|
189
209
|
|
|
190
210
|
def for_engine(e, labels=None, packs=None, results_dir=None):
|
tuieval/tui.py
CHANGED
|
@@ -332,9 +332,10 @@ with the model's reasoning and answer as they stream, then recent results with t
|
|
|
332
332
|
v with several models at a time: stream the next one (k skips the one streaming)""",
|
|
333
333
|
"ResultsScreen": """[b]Results[/b]
|
|
334
334
|
|
|
335
|
-
PTA index parsimony (tokens), time and accuracy per model, a bar each
|
|
336
|
-
2.4× = 2.4 times the best),
|
|
337
|
-
|
|
335
|
+
PTA index parsimony (tokens), time and accuracy per model, a bar each: tokens and time
|
|
336
|
+
as long as they took (shorter is better; 2.4× = 2.4 times the best), accuracy
|
|
337
|
+
longer is better. Per-answer numbers, tok/s, TTFT and memory in the table.
|
|
338
|
+
Results open here.
|
|
338
339
|
Production readiness one verdict per model and use case; the table says why and what to run next
|
|
339
340
|
Per question every question, model by model (filters: pack, level, Models disagree)
|
|
340
341
|
Failures every wrong answer with the grader's reason; enter opens it in full
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: tuieval
|
|
3
|
-
Version: 0.2.0.
|
|
3
|
+
Version: 0.2.0.dev66
|
|
4
4
|
Summary: Evaluate local and frontier LLMs on your own questions: accuracy, speed, tokens and PASS/FAIL verdicts, in the terminal.
|
|
5
5
|
Project-URL: Homepage, https://github.com/ashe-wb/tuieval
|
|
6
6
|
Project-URL: Issues, https://github.com/ashe-wb/tuieval/issues
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
tuieval/__init__.py,sha256=myVXVX7htbwezW6k3x_FuKgn1RSZ2WcTaDEMByGn6Wg,312
|
|
2
2
|
tuieval/__main__.py,sha256=E6Gls0DNz8GQK2K-kOUIx8cYhgANW_CH54VKrfCfs14,52
|
|
3
|
-
tuieval/_version.py,sha256=
|
|
3
|
+
tuieval/_version.py,sha256=3oGXG-ulb5H7C2aLJwOF-Gqqfw6csmjHt4syzml7C4M,535
|
|
4
4
|
tuieval/builtin.toml,sha256=Kxw22RZCJhURUyu5Wz8tj5Y1nM85A8hFVRbA4ocoPUg,4293
|
|
5
5
|
tuieval/cli.py,sha256=fn6z0cupM-aW3fY5fFgnS-HmOQmMzlDg-U76Y6LgL3o,4510
|
|
6
6
|
tuieval/client.py,sha256=kpsyLEZKfxCsvIGBHBbBy83TpI97CvnGCDq-4AbJS4Y,9986
|
|
@@ -12,12 +12,12 @@ tuieval/machines.py,sha256=t9tu6CZeXZON4EtOVnEwP4VtaynpVLf9Cz8TNjf7jtY,20124
|
|
|
12
12
|
tuieval/onboard.py,sha256=IYETVDWCCo9vF0Dtj4_rr9VanYeCky8PwP3-2g5A_l0,6215
|
|
13
13
|
tuieval/packs.py,sha256=tiLmxsrX_M5EUMuR4Yvb7pLBLEI15wamHSjflD6wjoY,11299
|
|
14
14
|
tuieval/profiles.py,sha256=soeLxjdB-l-OxSY8jZ4yjwfdSnsBV-QICcwKxRJS7nQ,3663
|
|
15
|
-
tuieval/pta.py,sha256=
|
|
15
|
+
tuieval/pta.py,sha256=i5oPj-Pz3N9u7bzzuZwsQvMGdxWdAncww2nR15K6PHY,12108
|
|
16
16
|
tuieval/remove.py,sha256=Vwh43nm9lVb9U9aN-h6CMYbkTwdR3UWfZObwweF72n0,5157
|
|
17
17
|
tuieval/run_evals.py,sha256=1zNkCdFt744cqpebqiyj-sZrbOI22c6IYBcXk9koz20,46538
|
|
18
18
|
tuieval/scaffold.py,sha256=YBOqniJpf_GtKKAFF3_OHxxMGbmTWdFjcClGcOnrrKE,12130
|
|
19
19
|
tuieval/selftest.py,sha256=nExkrOidgymlmvkxImEBfrQG5iTUN5WuRMIKtqusCCs,9835
|
|
20
|
-
tuieval/tui.py,sha256=
|
|
20
|
+
tuieval/tui.py,sha256=LPnUYbynZiHUBv_d7TNttd7smoTlphPHEa5yoGCvU6s,161108
|
|
21
21
|
tuieval/tune.py,sha256=azxxthgJeag8JyoQUgaRxq6oI1XvEgzb9vkszjJZH7w,39645
|
|
22
22
|
tuieval/verdict.py,sha256=VB-0LTxR9y8bJHT9RicxtE9K7cUHBdCu40hOCrsbmA4,19150
|
|
23
23
|
tuieval/watch_proxy.py,sha256=bnDO1i6n6yUs1hODoUWcMppJMGPavoQqs6aNYrIxpT8,11416
|
|
@@ -46,8 +46,8 @@ tuieval/templates/packs/tool_call/pack.toml,sha256=n4bx0lGJHSmW41uVqhfIXJ2BWZpmT
|
|
|
46
46
|
tuieval/templates/packs/tool_call/system.txt,sha256=mKxu-lB-0YjLHXdgeFJa8x2C180OvcNz5cHv2N5Bg3U,254
|
|
47
47
|
tuieval/templates/packs/tool_call/tests.yaml,sha256=Nv7c4syrzJ9cU8EBKSK_1ZSFx9V02aCjW4-2TBCPT7s,1859
|
|
48
48
|
tuieval/templates/packs/tool_call/tools.yaml,sha256=HgxCkh0On2VwbHSsjAGM8tNCK7ZtKLGrs7lMCn3Fprs,1048
|
|
49
|
-
tuieval-0.2.0.
|
|
50
|
-
tuieval-0.2.0.
|
|
51
|
-
tuieval-0.2.0.
|
|
52
|
-
tuieval-0.2.0.
|
|
53
|
-
tuieval-0.2.0.
|
|
49
|
+
tuieval-0.2.0.dev66.dist-info/METADATA,sha256=3R7yYobJYnLLsMP_OHfy74PYErGtGBOf50xMtXpZSXA,13996
|
|
50
|
+
tuieval-0.2.0.dev66.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
|
|
51
|
+
tuieval-0.2.0.dev66.dist-info/entry_points.txt,sha256=7eIhi1GpFxBP2OLJV02Nn8LwsNuO512eKOGt1IBbj04,45
|
|
52
|
+
tuieval-0.2.0.dev66.dist-info/licenses/LICENSE,sha256=7wfRgGtBGH1aXhZkIn47oUznqKC18kEPMvUVgol7Ffc,1077
|
|
53
|
+
tuieval-0.2.0.dev66.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|