Skip to main content

launchdarkly-ai-langchain-messages

LangChain handler for launchdarkly-ai-server using LangChain chat models (langchain-core). Works with any BaseChatModel — defaults to ChatOpenAI. Runs a manual tool-call loop using LangChain's bind_tools API.

provides_for: ['*', 'messages'] — matches any flag variation where meta.mode is "messages" and no more-specific handler is registered. LangChain is a framework adapter, not a provider: it routes through langchain-anthropic, langchain-openai, and others at runtime based on config.provider.name. Use '*' so that flags configured with provider.name = "Anthropic" or "OpenAI" are automatically handled without requiring a separate native handler.

Installation

pip install launchdarkly-ai-server launchdarkly-ai-langchain-messages

The default model is ChatOpenAI, so set OPENAI_API_KEY unless you pass a custom BaseChatModel.

Usage

With the default model (ChatOpenAI)

import asyncio
from launchdarkly_ai_server import config, shutdown
from launchdarkly_ai_langchain_messages import create_langchain_messages_handler

async def main():
    result = await config(
        key="my-ai-config-flag",
        handler=create_langchain_messages_handler(),
    ).invoke("What is feature flagging?", {"kind": "user", "key": "user-123"})

    print(result.response)
    await shutdown()

asyncio.run(main())

With a custom BaseChatModel

from langchain_anthropic import ChatAnthropic
from launchdarkly_ai_langchain_messages import create_langchain_messages_handler

handler = create_langchain_messages_handler(ChatAnthropic(model="claude-opus-4-5"))

A constructed instance cannot see flag parameters. Pass a function instead if the model should be built after evaluation:

handler = create_langchain_messages_handler(
    lambda config: ChatAnthropic(
        **{
            **(config["model"].get("parameters") or {}),
            "model": config["model"]["name"],
        }
    )
)

Convenience wrapper

import asyncio
from launchdarkly_ai_langchain_messages import langchain_messages

async def main():
    user_input = "What is feature flagging?"
    result = await langchain_messages(
        user_input,
        {"kind": "user", "key": "user-123"},
        {"key": "my-ai-config-flag"},
        variables={"user_input": user_input},
    )
    print(result.response)

asyncio.run(main())

How It Works

  • Uses the system prompt and conversation history defined in your LaunchDarkly flag config.
  • Template placeholders ({{variable}}) in the prompt are substituted using variables before the call.
  • If tools are defined in the flag config, binds them to the model and executes them as requested, feeding results back until the model produces a final response.
  • Emits an OTel span and LaunchDarkly telemetry for every call.

Choosing Between langchain-agents and langchain-messages

langchain-agents langchain-messages
Orchestration LangGraph StateGraph Manual tool loop
Reasoning style ReAct (reason + act cycles) Single invoke per tool round-trip
Best for Complex multi-step reasoning Straightforward tool calls

Environment Variables

Variable Description
OPENAI_API_KEY Required when using the default ChatOpenAI model
LD_SDK_KEY LaunchDarkly server-side SDK key
LD_SERVICE_NAME OTel service.name resource attribute (default: python-sdk)
LD_ENVIRONMENT deployment.environment attribute attached to telemetry
OTEL_EXPORTER_OTLP_ENDPOINT OTLP endpoint override (default: LaunchDarkly Observability backend)

Metadata

Release files for launchdarkly-ai-langchain-messages 0.2.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for launchdarkly-ai-langchain-messages 0.2.3
File Size Uploaded
launchdarkly_ai_langchain_messages-0.2.3.tar.gz 36.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for launchdarkly-ai-langchain-messages 0.2.3
File Interpreter ABI Platform
launchdarkly_ai_langchain_messages-0.2.3-py3-none-any.whl Python 3 none any Details

Total release size: 54.9 kB

Release files / launchdarkly_ai_langchain_messages-0.2.3.tar.gz

Download URL launchdarkly_ai_langchain_messages-0.2.3.tar.gz
Size 36.7 kB
Tags Source
SHA-256 checksum
How to use checksums
6260ada0a6f566032d8216a146f6dca5d7bbd44e79df7a4aa21db2fdd39d6ba1
BLAKE2b-256 checksum
How to use checksums
8e3e6feeadc2e43363e7ea7a5d830c6f3a0eeffa4db72bd3e6490f4468c17875
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / launchdarkly_ai_langchain_messages-0.2.3-py3-none-any.whl

Download URL launchdarkly_ai_langchain_messages-0.2.3-py3-none-any.whl
Size 18.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8e89f9a1fc6e6715c41aba78cb160c6b7c65214e0d792ddac85fb85d353813fe
BLAKE2b-256 checksum
How to use checksums
ecee7e4a6d3e6349e8602c64fc396e043e3b328d11ffdc0615693de0f3677d49
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

0.2.4

2 release files

This release

0.2.3 This release

2 release files

0.2.2

2 release files

0.1.4

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page