Safely handle non-JSON serializable tag arguments in LLMObs.annotate()
and the OpenAI/LangChain/Bedrock/Anthropic integrations.
- LLMObs.annotate(): we previously just discarded the entire argument to
annotate if the argument was non-JSON serializable. Now, we safely
convert non-JSON serializable fields/objects to a default placeholder
text, meaning users can still send *some* data even if some of it may be
invalid.
- Same idea with each integration, we ensure we safely handle non-JSON
serializable args and default to placeholder texts if necessary.
- We've moved all json.dumps() call into a private helper `safe_json()`
which does the above for us.
Note: This PR removes some tests in `test_llmobs_service.py` regarding
truly unserializable objects as this is highly unlikely, someone would
have to go out of their way to make a truly unserializable object (i.e.
override `__repr__()` with a non-json serializable value). We still
catch these so any resulting crashes should not be from our code.
- [x] PR author has checked that all the criteria below are met
- The PR description includes an overview of the change
- The PR description articulates the motivation for the change
- The change includes tests OR the PR description describes a testing
strategy
- The PR description notes risks associated with the change, if any
- Newly-added code is easy to change
- The change follows the [library release note
guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html)
- The change includes or references documentation updates if necessary
- Backport labels are set (if
[applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting))
- [x] Reviewer has checked that all the criteria below are met
- Title is accurate
- All changes are related to the pull request's stated goal
- Avoids breaking
[API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces)
changes
- Testing strategy adequately addresses listed risks
- Newly-added code is easy to change
- Release note makes sense to a user of the library
- If necessary, author has acknowledged and discussed the performance
implications of this PR as reported in the benchmarks PR comment
- Backport labels are set in a manner that is consistent with the
[release branch maintenance
policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)