dsh-dafeiyu-emotion: Equipping DSH with a fish ear that understands tone

Introduction

Let’s start with the background. In the DSH ecosystem, plugins are the primary way to extend functionality; “everything is a plugin.” Almost every interaction you might want to modify has likely already been done by someone else. A common minor frustration for agent developers is that while the instructions might be comprehensive, the tone often falls flat. The same sentence—‘change this here, but don’t touch that error yet’—looks identical to a model whether you are frustrated or excited, resulting in uniform reply styles. To get the model to respond to your current state, there is no stable entry point, and manually describing it step-by-step feels too fake.

lidu-china/dsh-dafeiyu-emotion is designed to address this issue. It is a modest little plugin in the community directory: maintained by LiDu-china, categorized under “Model Inference,” with two stars on GitHub. The English description in the repository reads: “Voice + emotion-aware companion for DeepSeek Harness.” Below, we’ll discuss its specific implementation.

What Is This

This is a voice and emotion plugin for DeepSeek Harness. The author positions it as an explainable emotion estimator rather than a “mind-reading” tool: it performs speech-to-text transcription combined with acoustic/text-based emotion estimation, then uses the estimated results as a reference for the reply style.

It adds a “🐋 Fish Ear” button next to the DSH input box. The process is as follows:

  1. Click the Fish Ear and speak a sentence;
  2. The plugin completes speech-to-text transcription locally;
  3. Browser-side calculation of prosodic features (speaking rate, pauses, fundamental frequency, pitch fluctuation, energy), followed by server-side fusion of a small Chinese/English emotion vocabulary;
  4. Filling the “user’s original words + emotional context” into the current session and automatically sending it;
  5. The response model first adapts to the emotion before answering the question, while the desktop Big Fat Fish continues to display its working status.

The author explicitly emphasizes that the plugin only adds a bounded emotional context, requiring the model to “naturally adapt, do not repeat the analysis, and do not claim to read minds.”

Core Features

Capabilities are viewed in two parts: emotion output and injection method.

Regarding emotion output, the plugin provides seven categories of tags—joy, sadness, anger, nervousness, surprise, annoyance, and calmness—along with confidence, valence, arousal, and a tone summary. The emotion timeline for multiple audio segments is also visible; each segment’s text, emotion, and confidence can be viewed by hovering.

Regarding the injection method, by default, the prompt with emotional context is filled into the composer and sent automatically, with the reply appearing directly in the conversation. The failure path is also handled: if emotion analysis fails, the plugin will retain a clear error message and will not pretend success.

Other verified capability points:

  • The settings page registers a complete card allowing adjustment of the enable toggle, language, enhanced backend, timeout, and recording limits, with the current mode displayed in real-time at the top of the card;
  • The settings page features a privacy and runtime status panel, showing the size of recent audio, model loading status, worker PID, and temporary file cleanup;
  • A local /context interface is provided, allowing other plugins to read the most recent emotional context;
  • Supports DSH native voice shortcuts;
  • After installing Better Sidebar, the “Emotion Ear” can be pinned to the right sidebar;
  • The Big Fat Fish desktop character relies on dsh-dafeiyu (0.1.23) for companion capabilities, while this plugin handles the “Auditory and Emotional” half.

Two Analysis Modes

The lightweight mode is the default, intended for installation via the plugin market:

  • Uses DSH’s built-in Voice Input / SenseVoice for transcription;
  • Browser-side calculation of prosodic features, server-side fusion of a small Chinese/English emotion vocabulary;
  • No need for Python, GPU, or extra model paths.

The enhanced mode is optional, intended for those who already have a local “Speech-to-Text” / VoiceSense project: point backendRoot to the project’s root directory. Transcription uses SenseVoice, acoustic emotion uses emotion2vec, and fusion is done via BERT + dictionary + prosody to output more granular sentence-by-sentence emotion and timelines. The plugin does not re-download models or modify the VoiceSense project; it simply starts a persistent worker to reuse the existing environment.

Installation and Activation

The plugin is listed on 1024Store (an independent site with no official affiliation with DeepSeek / Hypothesis), and can also be searched for by package name in the DSH plugin market / Discover.

The simplest way is via npm:

dsh plugin --profile desktop add dsh-dafeiyu-emotion

DSH Web uses --profile web.

You can also use the GitHub source:

dsh plugin --profile desktop add github:LiDu-china/dsh-dafeiyu-emotion

Or download the Release tarball and install using a local path. Current package version 0.3.2:

curl -L -o dsh-dafeiyu-emotion-0.3.2.tgz \
  https://github.com/LiDu-china/dsh-dafeiyu-emotion/releases/download/v0.3.2/dsh-dafeiyu-emotion-0.3.2.tgz
dsh plugin --profile desktop add "D:/path/to/dsh-dafeiyu-emotion-0.3.2.tgz"

DSH Desktop’s profile is managed by the Electron application; for command-line installation, please use the dsh command included with the desktop app.

After installation, first enable dsh-dafeiyu-emotion. For lightweight mode, one more step is required: open “Plugins” on the left side of DSH, find Voice Input, enable it, and then go to details to download or prepare the SenseVoice model. If Voice Input is not yet ready, the plugin will prompt directly and will not silently downgrade or upload audio.

Typical Usage

The typical usage for lightweight mode is just a button. Open any regular session, click the “🐋 Fish Ear” next to the input box, and speak a sentence; the plugin completes local transcription and emotion estimation, filling the prompt with emotional context into the composer and sending it automatically. ttsOnlyAfterVoice is default true, meaning only replies within two minutes of recording will be read aloud; Big Fat Fish will not interrupt in pure text conversations.

The enhanced mode only adds one configuration step: in the DSH profile configuration overlay, point backendRoot to the VoiceSense project root directory:

- id: dsh-dafeiyu-emotion
  config:
    backendRoot: D:/path/to/voice-sense

You can also use an environment variable:

DSH_DAFEIYU_EMOTION_BACKEND=D:/path/to/voice-sense

There are many configurable fields; here are a few relevant to daily use, with a full table in the repository README:

Field Default Value Description
backendRoot Empty VoiceSense project root directory; empty uses DSH Voice Input lightweight mode
pythonPath Empty Custom Python; empty auto-finds .venv-ser
language zh zh / en / auto
empathyStyle gentle gentle / direct / humorous / concise
ttsEnabled true Whether to read out Big Fat Fish’s reply
ttsEngine piper piper local / edge online / browser system voice
ttsVoice zh-CN-XiaoyiNeural Edge TTS voice
maxAudioBytes 12 MB Single recording size limit
startupTimeoutMs 180000 Maximum wait time for enhanced backend to load first time
requestTimeoutMs 180000 Single analysis request timeout

After saving, the configuration is written immediately to DSH settings, and the voice worker is automatically restarted when paths or timeouts change.

Big Fat Fish Voice Reply

After the assistant’s reply is generated, the plugin passes the text to TTS via the local event stream, allowing Big Fat Fish to read out the reply. The default is the Piper local model with voice zh_CN-huayan-medium, offline with low latency:

python -m pip install piper-tts

Place the model in the default directory:

~/.dsh/dafeiyu-emotion/tts/piper/zh_CN-huayan-medium.onnx
~/.dsh/dafeiyu-emotion/tts/piper/zh_CN-huayan-medium.onnx.json

You can also fill in a custom Piper model path in the settings page. If the model is missing or synthesis fails, it automatically falls back to browser speechSynthesis, preventing silent loss of replies. For a more natural online voice, you can switch to Edge TTS with the default voice zh-CN-XiaoyiNeural; Edge requires a network, and the reply text is sent to Microsoft. When the network or service is unavailable, it also falls back to browser voice.

Voice Shortcuts

The plugin registers a native shortcut command with DSH. You can remap the key by going to “Settings → Shortcuts → Search for ‘Big Fat Fish Voice’”. Default values:

Client Default Shortcut
DSH Desktop (Windows / Linux / macOS) Alt+V
DSH Web (Windows) Ctrl+Alt+V
DSH Web (macOS) Cmd+Option+V
DSH Web (Linux) Default unbound, needs to be specified in shortcut settings

Press once when idle to start recording, press once again while recording to end and analyze. The shortcut must contain at least one modifier key like Ctrl, Alt, Shift, or Cmd, and cannot bind to a bare letter key.

Privacy and Notes

Disk and privacy constraints are well-implemented. Audio does not go into Session events or attachments; only the final text and emotion summary enter the conversation. WAV files during analysis go to the system temporary directory and are deleted immediately after the request ends. Default is fully local: no screen reading, no persistent microphone listening, recording only starts after clicking the Fish Ear; client-side recording limit is 30 seconds. The plugin does not automatically execute commands in the voice, nor does it treat emotion prediction as a medical or psychological diagnosis.

When choosing a TTS engine, note this boundary: after switching ttsEngine to edge, the reply text is not local and is sent to Microsoft for voice synthesis. Confirm if this is acceptable before switching.

Other points to note:

  • The first startup of the enhanced mode requires loading SenseVoice, BERT text models, and emotion2vec, usually taking a dozen to a few dozen seconds; after that, the worker is persistent, and hot requests are usually within one second;
  • This plugin’s code is MIT-licensed; the desktop character and basic companion capabilities come from dsh-dafeiyu, voice recognition from SenseVoice, and acoustic emotion from emotion2vec, all used under their respective licenses. The author declares this project is not an official DeepSeek project;
  • The plugin runs with the permissions of the current DSH process. Before installation, it is recommended to review the source code and license to confirm the accessibility of directories, audio paths, and dependencies in your environment;
  • If emotion judgment is inaccurate, the author suggests getting closer to the microphone, reducing environmental noise, speaking only one or two sentences at a time, trying to use complete natural sentences, and treating it as a reference for reply style rather than mind reading or diagnosis.

Conclusion

If you want to add sound and emotional cues to DSH’s input but cannot accept audio being sent to the cloud, this plugin is worth trying. The lightweight mode has the lowest barrier to entry, requiring only the enabling of DSH’s built-in Voice Input, without the need for Python, GPU, or extra model paths. The trade-off is that acoustic estimation is only at a basic level; for fine-grained sentence-by-sentence emotion and timelines, you need to use the enhanced mode, which requires you to have a working VoiceSense environment first. Before turning on enhanced mode, read the README and source code.

  • Directory Page: https://www.skillhub.cn/plugins/LiDu-china/dsh-dafeiyu-emotion
  • GitHub: https://github.com/LiDu-china/dsh-dafeiyu-emotion
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye