Langfuse and LiteLLM proxy integration: what it captures and how it connects
Several teams call models through one LiteLLM gateway, yet nobody can see usage or cost in one place, and each team tends to track its own numbers. The LiteLLM Proxy can send logs to Langfuse through the langfuse_otel callback, which captures token usage, cost and latency for every call routed through the proxy without changing each application. Langfuse documents three ways to connect LiteLLM: sending logs from the LiteLLM Proxy, using the LiteLLM SDK, or using a compatible client SDK such as the Langfuse OpenAI SDK wrapper. This page covers the proxy method, because it places the logging decision in the gateway that your teams already share.
The proxy method needs three pieces of configuration. The Langfuse keys are set as LANGFUSE_PUBLIC_KEY and LANGFUSE_SECRET_KEY, LANGFUSE_OTEL_HOST points at your self-hosted Langfuse endpoint, and litellm_config.yaml enables the langfuse_otel callback. Langfuse states that the integration captures token usage, cost and latency for every LLM call routed through the proxy. Treat the project keys as credentials: store them in the same secret manager you use for the proxy master key, and decide whether one Langfuse project or several will hold the traces, since that choice sets how owners separate their data. Confirm with your team which request fields, such as user identifiers or prompt content, the proxy sends, because those fields determine what personal data ends up in your Langfuse storage.
The data path has three hops. Applications call the LiteLLM proxy in the OpenAI request format, the proxy forwards each request to the model provider, and the proxy exports trace data to your Langfuse Web container. Langfuse then hands processing to the Langfuse Worker, which writes to ClickHouse and blob storage. Plan the network path between the proxy and Langfuse explicitly: the proxy's egress must reach the Langfuse endpoint over TLS, and firewall rules should allow only that route. Decide where the proxy and Langfuse run, because a proxy in one cloud account sending data to a Langfuse in another adds a cross-boundary flow that your data classification and security review will need to approve.
Before go-live, verify three things in a test environment. First, confirm that a request through the proxy produces a trace with token counts, cost and latency in the Langfuse interface. Second, check how the proxy behaves when Langfuse is unavailable. Confirm in LiteLLM's documentation for your version whether requests are delayed, dropped or still served, because this decides whether observability can affect model availability for every team. Third, pin both products to tested versions, and review the LiteLLM and Langfuse release notes before each upgrade. LiteLLM supports only its four most recent stable minor versions, so schedule gateway upgrades on that cadence and retest the callback after each one.
Prerequisites for the Langfuse and LiteLLM proxy integration
The integration needs six things in place before any configuration: a supported self-hosted Langfuse, a supported LiteLLM release, a PostgreSQL database for virtual keys, Langfuse project keys, a network path to Langfuse, and certificates the proxy host trusts. Each card covers one prerequisite and the version or setting to confirm.
Self-hosted Langfuse with v4 data stores
The proxy needs a running self-hosted Langfuse to receive traces. If you target Langfuse v4, plan ClickHouse 25.12 or later (26.4 recommended), PostgreSQL 15 or later and Redis 7.0 or later, as the v3 to v4 upgrade guide requires. Helm deployments with bundled data stores must move from chart v1 to v2 before upgrading to v4. Confirm the current Langfuse release on the GitHub releases page before you start, since v4.63.0 is listed there.
LiteLLM release in the support window
Use a LiteLLM proxy release from the four most recent stable minor versions, the window LiteLLM says it maintains for open source and Enterprise deployments. Check the LiteLLM releases page for the current line, where v1.105.1 is listed as published October 14, 2026. Pin the proxy image to an exact tag so that upgrades happen on a schedule you control.
PostgreSQL database for virtual keys
Virtual keys, along with their per-key, per-user and per-team budgets and rate limits, need a PostgreSQL database. Provision a dedicated database for the proxy and keep it separate from the Langfuse databases. Record who restores it and how often it is backed up. Once more than one proxy instance runs, LiteLLM expects Redis 7.0 or newer for shared rate limits, router state and cache.
Langfuse project keys and secret storage
The integration authenticates with a public and secret key pair from the Langfuse project that should receive proxy traces. Set them as LANGFUSE_PUBLIC_KEY and LANGFUSE_SECRET_KEY, and keep the secret in your secret manager rather than in a configuration file under version control. Generate LITELLM_MASTER_KEY at the same time. It must start with sk- and should be stored the same way.
Network path to the Langfuse OTEL endpoint
The proxy host must reach your Langfuse endpoint over HTTPS. Set LANGFUSE_OTEL_HOST to your self-hosted address, since Langfuse accepts OTLP traces at /api/public/otel, and enable the langfuse_otel callback in litellm_config.yaml. Test DNS, outbound firewall rules and any egress proxy from both the host and the proxy container network before you enable the callback.
TLS certificates trusted by the proxy
If Langfuse sits behind an internal certificate authority, the proxy host and its container image must trust that chain, or trace export fails during the TLS handshake. Confirm that the certificate covers the hostname in LANGFUSE_OTEL_HOST, that intermediate certificates are served, and that the trust store is updated on every proxy node. Agree with your security team who owns renewal, because an expired certificate stops trace export.
How each LLM call becomes a Langfuse trace
Each LLM call follows one path. The application sends an OpenAI-format request to the LiteLLM proxy instead of directly to the model provider. The proxy translates that request for the upstream provider it selects, such as OpenAI, Anthropic, Bedrock or Azure, and returns the response to the application. When the call completes, the langfuse_otel callback enabled in litellm_config.yaml builds the telemetry for that call and sends it to the Langfuse OTLP endpoint at /api/public/otel on the host set by LANGFUSE_OTEL_HOST. The application code does not change, which is the main reason to place the gateway in this position. Before rollout, confirm that the proxy host can reach the Langfuse host on the network path your security team has approved, and that the callback is active on the proxy version you run.
Two Langfuse containers handle what arrives at that endpoint. Langfuse Web serves the UI and APIs, and it is the component that receives the OTLP request from the proxy. Langfuse Worker performs the asynchronous event processing that turns received events into stored trace data. Because processing is asynchronous, a trace can appear in the UI after a short delay, so teams should not treat the UI as a live view during testing. The Langfuse self-hosting documentation also lists PostgreSQL, ClickHouse, Redis or Valkey and S3-compatible blob storage as parts of the deployment, and the vendor documentation should be consulted to confirm which of these each stage uses in your version. Plan Worker capacity against CPU load, following the scaling guide, and watch Web and Worker logs during the first load test to see whether ingestion keeps pace with the proxy's request volume.
The vendor documentation states that the LiteLLM Proxy integration captures token usage, cost and latency for every LLM call routed through the proxy. Those three fields are the core of the chargeback and performance reporting most teams want, so they should be checked on real traffic rather than assumed. Cost needs particular attention. Langfuse calculates cost from the model definitions it holds, so models that are not in the Langfuse model list may show no cost or an incorrect one. Ask the vendor how cost is calculated for models outside that list, whether custom model prices can be defined in your self-hosted instance, and who maintains those definitions when provider prices change. LiteLLM also tracks spend in its own database through virtual key budgets, so finance teams should decide which figure is authoritative and reconcile the two during the pilot.
A short test plan shows whether the path works end to end. Send requests through each provider and model family the proxy exposes, including a failed request, and confirm that each one produces a trace with the expected model name, token counts, cost and latency. Check that the model name recorded in Langfuse matches the deployment the router actually used, because routing and failover can send a request to a different deployment than the one the application named. Confirm that the user, team or key metadata you need for reporting arrives on the trace. Record the delay between a request and its trace appearing in the UI so operations teams know what to expect. Document the results and the cost-model decisions, since these are the records a security or finance reviewer will ask to see first.
Configuration sequence for connecting LiteLLM to Langfuse
This sequence connects a self-hosted LiteLLM proxy to a self-hosted Langfuse so that every request routed through the gateway is traced with token usage, cost and latency. Each step ends with a check, so your platform team can confirm the connection before any application traffic depends on it.
Confirm Langfuse is reachable and create keys
The platform team, working with the Langfuse administrator, first confirms that the proxy hosts can reach the self-hosted Langfuse web address over the network path your organization uses. Then create a project in Langfuse and generate a public key and a secret key for it. Record which project receives the traces, since the keys belong to that project. Done means you can sign in to the project, see the key pair in the project settings, and reach the Langfuse address from a host in the LiteLLM network zone. Ask your Langfuse team which health check path your deployment exposes so you can test it directly.
Store Langfuse keys in the secret manager
Place LANGFUSE_PUBLIC_KEY and LANGFUSE_SECRET_KEY in the same secret manager that holds the LiteLLM master key and other proxy credentials. Inject them into the proxy runtime as environment variables, so they never appear in litellm_config.yaml, container images or version control. The secret owner should set access so that only the proxy workload can read them. Done means the proxy deployment references both secret names, a review of the configuration repository finds no key values, and the secret manager audit log shows the proxy workload identity as the reader.
Set the self-hosted OTEL host
Set LANGFUSE_OTEL_HOST to the base address of your self-hosted Langfuse. Langfuse accepts OpenTelemetry traces over OTLP at its /api/public/otel path, so confirm with your Langfuse team whether the value should include that path or only the host, and use the form your deployment documentation specifies. Keep the value in the same environment configuration as the keys. Done means the variable is present in the running proxy environment, it points at your internal address rather than a public cloud service, and a connection test from the proxy host to that address succeeds at the network level.
Enable the langfuse_otel callback
In litellm_config.yaml, add langfuse_otel to the callbacks list in the LiteLLM settings section, following the current LiteLLM and Langfuse integration documentation for the exact key names your proxy version expects. Commit the change through your normal review process, so the setting has an owner and history. Done means the configuration file passes the validation step in your pipeline, the change is reviewed and merged, and the file in the deployed image or config map matches the reviewed version.
Restart or roll the proxy
Restart the LiteLLM proxy or roll its deployment so that the new environment variables and configuration load. If you run more than one proxy instance, roll them one at a time and confirm that shared state such as rate limits and router data is backed by Redis 7.0 or newer, as LiteLLM's production guidance requires for multiple instances. Done means every instance reports ready, the startup logs show the langfuse_otel callback loaded without errors, and no instance is restarting in a loop.
Send a test request through a virtual key
Create a virtual key in the LiteLLM admin interface, restricted to one low-cost test model and given a small budget, so that a test failure cannot spread into production spend. Virtual keys require the PostgreSQL database used by the proxy. Send a single chat completion request through the proxy with that key, from a host inside your network. Done means the request returns a successful response, the proxy log shows the request was processed, and the response includes the identifier you can search for in Langfuse.
Confirm tokens, cost and latency in the trace
Open the Langfuse project and find the trace that matches the test request. Check that the generation shows input and output token counts, a cost value and a latency value. If tokens or latency are present but cost is missing, confirm that Langfuse has pricing for that model name, and align the model name in LiteLLM with the one Langfuse recognizes. Done means the trace is visible in the correct project, all three values are populated, and the trace attributes match the virtual key or team you used, so you can attribute usage later.
How LiteLLM proxy data maps to Langfuse trace fields
This table compares the data the LiteLLM proxy holds for each request with the Langfuse concepts it can populate, including traces, observations, users, sessions and tags. Read the third column first, because fields that depend on request metadata will be empty for applications that do not send it. Confirm exact attribute names against the Langfuse LiteLLM integration page before you build dashboards on them.
| Proxy data | Langfuse concept | Populated when |
|---|---|---|
| Virtual key | Key identifier recorded in trace or observation metadata | Requests authenticated with a virtual key. Confirm the exact field name in the integration docs. |
| User | User ID on the trace, used to group activity by person | A user identifier is present in request metadata or the forwarded user field. Confirm which field the proxy passes. |
| Team | Metadata entry on the trace for filtering by team | The key or request carries team information. Confirm whether team appears as a tag or as metadata. |
| Model and provider | Model name on each observation, with provider in metadata | Every routed call. Confirm whether the provider has its own attribute or sits inside metadata. |
| Token usage | Usage details on each observation (input and output tokens) | Every LLM call routed through the proxy, as described in Langfuse's LiteLLM integration documentation. |
| Cost | Cost fields on each observation | Every routed call. Accuracy depends on the model pricing the proxy holds, so check it against your provider invoices. |
| Latency | Start and end times on each observation | Every routed call through the proxy. |
| Session | Session ID on the trace, used to group a conversation | Only when the caller sends a session identifier in request metadata. |
| Tags | Trace tags for filtering and dashboards | Only when request metadata includes tags. Tags are not set by default. |
Choosing the proxy callback, the LiteLLM SDK or a client wrapper
Langfuse documents three ways to get LiteLLM traffic into a self-hosted Langfuse: sending logs from the LiteLLM Proxy, using the LiteLLM SDK, or using a compatible client SDK such as the Langfuse OpenAI SDK wrapper. The proxy callback is the only one of the three that is configured once, centrally, and needs no change to application code. You set the Langfuse credentials as LANGFUSE_PUBLIC_KEY and LANGFUSE_SECRET_KEY, point LANGFUSE_OTEL_HOST at your self-hosted OTEL endpoint, and enable the langfuse_otel callback in litellm_config.yaml. Every LLM call routed through the gateway then carries token usage, cost and latency into Langfuse. For a platform team that wants organization-wide capture, this is the default choice.
The LiteLLM SDK and the client wrapper both work per application. The LiteLLM SDK is added to the Python code path that calls models, so each service must be changed and redeployed. A compatible client wrapper, such as the Langfuse OpenAI SDK wrapper, replaces the client import in the application and adds the same tracing at that point. Both give you finer control over trace names, user identifiers, session IDs and metadata, which the gateway cannot always infer. The cost is ownership: every team that adopts these methods has to keep its instrumentation current when the SDKs change, and a missed service leaves a gap in your telemetry.
The proxy callback only sees calls that pass through the gateway. Before you rely on it for organization-wide reporting, inventory where model calls actually originate. Teams that call providers directly with their own API keys, batch jobs that bypass the proxy, and notebooks used by data scientists are common sources of untraced usage. For each of these, confirm with the owning team whether the call can be routed through the gateway. If it cannot, plan one of the per-application methods for that path and record it as an exception, so that totals in Langfuse can be reconciled against provider invoices.
A practical split for most organizations is to enable the proxy callback for all gateway traffic, then add the LiteLLM SDK or a client wrapper only where the proxy cannot supply the context you need, such as a per-customer or per-feature attribute. Check that the proxy and any per-application method do not both report the same call, which would double-count usage and cost. Test this with a known request in a non-production Langfuse project before you roll out, and compare the trace count and token totals against the provider's own usage export for the same window.
Confirm the exact configuration keys, callback names and supported client wrapper versions against the Langfuse LiteLLM integration documentation and the LiteLLM release you run, since both projects change their interfaces between releases. Ask the owners of each application which integration method they will use, who maintains it, and how it is tested after upgrades. Recording those answers in a single table, with one row per gateway and per direct-call path, gives you the scope that the rest of the implementation and its acceptance checks depend on.
Securing the gateway and trace pipeline
The LiteLLM proxy and the Langfuse instance each hold a path to sensitive data: model credentials, user prompts and completions, and spend records. The cards below cover the controls that decide who can call models, what reaches Langfuse and which protections depend on a license tier, so each one can be confirmed before traffic is routed.
Handle the LiteLLM master key
LITELLM_MASTER_KEY is the administrative credential for the proxy, and LiteLLM's guidance is that it must start with sk- and be kept in a secret manager rather than in configuration files or container images. Confirm who can read it, how it rotates without breaking virtual keys and whether your secret store is one that LiteLLM can read directly or through your deployment tooling.
Scope Langfuse keys to one project
The LANGFUSE_PUBLIC_KEY and LANGFUSE_SECRET_KEY pair that the proxy uses should belong to a single Langfuse project dedicated to gateway traces. Confirm that the key cannot read or write other projects, and record which person or service owns each key so that rotation and revocation have a clear owner.
Restrict virtual keys by model and budget
Virtual keys can be limited to specific models and given per-key, per-user or per-team budgets, TPM and RPM limits. Decide which models each team may call, set spend ceilings that match approved use, and test that a key requesting an unapproved model is refused. Virtual keys require a PostgreSQL database, so include that dependency in the design.
Decide what content reaches Langfuse
The integration can record every prompt and completion, which is useful for debugging but may place personal or regulated data in a second store. Decide per project whether content is captured or only token usage, cost and latency, and document that decision alongside the retention period you set in Langfuse.
Mask content on the Langfuse server
Server-side data masking in self-hosted Langfuse is an Enterprise feature that requires a Langfuse license key. If prompts may contain personal data, confirm with your license tier whether masking is available before go-live, and test it on sample traces that contain realistic-looking identifiers from a test dataset rather than production content.
Control access with retention, audit and RBAC
Data retention policies, audit logs and project-level RBAC in Langfuse also require an Enterprise license key. On the LiteLLM side, audit logs, IP allowlisting and secret manager integrations are Enterprise features. Confirm which of these your license tier includes, and make the gaps part of your risk acceptance before the gateway serves production users.
Scaling the proxy and Langfuse together without losing traces
Scale the LiteLLM proxy and the self-hosted Langfuse as one pipeline. A trace is only complete if the proxy accepts each request, the OTEL export reaches Langfuse, and Langfuse processes what arrives. LiteLLM's production guide recommends one Uvicorn worker per pod on Kubernetes and scaling horizontally by adding pods. Its suggested starting point is 1 vCPU and 4 GiB per worker. Treat those figures as a starting point only, then load test with your own mix of streaming calls, long prompts and fallback routes, because memory use varies with request shape. Record the request rate at which latency starts to climb, since that number sets your replica count.
Redis 7.0 or newer is required once more than one proxy instance runs. Shared rate limits, router state and cache depend on it. Without shared state, per-key TPM and RPM limits, cooldowns after repeated failures and retry behavior are enforced separately on each replica, so a key can exceed its intended limit. Confirm with your platform team the Redis version, high availability design and failover behavior before the second replica goes live. Treat Redis as a gateway dependency with its own monitoring and alerts, and check that the proxy recovers cleanly when it restarts while Redis is briefly unavailable.
On the Langfuse side, Langfuse recommends scaling the worker containers on CPU load. Under heavy ingestion, it suggests splitting langfuse-web into separate ingestion and user interface deployments, so dashboard queries do not compete with incoming OTEL traffic. The scaling guide lists minimum resources of 2 CPU and 4 GiB for web, worker and PostgreSQL, 1 CPU and 1.5 GiB for Redis or Valkey, and 2 CPU and 8 GiB for ClickHouse, with at least 16 GiB of ClickHouse memory for larger deployments. These are floors, not sizing for your volume. Ask your team or partner to size ClickHouse and the workers from expected trace volume and retention.
LiteLLM batches spend updates to its database every 60 seconds at scale, so budget and spend views in the proxy can trail live traffic by roughly that interval. Langfuse receives its own trace stream, so the two views may disagree briefly. Plan budget headroom for each key and team so a short lag does not hide a real overrun, and set alerts on the Langfuse cost and token dashboards as well as the proxy budgets. During load testing, compare the number of requests the proxy reports with the number of traces Langfuse stores, and confirm that retries and failed calls appear as you expect before you rely on the pipeline for chargeback.
Why traces are missing, duplicated or show no cost
This table lists the failures most often seen when a LiteLLM proxy sends traces to a self-hosted Langfuse. Each row gives a likely cause and one check to run. Work down the list in order, because the first four rows block all traces, while the later rows affect cost, token counts, duplicates or storage once data arrives.
| Symptom | Likely cause | Diagnostic step |
|---|---|---|
| No traces appear | LANGFUSE_OTEL_HOST is unset or points at the wrong endpoint | Confirm the variable targets your self-hosted OTEL endpoint, then send one test request through the proxy. |
| No traces appear | The langfuse_otel callback is missing from litellm_config.yaml | Search the proxy startup log for the callback name and confirm the config file mounted in the container is the one you edited. |
| No traces appear | Public or secret keys belong to another Langfuse project | Compare the key pair with the project settings in Langfuse and send a test trace to that project. |
| No traces appear | The proxy cannot reach the endpoint or does not trust its certificate | Run a request from inside the proxy container to the OTEL endpoint and read the TLS or connection error. |
| Cost is blank | The model name in the trace has no price definition in Langfuse | Match the model name shown on the trace with a model definition that includes input and output prices. |
| Token counts missing on some streamed calls | Certain providers do not return usage data in streamed responses | Compare one streamed and one non-streamed call to the same model, then confirm streaming usage behavior in the provider documentation. |
| Duplicate traces after multi-instance rollout | Two callbacks or two integrations export the same request | Pick one trace ID and list the service name and instance that sent each copy. |
| Budget reports lag behind requests | LiteLLM batches spend updates to its database on an interval, which is 60 seconds at scale | Note a request's cost in the proxy, wait one full interval, then compare it with the figure in Langfuse. |
| ClickHouse disk pressure after a v4 backfill | The backfill of historic data needs temporary disk headroom | Check free disk on ClickHouse nodes before starting the backfill and track usage during the run against the upgrade guide's headroom advice. |
Questions buyers ask before connecting LiteLLM to Langfuse
What drives the cost of connecting LiteLLM to Langfuse?
The number of gateways, providers and environments drives most of the cost. Each LiteLLM proxy needs its callback configured, its Langfuse credentials handled and its traces checked. Each additional provider adds model names, pricing data and verification. The Langfuse deployment target also matters: a single-VM Docker Compose setup is documented for testing without high availability, while production deployments use Kubernetes with Helm or Terraform. SSO, server-side masking and Enterprise license scope add configuration and review work. Ask every quote to list the gateways, providers, Langfuse target and identity requirements it assumes, and to separate one-time setup from any recurring support or retainer fees.
How long does a single gateway connection take to validate?
Validation time depends mostly on how ready the environment already is. A connection needs a reachable Langfuse endpoint, issued project keys, a LiteLLM proxy with the langfuse_otel callback enabled, and at least one model route that produces traffic. If those pieces exist and access is granted quickly, validation is short. If Langfuse is still being deployed, network paths are unclear or provider keys need approval, the timeline grows. We do not give a fixed duration here because it follows from the environment and the agreed written scope. Ask for a quote that names the readiness checks and the evidence that closes each one.
What does our team need to provide before integration work starts?
Three things are needed: environment access, key custody and a named owner for model pricing. Environment access covers the LiteLLM host or cluster, the Langfuse instance and the secret stores where configuration lives. Key custody means deciding who holds the Langfuse public and secret keys and the LITELLM_MASTER_KEY, which LiteLLM recommends keeping in a secret manager. The pricing owner maintains cost data for the models you route, because cost figures in traces are only as accurate as the pricing mapped to each model. Name these people before the work starts, and confirm change approval and access windows in writing.
Can our internal platform team connect LiteLLM to Langfuse alone?
Yes, a team with LiteLLM and Langfuse operating experience can often do a single-gateway connection without outside help. The core change is configuration: credentials, the LANGFUSE_OTEL_HOST setting for a self-hosted endpoint and the callback in the proxy configuration. The harder parts are usually outside that change: sizing Langfuse, deciding how keys are stored, handling multiple proxy instances and proving that cost and latency data are correct. Teams often bring in a partner for the first gateway to set a pattern, then repeat it internally. Assess this against your own skills, staffing and deadlines, and ask any partner to state which parts of the work they will hand over and how.
Does the basic LiteLLM callback require a Langfuse Enterprise license?
The supplied information does not show that basic tracing needs a Langfuse Enterprise key. Langfuse states that core features and APIs are available in the MIT-licensed open source version without limits. Features that require an Enterprise license key include project-level RBAC roles, protected prompt labels, data retention policies, audit logs, server-side data masking, UI customization, and SCIM provisioning through the org management API. If you need any of these, the Enterprise license scope becomes a cost driver. On the LiteLLM side, SSO is free for up to 5 users from v1.76.0, and an Enterprise license is needed beyond that, along with features such as SCIM and audit logs. Confirm the license terms for the exact LiteLLM and Langfuse components you plan to run before you commit.
What breaks first when LiteLLM runs on more than one proxy instance?
Shared state is the usual failure point, so Redis and the database need to be planned before scaling out. LiteLLM names PostgreSQL as its primary supported database and requires Redis 7.0 or newer once more than one proxy instance runs, because shared rate limits, router state and cache depend on it. Virtual keys, budgets and spend tracking also need PostgreSQL. LiteLLM batches spend updates to the database every 60 seconds at scale, so spend views can lag briefly. Its guidance is to run one Uvicorn worker per pod on Kubernetes and scale horizontally. Before go-live, check that every instance sends traces to the same Langfuse endpoint, that keys are consistent across instances, and that rate limits behave as expected under load.
Who should own model pricing when Langfuse reports cost?
A named owner in your organization should own model pricing, because cost in traces depends on it. The integration captures token usage, cost and latency for each call routed through the proxy, but the cost figure is only correct if the model price data matches what you pay. Negotiated rates, private models and newly added providers are the most common gaps. The owner should decide how prices are updated, who approves changes, and how a missing or wrong price is reported. Ask the implementer to show where pricing is configured in your setup, which models currently lack a price, and how the team will verify a sample of cost figures against provider invoices.
How DeployOpen scopes and delivers the LiteLLM to Langfuse integration
DeployOpen plans and delivers the LiteLLM proxy to self-hosted Langfuse connection inside your own infrastructure, with the Langfuse and LiteLLM deployments themselves either already in place or scoped alongside it. Engagements are fixed-scope, so the routes, callback configuration, verification steps and handover items are agreed in writing before work starts.
How we scope
- Confirm which LiteLLM deployment, Langfuse deployment and OTEL endpoint the integration will use.
- Agree in writing which model providers, proxy instances and projects produce traces.
- Record what data reaches Langfuse, including prompts, completions and user identifiers, for your review.
How we build
- Configure Langfuse keys and LANGFUSE_OTEL_HOST on the proxy, and enable the langfuse_otel callback in litellm_config.yaml.
- Keep the Langfuse secret key in your secret manager, not in plain configuration files.
- Test token usage, cost and latency capture on representative model calls before enabling production traffic.
How we hand over
- Deliver the configuration, callback settings and secret locations as documented, reviewable artifacts.
- Document how to confirm traces arrive in Langfuse and how to troubleshoot missing spans.
- Walk your operations team through the gateway and Langfuse versions that must be kept in step.
How we support
- Offer ongoing support, upgrades and testing as a retainer after handover, if you want it.
- Plan LiteLLM and Langfuse version changes together, checking each release's compatibility notes first.
- Confirm with your own team and the vendors which support terms apply to your deployment tier.

