Overview

This pseudocode demonstrates how to interact with Avaturn.Live API that manages sessions, allowing your backend to create sessions, control avatar speech within those sessions, and terminate sessions. The example uses httpx for asynchronous HTTP requests and pydantic for serialization.

Pseudocode

from pydantic import BaseModel
import httpx
import asyncio


class CreateSessionResponse(BaseModel):
    session_id: str
    token: str

    
class SessionSayResponse(BaseModel):
    task_id: str

    
class APIClient:
    def __init__(self, api_key: str, base_url: str = "https://api.avaturn.live") -> None:
        self.headers = {"Authorization": f"Bearer {api_key}"}
        self.base_url = base_url

    async def create_session(self) -> CreateSessionResponse:
        async with httpx.AsyncClient() as client:
            response = await client.post(f"{self.base_url}/api/v1/sessions", headers=self.headers)
            return CreateSessionResponse.model_validate(response.json())

    async def say(self, session_id: str, text: str) -> SessionSayResponse:
        async with httpx.AsyncClient() as client:
            response = await client.post(f"{self.base_url}/api/v1/sessions/{session_id}/tasks", json={"text": text}, headers=self.headers)
            return SessionSayResponse.model_validate(response.json())

    async def terminate_session(self, session_id: str) -> None:
        async with httpx.AsyncClient() as client:
            await client.delete(f"{self.base_url}/api/v1/sessions/{session_id}", headers=self.headers)


async def main() -> None:
    # Step 1: Create a session
    client = APIClient(api_key="your_api_key_here")
    session = await client.create_session()
    print(session.dict())
    
    # You can send session token to frontend for Web SDK use here

    # Step 2: Request avatar to say something (note that this code does not wait for the speech end)
    say_response = await client.say(session.session_id, "Hello, world!")
    print(say_response.dict())

    # Step 3: Terminate the session (after some time or condition)
    await asyncio.sleep(3)
    await client.terminate_session(session.session_id)
    print(f"Session {session.session_id} terminated.")


import asyncio
asyncio.run(main())