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"))
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 usingvariablesbefore 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.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| launchdarkly_ai_langchain_messages-0.2.2.tar.gz | 33.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| launchdarkly_ai_langchain_messages-0.2.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 50.7 kB
Release files / launchdarkly_ai_langchain_messages-0.2.2.tar.gz
| Download URL | launchdarkly_ai_langchain_messages-0.2.2.tar.gz |
|---|---|
| Size | 33.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ed4bdaebeece400d1c08f0be2dda9de0181189fd8748e42df3d5ceac884da56c
|
|
BLAKE2b-256 checksum How to use checksums |
ea7fbf121e75dea25dd66c9d13c8c3bbc46f928881a74cf88a402fe4c1360226
|
| 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.2-py3-none-any.whl
| Download URL | launchdarkly_ai_langchain_messages-0.2.2-py3-none-any.whl |
|---|---|
| Size | 17.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8c0a544c9ffaad6117444e7eeef828cb98e8d07e090688fe9cac9b3732a124eb
|
|
BLAKE2b-256 checksum How to use checksums |
4a1544560fb86fb1db8ab8379a1f9efe0a8981b3fb7ee3f46f77a1aea319df62
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|