Skip to content

DEV-1890 whisper words - #19

Merged
dawidope merged 3 commits into
mainfrom
DEV-1890-whisper-words
Aug 7, 2026
Merged

DEV-1890 whisper words#19
dawidope merged 3 commits into
mainfrom
DEV-1890-whisper-words

Conversation

@dawidope

@dawidope dawidope commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Description

Brief description of changes.

Type of Change

  • Bug fix
  • New feature
  • Documentation
  • Refactoring

Testing

How was this tested?

Checklist

  • Code follows project style guidelines
  • No debug code left in
  • Tested locally
  • Updated README if needed

dawidope and others added 3 commits July 23, 2026 16:36
…sults

The transcription form only had include_ts, so the v2 parameters added
alongside whisper-ct2 were unreachable from the tester, and a structured
result was just an opaque download link.

Form (all four /audio/transcriptions endpoints, via a shared builder):
- ts_level, diarize, lang, and include_metadata (URL sources only -- the
  API returns null metadata for an uploaded file)
- capability-gated rather than hardcoded: ts_level appears only for models
  publishing info.limits.timestamp_levels and takes its options from that
  list, diarize only for info.features.supports_diarization. Two new
  registry hooks carry this: optionsFromModel and visibleFromModel.
- ts_level is clamped to the selected model's list, so switching models
  can't leave a value the API rejects
- visibleWhen now accepts an array of conditions (OR) and compares on the
  string form, so it works for booleans: ts_level shows for include_ts OR
  diarize. Hidden fields stay out of the payload, price calc included.

Results: the shape is the model's choice, reported as `structured` on the
job status. The transcript strip shows JSON/TXT, language, delivered
ts_level and whether speakers came back; expanding renders plain text as
text, and a structured result as segments with ms times, coloured
speakers, avg_logprob and per-word spans. Source metadata renders as a
key/value block, generically, so new fields need no code change.

Result files are fetched through a new /api/result -- result URLs are
presigned and unreachable from the browser -- and it names the host on a
connection failure, since an internal storage hostname that only resolves
inside the API's network is otherwise a bare "fetch failed".

Layout: the toggles move from the right column to the centre one.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
deAPI ignores per_page and caps limit at 50 (default page size 25),
so /api/models was silently returning only the first 25 models.
Loop over ?limit=50&page=N until meta.last_page and return the
merged list, with a 20-page safety cap.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The header refresh button only reloaded /models. It now also calls
refreshBalance(), spins while either request is in flight, and the
tooltip reflects both actions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@dawidope
dawidope requested a review from szwagros August 7, 2026 08:18
@dawidope
dawidope merged commit 33ba1d5 into main Aug 7, 2026
2 checks passed
@dawidope
dawidope deleted the DEV-1890-whisper-words branch August 7, 2026 08:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants