Skip to content

google_genai and pydantic init_logger unconditionally called during auto_instrument #168

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>

Metadata

Metadata

Labels

No labels
No labels

Type

Fields

No fields configured for Bug.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions