> ## Documentation Index
> Fetch the complete documentation index at: https://docs.agnost.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Python Conversation SDK

> Track any AI interaction with begin() / end()

## Install

<CodeGroup>
  ```bash pip theme={null}
  pip install agnost
  ```

  ```bash uv theme={null}
  uv add agnost
  ```
</CodeGroup>

## Integrate

```python theme={null}
import agnost

agnost.init("your-org-id")
```

Get your org ID from [app.agnost.ai](https://app.agnost.ai).

<Note>
  Agnost receives the conversation text and metadata you send. Use pseudonymous user IDs and redact sensitive data before calling the SDK. See [Data Governance](/data-governance).
</Note>

## Track interactions

```python theme={null}
interaction = agnost.begin(user_id="u-123", agent_name="my-agent", input="...")
# ... your AI call ...
interaction.end(output="...")
```

Latency is auto-calculated. For errors:

```python theme={null}
interaction.end(output="Error: timeout", success=False)
```

For simple fire-and-forget cases:

```python theme={null}
agnost.track(user_id="u-123", input="...", output="...", agent_name="my-agent")
```

## Group into conversations

```python theme={null}
import uuid

conversation_id = str(uuid.uuid4())

agnost.track(user_id="u-123", input="Hello", output="Hi!", conversation_id=conversation_id)
agnost.track(user_id="u-123", input="Follow-up", output="Sure!", conversation_id=conversation_id)
```

## Identify users

```python theme={null}
agnost.identify("u-123", {"name": "Alice", "email": "alice@example.com", "plan": "pro"})
```

## Custom properties

```python theme={null}
interaction = agnost.begin(user_id="u-123", agent_name="my-agent", input="...")

# Set one at a time
interaction.set_property("model", "gpt-4")

# Or set many at once
interaction.set_properties({"tokens": 150, "cost": 0.045})

interaction.end(output="...")
```

## Configuration

```python theme={null}
agnost.init("your-org-id", endpoint="https://api.agnost.ai", debug=True)
```

| Parameter  | Type   | Default                 | Description          |
| ---------- | ------ | ----------------------- | -------------------- |
| `org_id`   | `str`  | —                       | Your org ID          |
| `endpoint` | `str`  | `https://api.agnost.ai` | API endpoint         |
| `debug`    | `bool` | `False`                 | Enable debug logging |

## Cleanup

```python theme={null}
agnost.shutdown()  # flushes and cleans up
```

## What appears in Agnost

* **Conversations** grouped by `conversation_id`.
* **User-level analytics** grouped by `user_id`.
* **Raw logs** for every tracked interaction.
* **Errors** when `success=False`.

## Verify

Run one `begin()` / `end()` interaction, then open [app.agnost.ai](https://app.agnost.ai). Check **Raw logs** first, then **Conversations**.

## Troubleshooting

* Confirm `agnost.init("your-org-id")` runs before tracking.
* Call `agnost.flush()` or `agnost.shutdown()` before short-lived scripts exit.
* Confirm the endpoint is `https://api.agnost.ai` unless you intentionally use another endpoint.
