Commit graph

36 commits

Author SHA1 Message Date
Marcelo Terreiro Prado
f6e71862ff
fix: show friendly error when no audio input device is available (#1115) 2026-03-23 07:53:55 +08:00
Fero
17277cf6ce
Save recordings before transcription (#1024)
* save recordings before transcription

* impart cj preferences

* cleanup

* re-transcribe anything

* format

* fix tests

* format

* ui cleanup

* format

* cleanup

* bunch of fixes, mainly for vm

* put comments back

* update transcription failure text

* alert -> toast

* spawn_blocking

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2026-03-22 15:43:02 +08:00
Fero
a6e8fc8651
fix: keep Windows microphone guidance Windows-only (#1032)
* fix windows-only mic permission guidance

* don't hardcode error strings in rust

* format

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2026-03-15 22:44:48 +08:00
Fero
785c3317e4
Handle microphone init failure without aborting (#945)
* Handle microphone start failures without aborting

Return recorder init errors instead of panicking/aborting in the worker thread and reset UI state when recording start fails.

Refs #436

* prop errors to ui

* format

* Add missing recording error translation keys

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2026-03-10 13:07:21 +08:00
Chirag Agggarwal
0cb8ab2162
feat: implement structured outputs for post-processing providers (#706)
* feat: implement structured outputs for Cerebras, OpenRouter, OpenAI, and Apple Intelligence

- Add structured output support with JSON schema in llm_client.rs
- Update actions.rs to use system prompt + user content approach
- Remove legacy ${output} variable substitution for supported providers
- Update Apple Intelligence Swift code to accept system prompts
- All providers now use consistent structured output format
- Remove duplicate check_apple_intelligence_availability function

* wip changes

* fix(structured-outputs): address PR #706 review comments

- Add settings migration to sync supports_structured_output field for existing providers
- Fix fallback behavior: structured output failures now fall through to legacy mode
- Clone api_key to prevent ownership issues in fallback path
- Clean up build_system_prompt(): remove  placeholder entirely
  (instead of replacing with 'the user's message' which reads awkwardly)
- Add warn import from log crate

* refactor(structured-outputs): apply best practice improvements

- Optimize settings migration: use single match instead of double iteration
- Add TRANSCRIPTION_FIELD constant to replace magic strings
- Keep Apple Intelligence behavior unchanged (no API fallback for privacy)

Addresses code review feedback on PR #706:
1. More efficient provider lookup in ensure_post_process_defaults()
2. Eliminates hardcoded 'transcription' string in JSON parsing
3. Maintains privacy-first approach for Apple Intelligence

* fix groq output

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2026-02-17 12:14:00 +08:00
johnpyp
7fdde63460
fix: transcription lock-up race condition & add small debounce (#824)
* fix: add TranscriptionState to prevent race conditions & add debounce

* refactor(transcription): replace state machine with actor coordinator

* some cleanup

* format

* minor cleanup

* format

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2026-02-16 22:18:50 +08:00
Anton Sotkov
82d5c759ad
Add “Processing…” overlay state when post-processing (#740)
* feat: add “Processing…” overlay state

* format

* missing translations

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2026-02-09 10:36:00 +08:00
Sam
462b03b024
feat: add optional hotkey for post-processing request (#355)
* feat: add post-processing hotkey

* rewrite

* bring back toggle

* Make sure the toggle on and off propagates for the key binding.

* rename for clarity

* cleanup

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2026-02-06 16:28:14 +08:00
CJ Pais
c45df96065
Fixed post-processing for chinese (#628) 2026-01-20 10:14:38 +08:00
CJ Pais
cc129e9105
fix zero width #500 (#627) 2026-01-20 10:14:01 +08:00
Sami Ansari
ae9c33e0c7
Fix race condition when toggling transcription via SIGUSR2 (#560)
* Fix race condition when toggling transcription via SIGUSR2

The toggle state was being set to false immediately when stop was called,
but the actual transcription runs asynchronously. If another signal arrived
before transcription completed, a new recording could start while the old
transcription was still running, causing the old text to paste unexpectedly.

Now the toggle state stays true until the async transcription task completes.

* remove import

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2026-01-10 11:38:58 +08:00
Dmitry Gordin
5c5e428e06
fix: replace async-openai library with post request (#480)
* fix: replace async-openai library with post request to support custom providers

* move models call to llm_client too

* tweak post processing ui and add groq and cerebras

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-12-27 11:21:27 +07:00
Chirag Agggarwal
bfecade869
Apple intel integration (#391)
* feat: add Apple Intelligence post-processing provider

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>

* feat: guide apple intelligence output

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>

* fix(build): add fallback stub for Apple Intelligence on older SDKs

- Checks if 'FoundationModels.framework' is present in the macOS SDK.
- If missing, compiles a stub Swift file that returns 'unavailable' errors instead of failing the build.
- Prevents build errors on older Xcode versions (or macOS versions < 26.0) where the macros are not supported.

* fix(ui): hide Apple Intelligence option when unavailable

- Checks for runtime availability of Apple Intelligence (via 'check_apple_intelligence_availability') in 'settings.rs'.
- Only adds the Apple Intelligence provider to the default settings if it is actually available on the device.
- Ensures the option does not appear in the UI for unsupported Macs (e.g., Intel or older macOS versions), even if the app was built with support enabled.

* move some files around as well as some ui text

* format

---------

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Co-authored-by: CJ Pais <cj@cjpais.com>
2025-12-09 21:04:24 +07:00
Jackson
381b8a8bfb
Add a cancel hotkey and configuration (#224)
* From scratch

* Cleanup

* Small fixes

* simplify

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-11-28 09:00:47 +07:00
CJ Pais
71d0eeed73 run format 2025-11-20 10:20:22 +07:00
figwood
ec3b06d5b2
feat: add conversion between Simplified and Traditional Chinese. (#356)
* feat: add conversion between Simplified and Traditional Chinese. If the selected language is Simplified or Traditional Chinese, it will convert the text to the selected variant(Simplified or Traditional) after been recognized, depends on opencc, if it is not installed, the conversion will skip.

* Adopting ferrous-opencc makes cross-platform packaging easier.
2025-11-19 20:31:44 +07:00
Maicon Moreira
c2672638c9
Improve audio feedback timing using real sound duration and trimmed WAV files (#349)
* feat: add sound duration retrieval for audio feedback

* Trim trailing silence from pop_start.wav and pop_stop.wav

* refactor: simplify sound file and base directory retrieval

* feat: only delay mute if audio feedback is enabled

* change the logic

* simplify new logic

* simplify get_sound_path and get_sound_base_dir, reorder functions

* add implicit blocking to playTestSound

* modify to my pref style

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-11-19 10:10:23 +07:00
CJ Pais
18536aa81e
Add file based debug logging (#347)
* add basic logging to handy

* 100kb of logs

* add open button to the ui for logs

* use log everywhere

* some minor cleanup

* finish debug logging
2025-11-17 12:55:24 +07:00
Maicon Moreira
25f4a564fd
Fix unstable mute implementation on Windows/Linux (#341)
* Fix unstable mute implementation on Windows/Linux

* add some delay before the mute so the audio feedback plays

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-11-17 09:40:47 +07:00
Luis Eduardo
f7380fa69a
feat: LLM based post-processing (#222)
* Add LLM post-processing feature with settings management and UI integration

* Refactor LLM post-processing settings and prompt selection logic

* Rename CLAUDE.md to more standard AGENTS.md

* Replace Open Router with OpenAI Compatible endpoints for post-processing

* Fix post processing settings api styles

* refactor or something

* simplify

* cleanup a bit?

* remove useless code

* minor improvements

* fix laggy textarea

* Store post-processing results in db

* fix text color

* new default prompt

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-11-05 18:29:03 -08:00
Jackson
a286fe5143
Add custom sound and control notif volume (#214)
* Add custom sound and control notif volume

* Modularize the picker and slider, consolidate the playback and loading

* Move custom sounds to advanced

* pairs of audio

* custom sound handling

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-10-16 09:08:27 -07:00
Jackson
83970b0f44
Load model in parallel (#181) 2025-10-08 16:44:55 -07:00
CJ Pais
7638f6b827
basic working history (#104) 2025-09-05 16:25:38 -07:00
CJ Pais
c0fc1ba817 some cleanup 2025-08-07 16:53:07 -07:00
CJ Pais
51105dde15 more wip but roughly is there 2025-08-01 14:15:02 -07:00
Vlad Gerasimov
7f9244c512 feat(tray): add transcribing state and update icons 2025-07-26 16:47:06 +04:00
CJ Pais
6ad9534ab7 activate the microphone on demand 2025-06-30 15:18:59 -07:00
CJ Pais
528bfc24e1 Different start and stop sounds. 2025-06-27 12:54:34 -07:00
CJ Pais
ab79f77747 sample rec sound 2025-06-27 12:54:29 -07:00
CJ Pais
ca97353f21 use enigo paste 2025-06-26 15:51:48 -07:00
CJ Pais
6e8128defd remove some debug logging, plus some general minor cleanup 2025-05-16 09:06:46 -07:00
CJ Pais
e7cdecf7f0 clean up code a bit 2025-05-14 17:22:37 -07:00
CJ Pais
4f6d5853b5 Don't try to paste blank text. 2025-05-13 13:31:24 -07:00
CJ Pais
cff0969b36 add Jon's feature. 2025-05-12 14:09:47 -07:00
CJ Pais
6183c87aee who knows 2025-05-09 16:07:36 -07:00
CJ Pais
f8c5875fa8 refactored actions. 2025-05-09 12:12:44 -07:00