tuieval 0.2.0.dev34__py3-none-any.whl → 0.2.0.dev35__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 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.dev34'
22
- __version_tuple__ = version_tuple = (0, 2, 0, 'dev34')
21
+ __version__ = version = '0.2.0.dev35'
22
+ __version_tuple__ = version_tuple = (0, 2, 0, 'dev35')
23
23
 
24
24
  __commit_id__ = commit_id = None
tuieval/tui.py CHANGED
@@ -181,7 +181,8 @@ def fmt_secs(secs):
181
181
 
182
182
 
183
183
  class StreamView(TextArea):
184
- """Read-only, word-wrapped text that grows as tokens stream in. Scroll it with the mouse."""
184
+ """Read-only, word-wrapped text that grows as tokens stream in. Scroll it with the mouse; it follows
185
+ new text only while scrolled to the bottom."""
185
186
 
186
187
  can_focus = False
187
188
 
@@ -189,14 +190,28 @@ class StreamView(TextArea):
189
190
 
190
191
  def __init__(self, **kw):
191
192
  super().__init__(read_only=True, soft_wrap=True, show_cursor=False, max_checkpoints=1, **kw)
193
+ self.trim_pending = False
192
194
 
193
195
  def append(self, text, follow=True):
196
+ # Follow only when already at the bottom: scrolled up to read, the view stays put.
197
+ follow = follow and self.scroll_y >= self.max_scroll_y - 1
194
198
  self.insert(text, self.document.end)
195
199
  if len(self.text) > self.MAX_CHARS:
196
- self.load_text("…" + self.text[-self.MAX_CHARS // 2:])
200
+ if follow:
201
+ self.trim()
202
+ elif not self.trim_pending: # once the new text is laid out, so the place is measured right
203
+ self.trim_pending = True
204
+ self.call_after_refresh(self.trim)
197
205
  if follow:
198
206
  self.scroll_end(animate=False)
199
207
 
208
+ def trim(self):
209
+ """Drop the oldest text, keeping the view the same distance from the end (the text that's left)."""
210
+ self.trim_pending = False
211
+ from_end = self.max_scroll_y - self.scroll_y
212
+ self.load_text("…" + self.text[-self.MAX_CHARS // 2:])
213
+ self.call_after_refresh(lambda: self.scroll_to(y=max(0, self.max_scroll_y - from_end), animate=False))
214
+
200
215
 
201
216
  # ------------------------------------------------------------------ answer detail
202
217
  def answer_entry(row):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: tuieval
3
- Version: 0.2.0.dev34
3
+ Version: 0.2.0.dev35
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=3QorieDWyZTxv0MUxA9ST5YYuP9gGglKSd1FqdHAeoo,535
3
+ tuieval/_version.py,sha256=CbIICvzgRxETJn7V5B1XvQciGOT10G9JqjADauvBPbc,535
4
4
  tuieval/builtin.toml,sha256=Kxw22RZCJhURUyu5Wz8tj5Y1nM85A8hFVRbA4ocoPUg,4293
5
5
  tuieval/cli.py,sha256=7joEA07W2we-kcg4VXxfCSXazj7dWBCKlQlSXpXQfTc,4390
6
6
  tuieval/client.py,sha256=Vui7ucVv_GiKObGoVS_EWSZFUKPou9PWmutqMTrahXk,9313
@@ -16,7 +16,7 @@ tuieval/remove.py,sha256=Vwh43nm9lVb9U9aN-h6CMYbkTwdR3UWfZObwweF72n0,5157
16
16
  tuieval/run_evals.py,sha256=ZGx4XcZ15qD3vIg15xCfdX4SxTDHXBp_GYoiGexchdw,43668
17
17
  tuieval/scaffold.py,sha256=YBOqniJpf_GtKKAFF3_OHxxMGbmTWdFjcClGcOnrrKE,12130
18
18
  tuieval/selftest.py,sha256=nExkrOidgymlmvkxImEBfrQG5iTUN5WuRMIKtqusCCs,9835
19
- tuieval/tui.py,sha256=U-8GTkKqmzUqCpzCEZ6G2lhx_KE7VM9RcVRTG1stDjc,159670
19
+ tuieval/tui.py,sha256=OTkp7CkY6X1OjCLC-7N74BoVwRoawHDng5Nb_caWT1A,160493
20
20
  tuieval/tune.py,sha256=jXwYuSjfdqbLCE3WonP2xaUHwk_FnhI67twB1BaHggI,38992
21
21
  tuieval/verdict.py,sha256=Muo1a05mCv781MlEJsXwDsGaKbRi0JS4Lv8HdvK_Aco,19054
22
22
  tuieval/watch_proxy.py,sha256=z916NRhEur04a9RnLm6ZpIEY1SnnUGPiHYbmlD9ktQ0,11035
@@ -45,8 +45,8 @@ tuieval/templates/packs/tool_call/pack.toml,sha256=n4bx0lGJHSmW41uVqhfIXJ2BWZpmT
45
45
  tuieval/templates/packs/tool_call/system.txt,sha256=mKxu-lB-0YjLHXdgeFJa8x2C180OvcNz5cHv2N5Bg3U,254
46
46
  tuieval/templates/packs/tool_call/tests.yaml,sha256=Nv7c4syrzJ9cU8EBKSK_1ZSFx9V02aCjW4-2TBCPT7s,1859
47
47
  tuieval/templates/packs/tool_call/tools.yaml,sha256=HgxCkh0On2VwbHSsjAGM8tNCK7ZtKLGrs7lMCn3Fprs,1048
48
- tuieval-0.2.0.dev34.dist-info/METADATA,sha256=CYqXAib2FyXNiK3IyJaDOd_aLoRqRvHsTGdF0RSQaMI,13189
49
- tuieval-0.2.0.dev34.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
50
- tuieval-0.2.0.dev34.dist-info/entry_points.txt,sha256=7eIhi1GpFxBP2OLJV02Nn8LwsNuO512eKOGt1IBbj04,45
51
- tuieval-0.2.0.dev34.dist-info/licenses/LICENSE,sha256=7wfRgGtBGH1aXhZkIn47oUznqKC18kEPMvUVgol7Ffc,1077
52
- tuieval-0.2.0.dev34.dist-info/RECORD,,
48
+ tuieval-0.2.0.dev35.dist-info/METADATA,sha256=TmKW6Vv6y36IMxqxbI6_B0NRMM62t-9yXkUq-pI4z6Y,13189
49
+ tuieval-0.2.0.dev35.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
50
+ tuieval-0.2.0.dev35.dist-info/entry_points.txt,sha256=7eIhi1GpFxBP2OLJV02Nn8LwsNuO512eKOGt1IBbj04,45
51
+ tuieval-0.2.0.dev35.dist-info/licenses/LICENSE,sha256=7wfRgGtBGH1aXhZkIn47oUznqKC18kEPMvUVgol7Ffc,1077
52
+ tuieval-0.2.0.dev35.dist-info/RECORD,,