Skip to main content

LangChain integration for Prefactor observability

Project description

prefactor-langchain

LangChain integration for Prefactor observability. This package provides automatic tracing for LangChain agents using LangChain-specific span types.

Installation

pip install prefactor-langchain

Usage

Factory pattern (quickest setup)

from prefactor_langchain import PrefactorMiddleware

middleware = PrefactorMiddleware.from_config(
    api_url="https://api.prefactor.ai",
    api_token="your-api-token",
    agent_id="my-agent",
    agent_name="My Agent",  # optional
)

# Use with LangChain's create_agent()
# Your agent will automatically create spans for:
# - Agent execution (langchain:agent)
# - LLM calls (langchain:llm)
# - Tool executions (langchain:tool)

result = agent.invoke({"messages": [...]})

# Middleware owns both client and instance; close when done
await middleware.close()

Pre-configured client

Pass a client you created yourself when you need full control over its configuration or when you want to share a client across multiple middlewares.

from prefactor_core import PrefactorCoreClient, PrefactorCoreConfig
from prefactor_http.config import HttpClientConfig
from prefactor_langchain import PrefactorMiddleware

http_config = HttpClientConfig(api_url="https://api.prefactor.ai", api_token="your-api-token")
config = PrefactorCoreConfig(http_config=http_config)
client = PrefactorCoreClient(config)
await client.initialize()

middleware = PrefactorMiddleware(
    client=client,
    agent_id="my-agent",
    agent_name="My Agent",
)

result = agent.invoke({"messages": [...]})

# You own the client; close both separately
await middleware.close()  # closes the agent instance only
await client.close()

Pre-configured instance (spans outside the agent)

Pass an AgentInstanceHandle you created yourself when you also need to instrument code that lives outside the LangChain agent — for example, pre-processing steps, post-processing, or any custom business logic that should appear as siblings of the agent spans in the same trace.

from prefactor_core import PrefactorCoreClient, PrefactorCoreConfig
from prefactor_http.config import HttpClientConfig
from prefactor_langchain import PrefactorMiddleware

http_config = HttpClientConfig(api_url="https://api.prefactor.ai", api_token="your-api-token")
config = PrefactorCoreConfig(http_config=http_config)
client = PrefactorCoreClient(config)
await client.initialize()

instance = await client.create_agent_instance(agent_id="my-agent")
await instance.start()

# Share the instance with the middleware
middleware = PrefactorMiddleware(instance=instance)

# Instrument your own code using the same instance
async with instance.span("custom:preprocessing") as ctx:
    ctx.set_payload({"step": "preprocess", "status": "ok"})

# Run your agent — the middleware traces it automatically under the same instance
result = agent.invoke({"messages": [...]})

async with instance.span("custom:postprocessing") as ctx:
    ctx.set_payload({"step": "postprocess", "result": str(result)})

# You own the instance and client; clean them up yourself
await instance.finish()
await client.close()

Span Types

This package creates LangChain-specific spans with the langchain:* namespace:

  • langchain:agent - Agent executions and chain runs
  • langchain:llm - LLM calls with model metadata (name, provider, token usage)
  • langchain:tool - Tool executions including retrievers

Each span payload includes:

  • Timing information (start_time, end_time)
  • Inputs and outputs
  • Error information with stack traces
  • LangChain-specific metadata

Trace correlation (span_id, parent_span_id, trace_id) is handled automatically by the prefactor-core client.

Features

  • Automatic LLM call tracing - Captures model name, provider, token usage, temperature
  • Tool execution tracing - Records tool name, arguments, execution time
  • Agent/chain tracing - Tracks agent lifecycle and message history
  • Token usage capture - Automatically extracts prompt/completion/total tokens
  • Error tracking - Captures error type, message, and stack traces
  • Automatic parent-child relationships - Uses SpanContextStack for hierarchy
  • Bring your own instance - Share a single AgentInstanceHandle between the middleware and your own instrumentation

Architecture

This package follows the LangChain Adapter Redesign principles:

  1. Package Isolation: LangChain-specific span types and schemas live in this package
  2. Opaque Payloads: Span data is sent as payload to prefactor-core
  3. Type Namespacing: Uses langchain:agent, langchain:llm, langchain:tool prefixes
  4. Uses prefactor-core: All span/instance management via the prefactor-core client

The middleware:

  1. Accepts a PrefactorCoreClient, or a pre-created AgentInstanceHandle, or creates its own client via from_config()
  2. Registers or borrows an agent instance
  3. Creates spans with LangChain-specific payloads
  4. Leverages SpanContextStack for automatic parent detection

Development

Run tests:

pytest tests/

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

prefactor_langchain-0.2.3.tar.gz (20.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

prefactor_langchain-0.2.3-py3-none-any.whl (15.3 kB view details)

Uploaded Python 3

File details

Details for the file prefactor_langchain-0.2.3.tar.gz.

File metadata

  • Download URL: prefactor_langchain-0.2.3.tar.gz
  • Upload date:
  • Size: 20.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"25.10","id":"questing","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for prefactor_langchain-0.2.3.tar.gz
Algorithm Hash digest
SHA256 3952065fce07a14a99de46c49926937ac1a69e2cd40d506afba19bd7400e2f68
MD5 34889dc967ba08fa0e34a486ef840f9a
BLAKE2b-256 185eccd3c73947f4498d2af6cef241b846c3ef44e7fc5169f94f0201104433b0

See more details on using hashes here.

File details

Details for the file prefactor_langchain-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: prefactor_langchain-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 15.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"25.10","id":"questing","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for prefactor_langchain-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 5e488021d75f3885f42064c98ef2ee607a32fd8f193cd01bdda70c10748c10d9
MD5 ee5bcc2bc64922a65600276f8376237f
BLAKE2b-256 cfdc5d64fab6ff6a1a5abab75ae959d25fa24c92cf42b88f892e492e9affb3af

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page