tuieval 0.2.0.dev94__py3-none-any.whl → 0.2.0.dev96__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 +21 -8
- {tuieval-0.2.0.dev94.dist-info → tuieval-0.2.0.dev96.dist-info}/METADATA +1 -1
- {tuieval-0.2.0.dev94.dist-info → tuieval-0.2.0.dev96.dist-info}/RECORD +7 -7
- {tuieval-0.2.0.dev94.dist-info → tuieval-0.2.0.dev96.dist-info}/WHEEL +0 -0
- {tuieval-0.2.0.dev94.dist-info → tuieval-0.2.0.dev96.dist-info}/entry_points.txt +0 -0
- {tuieval-0.2.0.dev94.dist-info → tuieval-0.2.0.dev96.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.dev96'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 2, 0, 'dev96')
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
tuieval/pta.py
CHANGED
|
@@ -47,7 +47,7 @@ def memory_gb(infos):
|
|
|
47
47
|
|
|
48
48
|
|
|
49
49
|
def index(rows, models=None, memory=None):
|
|
50
|
-
"""{"questions": n shared, "models": [{model, P, T, A, tokens, total_s, passed, answers, alongside,
|
|
50
|
+
"""{"questions": n shared, "models": [{model, P, T, A, cut, cut_pct, tokens, total_s, passed, answers, alongside,
|
|
51
51
|
fewest, fastest, tps, ttft, memory_gb}],
|
|
52
52
|
"left_out": [(model, questions answered)], "no_answers": [model], "most": questions answered by the
|
|
53
53
|
most-answered model}, best accuracy first. models: the ones to compare (default: every model in rows
|
|
@@ -75,6 +75,9 @@ def index(rows, models=None, memory=None):
|
|
|
75
75
|
"total_s": sum(c["secs"] or 0 for c in cells),
|
|
76
76
|
"passed": sum(c["passed"] for c in cells), "answers": answers,
|
|
77
77
|
"A": 100 * sum(c["passed"] for c in cells) / answers if answers else None,
|
|
78
|
+
# failed only because max_tokens ran out (overthinking, not wrong yet)
|
|
79
|
+
"cut": sum(c["truncated"] for c in cells),
|
|
80
|
+
"cut_pct": 100 * sum(c["truncated"] for c in cells) / answers if answers else None,
|
|
78
81
|
# generation speed and time to first token over the same answers (medians)
|
|
79
82
|
"tps": compare.median(r.get("gen_tps") for c in cells for r in c["rows"]),
|
|
80
83
|
"ttft": compare.median(r.get("ttft") for c in cells for r in c["rows"]),
|
|
@@ -118,7 +121,8 @@ def bars(result, width=20, markup=True):
|
|
|
118
121
|
"""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
122
|
are proportional to tokens and time (the longest is the model that used most; shorter is better),
|
|
120
123
|
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)
|
|
124
|
+
right (longer is better, full only when every answer passed), then the share cut off at max_tokens in
|
|
125
|
+
orange (▓ in plain text) and "✂ n%" beside it. markup=False gives plain text."""
|
|
122
126
|
if not result["models"]:
|
|
123
127
|
return []
|
|
124
128
|
name_w = max(len(x["model"]) for x in result["models"])
|
|
@@ -138,12 +142,18 @@ def bars(result, width=20, markup=True):
|
|
|
138
142
|
if v is not None and v < 100: # full only when every answer passed
|
|
139
143
|
full = min(full, width - 1)
|
|
140
144
|
num = "-" if v is None else compare.pct(v / 100)
|
|
145
|
+
cut = x.get("cut_pct") or 0
|
|
146
|
+
part = min(width - full, max(1, round(width * cut / 100))) if cut else 0
|
|
147
|
+
if cut: # after the accuracy, which stays aligned with the other rows'
|
|
148
|
+
num = f"{num:>6} ✂ {compare.pct(cut / 100)}"
|
|
141
149
|
else:
|
|
142
150
|
full = _blocks(width, x.get(measure), most[measure])
|
|
143
151
|
num = times(x.get(shown))
|
|
144
|
-
|
|
145
|
-
bar =
|
|
146
|
-
|
|
152
|
+
part = 0
|
|
153
|
+
bar, cut_bar, rest = "█" * full, "▓" * part, "░" * (width - full - part)
|
|
154
|
+
bar = (f"[{color}]{bar}[/]" + (f"[#ff8c00]{'█' * part}[/]" if part else "") + f"[grey37]{rest}[/]"
|
|
155
|
+
if markup else bar + cut_bar + rest)
|
|
156
|
+
cells.append(f"{bar} {num:>6}" + " " * max(0, cell_w - width - 1 - max(6, len(num))))
|
|
147
157
|
name = f"{x['model']:<{name_w}}"
|
|
148
158
|
lines.append((f"{rich_escape(name) if markup else name} " + "".join(cells)).rstrip())
|
|
149
159
|
return lines
|
|
@@ -168,10 +178,11 @@ def left_out_lines(result):
|
|
|
168
178
|
def table(result):
|
|
169
179
|
"""(header, rows) for a plain table of the index."""
|
|
170
180
|
n = result["questions"] or 1
|
|
171
|
-
header = ["model", "tokens/answer", "time/answer", "answers right", "tok/s", "TTFT s", "memory GB"]
|
|
181
|
+
header = ["model", "tokens/answer", "time/answer", "answers right", "cut off", "tok/s", "TTFT s", "memory GB"]
|
|
172
182
|
rows = [[x["model"], f"{round(x['tokens'] / n):,}" + (" ★" if x.get("fewest") else ""),
|
|
173
183
|
fmt_secs(x["total_s"] / n) + (" ★" if x.get("fastest") else ""),
|
|
174
|
-
f"{x['passed']}/{x['answers']}",
|
|
184
|
+
f"{x['passed']}/{x['answers']}", f"{x.get('cut') or 0}/{x['answers']}",
|
|
185
|
+
_num(x.get("tps"), ".0f"), _num(x.get("ttft"), ".1f"),
|
|
175
186
|
_num(x.get("memory_gb"), ".1f")] for x in result["models"]]
|
|
176
187
|
return header, rows
|
|
177
188
|
|
|
@@ -204,7 +215,9 @@ def scope_note(result, models):
|
|
|
204
215
|
return (f"Compared on the {result['questions']} questions all {len(result['models'])} model(s) answered. "
|
|
205
216
|
"P parsimony (tokens) and T time: bars as long as the tokens / time used (shorter is better), "
|
|
206
217
|
"and how many times the leanest / fastest model's (1.0×, ★ in the table). A accuracy: answers right "
|
|
207
|
-
"(longer is better)
|
|
218
|
+
"(longer is better)"
|
|
219
|
+
+ ("; orange ✂: answers cut off at max_tokens, out of tokens rather than wrong (they count as wrong)."
|
|
220
|
+
if any(x.get("cut") for x in result["models"]) else "."))
|
|
208
221
|
|
|
209
222
|
|
|
210
223
|
def for_engine(e, labels=None, packs=None, results_dir=None):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: tuieval
|
|
3
|
-
Version: 0.2.0.
|
|
3
|
+
Version: 0.2.0.dev96
|
|
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=vq8xfmWFF-z2N4IfHoIiukOF66_VgRgLRvVKdboXuLA,535
|
|
4
4
|
tuieval/builtin.toml,sha256=Nwu7O0qFzcrDAxXO_VZtDPvjVwxZ29OtYOW0BPihZGs,4410
|
|
5
5
|
tuieval/cli.py,sha256=mr0o_ud6NctZeU4WIrh17x_uzEK0vTeCynGP0wrCeBY,4812
|
|
6
6
|
tuieval/client.py,sha256=wtACBVsngtWopWWhIc4bB6mEUEi31dvvDePN-PjmXbM,11122
|
|
@@ -14,7 +14,7 @@ tuieval/machines.py,sha256=t9tu6CZeXZON4EtOVnEwP4VtaynpVLf9Cz8TNjf7jtY,20124
|
|
|
14
14
|
tuieval/onboard.py,sha256=IYETVDWCCo9vF0Dtj4_rr9VanYeCky8PwP3-2g5A_l0,6215
|
|
15
15
|
tuieval/packs.py,sha256=ZgaZ1m2ePYvDjmddSc3nafnMEn7kTq9WcDpCaJSZleQ,12026
|
|
16
16
|
tuieval/profiles.py,sha256=soeLxjdB-l-OxSY8jZ4yjwfdSnsBV-QICcwKxRJS7nQ,3663
|
|
17
|
-
tuieval/pta.py,sha256=
|
|
17
|
+
tuieval/pta.py,sha256=_e6coSXYSzEagWJItyhz-DqIud5ywoVVa7BXbS7kUnY,13183
|
|
18
18
|
tuieval/remove.py,sha256=Vwh43nm9lVb9U9aN-h6CMYbkTwdR3UWfZObwweF72n0,5157
|
|
19
19
|
tuieval/run_evals.py,sha256=DN6FhC8Zj08N5pwlrCmlkbkTxA2vmT-G5sWJnp-S-AI,50114
|
|
20
20
|
tuieval/scaffold.py,sha256=YBOqniJpf_GtKKAFF3_OHxxMGbmTWdFjcClGcOnrrKE,12130
|
|
@@ -48,8 +48,8 @@ tuieval/templates/packs/tool_call/pack.toml,sha256=n4bx0lGJHSmW41uVqhfIXJ2BWZpmT
|
|
|
48
48
|
tuieval/templates/packs/tool_call/system.txt,sha256=mKxu-lB-0YjLHXdgeFJa8x2C180OvcNz5cHv2N5Bg3U,254
|
|
49
49
|
tuieval/templates/packs/tool_call/tests.yaml,sha256=Nv7c4syrzJ9cU8EBKSK_1ZSFx9V02aCjW4-2TBCPT7s,1859
|
|
50
50
|
tuieval/templates/packs/tool_call/tools.yaml,sha256=HgxCkh0On2VwbHSsjAGM8tNCK7ZtKLGrs7lMCn3Fprs,1048
|
|
51
|
-
tuieval-0.2.0.
|
|
52
|
-
tuieval-0.2.0.
|
|
53
|
-
tuieval-0.2.0.
|
|
54
|
-
tuieval-0.2.0.
|
|
55
|
-
tuieval-0.2.0.
|
|
51
|
+
tuieval-0.2.0.dev96.dist-info/METADATA,sha256=tWhbY2NNalpYs0drNts9Vs1vsPHZ-Muy9Nw-34gftRw,14580
|
|
52
|
+
tuieval-0.2.0.dev96.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
|
|
53
|
+
tuieval-0.2.0.dev96.dist-info/entry_points.txt,sha256=7eIhi1GpFxBP2OLJV02Nn8LwsNuO512eKOGt1IBbj04,45
|
|
54
|
+
tuieval-0.2.0.dev96.dist-info/licenses/LICENSE,sha256=7wfRgGtBGH1aXhZkIn47oUznqKC18kEPMvUVgol7Ffc,1077
|
|
55
|
+
tuieval-0.2.0.dev96.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|