Skip to main content

Fixie.ai SDK for Python. Enables you to build AI-powered voice applications.

Project description

fixie-sdk-python

Fixie SDK for Python

Quickstart

pip install fixie

Create voice_example.py

Create a file named voice_example.py with the following content:

import argparse
import asyncio
import logging
import signal
import sys

from fixie_sdk.voice import audio_local
from fixie_sdk.voice import types
from fixie_sdk.voice.session import VoiceSession
from fixie_sdk.voice.session import VoiceSessionParams


async def main():
    # Get the default microphone and audio output device.
    source = audio_local.LocalAudioSource()
    sink = audio_local.LocalAudioSink()

    # Set up the voice session parameters.
    params = VoiceSessionParams(
        agent_id=args.agent,
        tts_voice=args.tts_voice,
    )

    # Create the client for the voice session.
    client = VoiceSession(source, sink, params)

    # Set up an event loop for the voice session.
    done = asyncio.Event()
    loop = asyncio.get_event_loop()

    # Set up the event handlers for the voice session.
    @client.on("state")
    async def on_state(state):
        logging.info(f"[session] state: {state.value}")
        if state == types.SessionState.LISTENING:
            print("User:  ", end="\r")
        elif state == types.SessionState.THINKING:
            print("Agent:  ", end="\r")

    @client.on("input")
    async def on_input(text, final):
        print("User:  " + text, end="\n" if final else "\r")

    @client.on("output")
    async def on_output(text, final):
        print("Agent: " + text, end="\n" if final else "\r")

    @client.on("latency")
    async def on_latency(metric, value):
        logging.info(f"[session] latency: {metric.value}={value}")

    @client.on("error")
    async def on_error(error):
        print(f"Error: {error}")
        done.set()

    # Set up signal handlers for SIGINT (Ctrl-C) and SIGTERM (kill).
    loop.add_signal_handler(signal.SIGINT, lambda: done.set())
    loop.add_signal_handler(signal.SIGTERM, lambda: done.set())

    # Warm up the voice session by connecting to the server.
    await client.warmup()

    # Not just warming up...Start the voice session.
    if not args.warmup_only:
        await client.start()

    # Wait for the voice session to end.
    await done.wait()
    await client.stop()


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument(
        "--agent", "-a", type=str, default="dr-donut", help="Agent ID to talk to"
    )
    parser.add_argument("--tts-voice", "-tv", type=str, help="TTS voice ID to use")
    parser.add_argument(
        "--warmup-only", "-w", action="store_true", help="Only connect to the server"
    )
    args = parser.parse_args()

    asyncio.run(main())

Run the Example

python voice_example.py

Installing & Running from Source

  1. Install
poetry install
  1. Run included voice example
poetry run python examples/voice_example.py

Use Ctrl-C to terminate the program.

The example program will use the default microphone and output device (i.e. speaker) for your computer. These are set in this code:

# Get the default microphone and audio output device.
source = audio_local.LocalAudioSource()
sink = audio_local.LocalAudioSink()

You can find more information in the file voice/audio_local.py.

Using Your Own Agent

You can pass in the --agent (or -a) input parameter followed by a space and then the ID of your agent.

Using a Different Voice

Adding more voices is a WIP. For now you can use the default voice or can pick any of the voices that are defined here. Pass in the desired voiceID with the --tts-voice (-tv) parameter.

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

fixie-0.0.7.tar.gz (10.2 kB view details)

Uploaded Source

Built Distribution

fixie-0.0.7-py3-none-any.whl (14.4 kB view details)

Uploaded Python 3

File details

Details for the file fixie-0.0.7.tar.gz.

File metadata

  • Download URL: fixie-0.0.7.tar.gz
  • Upload date:
  • Size: 10.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.7.1 CPython/3.9.13 Darwin/23.2.0

File hashes

Hashes for fixie-0.0.7.tar.gz
Algorithm Hash digest
SHA256 df73954ae294fb42e9602de0502eb64e745514be99a097f72e368026f1812b5a
MD5 635ec5b43966582f6574b4af067eacd4
BLAKE2b-256 fbb439c13823cd59fb567c98b57beb09c4b8247843819431720f0073bf12fd9a

See more details on using hashes here.

File details

Details for the file fixie-0.0.7-py3-none-any.whl.

File metadata

  • Download URL: fixie-0.0.7-py3-none-any.whl
  • Upload date:
  • Size: 14.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.7.1 CPython/3.9.13 Darwin/23.2.0

File hashes

Hashes for fixie-0.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 a7877006a0178f16ad6106c6f134ab539e99545bb322961229556f742b9d3e89
MD5 542239aea2e7cfb8ece50c6a24dc651b
BLAKE2b-256 ffae9841ff186ea27aaeae990adec68e1d957d061c0bdc7e37f1520a2286f44c

See more details on using hashes here.

Supported by

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