Repository navigation
Conversation
Model provider for Thai, English, and Mandarin text to speech (Paxa TTS Flash v2 and Paxa TTS Flash) and speech to text (Paxa STT Lite, research preview). Source: https://github.com/paxalabs/dify-plugin-paxa Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Plugin Submission
Plugin information
Submission type
What changed
This adds Paxa Labs as a model provider for text to speech and speech to text. I'm one of the founders of Paxa Labs, so this is our own plugin for our own API.
Why it's needed: I couldn't find a Thai-focused speech provider in the Marketplace. We build our models in Thailand for Thai, English, and Mandarin Chinese, and every Paxa TTS Flash v2 voice speaks all three, including sentences that mix them. That mix is common in Thai support and business content.
What's in the package:
paxa-tts-flash-v2, the default: 50 voices, reads direction tags such as[whispering]) and Paxa TTS Flash (paxa-tts-flash-v1: 34 single-language voices, including Isan, Northern, and Southern Thai accents). Audio streams as MP3 fromPOST /v1/tts. Text over the 5,000-character request limit is split at sentence ends and sent as consecutive requests.GET /v1/voices, no key), so new voices show up without a plugin update. A bundled copy in the model YAML covers the screens that read voices from the model schema, and stands in if the catalog can't be reached.paxa-stt-lite-v1-preview). It's a research preview, and the README says so.GET /v1/me, which costs no credits.Risk level
Required checks
.envfiles,.gitdirectories, virtual environments, caches, logs, or IDE files.PRIVACY.mdor a hosted privacy policy, andmanifest.yamlreferences it.Security and privacy notes
https://api.paxalabs.com, over HTTPS, with the workspace's Paxa API key in theAuthorizationheader. Requests also carry anx-paxa-clientheader with the plugin name and version, and no user identifiers. There's no user-configurable URL, and the manifest declares the host undernetwork.domains.Local validation
uv run pytest: 67 passed. The unit tests use mocked API responses (respx) and cover the TTS and STT request shapes, error mapping, the voice list and its fallback, text splitting, and credential checks.uv run ruff check .anduv run ruff format --check .: clean.dify plugin package(CLI v0.6.12) on a clean export of the source at003d036: 18 runtime files, each byte-identical to that commit. SHA-256cbaa0b780edf3c18fcce1c95cbcfe93a21a86624290fa8d8cb50b641253b8751.validate-difypkg.pywith this PR body: 0 blocking findings. The warnings are the declared domainapi.paxalabs.com, no known vulnerabilities indify_plugin==0.10.2, and two Python-safety notes on the lines that pass the API key to our HTTP client, which only puts it in theAuthorizationheader.check-pr-body,check-pr-review-notes,check-version-update): passed.uploader --test): packaged; the scan found 1 domain, 0 undeclared, and 0 sensitive-capability categories.test-plugin-install.pyin a clean Python 3.12 venv with onlyrequirements.txtinstalled: success.dify plugin run(the daemon's local runtime): the plugin loads, lists voices from the live catalog (50 on v2, 34 on v1), and maps a rejected key to Dify's credential and authorization errors on all three calls.Reviewer notes