Skip to main content

Token and Cost Tracking

Access usage metrics via properties:
import asyncio
from upsonic import Agent, Chat


async def main():
    agent = Agent("openai/gpt-4o")
    chat = Chat(session_id="session1", user_id="user1", agent=agent)

    await chat.invoke("Hello")
    await chat.invoke("How are you?")

    print(f"Total cost: ${chat.total_cost:.4f}")
    print(f"Input tokens: {chat.input_tokens}")
    print(f"Output tokens: {chat.output_tokens}")
    print(f"Total tokens: {chat.total_tokens}")
    print(f"Total requests: {chat.total_requests}")


if __name__ == "__main__":
    asyncio.run(main())

Session Metrics

Get comprehensive metrics via get_session_metrics():
import asyncio
from upsonic import Agent, Chat


async def main():
    agent = Agent("openai/gpt-4o")
    chat = Chat(session_id="session1", user_id="user1", agent=agent)

    await chat.invoke("Hello")

    metrics = chat.get_session_metrics()
    print(f"Duration: {metrics.duration:.1f}s")
    print(f"Messages: {metrics.message_count}")
    print(f"Total cost: ${metrics.total_cost:.4f}")
    print(f"Avg response time: {metrics.average_response_time:.2f}s")


if __name__ == "__main__":
    asyncio.run(main())

Session Summary

Get a human-readable summary:
import asyncio
from upsonic import Agent, Chat


async def main():
    agent = Agent("openai/gpt-4o")
    chat = Chat(session_id="session1", user_id="user1", agent=agent)

    await chat.invoke("Hello")
    await chat.invoke("How are you?")

    summary = chat.get_session_summary()
    print(summary)


if __name__ == "__main__":
    asyncio.run(main())

Run Usage Object

Access the full usage object:
import asyncio
from upsonic import Agent, Chat


async def main():
    agent = Agent("openai/gpt-4o")
    chat = Chat(session_id="session1", user_id="user1", agent=agent)

    await chat.invoke("Hello")

    usage = chat.get_usage()
    if usage:
        print(f"Input tokens: {usage.input_tokens}")
        print(f"Output tokens: {usage.output_tokens}")
        print(f"Cost: ${usage.cost:.4f}")


if __name__ == "__main__":
    asyncio.run(main())