Small decisions. Interesting possibilities.Submit contentSubmit
Yanwai preview

Yanwai

Analyze chat emotion and context with Jev while keeping reply generation and sending under user control.

Added to Jevfast

How it uses Jev

Yanwai sends a current chat message and bounded prior context to Jev as a structured state. In the first round, Jev returns Choice distributions for scene, emotion, conversation progress, and applicable intent facts. When the first-round profile yields relevant reading cards or candidate actions, the app sends a second Jev request to review emotion and speech act and to select relevant readings or actions. Kotlin validates the returned option IDs and probability distributions, and the app displays emotion probabilities plus any supported interpretation or action. It can also run an emotion-only Choice request.

What Jev decides

Illustrative emotion Choice from the Jev analysis requestExample answers · not a recorded Jev response · Source ↗
Question 1 · emotion
YOUR APP
INSTRUCTION

Choose the main emotion expressed by the target message at the time it was sent, using related prior context and allowing an unclear result.

STATE

The source-defined connector-check example uses target message “这还差不多。” and two earlier messages: the other person asks whether the user forgot their weekend meal plan, and the user replies that they remember and will send the restaurant and time tomorrow. AnalysisState builds the target message, speaker, available timestamp and timezone metadata, bounded earlier context, and context-coverage fields from the AnalysisInput; this summary does not assert runtime-derived timestamps or metadata values.

JEV · CHOICE
  1. happy
  2. calm
  3. sad
  4. hurt
  5. annoyed
  6. relieved
  7. anxious
  8. confused
  9. tired
  10. unknown

App workflow

  1. Capture the target and prior messages

    The chat hook reads visible message rows and gathers earlier context. AnalysisState filters and bounds context, then adds speaker, message source, available time information, and coverage metadata to the state.

  2. Build the first Jev request

    JevProtocol sends scene, emotion, progress, and applicable intent questions together against that state. Each is a Choice with repository-defined option IDs and descriptions.

  3. Review the first answers

    Kotlin checks the returned answer type, choice ID, probability keys, and probability totals. It uses the profile to determine which reading cards or actions could apply.

  4. Run a conditional second round

    When candidates exist, JevProtocol asks Jev to review emotion and speech act, choose applicable readings and actions, and check each candidate action’s source-text prerequisite. If no candidate reading or action applies, the app uses the first-round result.

  5. Validate and display the result

    The app only accepts a selected action when its candidate remains permitted and its support check is affirmative. It renders emotion probabilities and any validated interpretation or suggestion in the message analysis card; display toggles affect presentation only.

Why it is interesting

The app treats emotional and conversational interpretations as bounded choices with probability distributions, not generated diagnoses. Its second round independently rechecks the first-pass labels and validates action prerequisites against the conversation, including suppressing advice that would continue after a refusal or request to pause.