Files
cleveragents-core/features/steps/langsmith_config_steps.py
T

101 lines
3.8 KiB
Python

from __future__ import annotations
import os
from typing import Any
from behave import given, then, when
from cleveragents.config import settings as settings_module
from features.environment import LANGSMITH_ENV_VARS
def _ensure_env_tracking(context: Any) -> None:
if not hasattr(context, "env_vars_to_clean"):
context.env_vars_to_clean = []
@given("LangSmith environment is clean")
def step_clear_langsmith_env(context):
_ensure_env_tracking(context)
for key in LANGSMITH_ENV_VARS:
os.environ.pop(key, None)
context.env_vars_to_clean.clear()
@given('I set environment variable "{name}" to "{value}"')
def step_set_env_var(context, name: str, value: str):
_ensure_env_tracking(context)
os.environ[name] = value
context.env_vars_to_clean.append(name)
@when("I load CleverAgents settings for LangSmith")
def step_load_settings(context):
settings_module.Settings._instance = None
context.langsmith_settings = settings_module.get_settings()
@when('I build a LangSmith config with run name "{run_name}"')
def step_build_langsmith_config(context, run_name: str):
settings_obj = getattr(context, "langsmith_settings", None)
assert settings_obj is not None, "LangSmith settings not loaded"
context.langsmith_config = settings_obj.build_langsmith_config(
tags=["context-analysis", "behave-test"],
metadata={"scenario": "langsmith_config", "run_name": run_name},
run_name=run_name,
)
@then("LangSmith tracing should be disabled")
def step_assert_tracing_disabled(context):
settings_obj = getattr(context, "langsmith_settings", None)
assert settings_obj is not None, "LangSmith settings not loaded"
assert not settings_obj.is_langsmith_enabled, "Tracing unexpectedly enabled"
@then("LangSmith tracing should be enabled")
def step_assert_tracing_enabled(context):
settings_obj = getattr(context, "langsmith_settings", None)
assert settings_obj is not None, "LangSmith settings not loaded"
assert settings_obj.is_langsmith_enabled, "Tracing was not enabled"
@then('the LangSmith config should include tag "{tag}"')
def step_assert_config_tag(context, tag: str):
config = getattr(context, "langsmith_config", None)
assert config, "LangSmith config was not built"
tags = config.get("tags", [])
assert tag in tags, f"Expected tag '{tag}' in {tags}"
@then('the LangSmith config should include metadata key "{key}"')
def step_then_the_langsmith_config_should_include_metadata_key(context, key):
config = getattr(context, "langsmith_config", None)
assert config, "LangSmith config was not built"
metadata = config.get("metadata", {})
assert key in metadata, f"Expected metadata key '{key}' in {metadata}"
@then('the LangSmith config should include metadata value "{value}" for key "{key}"')
def step_assert_langsmith_metadata_value(context, value: str, key: str):
config = getattr(context, "langsmith_config", None)
assert config, "LangSmith config was not built"
metadata = config.get("metadata", {})
actual = metadata.get(key)
assert actual == value, f"Expected metadata {key}={value}, received {actual}"
@then('the LangSmith validation errors should mention "{message}"')
def step_assert_langsmith_validation_errors(context, message: str):
settings_obj = getattr(context, "langsmith_settings", None)
assert settings_obj is not None, "LangSmith settings not loaded"
errors = settings_obj.langsmith_validation_errors
assert errors, "Expected validation errors but none recorded"
assert any(message in err for err in errors), errors
@then('the environment variable "{name}" should equal "{value}"')
def step_assert_environment_variable(context, name: str, value: str):
actual = os.getenv(name)
assert actual == value, f"Expected {name}={value}, received {actual}"