# OpenAI Pipeline Tracking With TelemHQ

Source HTML: https://telemhq.com/docs/openai

Use TelemHQ to monitor OpenAI-powered jobs by sending a ping after each model run. Include model, token usage, latency, cost, output counts, and quality checks in the payload.

## Recommended Payload Fields

- `provider`: `openai`
- `model`: model name
- `status`: `success` or `failed`
- `duration_ms`: request or job duration
- `input_tokens`: prompt/input token count
- `output_tokens`: completion/output token count
- `total_tokens`: total token count
- `cost_usd`: estimated run cost
- `items_processed`: number of records, documents, or tasks processed
- `items_failed`: number of failed records, documents, or tasks
- `eval_score`: quality or evaluation score

## Environment

```bash
export OPENAI_API_KEY="YOUR_OPENAI_API_KEY"
export TELEMHQ_PING_URL="https://telemhq.com/ping/YOUR_TRACKING_TOKEN"
```

## Node.js Example

```bash
npm install openai
```

```js
import OpenAI from "openai";

const openai = new OpenAI();
const startedAt = Date.now();

const response = await openai.responses.create({
  model: "gpt-4.1-mini",
  input: "Summarize today's support tickets."
});

const durationMs = Date.now() - startedAt;
const inputTokens = response.usage?.input_tokens ?? 0;
const outputTokens = response.usage?.output_tokens ?? 0;
const totalTokens = response.usage?.total_tokens ?? inputTokens + outputTokens;

await fetch(process.env.TELEMHQ_PING_URL, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    provider: "openai",
    model: response.model,
    status: "success",
    duration_ms: durationMs,
    input_tokens: inputTokens,
    output_tokens: outputTokens,
    total_tokens: totalTokens,
    items_processed: 1,
    items_failed: 0
  })
});
```

## Python Example

```bash
pip install openai requests
```

```python
import os
import time
import requests
from openai import OpenAI

client = OpenAI()
started_at = time.time()

response = client.responses.create(
    model="gpt-4.1-mini",
    input="Summarize today's support tickets.",
)

duration_ms = round((time.time() - started_at) * 1000)
usage = response.usage
input_tokens = getattr(usage, "input_tokens", 0) or 0
output_tokens = getattr(usage, "output_tokens", 0) or 0
total_tokens = getattr(usage, "total_tokens", input_tokens + output_tokens) or 0

requests.post(
    os.environ["TELEMHQ_PING_URL"],
    json={
        "provider": "openai",
        "model": response.model,
        "status": "success",
        "duration_ms": duration_ms,
        "input_tokens": input_tokens,
        "output_tokens": output_tokens,
        "total_tokens": total_tokens,
        "items_processed": 1,
        "items_failed": 0,
    },
    timeout=15,
)
```

## Useful Assertions

- `status = success`
- `total_tokens > 0`
- `items_failed = 0`
- `cost_usd <= 5`
- `eval_score >= 0.8`

## Related Guides

- Sending pings: https://telemhq.com/docs/integration
- Codex usage tracking: https://telemhq.com/docs/codex
- Claude pipeline tracking: https://telemhq.com/docs/claude
