paratext-cli 0.4.0__tar.gz → 0.4.2__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 (126) hide show
  1. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/PKG-INFO +1 -1
  2. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/pyproject.toml +1 -1
  3. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/__init__.py +1 -1
  4. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/review/runs.py +1 -1
  5. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/review/server.py +18 -1
  6. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/review/static/app.js +19 -4
  7. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/review/static/index.html +6 -3
  8. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/uv.lock +1 -1
  9. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.github/workflows/ci.yml +0 -0
  10. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.github/workflows/publish.yml +0 -0
  11. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.gitignore +0 -0
  12. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/intro.md +0 -0
  13. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-1 split-the-framework-out-of-paratext-nls-and-release-it.md +0 -0
  14. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-10 remove-the-watttime-provider.md +0 -0
  15. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-11 make-paratext-new-self-installing.md +0 -0
  16. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-12 add-paratext-guide-so-agents-can-self-orient.md +0 -0
  17. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-13 guard-schema-prompt-and-view-drift.md +0 -0
  18. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-14 build-the-human-corrected-gold-eval-set-in-review.md +0 -0
  19. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-15 add-marc-and-dublin-core-export-formats.md +0 -0
  20. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-16 ship-schema-json-with-each-exported-dataset.md +0 -0
  21. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-17 add-the-project-inspector-and-fix-sqlite-thread-safety.md +0 -0
  22. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-18 point-the-default-card-detector-at-the-published-nls-repo.md +0 -0
  23. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-19 add-the-scope-aware-export-modal.md +0 -0
  24. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-2 add-the-inbuilt-review-web-ui.md +0 -0
  25. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-20 move-the-review-ui-onto-oat.md +0 -0
  26. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-21 render-entries-as-tables-read-only-and-editable.md +0 -0
  27. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-22 publish-gold-to-hugging-face-with-sign-in-with-hf.md +0 -0
  28. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-23 warn-on-incomplete-provenance-without-blocking-publication.md +0 -0
  29. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-24 add-the-paratext-logo-and-favicon.md +0 -0
  30. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-25 remove-duplicated-helpers-across-the-codebase.md +0 -0
  31. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-26 split-store-and-dataset-loading-out-of-the-review-server.md +0 -0
  32. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-27 lean-the-readme-and-split-the-reference-into-docs.md +0 -0
  33. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-28 add-notice-and-make-the-repository-public.md +0 -0
  34. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-29 rename-the-distribution-to-paratext-cli-and-publish-to-pypi.md +0 -0
  35. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-3 make-the-review-server-configurable.md +0 -0
  36. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-30 make-project-discovery-work-from-any-environment.md +0 -0
  37. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-31 give-clear-errors-for-provider-and-source-misconfiguration.md +0 -0
  38. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-32 add-a-configurable-output-budget-and-provider-extra-body-pas.md +0 -0
  39. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-33 bring-marc-output-up-to-isbd-punctuation-and-leader-conventi.md +0 -0
  40. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-34 replace-the-blind-margin-crop-with-a-content-aware-fallback.md +0 -0
  41. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-35 add-the-opt-in-ai-assistance-note-to-marc-and-dc-export.md +0 -0
  42. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-36 emit-only-one-main-entry-per-marc-record.md +0 -0
  43. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-37 extend-cli-test-coverage-to-argparse-wiring-round-resolution.md +0 -0
  44. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-38 walk-a-real-run-from-a-fresh-scaffold.md +0 -0
  45. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-39 add-the-paratext-dependency-when-scaffolding-into-an-existin.md +0 -0
  46. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-4 genericise-the-defaults-away-from-local-inference-servers.md +0 -0
  47. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-40 fix-cross-batch-accumulation-overwriting-metadata-jsonl.md +0 -0
  48. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-41 remove-the-silent-hf-default-from-format.md +0 -0
  49. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-42 add-paratext-export-db.md +0 -0
  50. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-43 decide-whether-a-gold-export-ships-as-a-held-out-test-split.md +0 -0
  51. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-44 hf-export-v2-multi-image-projects-and-round-versioning-as-hu.md +0 -0
  52. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-45 add-paratext-bench.md +0 -0
  53. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-46 review-ui-polish-flagged-stat-key-score-badge-and-verdict-to.md +0 -0
  54. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-47 eval-editor-reach-view-hidden-fields-and-diff-corrected-agai.md +0 -0
  55. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-48 add-richer-scaffolder-field-types-for-enums-and-lists.md +0 -0
  56. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-49 extend-the-carbon-providers.md +0 -0
  57. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-5 add-source-adapters-and-slim-the-project-layout.md +0 -0
  58. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-50 build-the-wordmark-in-a-mono-typeface.md +0 -0
  59. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-51 decide-whether-to-pursue-the-pypi-paratext-name.md +0 -0
  60. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-6 rename-init-to-new-and-document-every-cli-flag.md +0 -0
  61. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-7 key-runs-and-packages-on-the-prompt-hash.md +0 -0
  62. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-8 add-paratext-export-for-publishing-a-reviewed-round.md +0 -0
  63. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/.helical/tasks/PTX-9 add-carbon-aware-scheduling.md +0 -0
  64. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/AGENTS.md +0 -0
  65. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/LICENSE +0 -0
  66. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/NOTICE +0 -0
  67. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/README.md +0 -0
  68. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/assets/logo.png +0 -0
  69. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/assets/logo.svg +0 -0
  70. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/docs/configuration.md +0 -0
  71. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/docs/export.md +0 -0
  72. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/docs/green-scheduling.md +0 -0
  73. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/docs/hf-export-spec.md +0 -0
  74. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/docs/publishing.md +0 -0
  75. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/docs/scanned-cards.md +0 -0
  76. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/paratext.example.toml +0 -0
  77. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/AGENTS.md +0 -0
  78. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/carbon.py +0 -0
  79. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/cards.py +0 -0
  80. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/catalogue.py +0 -0
  81. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/cli.py +0 -0
  82. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/config.py +0 -0
  83. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/datasets.py +0 -0
  84. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/extract.py +0 -0
  85. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/hf_export.py +0 -0
  86. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/inspect.py +0 -0
  87. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/io.py +0 -0
  88. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/packaging.py +0 -0
  89. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/paratext.example.toml +0 -0
  90. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/projects/__init__.py +0 -0
  91. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/projects/card_template/__init__.py +0 -0
  92. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/projects/card_template/prompt.md +0 -0
  93. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/projects/card_template/schema.py +0 -0
  94. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/records.py +0 -0
  95. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/review/__init__.py +0 -0
  96. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/review/hf_oauth.py +0 -0
  97. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/review/sessions.py +0 -0
  98. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/review/static/favicon.svg +0 -0
  99. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/review/static/oat.min.css +0 -0
  100. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/review/static/oat.min.js +0 -0
  101. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/runner.py +0 -0
  102. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/scaffold.py +0 -0
  103. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/sources.py +0 -0
  104. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/store.py +0 -0
  105. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/src/paratext/workshop.py +0 -0
  106. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/tests/test_carbon.py +0 -0
  107. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/tests/test_catalogue.py +0 -0
  108. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/tests/test_cli.py +0 -0
  109. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/tests/test_config.py +0 -0
  110. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/tests/test_extract.py +0 -0
  111. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/tests/test_guide.py +0 -0
  112. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/tests/test_hf_export.py +0 -0
  113. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/tests/test_io.py +0 -0
  114. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/tests/test_packaging.py +0 -0
  115. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/tests/test_project_audit.py +0 -0
  116. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/tests/test_records.py +0 -0
  117. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/tests/test_review.py +0 -0
  118. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/tests/test_rounds.py +0 -0
  119. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/tests/test_runner.py +0 -0
  120. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/tests/test_runs.py +0 -0
  121. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/tests/test_scaffold.py +0 -0
  122. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/tests/test_sessions.py +0 -0
  123. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/tests/test_show_through.py +0 -0
  124. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/tests/test_sources.py +0 -0
  125. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/tests/test_verso.py +0 -0
  126. {paratext_cli-0.4.0 → paratext_cli-0.4.2}/tests/test_workshop.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: paratext-cli
3
- Version: 0.4.0
3
+ Version: 0.4.2
4
4
  Summary: Modular, project-based metadata extraction from digitised library/archive collections with a multimodal model
5
5
  License-Expression: Apache-2.0
6
6
  License-File: LICENSE
@@ -3,7 +3,7 @@
3
3
  # the plain name on PyPI belongs to an unrelated project, so the distribution
4
4
  # carries the `-cli` suffix.
5
5
  name = "paratext-cli"
6
- version = "0.4.0"
6
+ version = "0.4.2"
7
7
  description = "Modular, project-based metadata extraction from digitised library/archive collections with a multimodal model"
8
8
  readme = "README.md"
9
9
  # Core is pure-Python + numpy/pillow/pydantic. The [detector] extra needs
@@ -1,3 +1,3 @@
1
1
  """paratext — metadata extraction from digitised collections with a multimodal model."""
2
2
 
3
- __version__ = "0.4.0"
3
+ __version__ = "0.4.2"
@@ -29,7 +29,7 @@ from ..workshop import build_schema
29
29
 
30
30
  logger = logging.getLogger(__name__)
31
31
 
32
- MAX_CARDS = 5 # per run
32
+ MAX_CARDS = 8 # per run
33
33
  MAX_RUNS_PER_SESSION = 40
34
34
 
35
35
 
@@ -155,6 +155,18 @@ class Handler(BaseHTTPRequestHandler):
155
155
  return self._json({"error": str(e)}, 429)
156
156
  self._json(job.as_dict(), 202)
157
157
 
158
+ def _api_workshop_reset(self):
159
+ """Throw this session away and start again — the facilitator's answer to
160
+ an attendee who has painted themselves into a corner. Deletes only the
161
+ caller's own workspace; there is deliberately no way to reset someone
162
+ else's from the browser."""
163
+ session = self._workshop_or_404()
164
+ self.sessions.reset(session.id)
165
+ fresh = self.sessions.create()
166
+ self._session_cache, self._set_cookie = fresh, True
167
+ self._store_cache = None
168
+ self._json({"ok": True, "session": fresh.id})
169
+
158
170
  def _api_workshop_job(self, job_id):
159
171
  self._workshop_or_404()
160
172
  job = self.runs.get(job_id)
@@ -317,6 +329,8 @@ class Handler(BaseHTTPRequestHandler):
317
329
  def do_DELETE(self):
318
330
  u = urlparse(self.path)
319
331
  qs = parse_qs(u.query)
332
+ if u.path == "/api/workshop/session":
333
+ return self._api_workshop_reset()
320
334
  if u.path == "/api/reset":
321
335
  if self._body().get("confirm") is not True:
322
336
  return self._json({"error": "Pass {confirm: true} to reset."}, 400)
@@ -776,8 +790,11 @@ def _workshop_defaults(datasets: list[dict], endpoint: dict) -> dict:
776
790
  view = json.loads((newest["dir"] / "view.json").read_text())
777
791
  for panel in view.get("panels", []):
778
792
  if panel.get("source") == "model_output":
793
+ # Type left empty on purpose: it resolves to "auto" in the
794
+ # editor, so the first save shows what was inferred rather
795
+ # than presenting every field as text.
779
796
  fields = [
780
- {"name": f["key"], "type": "text", "description": ""}
797
+ {"name": f["key"], "type": "", "description": ""}
781
798
  for f in panel.get("fields", [])
782
799
  ]
783
800
  except (OSError, json.JSONDecodeError):
@@ -207,7 +207,7 @@ function renderHeader() {
207
207
  const nav = document.querySelector("nav[data-topnav]");
208
208
  if (!nav) return;
209
209
 
210
- // Gate Review/Stats until a dataset is chosen — with no selection they just
210
+ // Gate Review/Results until a dataset is chosen — with no selection they just
211
211
  // fall back to the picker (looking like dead buttons).
212
212
  const gated = state.dataset ? "" : "none";
213
213
  for (const id of ["nav-review", "nav-stats"]) {
@@ -392,7 +392,7 @@ function render() {
392
392
  // At the end of the pass the primary CTA becomes a route to the stats summary,
393
393
  // rather than a Next button that silently no-ops.
394
394
  const nextControl = atLast
395
- ? `<a href="#/stats" class="button primary">Done — see stats →</a>`
395
+ ? `<a href="#/stats" class="button primary">Done — see results →</a>`
396
396
  : `<button id="next" class="primary">Next →</button>`;
397
397
  const nav = `
398
398
  <div class="controls">
@@ -791,7 +791,7 @@ function renderEditor() {
791
791
  <button id="ev-clear" class="outline" ${s.gold ? "" : "disabled"}>Clear correction</button>
792
792
  ${
793
793
  atLast
794
- ? `<a href="#/stats" class="button primary">Done — see stats →</a>`
794
+ ? `<a href="#/stats" class="button primary">Done — see results →</a>`
795
795
  : `<button id="ev-next" class="primary">Save &amp; next →</button>`
796
796
  }
797
797
  </div>
@@ -1210,7 +1210,7 @@ async function renderStats() {
1210
1210
  .join("");
1211
1211
 
1212
1212
  document.getElementById("view").innerHTML = `
1213
- <h2>Stats — ${escapeHtml(s.dataset)} <small class="text-light">(${escapeHtml(s.schema)})</small></h2>
1213
+ <h2>Results — ${escapeHtml(s.dataset)} <small class="text-light">(${escapeHtml(s.schema)})</small></h2>
1214
1214
 
1215
1215
  <dl>
1216
1216
  <div class="field-row"><dt>Reviewed</dt><dd>${s.annotated} of ${s.total} (${
@@ -1747,6 +1747,11 @@ function renderWorkshop() {
1747
1747
  </div>
1748
1748
 
1749
1749
  <div id="ws-status" class="mt-4"></div>
1750
+
1751
+ <p class="mt-4" style="font-size:.875rem;">
1752
+ <button class="button outline small" id="ws-reset">Start over</button>
1753
+ <span class="text-light"> — throws away your prompt, fields and rounds.</span>
1754
+ </p>
1750
1755
  `;
1751
1756
 
1752
1757
  document.getElementById("ws-add").addEventListener("click", () => {
@@ -1758,6 +1763,16 @@ function renderWorkshop() {
1758
1763
  if (btn) btn.closest("tr").remove();
1759
1764
  });
1760
1765
  document.getElementById("ws-run").addEventListener("click", startWorkshopRun);
1766
+ document.getElementById("ws-reset").addEventListener("click", async () => {
1767
+ if (!confirm("Start over? Your prompt, fields and rounds are deleted.")) return;
1768
+ await fetch("api/workshop/session", { method: "DELETE" });
1769
+ state.workshop = undefined;
1770
+ state.datasets = [];
1771
+ state.dataset = null;
1772
+ await loadWorkshop();
1773
+ await loadDatasets();
1774
+ renderWorkshop();
1775
+ });
1761
1776
  }
1762
1777
 
1763
1778
  async function startWorkshopRun() {
@@ -114,6 +114,8 @@
114
114
  .proj-meta { margin: .25rem 0 .75rem; font-size: .8125rem; word-break: break-word; }
115
115
  .prompt-text { white-space: pre-wrap; font-size: .8125rem; max-height: 30rem;
116
116
  overflow-y: auto; }
117
+ /* Results closes the loop, so it sits apart from the two doing-steps. */
118
+ .nav-results { margin-left: .5rem; }
117
119
  /* Eval-set call to action. The gold set is the point of reviewing, so it
118
120
  is a button, not a statistic. The hover ring is a conic gradient rotated
119
121
  through a registered @property — a plain gradient can't be animated. */
@@ -197,10 +199,11 @@
197
199
  <body>
198
200
  <nav data-topnav>
199
201
  <a href="#/select"><strong>paratext</strong></a>
200
- <a href="#/review" id="nav-review" class="button outline small">Review</a>
201
- <a href="#/stats" id="nav-stats" class="button outline small">Stats</a>
202
+ <!-- Workflow order: edit, run, look at what came back. -->
202
203
  <!-- Workshop mode only; unhidden by the app when /api/workshop/state answers. -->
203
- <a href="#/workshop" id="nav-workshop" class="button outline small" hidden>Prompt</a>
204
+ <a href="#/workshop" id="nav-workshop" class="button outline small" hidden>Prompt editor</a>
205
+ <a href="#/review" id="nav-review" class="button outline small">Review</a>
206
+ <a href="#/stats" id="nav-stats" class="button outline small nav-results">Results</a>
204
207
  <span id="progress" style="margin-left:auto; font-size:.875rem;"></span>
205
208
  <!-- aria-label, NOT title: Oat converts every [title] into a data-tooltip
206
209
  whose ::after is absolutely positioned and centred on the element. On
@@ -803,7 +803,7 @@ wheels = [
803
803
 
804
804
  [[package]]
805
805
  name = "paratext-cli"
806
- version = "0.4.0"
806
+ version = "0.4.2"
807
807
  source = { editable = "." }
808
808
  dependencies = [
809
809
  { name = "huggingface-hub" },
File without changes
File without changes
File without changes
File without changes
File without changes