Skip to content

task(logger): accept serializable objects as metadata#437

Merged
Barrett Pyke (barrettpyke) merged 5 commits into
mainfrom
barrettpyke/expand-metadata
May 21, 2026
Merged

task(logger): accept serializable objects as metadata#437
Barrett Pyke (barrettpyke) merged 5 commits into
mainfrom
barrettpyke/expand-metadata

Conversation

@barrettpyke
Copy link
Copy Markdown
Contributor

@barrettpyke Barrett Pyke (barrettpyke) commented May 15, 2026

Description

Run metadata through the bt_safe_deep_copy before validating it so Pydantic models and other objects that dump to dictionaries can be logged as metadata.
This change covers:

  • Logger.log
  • Experiment.log
  • Span.log
  • Logger.log_feedback
  • Experiment.log_feedback
  • update_span
  • Dataset.__init__
  • Dataset.insert
  • Dataset.update

Testing

  • Added type tests
  • Added unit tests for the following:
    • Mocked Pydantic model_dump behavior to avoid needing dependency:
      • span.log
      • logger.log
      • experiment.log
      • logger.log_feedback
      • experiment.log_feedback
      • dataset.insert
      • dataset.update
    • reject metadata with non string keys
    • reject metadata that does not serialize into dict
    • test span.log with actual pydantic model
  • Manually tested the repro script

Comment thread py/src/braintrust/logger.py
Comment thread py/src/braintrust/logger.py Outdated
Comment thread py/src/braintrust/logger.py Outdated
…lean up validation method, fix dataset validation
Comment thread py/src/braintrust/types/__init__.py Outdated
@barrettpyke Barrett Pyke (barrettpyke) merged commit 4079ffa into main May 21, 2026
82 checks passed
@barrettpyke Barrett Pyke (barrettpyke) deleted the barrettpyke/expand-metadata branch May 21, 2026 18: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.

Allow Span.log metadata to serialize Pydantic models

2 participants