> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://www.comet.com/docs/opik/llms.txt.

# Observability for Quarkus LangChain4j with Opik

> Configure Quarkus LangChain4j OpenTelemetry export to send traces to Opik.

[Quarkus LangChain4j](https://docs.quarkiverse.io/quarkus-langchain4j/dev/index.html) uses Quarkus OpenTelemetry configuration in `application.properties`.

## When this guide applies

Use this if your app is Quarkus + LangChain4j and you want OTEL traces to land in Opik.

## Opik OTLP endpoint modes

For full endpoint/header details, see [Opik OpenTelemetry overview](/integrations/opentelemetry).

* Cloud endpoint: `https://www.comet.com/opik/api/v1/private/otel`
* Enterprise endpoint: `https://<comet-deployment-url>/opik/api/v1/private/otel`
* Self-hosted endpoint: `http://localhost:5173/api/v1/private/otel`

## Example (`application.properties`)

Intent:
Configure Quarkus OTEL trace exporter to target Opik directly.

Applies when:
You are using Quarkus-native OTEL exporter settings.

Required fields:

* `quarkus.otel.enabled=true`
* `quarkus.otel.traces.enabled=true`
* `quarkus.otel.exporter.otlp.traces.endpoint`
* `quarkus.otel.exporter.otlp.traces.protocol=http/protobuf`

Recommended fields:

* `quarkus.langchain4j.tracing.include-prompt=true` and `quarkus.langchain4j.tracing.include-completion=true`: without them, LLM spans arrive with model and token usage but no input or output (both default to `false`)
* `quarkus.langchain4j.tracing.include-tool-arguments=true` and `quarkus.langchain4j.tracing.include-tool-result=true` if your AI services call tools

Optional fields:

* `quarkus.otel.exporter.otlp.traces.headers` (`projectName` strongly recommended)
* `quarkus.application.name` (for `service.name` attribution)

Minimal valid setup:

```properties
quarkus.otel.enabled=true
quarkus.otel.traces.enabled=true
quarkus.otel.exporter.otlp.traces.endpoint=https://www.comet.com/opik/api/v1/private/otel
quarkus.otel.exporter.otlp.traces.protocol=http/protobuf
quarkus.otel.exporter.otlp.traces.headers=Authorization=<your-api-key>,Comet-Workspace=<your-workspace>,projectName=<your-project-name>

# Send prompt and completion text, not just model and token counts
quarkus.langchain4j.tracing.include-prompt=true
quarkus.langchain4j.tracing.include-completion=true
```

## Validation

1. Start your Quarkus app with OTEL enabled.
2. Trigger a LangChain4j-backed endpoint/action.
3. Confirm spans with your configured `service.name` and project headers arrive in Opik.
4. Open the `completion <model>` span: it should show the model, token usage, the prompt as input and the model response as output. If input and output are empty, check the `include-prompt` / `include-completion` settings above.

## Source references

* [Quarkus OpenTelemetry guide](https://quarkus.io/guides/opentelemetry)
* [Quarkus LangChain4j docs](https://docs.quarkiverse.io/quarkus-langchain4j/dev/index.html)
* [Opik OpenTelemetry overview](/integrations/opentelemetry)