|Ben @ Grepture

Trace-Modus — Volle Observability ohne Proxy-Umweg

Grepture unterstützt jetzt einen Trace-Modus, bei dem Anfragen direkt an Ihren LLM-Anbieter gehen. Das SDK erfasst Tokens, Kosten und Latenz asynchron — gleiche Dashboard-Sichtbarkeit, null Latenz-Overhead.

Der Proxy-Kompromiss

Greptures Proxy gibt Ihnen Kontrolle. PII-Schwärzung, Anfrage-Blockierung, Prompt-Verwaltung — alles erledigt, bevor der Datenverkehr Ihren LLM-Anbieter erreicht. Aber diese Kontrolle kostet einen Netzwerk-Hop. Ihre Anfrage geht zuerst an Grepture, dann an OpenAI oder Anthropic, und die Antwort kommt denselben Weg zurück.

Für die meisten Workloads ist die zusätzliche Latenz vernachlässigbar. Aber wir hörten immer wieder von Teams mit latenzsensitiven Workloads — Echtzeit-Agenten, Streaming-UIs, Hochdurchsatz-Pipelines — die Sichtbarkeit ohne den Umweg wollten. Sie brauchten keine Regeln oder Schwärzung. Sie wollten einfach sehen, was passiert: welche Modelle, wie viele Tokens, was es kostet, wie lange es dauert.

Also haben wir den Trace-Modus gebaut.

Was der Trace-Modus ist

Eine Konfigurationsänderung. Setzen Sie mode: "trace" und Anfragen gehen direkt an Ihren LLM-Anbieter — OpenAI, Anthropic, Google, wen auch immer. Kein Proxy im Hot Path.

Nachdem die Antwort eintrifft, erfasst das SDK Metadaten — Modell, Tokens, Latenz, Statuscode, Kosten — und sendet sie asynchron als Batch an Grepture. Fire-and-Forget. Der Trace-Aufruf blockiert Ihre Anwendung nie, und wenn er fehlschlägt, merkt Ihr Produktionscode nichts davon.

Das Dashboard bleibt gleich. Traffic-Log, Kostenerfassung, Conversation-Tracing — alles funktioniert weiterhin. Sie erhalten die gleiche Sichtbarkeit wie im Proxy-Modus, ohne den Netzwerk-Hop.

Die Konfigurationsänderung

Die API-Oberfläche ist identisch zum Proxy-Modus. Sie ändern eine Zeile:

import { Grepture } from "@grepture/sdk";
import OpenAI from "openai";

const grepture = new Grepture({
  apiKey: process.env.GREPTURE_API_KEY!,
  proxyUrl: "https://proxy.grepture.com",
  mode: "trace", // ← direkt zum Anbieter, Traces werden asynchron gesendet
});

const openai = new OpenAI({
  ...grepture.clientOptions({
    apiKey: process.env.OPENAI_API_KEY!,
    baseURL: "https://api.openai.com/v1",
  }),
});

// Diese Anfrage geht direkt an OpenAI — kein Proxy-Hop
const response = await openai.chat.completions.create({
  model: "gpt-4o",
  messages: [{ role: "user", content: "Fasse die Quartalsergebnisse zusammen." }],
});

Der clientOptions()-Aufruf liefert in beiden Modi dieselbe Struktur. Im Proxy-Modus wird die Base-URL umgeschrieben, um den Traffic über Grepture zu leiten. Im Trace-Modus bleibt die URL des Anbieters erhalten und fetch wird gewrappt, um Metadaten nach der Antwort zu erfassen.

Wenn Sie in einer serverlosen Umgebung arbeiten — Lambda, Vercel Functions, Cloudflare Workers — rufen Sie flush() auf, bevor die Funktion beendet wird, damit ausstehende Traces gesendet werden:

await grepture.flush();

Wann welchen Modus verwenden

Beide Modi existieren aus guten Gründen. Die richtige Wahl hängt davon ab, was Sie von Grepture brauchen.

Trace-Modus ist für

  • Observability und Kostenerfassung ohne jeglichen Latenz-Overhead
  • Latenzsensitive Produktions-Workloads — Streaming-Antworten, Echtzeit-Agenten, Sprachschnittstellen
  • Hochdurchsatz-Pipelines, bei denen jede eingesparte Millisekunde im großen Maßstab zählt
  • Erste Schritte — Sie wollen Einblick in Ihren KI-Traffic, bevor Sie sich auf Regeln und Richtlinien festlegen

Proxy-Modus ist für

  • PII-Schwärzung — sensible Daten abfangen, bevor sie das Modell erreichen, mit 50+ integrierten Erkennungsmustern
  • Anfrage-Blockierung — Anfragen stoppen, die definierten Regeln entsprechen
  • Prompt-Verwaltung — Prompts serverseitig mit prompt.use() auflösen, damit Ihre Anwendung keine Prompt-Templates bündeln muss
  • Maskieren und Wiederherstellenreversible Schwärzung, die LLM-Antworten nutzbar hält und gleichzeitig PII schützt

Wenn Sie die Anfrage unterwegs prüfen oder ändern müssen, brauchen Sie den Proxy-Modus. Wenn Sie nur nachträglich sehen wollen, was passiert ist, bietet der Trace-Modus dasselbe Dashboard mit null Overhead.

Wie es unter der Haube funktioniert

Das SDK behandelt zwei Antworttypen unterschiedlich.

Gepufferte Antworten. Das SDK klont das Response-Objekt, liest den Body im Hintergrund und extrahiert Nutzungsmetadaten (Modell, Tokens, Status) aus dem JSON. Ihre Anwendung erhält die ursprüngliche Antwort sofort — das Klonen und die Extraktion erfolgen asynchron, nachdem die Antwort an Ihren Code zurückgegeben wurde.

Streaming-Antworten. Hier wird es interessant. Das SDK umhüllt den Response-Stream mit einem TransformStream, der jeden Chunk sofort an Ihre Anwendung durchreicht — kein Buffering. Parallel dazu erfasst es nur die letzten SSE-data:-Zeilen, in denen die Anbieter Token-Zähler in ihrem Streaming-Protokoll mitliefern. Wenn der Stream mit [DONE] endet, extrahiert das SDK die Nutzungsdaten aus diesen letzten Chunks und sendet den Trace. Ihre Anwendung wartet darauf nie.

In beiden Pfaden sammelt ein TraceSender bis zu 25 Einträge und sendet sie alle 2 Sekunden — oder sofort, wenn der Batch voll ist. Der Aufruf von flush() sendet, was gerade im Puffer liegt. All das geschieht auf Best-Effort-Basis — wenn ein Trace-Request fehlschlägt, wird er stillschweigend verworfen. Produktionstraffic wird nie durch die Trace-Zustellung unterbrochen.

Was Sie im Dashboard sehen

Trace-Einträge erscheinen im selben Traffic-Log wie Proxy-Einträge. Sie erkennen den Unterschied am Quell-Indikator — ein Schild-Symbol für Proxy-Anfragen, ein Auge-Symbol für Trace-Anfragen.

Die gleichen Spalten sind vorhanden: Modell, Tokens, Kosten, Dauer, Status. Trace-Einträge funktionieren mit Conversation-Tracing (verwandte Aufrufe per Trace-ID gruppieren), Grep-Suche über Anfrage- und Antwortkörper und allen bestehenden Filtern.

Der einzige Unterschied: Trace-Einträge zeigen kein rules_applied, da keine Regeln ausgeführt wurden. Die Anfrage ging direkt an den Anbieter.

Jetzt ausprobieren

Eine Konfigurationsänderung zum Starten:

const grepture = new Grepture({
  apiKey: process.env.GREPTURE_API_KEY!,
  proxyUrl: "https://proxy.grepture.com",
  mode: "trace",
});

Starten Sie mit dem Trace-Modus für Sichtbarkeit. Sehen Sie, welche Modelle Ihr Team nutzt, was sie kosten und wo die Latenz hinfließt. Wenn Sie bereit sind, PII-Schwärzung oder Anfrage-Regeln hinzuzufügen, ist der Wechsel zum Proxy-Modus dieselbe Einzeiler-Änderung — entfernen Sie mode: "trace" und der Traffic wird automatisch über den Proxy geleitet.