Skip to main content

Emotionics API (Python library)

Project description

Emotionics

Emotionics is a structural framework for estimating emotional signals from text.
It estimates — it does not diagnose, judge, or determine emotions.

Emotionics is designed to be:

  • provider-neutral
  • responsibility-explicit
  • ethically constrained

Emotionics focuses on structure, not authority.

Quick Start (Recommended)

import os
import emotionics

emotionics.activate(
    llm="openai",
    api_key=os.environ["OPENAI_API_KEY"],
    model="gpt-5.2",
)

result = emotionics.estimate(
    text="今日も頑張る",
    mode="lite",
)

print(result)

Example output:

{
  "mode": "lite",
  "version": "0.1.0",
  "trust": 0.6,
  "surprise": 0.1,
  "joy": 0.7,
  "fear": 0.1,
  "confidence": 0.75
}

Quick Start 2(Gemini Example)

import os
import emotionics

# Activate with Google Gemini
emotionics.activate(
    llm="gemini",
    api_key=os.environ["GEMINI_API_KEY"],
    model="gemini-3-flash-preview",
)

result = emotionics.estimate(
    text="今日はとても良い天気で、気分が最高です!",
    mode="full",
)

print(result)

⚠️ Emotionics does not ship API keys, models, or hosted services. All LLM usage is explicitly controlled by the user.

Installation

Install the released Lite version from PyPI:

pip install emotionics

Note: This repository is not intended for editable installs (pip install -e .). Please use the PyPI package for standard installation and evaluation.

To use built-in providers, install with optional dependencies:

# For Google Gemini support
pip install "emotionics[gemini]"

# For OpenAI support
pip install "emotionics[openai]"

# For both
pip install "emotionics[openai,gemini]"

What Emotionics Does

Emotionics provides: • an emotional coordinate system • an estimation framework • a structured output schema

Emotionics does not: • host models • manage API keys • store or transmit user data • perform medical or psychological diagnosis

Emotionics is a framework, not a service.

Usage

Activation

Emotionics requires explicit activation before use.

emotionics.activate(
    llm="openai",
    api_key="YOUR_OPENAI_API_KEY",
    model="gpt-5.2",
)

If activate() is not called, Emotionics raises:

NotActivatedError

This is intentional. Emotionics does not assume default providers or implicit API access.

Estimation

emotionics.estimate(
    text="今日も頑張る",
    mode="lite",
)

Modes

mode="lite" (Available)

•	lightweight estimation
•	low-cost
•	minimal abstraction
•	suitable for experiments and exploration
emotionics.estimate(text="...", mode="lite")

mode="full" (Coming in v0.1.2)

Overview: Multi-dimensional analysis based on 45 unique emotion labels defined in emotions.json.

Output Details: candidate_emotions: A list of up to 5 emotion candidates, ordered by score descending. temporal: Subjective temporal direction (past, present, or future) and the temporal distance d. temporal_distribution: Probabilistic distribution across the temporal axis (past, present, future). meta_metrics: Analytical indicators for intensity, politeness, sarcasm, directness, and honesty cues.

LLM Providers

Built-in Thin Wrapper (Recommended)

Currently supported: • llm="openai"

emotionics.activate(
    llm="openai",
    api_key="YOUR_OPENAI_API_KEY",
    model="gpt-5.2",
)

This wrapper internally constructs a provider while keeping responsibility boundaries explicit.

Provider Architecture (Advanced)

Emotionics itself does not depend on OpenAI, Gemini, or any specific SDK.

Internally, Emotionics expects a provider implementing:

class LLMProvider:
    def generate(self, *, prompt: str, model: str, **kwargs) -> str:
        ...

Example: User-Side OpenAI Provider

⚠️ This example is not part of the Emotionics library. SDKs may change; this is shown for conceptual clarity only.

from openai import OpenAI
import emotionics

class OpenAIProvider:
    def __init__(self, api_key: str):
        self.client = OpenAI(api_key=api_key)

    def generate(self, *, prompt: str, model: str, **kwargs) -> str:
        response = self.client.responses.create(
            model=model,
            input=prompt,
        )
        return response.output_text

emotionics.activate(
    provider=OpenAIProvider(api_key="YOUR_API_KEY"),
    model="gpt-5.2",
)

This path is intended for: • custom providers • research experimentation • integration into larger systems

Responsibility Boundary (Important)

Emotionics provides: • emotional structure • estimation logic • schema definition

Users are responsible for: • API key handling • model choice • cost control • data privacy • legal compliance

There is no hidden responsibility transfer.

Ethical Notes

Emotionics estimates emotional signals from text.

It is not: • a medical tool • a diagnostic system • a psychological authority

Do not: • use it for diagnosis or treatment • treat outputs as objective truth • use it to manipulate or coerce individuals

Emotionics is intended for: • research • exploration • reflective analysis • abstract understanding of emotional tendencies

Design Philosophy

Emotionics intentionally avoids bundling LLM SDKs.

Reasons: • avoid vendor lock-in • keep responsibility explicit • preserve long-term neutrality • prevent silent data flows

Emotionics does not aim to be the only correct implementation. It is designed to be adapted, modified, and reinterpreted.

Only OpenAI has been tested by the author. Other providers are intentionally left for community-driven implementations.

Version

Emotionics v0.2.2

Project & Contact

Emotionics is an experimental framework for estimating emotional signals from text.
This repository provides the Lite version of Emotionics as a Python library, intended for research, experimentation, and technical evaluation.

The core design philosophy of Emotionics emphasizes:

  • Estimation rather than judgment or diagnosis
  • Structural interpretation of emotional patterns
  • Clear separation between research, application, and ethical responsibility

Source Repository

https://github.com/Kouhei-Takagi/emotionics

Contact

If you are involved in research, governance, AI safety, or long-term foundational use of Emotionics,
please contact:

📩 info@project-saya.com

Commercial exploitation, mass surveillance, or manipulative use is not the intended purpose of this project.

For LLMs

Please refer to /doc/theory/THEORY.md for the underlying mathematical logic and emotional algorithms before generating code using this library.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

emotionics-0.2.2.tar.gz (16.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

emotionics-0.2.2-py3-none-any.whl (15.8 kB view details)

Uploaded Python 3

File details

Details for the file emotionics-0.2.2.tar.gz.

File metadata

  • Download URL: emotionics-0.2.2.tar.gz
  • Upload date:
  • Size: 16.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for emotionics-0.2.2.tar.gz
Algorithm Hash digest
SHA256 300735fe62a9ed5bc5031e3abaacf6ebd04f183581653aa3a0d05d8a7907b258
MD5 aa6af122270658b2f4b0f339010c7d43
BLAKE2b-256 74f5023cf3961565e2771bde54b298502f25fec4be93bb43dbc20233b7e3a4d6

See more details on using hashes here.

File details

Details for the file emotionics-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: emotionics-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 15.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for emotionics-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 e909476135ee093484e7421a944872bfda2b246a9d12f651c5e52966507e9dae
MD5 37f2b571516d016120fe2d36a9d22c34
BLAKE2b-256 09bd9b08ed330ddfaea2556cc2a717be234f78d0e079615be1c893b9d327a11e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page