Session Tracking

Introduction

Session groups multiple traces together to represent a run, thread, conversation or user interactions. Session tracking allows session-level visualization, analytics and issue detection. It also enables detection of session outliers and other issues.

Integration

See Quick Start guide on how to install and configure Graphsignal tracer.

Python

Set a session identifier as session_id tag for every request, e.g. in a request handler. This will set a Python contextvar and will be picked up by all traces of the current context.

graphsignal.set_context_tag('session_id', my_session_id)

You can also set tags directly, when tracing manually:

with graphsignal.trace('generate', tags=dict(session_id=my_session_id)):
    ...
OpenAI (Python)

Set a session_id tag in request, call or run context.

graphsignal.set_context_tag('session_id', my_session_id)

Alternatively, a more reliable way to set session_id and other tags is passing tags in extra_headers argument as comma-separated key-value pairs.

client = OpenAI()
response = client.chat.completions.create(
    model="gpt-3.5-turbo", 
    messages=[{'role': 'user', 'content': 'Tell me a joke'}],
    extra_headers: {
        'Graphsignal-Tags': f'session_id={my_session_id}'
    })
LangChain (Python)

In case of automatic integration, set a session_id in request, call or run context.

graphsignal.set_context_tag('session_id', my_session_id)

Alternatively, a more reliable way to set session_id tag and other tags is passing tags dictionary to callback constructor.

from graphsignal.callbacks.langchain import GraphsignalCallbackHandler, GraphsignalAsyncCallbackHandler

chat = ChatOpenAI(
    callbacks=[GraphsignalCallbackHandler(tags=dict(session_id=my_session_id))])
CLI

If you are running a single process per session and added Graphsignal at command line, you can set the session_id tag in an environment variable.

env GRAPHSIGNAL_TAGS="session_id=123" python -m graphsignal <script>