Skip to main content

duplexjev

Jev-style typed decisions about speech with zero decode steps. Give it audio and one or more option groups (has the user finished? which filler? which intent? speaker gender?); every group comes back as a probability over its options from a single forward pass. Many groups about many calls share one pass, with exact prefix sharing.

Quick start, no GPU — eight default decisions about any clip through our trial API (DuplexJev-4B, rate-limited):

pip install duplexjev
duplexjev quick call.wav --api https://api.adventists.cn/duplexjev              # --lang zh for Chinese speech
from duplexjev import quick, Question
quick("call.wav", api="https://api.adventists.cn/duplexjev")                   # prints and returns the table
quick("call.wav", vllm="http://localhost:8000/v1",                              # your own `vllm serve adventists-ai/DuplexJev-4B`
      questions=[Question("product", "Which product is the user asking about?", ["phone", "laptop", "other"])])

duplexjev gateway --vllm http://localhost:8000/v1 serves the same web demo and HTTP API in front of your own vLLM server. Web demo: https://api.adventists.cn/duplexjev/

Connector checkpoints in PyTorch (one forward pass for many option groups and many clips):

pip install "duplexjev[speech]"      # add [all] for the HTTP server
from duplexjev import Decider, Question

d = Decider.from_pretrained("adventists-ai/DuplexJev-B-Gender-Qwen3-ASR-0.6B-Qwen3-32B", device="auto")
groups = [Question("turn", "Has the user finished the turn?", ["finished", "not finished"]),
          Question("gender", "What is the perceived gender of the speaker?", ["female", "male"])]

d.decide("call.wav", groups)
# {'turn': {'answer': 'finished', 'confidence': 0.97, 'probs': {...}}, 'gender': {...}}

# many clips: each option group names its clip(s) with audio=<id> | [ids] | "*"
d.decide_batch({"car1": "a.wav", "car2": "b.wav"},
               [Question("turn", "Has the user finished the turn?", ["finished", "not finished"], audio="*"),
                Question("gender", "Speaker gender", ["female", "male"], audio="car2")])
# {'car1': {'turn': ...}, 'car2': {'turn': ..., 'gender': ...}}

Ask in the language of the clip (Question(..., lang="zh") with Chinese options for Chinese speech): the DuplexJev connectors were trained with language-matched prompts. Released weights, results and licences: https://huggingface.co/adventists-ai. Local copies of the encoder and LLM: from_pretrained(..., text_model=..., audio_model=...), also offline.

Serve with tick batching: duplexjev serve --model <checkpoint> --tick-ms 160.

0.3.0: quick / duplexjev quick with a default table of eight decisions; clients for vLLM servers and the DuplexJev HTTP API that need no torch (torch moved to the speech extra); duplexjev gateway (web demo + API).

0.2.1: audio is padded to whole audio tokens at the end instead of the start (start padding cost up to 6 points on emotion); text_model / audio_model overrides work offline.

Project: https://github.com/adventists-ai/duplexjev · License: Apache-2.0

Metadata

Release files for duplexjev 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for duplexjev 0.3.0
File Size Uploaded
duplexjev-0.3.0.tar.gz 40.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for duplexjev 0.3.0
File Interpreter ABI Platform
duplexjev-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 77.4 kB

Release files / duplexjev-0.3.0.tar.gz

Download URL duplexjev-0.3.0.tar.gz
Size 40.7 kB
Tags Source
SHA-256 checksum
How to use checksums
6340385793288b7d66bc393dc147edc838d54bbdbcfeb8bc4bd7af34d2e7e38b
BLAKE2b-256 checksum
How to use checksums
d6c40d99c494918d90334af5165ff4236a625a4b253657db0e63561595c102c0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.12

Release files / duplexjev-0.3.0-py3-none-any.whl

Download URL duplexjev-0.3.0-py3-none-any.whl
Size 36.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a6aaa5f1ed4197c724d64f1be269e225a2cabad35c93be026cc977452e74bc6b
BLAKE2b-256 checksum
How to use checksums
ab7210c8454fbfa1d1fbeb2c580904678dc238edfb36042ec471dff2a1ffd61a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.12

Release history Release notifications | RSS feed

0.6.1

2 release files

0.6.0

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.1

2 release files

0.4.0

2 release files

This release

0.3.0 This release

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page