tuieval 0.2.0.dev126__tar.gz → 0.2.0.dev127__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 (82) hide show
  1. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/PKG-INFO +1 -1
  2. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/_version.py +2 -2
  3. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/tests/mock_server.py +6 -1
  4. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/tests/test_tuieval.py +7 -2
  5. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/.gitignore +0 -0
  6. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/CHANGELOG.md +0 -0
  7. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/LICENSE +0 -0
  8. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/README.md +0 -0
  9. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/RELEASING.md +0 -0
  10. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/docs/agent-packs.md +0 -0
  11. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/docs/images/brand/README.md +0 -0
  12. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/docs/images/brand/favicon.ico +0 -0
  13. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/docs/images/brand/readme-header.png +0 -0
  14. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/docs/images/brand/social-preview.png +0 -0
  15. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/docs/images/brand/tuieval-icon-1024.png +0 -0
  16. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/docs/images/brand/tuieval-icon-128.png +0 -0
  17. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/docs/images/brand/tuieval-icon-16.png +0 -0
  18. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/docs/images/brand/tuieval-icon-16.svg +0 -0
  19. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/docs/images/brand/tuieval-icon-256.png +0 -0
  20. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/docs/images/brand/tuieval-icon-32.png +0 -0
  21. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/docs/images/brand/tuieval-icon-48.png +0 -0
  22. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/docs/images/brand/tuieval-icon-512.png +0 -0
  23. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/docs/images/brand/tuieval-icon-64.png +0 -0
  24. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/docs/images/brand/tuieval-icon-animated.svg +0 -0
  25. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/docs/images/brand/tuieval-icon.svg +0 -0
  26. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/docs/images/tui-answer-reasoning.png +0 -0
  27. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/docs/images/tui-run-reasoning.png +0 -0
  28. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/docs/images/tui-setup.png +0 -0
  29. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/docs/models.md +0 -0
  30. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/docs/writing-packs.md +0 -0
  31. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/pyproject.toml +0 -0
  32. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/__init__.py +0 -0
  33. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/__main__.py +0 -0
  34. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/agents.py +0 -0
  35. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/builtin.toml +0 -0
  36. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/cli.py +0 -0
  37. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/client.py +0 -0
  38. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/compare.py +0 -0
  39. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/dates.py +0 -0
  40. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/doctor.py +0 -0
  41. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/engine.py +0 -0
  42. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/export.py +0 -0
  43. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/graders/__init__.py +0 -0
  44. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/graders/answer.py +0 -0
  45. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/graders/code.py +0 -0
  46. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/graders/rag.py +0 -0
  47. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/graders/reply.py +0 -0
  48. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/graders/tool_call.py +0 -0
  49. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/insights.py +0 -0
  50. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/logs.py +0 -0
  51. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/machines.py +0 -0
  52. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/onboard.py +0 -0
  53. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/packs.py +0 -0
  54. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/profiles.py +0 -0
  55. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/pta.py +0 -0
  56. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/remove.py +0 -0
  57. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/run_evals.py +0 -0
  58. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/scaffold.py +0 -0
  59. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/selftest.py +0 -0
  60. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/templates/models.toml +0 -0
  61. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/templates/packs/answer/pack.toml +0 -0
  62. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/templates/packs/answer/system.txt +0 -0
  63. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/templates/packs/answer/tests.yaml +0 -0
  64. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/templates/packs/code/pack.toml +0 -0
  65. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/templates/packs/code/system.txt +0 -0
  66. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/templates/packs/code/tests.yaml +0 -0
  67. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/templates/packs/rag/pack.toml +0 -0
  68. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/templates/packs/rag/system.txt +0 -0
  69. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/templates/packs/rag/tests.yaml +0 -0
  70. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/templates/packs/reply/pack.toml +0 -0
  71. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/templates/packs/reply/system.txt +0 -0
  72. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/templates/packs/reply/tests.yaml +0 -0
  73. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/templates/packs/tool_call/pack.toml +0 -0
  74. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/templates/packs/tool_call/system.txt +0 -0
  75. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/templates/packs/tool_call/tests.yaml +0 -0
  76. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/templates/packs/tool_call/tools.yaml +0 -0
  77. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/tui.py +0 -0
  78. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/tune.py +0 -0
  79. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/verdict.py +0 -0
  80. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/watch_proxy.py +0 -0
  81. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/workspace.py +0 -0
  82. {tuieval-0.2.0.dev126 → tuieval-0.2.0.dev127}/src/tuieval/yamlout.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: tuieval
3
- Version: 0.2.0.dev126
3
+ Version: 0.2.0.dev127
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
@@ -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.dev126'
22
- __version_tuple__ = version_tuple = (0, 2, 0, 'dev126')
21
+ __version__ = version = '0.2.0.dev127'
22
+ __version_tuple__ = version_tuple = (0, 2, 0, 'dev127')
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -56,6 +56,7 @@ class Handler(BaseHTTPRequestHandler):
56
56
  answers, mode, model, delay, max_output = {}, "oracle", "mock", 0.0, None
57
57
  stall, stall_before, silent = 0.0, 0.0, False
58
58
  die_after = None
59
+ hold, answered = None, 0 # while the hold file exists, answers after the first wait (a run that stays going)
59
60
 
60
61
  def log_message(self, *a):
61
62
  pass
@@ -120,6 +121,8 @@ class Handler(BaseHTTPRequestHandler):
120
121
  self.wfile.flush()
121
122
  time.sleep(0.2)
122
123
 
124
+ while self.hold and Handler.answered and os.path.exists(self.hold):
125
+ wait(0.2)
123
126
  wait(self.stall_before)
124
127
  send({"choices": [{"delta": {"reasoning_content": "Thinking it over. "}}]})
125
128
  wait(self.stall)
@@ -136,6 +139,7 @@ class Handler(BaseHTTPRequestHandler):
136
139
  "prompt_per_second": 500.0, "cache_n": 0}})
137
140
  die_if_due()
138
141
  self.wfile.write(b"data: [DONE]\n\n")
142
+ Handler.answered += 1
139
143
 
140
144
 
141
145
  class Server(ThreadingHTTPServer):
@@ -157,11 +161,12 @@ def main(argv=None):
157
161
  p.add_argument("--stall-before", type=float, default=0.0)
158
162
  p.add_argument("--silent", action="store_true")
159
163
  p.add_argument("--die-after", type=int)
164
+ p.add_argument("--hold", help="while this file exists, every answer after the first waits")
160
165
  a, _ = p.parse_known_args(argv) # other flags (e.g. speed knobs under test) are accepted and ignored
161
166
  Handler.answers, Handler.mode, Handler.model, Handler.delay = load_answers(a.packs), a.mode, a.model, a.delay
162
167
  Handler.max_output = a.max_output
163
168
  Handler.stall, Handler.stall_before, Handler.silent = a.stall, a.stall_before, a.silent
164
- Handler.die_after = a.die_after
169
+ Handler.die_after, Handler.hold = a.die_after, a.hold
165
170
  srv = Server(("127.0.0.1", a.port), Handler)
166
171
  print(f"mock server on 127.0.0.1:{a.port} ({a.mode}, {len(Handler.answers)} known questions)", flush=True)
167
172
  try:
@@ -1412,8 +1412,12 @@ class AddToRun(unittest.TestCase):
1412
1412
 
1413
1413
  def test_tui_never_queues_the_same_thing_twice(self):
1414
1414
  """Start while a run is going never adds or queues a model and pack already running or queued."""
1415
+ hold = os.path.join(self.tmp.name, "hold") # the first run stays going until every pick is made
1416
+ write(hold, "")
1417
+ path = os.path.join(self.ws, "models.toml")
1418
+ write(path, read(path).replace('"--delay", "0.2"', f'"--delay", "0.2", "--hold", {json.dumps(hold)}'))
1415
1419
  code = textwrap.dedent("""
1416
- import asyncio, json, time
1420
+ import asyncio, json, os, time
1417
1421
  from tuieval.tui import EvalsApp, RunScreen, SetupScreen, ChoiceScreen
1418
1422
  from textual.widgets import SelectionList
1419
1423
  async def pick(app, pilot, models, packs=("apps",)):
@@ -1459,6 +1463,7 @@ class AddToRun(unittest.TestCase):
1459
1463
  if isinstance(s, ChoiceScreen):
1460
1464
  s.dismiss("queue")
1461
1465
  await pilot.pause()
1466
+ os.remove(os.environ["HOLD"])
1462
1467
  deadline = time.time() + 300 # the queued runs start one after another: wait for all three
1463
1468
  while time.time() < deadline:
1464
1469
  await pilot.pause(0.2)
@@ -1469,7 +1474,7 @@ class AddToRun(unittest.TestCase):
1469
1474
  asyncio.run(go())
1470
1475
  """)
1471
1476
  p = subprocess.run([sys.executable, "-c", code], capture_output=True, text=True, timeout=600,
1472
- env=dict(os.environ, TUIEVAL_HOME=self.ws, TUIEVAL_DETECT_PORTS=""))
1477
+ env=dict(os.environ, TUIEVAL_HOME=self.ws, TUIEVAL_DETECT_PORTS="", HOLD=hold))
1473
1478
  out = json.loads(p.stdout.strip().splitlines()[-1]) if p.stdout.strip() else p.stderr
1474
1479
  self.assertIsInstance(out, dict, out)
1475
1480
  self.assertEqual(out["same"], [False, 0])
File without changes
File without changes