Introduction

You can integrate Athina Tracing into your LLM applications with the Athina Python SDK using the observe decorator.

Example

import os
import openai
from athina_logger.tracing.decorators import observe
from athina_logger.api_key import AthinaApiKey
AthinaApiKey.set_api_key(os.getenv("ATHINA_API_KEY"))

@observe.trace(name="main_process")
async def process_user_request(user_query: str):
    processed_user_query = await preprocess(query=user_query)
    chunked_user_query = await chunking(processed_user_query)
    response = await generate_response(chunked_user_query)
    return response

@observe.span(name="preprocess")
async def preprocess(query: str):
    return query.strip().lower()

@observe.span(name="chunking")
async def chunking(query: str):
    observe.update_current_span(
        attributes={
            "query_length": len(query),
        }
    )
    return query[:35]

@observe.generation(name="generate_response")
async def generate_response(query: str):
    model = "gpt-4o-mini"
    messages = [
        {"role": "system", "content": "You are a helpful assistant. Answer in a single sentence."},
        {"role": "user", "content": query}
    ]
    response = openai.chat.completions.create(
        model=model,
        max_tokens=100,
        messages=messages,
    )
    observe.update_current_span(
        attributes={
            "user_query": query,
            "prompt": messages,
            "language_model_id": model,
            "response": response.choices[0].message.content,
            "prompt_tokens": response.usage.prompt_tokens,
            "completion_tokens": response.usage.completion_tokens,
            "total_tokens": response.usage.total_tokens,
        }
    )
    return response.choices[0].message.content

async def main():
    response = await process_user_request("What is the capital city of Sweden? Please")
    print(response)

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

Trace in Athina UI

When logged to Athina, the trace will be visible in the Athina UI.

Introduction

You can integrate Athina Tracing into your LLM applications with the Athina Python SDK using the observe decorator.

Example

import os
import openai
from athina_logger.tracing.decorators import observe
from athina_logger.api_key import AthinaApiKey
AthinaApiKey.set_api_key(os.getenv("ATHINA_API_KEY"))

@observe.trace(name="main_process")
async def process_user_request(user_query: str):
    processed_user_query = await preprocess(query=user_query)
    chunked_user_query = await chunking(processed_user_query)
    response = await generate_response(chunked_user_query)
    return response

@observe.span(name="preprocess")
async def preprocess(query: str):
    return query.strip().lower()

@observe.span(name="chunking")
async def chunking(query: str):
    observe.update_current_span(
        attributes={
            "query_length": len(query),
        }
    )
    return query[:35]

@observe.generation(name="generate_response")
async def generate_response(query: str):
    model = "gpt-4o-mini"
    messages = [
        {"role": "system", "content": "You are a helpful assistant. Answer in a single sentence."},
        {"role": "user", "content": query}
    ]
    response = openai.chat.completions.create(
        model=model,
        max_tokens=100,
        messages=messages,
    )
    observe.update_current_span(
        attributes={
            "user_query": query,
            "prompt": messages,
            "language_model_id": model,
            "response": response.choices[0].message.content,
            "prompt_tokens": response.usage.prompt_tokens,
            "completion_tokens": response.usage.completion_tokens,
            "total_tokens": response.usage.total_tokens,
        }
    )
    return response.choices[0].message.content

async def main():
    response = await process_user_request("What is the capital city of Sweden? Please")
    print(response)

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

Trace in Athina UI

When logged to Athina, the trace will be visible in the Athina UI.