Skip to content

Latest commit

 

History

History
80 lines (56 loc) · 3.7 KB

File metadata and controls

80 lines (56 loc) · 3.7 KB

launchdarkly-ai-python

Convenience barrel package for the LaunchDarkly AI Python SDK. Re-exports the complete public API of launchdarkly-ai-server — install this instead of launchdarkly-ai-server for the simplest setup.

Installation

pip install launchdarkly-ai-python launchdarkly-ai-openai-messages

To enable trace export to the LaunchDarkly Observability dashboard, install the otel extras group:

pip install "launchdarkly-ai-python[otel]"

init_client() detects the OTel packages at runtime and configures tracing automatically. If the extras are not installed, a single warning is logged and all AI calls continue normally with no-op spans.

Usage

Import everything from launchdarkly_ai_python instead of launchdarkly_ai_server:

import asyncio
from launchdarkly_ai_python import config, graph, resolve_graph
from launchdarkly_ai_python import init_client, shutdown, global_registry
from launchdarkly_ai_openai_messages import create_openai_messages_handler

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

    print(result.response)
    await shutdown()

asyncio.run(main())

inspect_config(key, context)

Reads an AI Config flag variation without invoking any AI provider. Re-exported from launchdarkly-ai-server — see the full reference there.

from launchdarkly_ai_python import inspect_config

result = await inspect_config("my-ai-config-flag", {"kind": "user", "key": "user-123"})
if result["enabled"]:
    print(result["config"]["model"]["name"])

Never raises. Returns {"enabled": bool, "config": dict | None, "meta": dict | None}.

Evaluations from code

init_evaluations, the criterion types, and the evaluations result types are all re-exported:

from launchdarkly_ai_python import Judge, Scorer, init_evaluations

evals = init_evaluations()
result = await evals.run(
    project_key="my-project",
    key="unique-evaluation-key",
    dataset="golden-dataset",
    handler=my_handler,
    generation={"provider": "OpenAI", "model": "gpt-4o"},
    criteria=[
        Judge(key="accuracy-judge"),
        Scorer(name="mentions-policy", fn=lambda row, output: "policy" in (output or "")),
    ],
)

LD_API_TOKEN is required. Configure LD_SDK_KEY — or initialize your own client with init_client(client=...) — to emit one $ld:ai:offline-evals:generation event per generated row, plus one $ld:ai:offline-evals:criterion event per (row, criterion) when criteria are supplied, through the standard SDK event transport. The SDK reports scores; LaunchDarkly rules on them at ingest. A judge served by a different provider than generation needs a handler for it in judge_handlers. Each row's tool calls are recorded during generation and rendered into the judge's {{message_history}}, between the row input and the generated output, so a rubric can grade the tool trajectory as well as the final answer. Use LD_API_BASE_URI for staging or local management API traffic; it is separate from the SDK delivery setting LD_BASE_URI. Evaluation-run links use the explicit ui_base_uri option or LD_UI_BASE_URI, defaulting to https://app.launchdarkly.com; set it when the project is not in production, or a run created elsewhere still links to the production app. See the core evaluations guide.


All exports, types, and behaviors are identical to launchdarkly-ai-server. See the core client README for the full API reference.