Article
CommunityJev Guides & Articles
Langfuse: OpenTelemetry tracing for TypeSafe Jev
Langfuse's notebook integration traces TypeSafe Jev System One calls through the OpenInference instrumentor, which patches the Python client in place and emits OpenTelemetry spans.
- Format
- Article
- Reading time
- 2 min
- Published by
- Community
- Author
- Langfuse
- Last verified
- Oct 2026
Used inJev for Software & DevTools
Highlights
- OpenInference ships TypeSafeAIInstrumentor for typesafe-sdk 0.6.0 and above; one instrument() call wraps sync and async system_one in place.
- Each System One call becomes an OpenInference LLM span with request and response JSON, prompt, completion and total token counts, and model names.
- The notebook notes official TypeSafe docs do not mention OpenTelemetry, and the official SDKs do not emit spans themselves.
- Because a System One call is not a chat exchange, spans do not set llm.input_messages or llm.output_messages.
- The notebook suggests pinning jev-1.13.0 when a threshold depends on a model version, since jev-latest moves when TypeSafe ships a release.
Watch out
Copy reviewed against the published integration notebook on 2026-10-17. It is vendor-authored documentation for Langfuse's own platform, and the pinning guidance reflects TypeSafe's release behavior as described there rather than independent testing.
Questions about this entry
Short answers drawn from the linked project or page.
It traces TypeSafe Jev System One calls with Langfuse. The OpenInference instrumentor patches TypeSafeClient.system_one in place, so you keep a plain client and still get OpenTelemetry spans for skill routers, model routers, tool-call hooks and eval verdicts.
No. The notebook states that the official Python and JavaScript SDKs wrap POST /v1/systemone but do not emit OpenTelemetry spans themselves, and that official TypeSafe docs do not mention OpenTelemetry.
Install langfuse, typesafe-sdk and openinference-instrumentation-typesafe, set LANGFUSE_PUBLIC_KEY, LANGFUSE_SECRET_KEY, LANGFUSE_BASE_URL and TYPESAFE_API_KEY, then call TypeSafeAIInstrumentor().instrument() once. No observeTypeSafe() helper or Langfuse-specific client wrapper is needed.
input.value with the request body, state, model and questions as JSON; output.value with the response body, model, answers and usage as JSON; request and response model names such as jev-latest to jev-1.13.0; and prompt, completion and total token counts.
A System One call is not a chat exchange, so the spans do not set llm.input_messages or llm.output_messages. The instrumentation records the request and response payloads instead, and Langfuse's Python SDK is OpenTelemetry-native, so the instrumentor attaches to the same tracer provider that get_client() registered.
The notebook says to pin jev-1.13.0 when a threshold depends on a specific model version, because jev-latest moves when TypeSafe ships a new release. The example call uses model jev-1.13.0 and asks a Noul, a Choice and a Score about one ticket.
Enable debug mode with LANGFUSE_DEBUG=True. If OTel observations appear in the logs but not in Langfuse, call langfuse.flush() at the end and verify the API keys and base URL. If no OTel spans appear at all, make sure the instrumentation runs before your application code.
Reactions & coverage
Posts, threads, and videos about this entry from around the web.
Hacker News: Simon Willison's overview of Noul, Choice, and Score, and where a decision model fits.
benwerd53 pointsJev introduces a new shape of LLMRead the thread on Hacker NewsHacker News: swyx posts the Latent Space interview with Diogo Almeida.
swyx4 pointsJev: System One Models for Prod, Not God – With Diogo Almeida, CEO, TypeSafe AIRead the thread on Hacker NewsX: Diogo Almeida in five minutes
X: LLMs vs. Jev, clearly explained
From the Jev guides
Original write-ups on what this entry is for.
From the Jev AI model community
Posts from builders shipping with Jev right now.