Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 11 additions & 8 deletions src/harness_sdk/config/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,14 +97,17 @@ def build_config():

plugins_config = config_dict.pop('plugins', {})
gen_ai_config = config_dict.get('gen_ai', {})
enabled_ai_frameworks = gen_ai_config.pop('enabled_frameworks', [])
if not isinstance(enabled_ai_frameworks, list):
enabled_ai_frameworks = []
enabled_ai_frameworks = [
str(name).strip()
for name in enabled_ai_frameworks
if str(name).strip()
]
if 'enabled_frameworks' in gen_ai_config:
enabled_ai_frameworks = gen_ai_config.pop('enabled_frameworks', [])
if not isinstance(enabled_ai_frameworks, list):
enabled_ai_frameworks = []
enabled_ai_frameworks = [
str(name).strip()
for name in enabled_ai_frameworks
if str(name).strip()
]
else:
enabled_ai_frameworks = None

enabled_control_plugins = _parse_plugin_env('CONTROL_PLUGINS')
if enabled_control_plugins is None:
Expand Down
2 changes: 1 addition & 1 deletion src/harness_sdk/config/default.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
'deployment_name': '',
},
'gen_ai': {
'enabled_frameworks': [],
'enabled': True,
'payload_capture_enabled': False,
'payload_evaluation_enabled': True,
},
Expand Down
21 changes: 16 additions & 5 deletions src/harness_sdk/instrumentation/instrumentation_definitions.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,17 +71,28 @@ def any_ai_provider_enabled(enabled_ai_frameworks=None):
)


def _is_gen_ai_master_enabled() -> bool:
"""Return False when gen_ai.enabled / HA_GEN_AI_ENABLED resolves to disabled."""
from harness_sdk.config.config import Config # pylint: disable=import-outside-toplevel

return Config().config.gen_ai.enabled.value


def is_library_enabled(library_key, enabled_ai_frameworks=None):
"""Decide whether a supported library should be instrumented based on opt-in env flags."""
if library_key in AI_LIBRARY_ENV_FLAGS:
if not _is_gen_ai_master_enabled():
return False
if enabled_ai_frameworks is not None:
configured_frameworks = {
_normalize_library_name(name)
for name in enabled_ai_frameworks
}
return _normalize_library_name(library_key) in configured_frameworks
env_flag = AI_LIBRARY_ENV_FLAGS[library_key]
if is_enable_flag_present(env_flag):
return is_harness_flag_enabled(env_flag)
configured_frameworks = {
_normalize_library_name(name)
for name in (enabled_ai_frameworks or [])
}
return _normalize_library_name(library_key) in configured_frameworks
return False
if library_key in API_LIBRARIES:
return is_api_instrumentation_enabled()
return False
Expand Down
24 changes: 18 additions & 6 deletions test/instrumentation/test_opt_in_gating.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,18 +55,30 @@ def test_config_enables_ai_provider_when_env_is_unset():
assert any_ai_provider_enabled(["openai"]) is True


def test_explicit_ai_env_false_overrides_config():
def test_explicit_ai_env_false_does_not_disable_configured_allowlist():
os.environ["HARNESS_ENABLE_AI_OPENAI"] = "false"

assert is_library_enabled(OPENAI_KEY, ["openai"]) is False
assert any_ai_provider_enabled(["openai"]) is False
assert is_library_enabled(OPENAI_KEY, ["openai"]) is True
assert any_ai_provider_enabled(["openai"]) is True


def test_explicit_ai_env_true_overrides_config():
def test_explicit_ai_env_true_does_not_override_empty_config_allowlist():
os.environ["HARNESS_ENABLE_AI_OPENAI"] = "true"

assert is_library_enabled(OPENAI_KEY, []) is True
assert any_ai_provider_enabled([]) is True
assert is_library_enabled(OPENAI_KEY, []) is False
assert any_ai_provider_enabled([]) is False


def test_gen_ai_master_switch_disables_all_ai_providers():
from harness_sdk.config.config import Config

Config._instance = None
os.environ["HA_GEN_AI_ENABLED"] = "false"
os.environ["HARNESS_ENABLE_AI_OPENAI"] = "true"
Config()

assert is_library_enabled(OPENAI_KEY) is False
assert any_ai_provider_enabled() is False


def test_flag_requires_exact_true_value():
Expand Down
Loading