Skip to main content

launchdarkly-ai-openai-agents

OpenAI handler for launchdarkly-ai-server using the OpenAI Agents SDK (openai-agents). Delegates the full agentic loop — tool calls, retries, and orchestration — to the Agents SDK.

provides_for: ['OpenAI', 'agent'] — matches flag variations where provider.name is "OpenAI" and meta.mode is "agent".

Installation

pip install launchdarkly-ai-server launchdarkly-ai-openai-agents

Set OPENAI_API_KEY in your environment (the OpenAI SDK reads it automatically).

Usage

With config()

import asyncio
from launchdarkly_ai_server import config, shutdown
from launchdarkly_ai_openai_agents import create_openai_agent_handler

async def main():
    result = await config(
        key="my-ai-config-flag",
        handler=create_openai_agent_handler(),
        tool_handlers={"search": lambda q: "..."},
    ).invoke("Summarize today's changelog", {"kind": "user", "key": "user-123"})

    print(result.response)
    await shutdown()

asyncio.run(main())

Tool handlers may be sync or async. Sync handlers run on the event-loop thread, so blocking I/O stalls the agent. Keep graph __handoff_* handlers synchronous: routing records the selected edge on the call itself, and moving them onto asyncio.to_thread would break that.

Convenience wrapper

import asyncio
from launchdarkly_ai_openai_agents import openai_agents

async def main():
    user_input = "Summarize today's changelog"
    result = await openai_agents(
        user_input,
        {"kind": "user", "key": "user-123"},
        {"key": "my-ai-config-flag"},
        variables={"user_input": user_input},
    )
    print(result.response)

asyncio.run(main())

Agent graphs — openai_graph()

Runs a LaunchDarkly agent graph with the OpenAI agent handler pre-bound. Equivalent to calling the base graph() with handlers=[create_openai_agent_handler()]. See the core client docs for the full graph() API.

import asyncio
from launchdarkly_ai_openai_agents import openai_graph

async def main():
    result = await openai_graph("support-graph").invoke(
        "I was double charged",
        {"kind": "user", "key": "user-123"},
    )
    print(result["response"])

asyncio.run(main())

Native graph adapter — to_openai_agents()

Converts a resolve_graph() result into a framework-native OpenAI Agents swarm (post-order traversal: leaves → root). Children are wired as handoffs; the root is run with Runner.run.

import asyncio
from launchdarkly_ai_server import resolve_graph
from launchdarkly_ai_openai_agents import to_openai_agents

async def main():
    ctx = {"kind": "user", "key": "user-123"}
    result = await to_openai_agents(
        resolve_graph("support-graph", context=ctx),
        {"tool_handlers": registry.tools, "context": ctx},
    ).call("I was double charged")
    print(result["response"])

asyncio.run(main())

How It Works

  • Uses the system prompt and tools defined in your LaunchDarkly flag config.
  • Template placeholders ({{variable}}) in the prompt are substituted using variables before the call.
  • The OpenAI Agents SDK manages the full agentic loop — tool dispatch, re-prompting, and termination — automatically.
  • Emits an OTel span and LaunchDarkly telemetry for every call.

Choosing Between openai-agents and openai-messages

openai-agents openai-messages
Underlying SDK openai-agents openai (Responses API)
Tool loop Managed by Agents SDK Executed and fed back manually
Complexity Lower (SDK manages loop) More explicit control

Environment Variables

Variable Description
OPENAI_API_KEY OpenAI API key (read automatically by the OpenAI SDK)
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-openai-agents 0.2.5

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-openai-agents 0.2.5
File Size Uploaded
launchdarkly_ai_openai_agents-0.2.5.tar.gz 46.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for launchdarkly-ai-openai-agents 0.2.5
File Interpreter ABI Platform
launchdarkly_ai_openai_agents-0.2.5-py3-none-any.whl Python 3 none any Details

Total release size: 69.8 kB

Release files / launchdarkly_ai_openai_agents-0.2.5.tar.gz

Download URL launchdarkly_ai_openai_agents-0.2.5.tar.gz
Size 46.2 kB
Tags Source
SHA-256 checksum
How to use checksums
da376a852f8ab307503265188c68d232547341d4c0a942e04ff0cde4791fdeb3
BLAKE2b-256 checksum
How to use checksums
2036f095c4e8c388c8b016111dba1e007270ac935e5636405de8238acade0b9e
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_openai_agents-0.2.5-py3-none-any.whl

Download URL launchdarkly_ai_openai_agents-0.2.5-py3-none-any.whl
Size 23.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7d8506868a76b2bd92857ed3858c9375efe3a5c81a7ee03a9b0a67cf59be6b5c
BLAKE2b-256 checksum
How to use checksums
986a8b5f49b1f48623f67a3474f4cc5acf89784aa0f404b3d6bb3848c272dad7
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

This release

0.2.5 This release

2 release files

0.2.4

2 release files

0.2.3

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