-
Notifications
You must be signed in to change notification settings - Fork 470
chore(llmobs): [MLOB-4813] log warning if litellm imported before being patched #15530
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
|
|
Bootstrap import analysisComparison of import times between this PR and base. SummaryThe average import time from this PR is: 222 ± 7 ms. The average import time from base is: 225 ± 6 ms. The import time difference between this PR and base is: -3.0 ± 0.3 ms. Import time breakdownThe following import paths have shrunk:
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
rather than doing the unit-test style scenario for this, it might be closer to reality to try to run a subprocess test case with your repro snippet and assert the stderr output.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the suggestion, I tried that out instead!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nice yes this is much cleaner and less side-effecty to other tests! nice job 😄
Performance SLOsComparing candidate nicole-cybul/litellm-patching-issue (b0f74d0) with baseline main (01850f2) 📈 Performance Regressions (3 suites)📈 iastaspects - 118/118✅ add_aspectTime: ✅ 0.385µs (SLO: <10.000µs 📉 -96.2%) vs baseline: +1.1% Memory: ✅ 38.529MB (SLO: <41.500MB -7.2%) vs baseline: +4.8% ✅ add_inplace_aspectTime: ✅ 0.380µs (SLO: <10.000µs 📉 -96.2%) vs baseline: -0.4% Memory: ✅ 38.532MB (SLO: <41.500MB -7.2%) vs baseline: +4.1% ✅ add_inplace_noaspectTime: ✅ 0.284µs (SLO: <10.000µs 📉 -97.2%) vs baseline: -1.2% Memory: ✅ 38.644MB (SLO: <41.500MB -6.9%) vs baseline: +4.8% ✅ add_noaspectTime: ✅ 0.359µs (SLO: <10.000µs 📉 -96.4%) vs baseline: -0.3% Memory: ✅ 38.576MB (SLO: <41.500MB -7.0%) vs baseline: +5.1% ✅ bytearray_aspectTime: ✅ 1.314µs (SLO: <10.000µs 📉 -86.9%) vs baseline: -0.1% Memory: ✅ 38.570MB (SLO: <41.500MB -7.1%) vs baseline: +4.5% ✅ bytearray_extend_aspectTime: ✅ 1.501µs (SLO: <10.000µs 📉 -85.0%) vs baseline: -1.0% Memory: ✅ 38.601MB (SLO: <41.500MB -7.0%) vs baseline: +5.1% ✅ bytearray_extend_noaspectTime: ✅ 0.618µs (SLO: <10.000µs 📉 -93.8%) vs baseline: -0.4% Memory: ✅ 38.513MB (SLO: <41.500MB -7.2%) vs baseline: +4.8% ✅ bytearray_noaspectTime: ✅ 0.482µs (SLO: <10.000µs 📉 -95.2%) vs baseline: -0.5% Memory: ✅ 38.598MB (SLO: <41.500MB -7.0%) vs baseline: +4.8% ✅ bytes_aspectTime: ✅ 1.271µs (SLO: <10.000µs 📉 -87.3%) vs baseline: +0.9% Memory: ✅ 38.469MB (SLO: <41.500MB -7.3%) vs baseline: +4.6% ✅ bytes_noaspectTime: ✅ 0.496µs (SLO: <10.000µs 📉 -95.0%) vs baseline: -0.1% Memory: ✅ 38.551MB (SLO: <41.500MB -7.1%) vs baseline: +4.3% ✅ bytesio_aspectTime: ✅ 1.307µs (SLO: <10.000µs 📉 -86.9%) vs baseline: -0.2% Memory: ✅ 38.418MB (SLO: <41.500MB -7.4%) vs baseline: +4.4% ✅ bytesio_noaspectTime: ✅ 0.499µs (SLO: <10.000µs 📉 -95.0%) vs baseline: -0.6% Memory: ✅ 38.542MB (SLO: <41.500MB -7.1%) vs baseline: +4.8% ✅ capitalize_aspectTime: ✅ 0.739µs (SLO: <10.000µs 📉 -92.6%) vs baseline: +0.1% Memory: ✅ 38.580MB (SLO: <41.500MB -7.0%) vs baseline: +4.8% ✅ capitalize_noaspectTime: ✅ 0.436µs (SLO: <10.000µs 📉 -95.6%) vs baseline: -0.2% Memory: ✅ 38.600MB (SLO: <41.500MB -7.0%) vs baseline: +5.3% ✅ casefold_aspectTime: ✅ 0.740µs (SLO: <10.000µs 📉 -92.6%) vs baseline: -0.2% Memory: ✅ 38.669MB (SLO: <41.500MB -6.8%) vs baseline: +4.6% ✅ casefold_noaspectTime: ✅ 0.373µs (SLO: <10.000µs 📉 -96.3%) vs baseline: +1.1% Memory: ✅ 38.457MB (SLO: <41.500MB -7.3%) vs baseline: +4.8% ✅ decode_aspectTime: ✅ 0.727µs (SLO: <10.000µs 📉 -92.7%) vs baseline: ~same Memory: ✅ 38.692MB (SLO: <41.500MB -6.8%) vs baseline: +5.3% ✅ decode_noaspectTime: ✅ 0.422µs (SLO: <10.000µs 📉 -95.8%) vs baseline: +0.1% Memory: ✅ 38.353MB (SLO: <41.500MB -7.6%) vs baseline: +4.2% ✅ encode_aspectTime: ✅ 0.715µs (SLO: <10.000µs 📉 -92.9%) vs baseline: -0.2% Memory: ✅ 38.645MB (SLO: <41.500MB -6.9%) vs baseline: +4.9% ✅ encode_noaspectTime: ✅ 0.409µs (SLO: <10.000µs 📉 -95.9%) vs baseline: -1.3% Memory: ✅ 38.599MB (SLO: <41.500MB -7.0%) vs baseline: +4.9% ✅ format_aspectTime: ✅ 3.429µs (SLO: <10.000µs 📉 -65.7%) vs baseline: ~same Memory: ✅ 38.659MB (SLO: <41.500MB -6.8%) vs baseline: +5.0% ✅ format_map_aspectTime: ✅ 3.763µs (SLO: <10.000µs 📉 -62.4%) vs baseline: +5.3% Memory: ✅ 38.509MB (SLO: <41.500MB -7.2%) vs baseline: +4.7% ✅ format_map_noaspectTime: ✅ 0.827µs (SLO: <10.000µs 📉 -91.7%) vs baseline: +1.9% Memory: ✅ 38.549MB (SLO: <41.500MB -7.1%) vs baseline: +4.9% ✅ format_noaspectTime: ✅ 0.594µs (SLO: <10.000µs 📉 -94.1%) vs baseline: -1.1% Memory: ✅ 38.509MB (SLO: <41.500MB -7.2%) vs baseline: +4.9% ✅ index_aspectTime: ✅ 0.345µs (SLO: <10.000µs 📉 -96.6%) vs baseline: +1.0% Memory: ✅ 38.585MB (SLO: <41.500MB -7.0%) vs baseline: +5.1% ✅ index_noaspectTime: ✅ 0.317µs (SLO: <10.000µs 📉 -96.8%) vs baseline: +0.4% Memory: ✅ 38.414MB (SLO: <41.500MB -7.4%) vs baseline: +4.6% ✅ join_aspectTime: ✅ 1.310µs (SLO: <10.000µs 📉 -86.9%) vs baseline: +0.7% Memory: ✅ 38.594MB (SLO: <41.500MB -7.0%) vs baseline: +4.8% ✅ join_noaspectTime: ✅ 0.539µs (SLO: <10.000µs 📉 -94.6%) vs baseline: +1.6% Memory: ✅ 38.448MB (SLO: <41.500MB -7.4%) vs baseline: +4.9% ✅ ljust_aspectTime: ✅ 2.546µs (SLO: <20.000µs 📉 -87.3%) vs baseline: +0.9% Memory: ✅ 38.696MB (SLO: <41.500MB -6.8%) vs baseline: +5.0% ✅ ljust_noaspectTime: ✅ 0.405µs (SLO: <10.000µs 📉 -95.9%) vs baseline: +0.4% Memory: ✅ 38.674MB (SLO: <41.500MB -6.8%) vs baseline: +5.4% ✅ lower_aspectTime: ✅ 2.220µs (SLO: <10.000µs 📉 -77.8%) vs baseline: -0.2% Memory: ✅ 38.571MB (SLO: <41.500MB -7.1%) vs baseline: +5.1% ✅ lower_noaspectTime: ✅ 0.369µs (SLO: <10.000µs 📉 -96.3%) vs baseline: -0.8% Memory: ✅ 38.598MB (SLO: <41.500MB -7.0%) vs baseline: +4.9% ✅ lstrip_aspectTime: ✅ 2.198µs (SLO: <20.000µs 📉 -89.0%) vs baseline: +0.8% Memory: ✅ 38.562MB (SLO: <41.500MB -7.1%) vs baseline: +4.8% ✅ lstrip_noaspectTime: ✅ 0.385µs (SLO: <10.000µs 📉 -96.2%) vs baseline: +1.9% Memory: ✅ 38.535MB (SLO: <41.500MB -7.1%) vs baseline: +5.0% ✅ modulo_aspectTime: ✅ 0.972µs (SLO: <10.000µs 📉 -90.3%) vs baseline: +0.6% Memory: ✅ 38.363MB (SLO: <41.500MB -7.6%) vs baseline: +4.1% ✅ modulo_aspect_for_bytearray_bytearrayTime: ✅ 1.541µs (SLO: <10.000µs 📉 -84.6%) vs baseline: +3.7% Memory: ✅ 38.791MB (SLO: <41.500MB -6.5%) vs baseline: +5.7% ✅ modulo_aspect_for_bytesTime: ✅ 0.958µs (SLO: <10.000µs 📉 -90.4%) vs baseline: +0.5% Memory: ✅ 38.600MB (SLO: <41.500MB -7.0%) vs baseline: +4.9% ✅ modulo_aspect_for_bytes_bytearrayTime: ✅ 1.177µs (SLO: <10.000µs 📉 -88.2%) vs baseline: +0.3% Memory: ✅ 38.548MB (SLO: <41.500MB -7.1%) vs baseline: +4.2% ✅ modulo_noaspectTime: ✅ 0.674µs (SLO: <10.000µs 📉 -93.3%) vs baseline: +0.5% Memory: ✅ 38.577MB (SLO: <41.500MB -7.0%) vs baseline: +4.7% ✅ replace_aspectTime: ✅ 5.102µs (SLO: <10.000µs 📉 -49.0%) vs baseline: +4.7% Memory: ✅ 38.613MB (SLO: <41.500MB -7.0%) vs baseline: +4.6% ✅ replace_noaspectTime: ✅ 0.466µs (SLO: <10.000µs 📉 -95.3%) vs baseline: +0.6% Memory: ✅ 38.602MB (SLO: <41.500MB -7.0%) vs baseline: +4.9% ✅ repr_aspectTime: ✅ 0.946µs (SLO: <10.000µs 📉 -90.5%) vs baseline: -0.6% Memory: ✅ 38.428MB (SLO: <41.500MB -7.4%) vs baseline: +4.9% ✅ repr_noaspectTime: ✅ 0.455µs (SLO: <10.000µs 📉 -95.5%) vs baseline: -0.1% Memory: ✅ 38.568MB (SLO: <41.500MB -7.1%) vs baseline: +5.1% ✅ rstrip_aspectTime: ✅ 1.851µs (SLO: <20.000µs 📉 -90.7%) vs baseline: +1.0% Memory: ✅ 38.428MB (SLO: <41.500MB -7.4%) vs baseline: +4.1% ✅ rstrip_noaspectTime: ✅ 0.382µs (SLO: <10.000µs 📉 -96.2%) vs baseline: -2.2% Memory: ✅ 38.554MB (SLO: <41.500MB -7.1%) vs baseline: +4.1% ✅ slice_aspectTime: ✅ 0.486µs (SLO: <10.000µs 📉 -95.1%) vs baseline: -0.6% Memory: ✅ 38.606MB (SLO: <41.500MB -7.0%) vs baseline: +5.2% ✅ slice_noaspectTime: ✅ 0.451µs (SLO: <10.000µs 📉 -95.5%) vs baseline: -0.9% Memory: ✅ 38.498MB (SLO: <41.500MB -7.2%) vs baseline: +4.8% ✅ stringio_aspectTime: ✅ 1.686µs (SLO: <10.000µs 📉 -83.1%) vs baseline: +0.9% Memory: ✅ 38.415MB (SLO: <41.500MB -7.4%) vs baseline: +4.3% ✅ stringio_noaspectTime: ✅ 0.919µs (SLO: <10.000µs 📉 -90.8%) vs baseline: +0.4% Memory: ✅ 38.537MB (SLO: <41.500MB -7.1%) vs baseline: +4.9% ✅ strip_aspectTime: ✅ 2.476µs (SLO: <20.000µs 📉 -87.6%) vs baseline: 📈 +13.5% Memory: ✅ 38.510MB (SLO: <41.500MB -7.2%) vs baseline: +4.7% ✅ strip_noaspectTime: ✅ 0.393µs (SLO: <10.000µs 📉 -96.1%) vs baseline: +1.2% Memory: ✅ 38.591MB (SLO: <41.500MB -7.0%) vs baseline: +4.9% ✅ swapcase_aspectTime: ✅ 2.501µs (SLO: <10.000µs 📉 -75.0%) vs baseline: +3.2% Memory: ✅ 38.645MB (SLO: <41.500MB -6.9%) vs baseline: +5.0% ✅ swapcase_noaspectTime: ✅ 0.538µs (SLO: <10.000µs 📉 -94.6%) vs baseline: -0.7% Memory: ✅ 38.616MB (SLO: <41.500MB -7.0%) vs baseline: +4.9% ✅ title_aspectTime: ✅ 2.362µs (SLO: <10.000µs 📉 -76.4%) vs baseline: +1.1% Memory: ✅ 38.641MB (SLO: <41.500MB -6.9%) vs baseline: +5.0% ✅ title_noaspectTime: ✅ 0.499µs (SLO: <10.000µs 📉 -95.0%) vs baseline: -1.4% Memory: ✅ 38.526MB (SLO: <41.500MB -7.2%) vs baseline: +4.7% ✅ translate_aspectTime: ✅ 3.259µs (SLO: <10.000µs 📉 -67.4%) vs baseline: +0.7% Memory: ✅ 38.703MB (SLO: <41.500MB -6.7%) vs baseline: +5.2% ✅ translate_noaspectTime: ✅ 1.042µs (SLO: <10.000µs 📉 -89.6%) vs baseline: -0.5% Memory: ✅ 38.460MB (SLO: <41.500MB -7.3%) vs baseline: +4.5% ✅ upper_aspectTime: ✅ 2.233µs (SLO: <10.000µs 📉 -77.7%) vs baseline: +0.4% Memory: ✅ 38.608MB (SLO: <41.500MB -7.0%) vs baseline: +4.6% ✅ upper_noaspectTime: ✅ 0.372µs (SLO: <10.000µs 📉 -96.3%) vs baseline: +0.2% Memory: ✅ 38.485MB (SLO: <41.500MB -7.3%) vs baseline: +4.3% 📈 iastaspectsospath - 24/24✅ ospathbasename_aspectTime: ✅ 5.102µs (SLO: <10.000µs 📉 -49.0%) vs baseline: 📈 +21.5% Memory: ✅ 38.594MB (SLO: <41.000MB -5.9%) vs baseline: +5.3% ✅ ospathbasename_noaspectTime: ✅ 1.093µs (SLO: <10.000µs 📉 -89.1%) vs baseline: +0.5% Memory: ✅ 38.417MB (SLO: <41.000MB -6.3%) vs baseline: +4.6% ✅ ospathjoin_aspectTime: ✅ 6.015µs (SLO: <10.000µs 📉 -39.9%) vs baseline: -0.6% Memory: ✅ 38.633MB (SLO: <41.000MB -5.8%) vs baseline: +4.9% ✅ ospathjoin_noaspectTime: ✅ 2.282µs (SLO: <10.000µs 📉 -77.2%) vs baseline: ~same Memory: ✅ 38.299MB (SLO: <41.000MB -6.6%) vs baseline: +4.0% ✅ ospathnormcase_aspectTime: ✅ 3.467µs (SLO: <10.000µs 📉 -65.3%) vs baseline: +0.1% Memory: ✅ 38.496MB (SLO: <41.000MB -6.1%) vs baseline: +4.8% ✅ ospathnormcase_noaspectTime: ✅ 0.564µs (SLO: <10.000µs 📉 -94.4%) vs baseline: +0.4% Memory: ✅ 38.516MB (SLO: <41.000MB -6.1%) vs baseline: +4.7% ✅ ospathsplit_aspectTime: ✅ 4.830µs (SLO: <10.000µs 📉 -51.7%) vs baseline: +0.2% Memory: ✅ 38.496MB (SLO: <41.000MB -6.1%) vs baseline: +4.7% ✅ ospathsplit_noaspectTime: ✅ 1.592µs (SLO: <10.000µs 📉 -84.1%) vs baseline: +0.1% Memory: ✅ 38.240MB (SLO: <41.000MB -6.7%) vs baseline: +4.0% ✅ ospathsplitdrive_aspectTime: ✅ 3.675µs (SLO: <10.000µs 📉 -63.2%) vs baseline: -0.7% Memory: ✅ 38.516MB (SLO: <41.000MB -6.1%) vs baseline: +4.8% ✅ ospathsplitdrive_noaspectTime: ✅ 0.703µs (SLO: <10.000µs 📉 -93.0%) vs baseline: +1.4% Memory: ✅ 38.653MB (SLO: <41.000MB -5.7%) vs baseline: +4.9% ✅ ospathsplitext_aspectTime: ✅ 4.554µs (SLO: <10.000µs 📉 -54.5%) vs baseline: -0.4% Memory: ✅ 38.535MB (SLO: <41.000MB -6.0%) vs baseline: +5.0% ✅ ospathsplitext_noaspectTime: ✅ 1.380µs (SLO: <10.000µs 📉 -86.2%) vs baseline: +0.4% Memory: ✅ 38.535MB (SLO: <41.000MB -6.0%) vs baseline: +4.8% 📈 telemetryaddmetric - 30/30✅ 1-count-metric-1-timesTime: ✅ 3.329µs (SLO: <20.000µs 📉 -83.4%) vs baseline: 📈 +17.8% Memory: ✅ 35.075MB (SLO: <35.500MB 🟡 -1.2%) vs baseline: +4.9% ✅ 1-count-metrics-100-timesTime: ✅ 198.130µs (SLO: <220.000µs -9.9%) vs baseline: -0.8% Memory: ✅ 35.075MB (SLO: <35.500MB 🟡 -1.2%) vs baseline: +4.9% ✅ 1-distribution-metric-1-timesTime: ✅ 3.150µs (SLO: <20.000µs 📉 -84.2%) vs baseline: -0.4% Memory: ✅ 34.937MB (SLO: <35.500MB 🟡 -1.6%) vs baseline: +4.6% ✅ 1-distribution-metrics-100-timesTime: ✅ 211.124µs (SLO: <230.000µs -8.2%) vs baseline: -1.0% Memory: ✅ 35.016MB (SLO: <35.500MB 🟡 -1.4%) vs baseline: +4.7% ✅ 1-gauge-metric-1-timesTime: ✅ 2.159µs (SLO: <20.000µs 📉 -89.2%) vs baseline: +0.8% Memory: ✅ 35.036MB (SLO: <35.500MB 🟡 -1.3%) vs baseline: +4.7% ✅ 1-gauge-metrics-100-timesTime: ✅ 137.207µs (SLO: <150.000µs -8.5%) vs baseline: +0.8% Memory: ✅ 35.016MB (SLO: <35.500MB 🟡 -1.4%) vs baseline: +4.8% ✅ 1-rate-metric-1-timesTime: ✅ 2.970µs (SLO: <20.000µs 📉 -85.1%) vs baseline: -0.5% Memory: ✅ 35.075MB (SLO: <35.500MB 🟡 -1.2%) vs baseline: +4.9% ✅ 1-rate-metrics-100-timesTime: ✅ 211.647µs (SLO: <250.000µs 📉 -15.3%) vs baseline: -0.3% Memory: ✅ 35.036MB (SLO: <35.500MB 🟡 -1.3%) vs baseline: +4.7% ✅ 100-count-metrics-100-timesTime: ✅ 20.118ms (SLO: <22.000ms -8.6%) vs baseline: +0.4% Memory: ✅ 34.780MB (SLO: <35.500MB -2.0%) vs baseline: +4.7% ✅ 100-distribution-metrics-100-timesTime: ✅ 2.255ms (SLO: <2.550ms 📉 -11.6%) vs baseline: +1.8% Memory: ✅ 34.878MB (SLO: <35.500MB 🟡 -1.8%) vs baseline: +4.4% ✅ 100-gauge-metrics-100-timesTime: ✅ 1.404ms (SLO: <1.550ms -9.4%) vs baseline: ~same Memory: ✅ 34.800MB (SLO: <35.500MB 🟡 -2.0%) vs baseline: +5.2% ✅ 100-rate-metrics-100-timesTime: ✅ 2.198ms (SLO: <2.550ms 📉 -13.8%) vs baseline: ~same Memory: ✅ 34.780MB (SLO: <35.500MB -2.0%) vs baseline: +4.7% ✅ flush-1-metricTime: ✅ 4.532µs (SLO: <20.000µs 📉 -77.3%) vs baseline: +0.8% Memory: ✅ 35.055MB (SLO: <35.500MB 🟡 -1.3%) vs baseline: +5.0% ✅ flush-100-metricsTime: ✅ 173.752µs (SLO: <250.000µs 📉 -30.5%) vs baseline: -0.3% Memory: ✅ 35.134MB (SLO: <35.500MB 🟡 -1.0%) vs baseline: +5.0% ✅ flush-1000-metricsTime: ✅ 2.174ms (SLO: <2.500ms 📉 -13.1%) vs baseline: -0.5% Memory: ✅ 35.881MB (SLO: <36.500MB 🟡 -1.7%) vs baseline: +4.9% 🟡 Near SLO Breach (15 suites)🟡 coreapiscenario - 10/10 (1 unstable)
|
Kyle-Verhoog
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
just one suggestion on the log line 🚢
| if not getattr(litellm, "_datadog_patch", False): | ||
| log.warning( | ||
| "LLMObs.enable() called after litellm was imported but before it was patched. " | ||
| "This may cause tracing issues if you are importing patched methods like 'completion' directly. " |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| "This may cause tracing issues if you are importing patched methods like 'completion' directly. " | |
| "This may cause tracing issues if you are importing patched methods like 'litellm.completion' directly. " |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nice yes this is much cleaner and less side-effecty to other tests! nice job 😄
Description
Because the litellm integration patches functions that may already have been imported before the patching occurs, I am adding a log that will warn customers if
LLMObs.enable()is called after litellm is imported but before it is patched.The warning suggests a few ways that users can fix this tracing issue, including moving
LLMObs.enable()before importing litellm.Note that this is not a perfect solution. We only really care about whether the user imported any patched methods like
litellm.completion. If they are doing a genericimport litellmstatement, they should not have any tracing issues and this warning will be irrelevant. I am not aware of a way to know which specific methods the user has imported, so checking forlitellminsys.modulesseems like the next best approach.Testing
Currently, tracing is broken for a situation like the following where the code is run with
python3 app.py.Running this code now, produces the following warning message:
Implementing any of these alternatives (as shown below) will silence the warning message.
Risks
Additional Notes