tuieval 0.2.0.dev125__tar.gz → 0.2.0.dev126__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.dev125 → tuieval-0.2.0.dev126}/CHANGELOG.md +1 -0
  2. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/PKG-INFO +1 -1
  3. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/_version.py +2 -2
  4. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/client.py +1 -1
  5. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/compare.py +2 -1
  6. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/tests/test_tuieval.py +1 -1
  7. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/.gitignore +0 -0
  8. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/LICENSE +0 -0
  9. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/README.md +0 -0
  10. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/RELEASING.md +0 -0
  11. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/docs/agent-packs.md +0 -0
  12. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/docs/images/brand/README.md +0 -0
  13. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/docs/images/brand/favicon.ico +0 -0
  14. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/docs/images/brand/readme-header.png +0 -0
  15. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/docs/images/brand/social-preview.png +0 -0
  16. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/docs/images/brand/tuieval-icon-1024.png +0 -0
  17. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/docs/images/brand/tuieval-icon-128.png +0 -0
  18. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/docs/images/brand/tuieval-icon-16.png +0 -0
  19. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/docs/images/brand/tuieval-icon-16.svg +0 -0
  20. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/docs/images/brand/tuieval-icon-256.png +0 -0
  21. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/docs/images/brand/tuieval-icon-32.png +0 -0
  22. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/docs/images/brand/tuieval-icon-48.png +0 -0
  23. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/docs/images/brand/tuieval-icon-512.png +0 -0
  24. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/docs/images/brand/tuieval-icon-64.png +0 -0
  25. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/docs/images/brand/tuieval-icon-animated.svg +0 -0
  26. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/docs/images/brand/tuieval-icon.svg +0 -0
  27. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/docs/images/tui-answer-reasoning.png +0 -0
  28. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/docs/images/tui-run-reasoning.png +0 -0
  29. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/docs/images/tui-setup.png +0 -0
  30. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/docs/models.md +0 -0
  31. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/docs/writing-packs.md +0 -0
  32. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/pyproject.toml +0 -0
  33. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/__init__.py +0 -0
  34. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/__main__.py +0 -0
  35. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/agents.py +0 -0
  36. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/builtin.toml +0 -0
  37. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/cli.py +0 -0
  38. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/dates.py +0 -0
  39. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/doctor.py +0 -0
  40. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/engine.py +0 -0
  41. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/export.py +0 -0
  42. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/graders/__init__.py +0 -0
  43. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/graders/answer.py +0 -0
  44. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/graders/code.py +0 -0
  45. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/graders/rag.py +0 -0
  46. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/graders/reply.py +0 -0
  47. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/graders/tool_call.py +0 -0
  48. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/insights.py +0 -0
  49. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/logs.py +0 -0
  50. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/machines.py +0 -0
  51. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/onboard.py +0 -0
  52. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/packs.py +0 -0
  53. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/profiles.py +0 -0
  54. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/pta.py +0 -0
  55. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/remove.py +0 -0
  56. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/run_evals.py +0 -0
  57. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/scaffold.py +0 -0
  58. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/selftest.py +0 -0
  59. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/templates/models.toml +0 -0
  60. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/templates/packs/answer/pack.toml +0 -0
  61. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/templates/packs/answer/system.txt +0 -0
  62. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/templates/packs/answer/tests.yaml +0 -0
  63. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/templates/packs/code/pack.toml +0 -0
  64. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/templates/packs/code/system.txt +0 -0
  65. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/templates/packs/code/tests.yaml +0 -0
  66. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/templates/packs/rag/pack.toml +0 -0
  67. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/templates/packs/rag/system.txt +0 -0
  68. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/templates/packs/rag/tests.yaml +0 -0
  69. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/templates/packs/reply/pack.toml +0 -0
  70. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/templates/packs/reply/system.txt +0 -0
  71. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/templates/packs/reply/tests.yaml +0 -0
  72. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/templates/packs/tool_call/pack.toml +0 -0
  73. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/templates/packs/tool_call/system.txt +0 -0
  74. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/templates/packs/tool_call/tests.yaml +0 -0
  75. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/templates/packs/tool_call/tools.yaml +0 -0
  76. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/tui.py +0 -0
  77. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/tune.py +0 -0
  78. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/verdict.py +0 -0
  79. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/watch_proxy.py +0 -0
  80. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/workspace.py +0 -0
  81. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/src/tuieval/yamlout.py +0 -0
  82. {tuieval-0.2.0.dev125 → tuieval-0.2.0.dev126}/tests/mock_server.py +0 -0
@@ -2,6 +2,7 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ - Fix: a request that runs out of time says `time limit: timed out after N s`, not `connection error`, and `tuieval compare` counts it against the model like the run does (it was left out as an error).
5
6
  - Agent packs (`kind = "agent"`): each test is a small project with a task, worked on by a command-line agent you define in `[agents]`, using the model tuieval serves, and graded by the task's visible and hidden tests. Results show the agent's stats, diff and transcript; `tuieval compare` adds an Agent tasks table; `tuieval selftest` checks each task's reference and wrong fixes. See docs/agent-packs.md.
6
7
  - Answers that used more tokens than the `max_tokens` sent (a provider that didn't stop them) are marked over budget: `(n over budget)` in the PTA index, an **over budget** column, `over` in Per question and a note in the answer view. `[defaults] over_budget = "fail"` fails them instead. Works on stored results.
7
8
  - Fix: Results → Per question opened the answers of the model one column to the right of the cell picked, and crashed on the last model's column.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: tuieval
3
- Version: 0.2.0.dev125
3
+ Version: 0.2.0.dev126
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.dev125'
22
- __version_tuple__ = version_tuple = (0, 2, 0, 'dev125')
21
+ __version__ = version = '0.2.0.dev126'
22
+ __version_tuple__ = version_tuple = (0, 2, 0, 'dev126')
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -153,7 +153,7 @@ def stream_chat(base_url, body, on_delta=None, timeout=1800, stream=None, header
153
153
  for raw in r:
154
154
  now = time.time()
155
155
  if now - start > timeout:
156
- out["error"] = f"connection error: timed out after {timeout:.0f} s in all"
156
+ out["error"] = f"time limit: timed out after {timeout:.0f} s in all"
157
157
  break
158
158
  if stall_s and out["ttft_s"] is not None and now - last > stall_s:
159
159
  out["error"] = _stalled(stall_s)
@@ -49,7 +49,8 @@ def _load_native(data):
49
49
  "model": m["label"], "suite": pack["name"], "test": f"{pack['name']}: {r['test']}",
50
50
  "name": f"{pack['name']}: {r['description']}",
51
51
  "ok": bool(r["pass"]), "score": float(r["score"]), "reason": r["reason"],
52
- "error": r["reason"].startswith(("server returned", "connection error")),
52
+ # a timeout is the model too slow (client.is_server_error), not an error; older results called it one
53
+ "error": r["reason"].startswith(("server returned", "connection error")) and "timed out" not in r["reason"],
53
54
  "truncated": r.get("finish") == "length", "output": r.get("answer") or "",
54
55
  # tokens past the max_tokens sent, which the provider didn't stop (client.mark_over_budget)
55
56
  "over_budget": r.get("over_budget"),
@@ -3005,7 +3005,7 @@ class StallGuard(unittest.TestCase):
3005
3005
  def test_keepalives_dont_outlast_the_timeout(self):
3006
3006
  from tuieval import client
3007
3007
  res, took = self.ask("--stall-before", "5", timeout=1, stall_s=1)
3008
- self.assertIn("timed out", res["error"])
3008
+ self.assertTrue(res["error"].startswith("time limit: timed out"), res["error"])
3009
3009
  self.assertFalse(client.is_server_error(res["error"])) # slow, like any timeout: counts
3010
3010
  self.assertLess(took, 4)
3011
3011
 
File without changes
File without changes