tuieval 0.2.0.dev81__py3-none-any.whl → 0.2.0.dev86__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/tui.py +57 -5
- {tuieval-0.2.0.dev81.dist-info → tuieval-0.2.0.dev86.dist-info}/METADATA +1 -1
- {tuieval-0.2.0.dev81.dist-info → tuieval-0.2.0.dev86.dist-info}/RECORD +7 -7
- {tuieval-0.2.0.dev81.dist-info → tuieval-0.2.0.dev86.dist-info}/WHEEL +0 -0
- {tuieval-0.2.0.dev81.dist-info → tuieval-0.2.0.dev86.dist-info}/entry_points.txt +0 -0
- {tuieval-0.2.0.dev81.dist-info → tuieval-0.2.0.dev86.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.dev86'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 2, 0, 'dev86')
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
tuieval/tui.py
CHANGED
|
@@ -1550,6 +1550,13 @@ def run_title(tier, models, packs):
|
|
|
1550
1550
|
f"{', '.join(packs) if len(packs) <= 2 else f'{len(packs)} packs'}")
|
|
1551
1551
|
|
|
1552
1552
|
|
|
1553
|
+
def short_keys(keys, n=4):
|
|
1554
|
+
"""A few "model/pack" pairs as "model · pack", the rest counted."""
|
|
1555
|
+
keys = sorted(keys)
|
|
1556
|
+
shown = ", ".join(k.replace("/", " · ", 1) for k in keys[:n])
|
|
1557
|
+
return rich_escape(shown + (f" and {len(keys) - n} more" if len(keys) > n else ""))
|
|
1558
|
+
|
|
1559
|
+
|
|
1553
1560
|
class QueuedRun:
|
|
1554
1561
|
"""A run waiting its turn. It's planned again when it starts, so it picks up what the runs before
|
|
1555
1562
|
it finished; it never sets aside answers that weren't confirmed when it was queued. retest: the
|
|
@@ -1557,13 +1564,29 @@ class QueuedRun:
|
|
|
1557
1564
|
kind = "Run"
|
|
1558
1565
|
|
|
1559
1566
|
def __init__(self, sel, retest, leave, accepted, eng):
|
|
1560
|
-
self.sel, self.retest, self.leave, self.accepted = sel, retest, leave, accepted
|
|
1567
|
+
self.sel, self.retest, self.leave, self.accepted = sel, retest, set(leave), accepted
|
|
1561
1568
|
self.queued = time.time()
|
|
1569
|
+
self.replan(eng)
|
|
1570
|
+
|
|
1571
|
+
def replan(self, eng):
|
|
1562
1572
|
self.jobs, self.problem = self.plan(eng)
|
|
1563
1573
|
jobs = self.jobs or []
|
|
1564
|
-
self.title = run_title(sel["tier"], {j.label for j in jobs}, {j.pack.label for j in jobs})
|
|
1574
|
+
self.title = run_title(self.sel["tier"], {j.label for j in jobs}, {j.pack.label for j in jobs})
|
|
1565
1575
|
self.est = eng.estimate_seconds(jobs)[0]
|
|
1566
1576
|
|
|
1577
|
+
def keys(self):
|
|
1578
|
+
"""The "model/pack" pairs it covers."""
|
|
1579
|
+
return {f"{m}/{p}" for m in self.sel["models"] for p in self.sel["packs"]} - self.leave
|
|
1580
|
+
|
|
1581
|
+
def deliberate(self):
|
|
1582
|
+
"""Retest or picked questions: asked again on purpose, never treated as a duplicate."""
|
|
1583
|
+
return bool(self.sel.get("force") or self.sel.get("tests"))
|
|
1584
|
+
|
|
1585
|
+
def drop(self, keys, eng):
|
|
1586
|
+
"""Leave these pairs out (they're already running or queued)."""
|
|
1587
|
+
self.leave |= set(keys)
|
|
1588
|
+
self.replan(eng)
|
|
1589
|
+
|
|
1567
1590
|
def tests(self, eng):
|
|
1568
1591
|
"""The picked tests that are still in their packs (a pack edited while queued drops the rest)."""
|
|
1569
1592
|
out = {}
|
|
@@ -3236,8 +3259,32 @@ class EvalsApp(App):
|
|
|
3236
3259
|
what = s.live_text() if s else "The last run is still stopping its server"
|
|
3237
3260
|
return what + (f" (+{len(self.queue)} queued)" if self.queue else "")
|
|
3238
3261
|
|
|
3262
|
+
def taken(self, tier):
|
|
3263
|
+
"""The "model/pack" pairs of this tier already in the run going (not finished) or in the queue."""
|
|
3264
|
+
out = set()
|
|
3265
|
+
run = self.active_session
|
|
3266
|
+
if isinstance(run, RunScreen) and run.running and run.jobs and run.jobs[0].tier == tier:
|
|
3267
|
+
out |= {j.key for j in run.jobs if j.status in ("waiting", "loading", "running")}
|
|
3268
|
+
for q in self.queue:
|
|
3269
|
+
if q.kind == "Run" and q.sel["tier"] == tier:
|
|
3270
|
+
out |= q.keys()
|
|
3271
|
+
return out
|
|
3272
|
+
|
|
3239
3273
|
# -- the queue: Start or t while something runs adds to it; each item starts when the one before ends
|
|
3240
3274
|
def start_or_queue(self, item):
|
|
3275
|
+
skipped = set()
|
|
3276
|
+
if self.is_busy() and item.kind == "Run" and not item.deliberate():
|
|
3277
|
+
mine = item.keys()
|
|
3278
|
+
skipped = mine & self.taken(item.sel["tier"])
|
|
3279
|
+
if skipped == mine:
|
|
3280
|
+
self.notify(f"Already running or queued, so nothing was added: {short_keys(skipped)}.", timeout=10)
|
|
3281
|
+
return
|
|
3282
|
+
if skipped:
|
|
3283
|
+
item.drop(skipped, self.engine)
|
|
3284
|
+
if not item.jobs:
|
|
3285
|
+
self.notify(f"Nothing new to run: {item.problem}. Already running or queued: "
|
|
3286
|
+
f"{short_keys(skipped)}.", timeout=10)
|
|
3287
|
+
return
|
|
3241
3288
|
if not self.is_busy():
|
|
3242
3289
|
screen, problem = item.make(self.engine)
|
|
3243
3290
|
if problem:
|
|
@@ -3256,11 +3303,11 @@ class EvalsApp(App):
|
|
|
3256
3303
|
self.add_to_run(run, item)
|
|
3257
3304
|
elif choice == "queue":
|
|
3258
3305
|
self.enqueue(item)
|
|
3259
|
-
what =
|
|
3260
|
-
|
|
3306
|
+
what = short_keys(item.keys(), 6)
|
|
3307
|
+
skip = (f"\n\nLeft out, already running or queued: {short_keys(skipped)}." if skipped else "")
|
|
3261
3308
|
self.push_screen(ChoiceScreen(
|
|
3262
3309
|
f"A run is going: {run.live_text()}.\n\nAdd {what} to it? Its models run after the ones "
|
|
3263
|
-
"already in it.\nOr queue it as a separate run that starts when this one ends.",
|
|
3310
|
+
f"already in it.\nOr queue it as a separate run that starts when this one ends.{skip}",
|
|
3264
3311
|
[("add", "Add to this run", "success"), ("queue", f"Queue it as #{len(self.queue) + 1}", "primary"),
|
|
3265
3312
|
("keep", "Cancel", "default")]), picked)
|
|
3266
3313
|
return
|
|
@@ -3270,6 +3317,9 @@ class EvalsApp(App):
|
|
|
3270
3317
|
jobs, problem = item.plan(self.engine)
|
|
3271
3318
|
added, why = self.engine.add_jobs(jobs) if jobs else ([], problem)
|
|
3272
3319
|
if not added:
|
|
3320
|
+
if why and why.startswith("everything picked is already in the run"):
|
|
3321
|
+
self.notify(f"Not added: {why}.", timeout=10) # queueing it again would only duplicate it
|
|
3322
|
+
return
|
|
3273
3323
|
self.notify(f"Not added: {why}. Queued it instead.", severity="warning", timeout=10)
|
|
3274
3324
|
self.enqueue(item)
|
|
3275
3325
|
return
|
|
@@ -3281,6 +3331,8 @@ class EvalsApp(App):
|
|
|
3281
3331
|
def enqueue(self, item):
|
|
3282
3332
|
ahead = self.busy_text()
|
|
3283
3333
|
self.queue.append(item)
|
|
3334
|
+
if not self.active_session: # the last run already ended (its server may still be stopping):
|
|
3335
|
+
self.set_timer(0.3, self.start_next) # nothing else would start the queue
|
|
3284
3336
|
self.notify(f"Queued #{len(self.queue)}: {item.title}. It starts by itself after: {ahead}. "
|
|
3285
3337
|
"w shows the queue.", timeout=10)
|
|
3286
3338
|
self.refresh_live()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: tuieval
|
|
3
|
-
Version: 0.2.0.
|
|
3
|
+
Version: 0.2.0.dev86
|
|
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=7FTn_JFfR9SMZYo_qUDsTGSERBUrJVBqTkEmPGBsf3c,535
|
|
4
4
|
tuieval/builtin.toml,sha256=Kxw22RZCJhURUyu5Wz8tj5Y1nM85A8hFVRbA4ocoPUg,4293
|
|
5
5
|
tuieval/cli.py,sha256=VwiaU1F9bZtU8C-gEowJq58kPeYQY4t6SY_HwrV-qgc,4702
|
|
6
6
|
tuieval/client.py,sha256=kpsyLEZKfxCsvIGBHBbBy83TpI97CvnGCDq-4AbJS4Y,9986
|
|
@@ -18,7 +18,7 @@ tuieval/remove.py,sha256=Vwh43nm9lVb9U9aN-h6CMYbkTwdR3UWfZObwweF72n0,5157
|
|
|
18
18
|
tuieval/run_evals.py,sha256=FU3bvu3jt9ZWg3YLsXNINbdeClXMioyc4zQ4yEhmBQs,47855
|
|
19
19
|
tuieval/scaffold.py,sha256=YBOqniJpf_GtKKAFF3_OHxxMGbmTWdFjcClGcOnrrKE,12130
|
|
20
20
|
tuieval/selftest.py,sha256=nExkrOidgymlmvkxImEBfrQG5iTUN5WuRMIKtqusCCs,9835
|
|
21
|
-
tuieval/tui.py,sha256=
|
|
21
|
+
tuieval/tui.py,sha256=G6sLRXdQiOrm0sOooAn7HFbawIAUMRx4FZ28mMOvE50,175744
|
|
22
22
|
tuieval/tune.py,sha256=azxxthgJeag8JyoQUgaRxq6oI1XvEgzb9vkszjJZH7w,39645
|
|
23
23
|
tuieval/verdict.py,sha256=3SM8qrVdWNIFDENagaR5ZPBYEnjsBtkYB9WS5TDVssU,20517
|
|
24
24
|
tuieval/watch_proxy.py,sha256=bnDO1i6n6yUs1hODoUWcMppJMGPavoQqs6aNYrIxpT8,11416
|
|
@@ -47,8 +47,8 @@ tuieval/templates/packs/tool_call/pack.toml,sha256=n4bx0lGJHSmW41uVqhfIXJ2BWZpmT
|
|
|
47
47
|
tuieval/templates/packs/tool_call/system.txt,sha256=mKxu-lB-0YjLHXdgeFJa8x2C180OvcNz5cHv2N5Bg3U,254
|
|
48
48
|
tuieval/templates/packs/tool_call/tests.yaml,sha256=Nv7c4syrzJ9cU8EBKSK_1ZSFx9V02aCjW4-2TBCPT7s,1859
|
|
49
49
|
tuieval/templates/packs/tool_call/tools.yaml,sha256=HgxCkh0On2VwbHSsjAGM8tNCK7ZtKLGrs7lMCn3Fprs,1048
|
|
50
|
-
tuieval-0.2.0.
|
|
51
|
-
tuieval-0.2.0.
|
|
52
|
-
tuieval-0.2.0.
|
|
53
|
-
tuieval-0.2.0.
|
|
54
|
-
tuieval-0.2.0.
|
|
50
|
+
tuieval-0.2.0.dev86.dist-info/METADATA,sha256=Sa106UV1xU4bJvzPjWU-XCpo8ypc2Gn08bJmszFPmUc,14580
|
|
51
|
+
tuieval-0.2.0.dev86.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
|
|
52
|
+
tuieval-0.2.0.dev86.dist-info/entry_points.txt,sha256=7eIhi1GpFxBP2OLJV02Nn8LwsNuO512eKOGt1IBbj04,45
|
|
53
|
+
tuieval-0.2.0.dev86.dist-info/licenses/LICENSE,sha256=7wfRgGtBGH1aXhZkIn47oUznqKC18kEPMvUVgol7Ffc,1077
|
|
54
|
+
tuieval-0.2.0.dev86.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|