Skip to content

feat: Add RC support for enabling LLMO#17232

Draft
mabdinur wants to merge 3 commits intomainfrom
munir/llm-rc-support
Draft

feat: Add RC support for enabling LLMO#17232
mabdinur wants to merge 3 commits intomainfrom
munir/llm-rc-support

Conversation

@mabdinur
Copy link
Copy Markdown
Contributor

@mabdinur mabdinur commented Mar 31, 2026

Description

Staging POC (M0) for LLMObs 1-click enablement via Remote Configuration.

New: ddtrace/llmobs/product.py — LLMObs RC product that hooks into the existing APM_TRACING RC flow:

  • apm_tracing_rc receives llmobs.enabled / llmobs.ml_app_name from RC and calls LLMObs.enable() / LLMObs.disable() at runtime without a restart
  • _track_enabled_llm_integrations tags the RC client_tracer with active LLM integrations so the backend can identify LLM-capable services for 1-click enablement

ddtrace/llmobs/_llmobs.py — splits SUPPORTED_LLMOBS_INTEGRATIONS (LLM frameworks) from _INTEGRATIONS_W_PROPAGATION_SUPPORT (HTTP adapters)

ddtrace/internal/settings/_config.py — registers _llmobs_enabled and _llmobs_ml_app in _default_config() so RC can override them via the standard config precedence chain

Testing

No tests yet — M0 is validated manually on staging.

Risks

  • Capability bit 1<<48 is a placeholder; must be confirmed with dd-go before GA
  • LLMObs.enable() is called from the RC poll thread (pre-existing thread-safety limitation)

Additional Notes

Requires backend changes in dd-go: extend LibConfig with llmobs.enabled / llmobs.ml_app_name and confirm capability bit.

@cit-pr-commenter-54b7da
Copy link
Copy Markdown

cit-pr-commenter-54b7da bot commented Mar 31, 2026

Codeowners resolved as

ddtrace/llmobs/product.py                                               @DataDog/ml-observability

@datadog-datadog-prod-us1-2
Copy link
Copy Markdown

datadog-datadog-prod-us1-2 bot commented Mar 31, 2026

⚠️ Tests

Fix all issues with BitsAI or with Cursor

⚠️ Warnings

🧪 5 Tests failed

tests.parametric.test_dynamic_configuration.TestDynamicConfigSamplingRules.test_capability_tracing_sample_rules[library_env0, parametric-python] from system_tests_suite   View in Datadog   (Fix with Cursor)
AssertionError: RC capabilities contains unknown bits: 0b1000000000000000000000000000000000000000000000000

self = <tests.parametric.test_dynamic_configuration.TestDynamicConfigSamplingRules object at 0x7f7389790b60>
test_agent = <utils.docker_fixtures._test_agent.TestAgentAPI object at 0x7f73787b6c00>
test_library = <utils.docker_fixtures._test_clients._test_client_parametric.ParametricTestClientApi object at 0x7f73787c0260>

    @parametrize("library_env", [{**DEFAULT_ENVVARS}])
    def test_capability_tracing_sample_rules(self, test_agent: TestAgentAPI, test_library: APMLibrary) -> None:
        """Ensure the RC request contains the trace sampling rules capability."""
        assert test_library.is_alive(), "library container is not alive"
...
❄️ Known flaky: tests.parametric.test_dynamic_configuration.TestDynamicConfigV2.test_capability_tracing_custom_tags[library_env0, parametric-python] from system_tests_suite   View in Datadog   (Fix with Cursor)
AssertionError: RC capabilities contains unknown bits: 0b1000000000000000000000000000000000000000000000000

self = <tests.parametric.test_dynamic_configuration.TestDynamicConfigV2 object at 0x7f73897909e0>
test_agent = <utils.docker_fixtures._test_agent.TestAgentAPI object at 0x7f7378a3c200>
test_library = <utils.docker_fixtures._test_clients._test_client_parametric.ParametricTestClientApi object at 0x7f7378a3d460>

    @parametrize("library_env", [{**DEFAULT_ENVVARS}])
    def test_capability_tracing_custom_tags(self, test_agent: TestAgentAPI, test_library: APMLibrary) -> None:
        """Ensure the RC request contains the custom tags capability."""
        assert test_library.is_alive(), "library container is not alive"
...
tests.parametric.test_dynamic_configuration.TestDynamicConfigV2.test_capability_tracing_http_header_tags[library_env0, parametric-python] from system_tests_suite   View in Datadog   (Fix with Cursor)
AssertionError: RC capabilities contains unknown bits: 0b1000000000000000000000000000000000000000000000000

self = <tests.parametric.test_dynamic_configuration.TestDynamicConfigV2 object at 0x7f73897908c0>
test_agent = <utils.docker_fixtures._test_agent.TestAgentAPI object at 0x7f73787c1b80>
test_library = <utils.docker_fixtures._test_clients._test_client_parametric.ParametricTestClientApi object at 0x7f7378b71190>

    @parametrize("library_env", [{**DEFAULT_ENVVARS}])
    def test_capability_tracing_http_header_tags(self, test_agent: TestAgentAPI, test_library: APMLibrary) -> None:
        """Ensure the RC request contains the http header tags capability."""
        assert test_library.is_alive(), "library container is not alive"
...
View all

ℹ️ Info

No other issues found (see more)

❄️ No new flaky tests detected

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: 048bb42 | Docs | Datadog PR Page | Was this helpful? React with 👍/👎 or give us feedback!

@mabdinur mabdinur force-pushed the munir/llm-rc-support branch from 48f6699 to 4776fdc Compare March 31, 2026 22:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant