Skip to main content

Infra for AI Companions

Project description

Emotion Machine Python SDK

Official Python helper for the Emotion Machine Companion API. It wraps the /v1 endpoints documented in docs/client-companion-api-plan.md so you can provision companions, ingest knowledge, and chat/stream with them in just a few lines of code.

Installation

pip install emotion-machine

The client depends on httpx and targets Python 3.9+.

Quickstart

  1. Export your project API key (project-scoped):

    export EM_API_KEY="emk_prod_...."
    export EM_API_BASE_URL="https://api.emotionmachine.ai"  # or http://localhost:8100 for local dev
    
  2. Bootstrap a companion, ingest curated knowledge, and chat:

    from emotion_machine import EmotionMachine
    
    client = EmotionMachine()  # reads EM_API_KEY / EM_API_BASE_URL
    
    # Create a fresh companion
    companion = client.create_companion(
        name="Luteal Support Coach",
        description="Helps users track luteal phase cravings",
        config={
            "system_prompt": {
                "full_system_prompt": "You are an encouraging health coach."
            }
        },
    )
    companion_id = companion["id"]
    
    # Optionally shape the profile schema for per-user traits
    client.upsert_profile_schema(
        companion_id,
        schema={
            "type": "object",
            "properties": {
                "craving_intensity": {"type": "integer", "minimum": 0, "maximum": 5}
            },
        },
    )
    
    # Ingest curated luteal-phase knowledge via the built-in key
    job = client.ingest_knowledge(
        companion_id,
        payload_type="json",
        key="pm1_luteal_data_v1",
    )
    job_result = client.wait_for_job(job["id"], timeout=20)
    assert job_result["status"] == "succeeded", job_result
    
    # Run a synchronous chat completion
    completion = client.chat_completion(
        companion_id,
        message="Hi! I'm feeling intense salt cravings today, what should I know?",
        external_user_id="user-123",
    )
    print(completion["choices"][0]["message"]["content"])
    
    # Stream responses (Server-Sent Events) and collect message chunks
    stream = client.chat_stream(
        companion_id,
        message="Can you summarise key luteal phase symptoms?",
        external_user_id="user-123",
    )
    for event in stream:
        if event["event"] == "delta":
            chunk = event["data"]["choices"][0]["delta"].get("content", "")
            if chunk:
                print(chunk, end="", flush=True)
        elif event["event"] == "done":
             conversation_id = event["data"]["conversation_id"]
    
    # Retrieve the full conversation transcript
    transcript = client.get_conversation(conversation_id)
    for message in transcript["messages"]:
        print(f"{message['role']}: {message['content']}")
    
  3. Tidy up when finished:

    client.close()
    

    or use with EmotionMachine() as client: to auto-close the HTTP session.

API Coverage

Resource Method SDK helper
Companions GET /v1/companions client.list_companions()
POST /v1/companions client.create_companion(...)
GET /v1/companions/{id} client.get_companion(id)
PATCH /v1/companions/{id} client.update_companion(...)
Profile Schema PUT /v1/companions/{id}/profile-schema client.upsert_profile_schema(...)
GET /v1/companions/{id}/profile-schema client.get_profile_schema(...)
Knowledge POST /v1/companions/{id}/knowledge client.ingest_knowledge(...)
GET /v1/knowledge-jobs/{job_id} client.knowledge.get_job(job_id)
Chat POST /v1/companions/{id}/chat client.chat_completion(...)
Chat (stream) POST /v1/companions/{id}/chat/stream client.chat_stream(...)
Conversations GET /v1/conversations/{conversation_id} client.get_conversation(...)

All helpers raise emotion_machine.APIError on non-success HTTP codes. Inspect e.status_code and e.payload for diagnostics.

Development

cd packages/pip-emotion-machine
pip install -e .[dev]

The package ships from src/emotion_machine. Update pyproject.toml to bump versions.

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

emotion_machine-0.0.4.tar.gz (7.7 MB view details)

Uploaded Source

Built Distribution

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

emotion_machine-0.0.4-py3-none-any.whl (9.0 kB view details)

Uploaded Python 3

File details

Details for the file emotion_machine-0.0.4.tar.gz.

File metadata

  • Download URL: emotion_machine-0.0.4.tar.gz
  • Upload date:
  • Size: 7.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.5.21

File hashes

Hashes for emotion_machine-0.0.4.tar.gz
Algorithm Hash digest
SHA256 b9f517756d120c682dca09734e008a0cec355f8223370a17a09e52dc5505f800
MD5 b50bf6a8c4f72f0e58b2d23d2f1ca6cf
BLAKE2b-256 22427e84a1bd75a7569c51e7d380425dc05e83e40c447ff7488feea9751ea104

See more details on using hashes here.

File details

Details for the file emotion_machine-0.0.4-py3-none-any.whl.

File metadata

File hashes

Hashes for emotion_machine-0.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 f8b730c03b1fabc0f76222536a1d59cf13441ea1798aa5796924f788355c9a9d
MD5 afd523442de84d7de930cee9d83b4b43
BLAKE2b-256 58338b536493e526a47ea2cd7e9f900edcfe89f3d5fd98b75551e3f3f2742622

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