-
Notifications
You must be signed in to change notification settings - Fork 1
Description
span = current_span()
if span == NOOP_SPAN:
init_logger(project=project_name, ...)There's almost never an active span at initialization time, so this always fires — overwriting whatever logger the user already set up.
With this list of installed pkg (empty venv + pip install braintrust):
attrs==26.1.0
braintrust==0.11.0
certifi==2026.2.25
charset-normalizer==3.4.6
chevron==0.14.0
exceptiongroup==1.3.1
gitdb==4.0.12
gitpython==3.1.46
idna==3.11
jsonschema==4.26.0
jsonschema-specifications==2025.9.1
packaging==26.0
pip==26.0.1
python-dotenv==1.2.2
python-slugify==8.0.4
referencing==0.37.0
requests==2.33.0
rpds-py==0.30.0
smmap==5.0.3
sseclient-py==1.9.0
text-unidecode==1.3
tqdm==4.67.3
typing-extensions==4.15.0
urllib3==2.6.3
wrapt==2.1.2
and this demo file:
import braintrust
from braintrust import logger as bt_logger
import braintrust.wrappers.pydantic_ai as pai_mod
import inspect
original_init = bt_logger.init_logger
def traced_init(*args, **kwargs):
print(f"\ninit_logger(project={kwargs.get('project')!r}) called from:")
for frame_info in inspect.stack()[1:6]:
frame = frame_info.frame
local_vars = frame.f_locals
relevant = {k: v for k, v in local_vars.items()
if k in ('project', 'project_name', 'api_key', 'project_id')}
print(f" {frame_info.filename}:{frame_info.lineno} in {frame_info.function}")
if relevant:
print(f" locals: {relevant}")
return original_init(*args, **kwargs)
bt_logger.init_logger = traced_init
pai_mod.init_logger = traced_init
bt_logger.init_logger(project="my-project")
braintrust.auto_instrument()python demo.py:
init_logger(project='my-project') called from:
/Users/cedric@braintrustdata.com/repos/braintrust-sdk-python/demo-logger2.py:23 in <module>
init_logger(project=None) called from:
/Users/cedric@braintrustdata.com/repos/braintrust-sdk-python/venv/lib/python3.13/site-packages/braintrust/wrappers/pydantic_ai.py:38 in setup_pydantic_ai
locals: {'api_key': None, 'project_id': None, 'project_name': None}
/Users/cedric@braintrustdata.com/repos/braintrust-sdk-python/venv/lib/python3.13/site-packages/braintrust/auto.py:155 in _instrument_pydantic_ai
/Users/cedric@braintrustdata.com/repos/braintrust-sdk-python/venv/lib/python3.13/site-packages/braintrust/auto.py:114 in auto_instrument
/Users/cedric@braintrustdata.com/repos/braintrust-sdk-python/demo-logger2.py:24 in <module>
init_logger(project=None) called from:
/Users/cedric@braintrustdata.com/repos/braintrust-sdk-python/venv/lib/python3.13/site-packages/braintrust/wrappers/google_genai/__init__.py:36 in setup_genai
locals: {'api_key': None, 'project_id': None, 'project_name': None}
/Users/cedric@braintrustdata.com/repos/braintrust-sdk-python/venv/lib/python3.13/site-packages/braintrust/auto.py:163 in _instrument_google_genai
/Users/cedric@braintrustdata.com/repos/braintrust-sdk-python/venv/lib/python3.13/site-packages/braintrust/auto.py:116 in auto_instrument
/Users/cedric@braintrustdata.com/repos/braintrust-sdk-python/demo-logger2.py:24 in <module>
Where we can see init_logger(project=None) being called from setup_genai and from pydantic_ai during auto_instrument(), overriding init_logger(project="my-project").
When executing the same file with braintrust.auto_instrument(google_genai=False), we get a normal trace:
init_logger(project='my-project', pydantic_ai=False) called from:
/Users/cedric@braintrustdata.com/repos/braintrust-sdk-python/demo-logger2.py:21 in <module>