MLflow 3.17.0

MLflow 3.17.0 includes several major features and improvements.

Major New Features

Database upgrade: SQL-backed servers require a coordinated schema upgrade with all writers stopped and a restorable backup, even when daily rollups remain disabled. Run mlflow db upgrade <database-url> before restarting all replicas on the new MLflow version. Mixed-version rolling upgrades are not supported. Follow the database upgrade instructions.

Other Assorted Features & Improvements:

  • [Tracing / UI] Add rich rendering for TypeSafe System One traces (#26276, @B-Step62)
  • [Build] Show issue-triage progress in a GitHub issue comment (#26454, @copilot-swe-agent)
  • [Docs / Evaluation] Allow custom base_url for direct TypeSafe judges (#26445, @B-Step62)
  • [Docs / Gateway] Allow custom typesafe_api_base for TypeSafe Gateway endpoints (#26442, @B-Step62)
  • [Evaluation / Tracking] Support name IN (...) filters for evaluation-dataset search (#26374, @HumairAK)
  • [Docs / Evaluation / Gateway / UI] Support TypeSafe and OpenRouter Jev judges through Gateway System One (#26243, @joshuawong-db)
  • [Build / Docs / Tracing / Tracking] Add @mlflow/typesafe tracing integration for TypeSafe AI (#26342, @B-Step62)
  • [Build / Docs] Publish Helm charts after stable release images (#26064, @joshuawong-db)
  • [Tracing / UI] Add TraceImage to custom trace views (#26297, @chris-chieu)
  • [Tracing] Simplify tracing setup defaults in setup.sh (#26341, @B-Step62)
  • [Build / Docs / Tracing / Tracking] Add TypeSafe SDK autologging support (#26129, @B-Step62)
  • [Tracing / Tracking] Expose OTLP ingestion metrics for Prometheus (#25192, @ashtarkb)
  • [Tracing] Compute LLM trace costs client-side for SageMaker tracking (#26178, @B-Step62)
  • [Model Registry / Models] Add uc_model_service UC model-version dependency support (#26140, @TomeHirata)
  • [Models] Add DatabricksUCModelService resource type (#26137, @TomeHirata)
  • [Docs / Tracing / Tracking] Maintain SQL trace analytics daily rollups (#25489, @NeriCarcasci)
  • [Docs / Tracing / Tracking] Serve trace analytics reads from opt-in SQL daily rollups (#25239, @NeriCarcasci)
  • [Gateway / UI] Add TypeSafe Jev support to the AI Gateway (#26048, @xq-yin)
  • [Tracking] Support order_by in search_prompts() across the client, fluent, and GenAI APIs (#25967, @avanish-garg)
  • [Docs / Gateway] Add OpenAI-compatible model discovery to the MLflow Gateway (#25940, @RussellLuo)
  • [Gateway] Add Anthropic Messages passthrough to AmazonBedrockProvider (#25863, @rhamzatov)
  • [Tracking] Support logged model artifacts in the createPresignedUploadUrl endpoint (#24765, @henishborad)
  • [Tracking] Add mlflow.restore_experiment() and mlflow.restore_run() to the fluent API (#25852, @avanish-garg)
  • [Build] Configure topology spread constraints in the Helm chart (#25778, @daanknoope)
  • [Docs / Tracing] Add source metadata to TypeScript agent traces (#25825, @B-Step62)
  • [Model Registry / UI] Add a source logged model link to the model version page (#25727, @rrioh)
  • [Build / Docs] charts: Expose Helm liveness/readiness/startup probes as configuration variables (#25560, @creater29)
  • [Gateway / UI] Allow administrators to disable AI Gateway with MLFLOW_ENABLE_AI_GATEWAY (#25236, @DaoDaoNoCode)
  • [UI] Add dataset ID to UI (#25234, @janald99)
  • [Tracing] Add first-class span description support to @mlflow.trace and mlflow.start_span (#25548, @Rohitkanithi)

Bug fixes:

  • [Evaluation] Use the baseline's magnitude in min_relative_change checks (#26252, @mavericksea-ai)
  • [UI] Support wrapped MCP registry server definitions (#25764, @mprahl)
  • [Tracing / Tracking] Fix decimal metric sums and reduce SQL trace query and rollup overhead (#26369, @HumairAK)
  • [Evaluation] Fix EvaluationDataset hashing for list-valued targets and predictions (#26433, @LE0-Lin)
  • [Tracking] Fix MCP server version filters rewriting quoted values (#26423, @Amazinghorseli)
  • [Tracing] Use response key for tool_call_response parts in GenAI semconv export (#26360, @Zhuoxi2000)
  • [Models] Add MLFLOW_ALLOW_PICKLE_DESERIALIZATION guard to mlflow.paddle flavor (#26428, @aaronteo-db)
  • [Tracing] Support copy.deepcopy and pickle on Span, LazySpan, and Trace (#26307, @Rohitkanithi)
  • [Tracing / UI] Rename trace assessment filter to feedback (#26415, @B-Step62)
  • [Evaluation / Gateway] Confine custom scorer code execution to the job executor (#26225, @kriscon-db)
  • [Gateway] Return 422 for an unmatched tool_call_id in GeminiAdapter (#26253, @codechrl)
  • [Tracing] Keep tool and agent names on GenAI semconv execute_tool and invoke_agent spans (#26394, @chrikrah)
  • [Gateway] Report finish_reason tool_calls for Anthropic and Gemini tool calls (#26390, @r14dd)
  • [Tracing / UI] Fix "Copy link to trace" URL dropping the # hash route (#26378, @aaronteo-db)
  • [Evaluation] Fix _strip_markdown_code_blocks for single-line and glued closing code fences (#26332, @lets-order-some-fries)
  • [Tracking] Fix server_name filters for MCP access endpoints (#26327, @Amazinghorseli)
  • [Evaluation] Fix hashing of nested variable-length arrays (#26311, @gohil-gaurav)
  • [Tracing] Fix Bedrock autolog crashing stream loops on non-Anthropic invoke_model_with_response_stream chunks and GPT-6 redactedContent reasoning (#26346, @kimnamu)
  • [Model Registry] Fix @latest alias not resolving to the highest model version (#26291, @CTWalk)
  • [Tracking] Fix MlflowStorage.set_trial_state_values WAITING trial transitions (#25945, @CoralGarden52)
  • [Tracking] Keep server-info responsive when shared WSGI thread pool is exhausted (#26267, @sduvvuri1603)
  • [Gateway] Honor tool_choice in Gemini and Vertex AI gateway requests (#26300, @Vaishnavi220506)
  • [Gateway] Fix parallel tool call indices in Anthropic streaming (#26269, @r14dd)
  • [Gateway] Fix parallel tool call indices in Gemini and LiteLLM streaming (#26270, @r14dd)
  • [Tracking] Honor MLFLOW_S3_IGNORE_TLS in multipart artifact download (#26004, @Anurag-M1)
  • [Tracking] Read load_text and load_dict artifacts as UTF-8 (#26265, @ppcvote)
  • [Models] Make schema _merge with AnyType order-independent (#26260, @JoeyTan21)
  • [UI] Fix Parallel Coordinates metric label contrast on Compare Runs (#26275, @Taj010)
  • [Tracing] Fix llama_index traces during deferred streaming (#26293, @B-Step62)
  • [Tracing] End OpenAI autolog stream span with ERROR status when the stream raises mid-iteration (#26305, @iamhuman-cheolheelee)
  • [Tracing] Handle OpenAI streams that yield no chunks in autolog (#26283, @iamhuman-cheolheelee)
  • [Build / Tracking] Fix psycopg3 packaging in the db extra (#26271, @abligail)
  • [Build / Tracking] Add psycopg3 to the db extra for SQLAlchemy 2.1 compatibility (#26239, @kriscon-db)
  • [Tracking] Accept lowercase like, ilike and in in search_logged_models filters (#26249, @SajalDevX)
  • [Tracing] Support MLFLOW_TRACE_LOCATION in TypeScript tracing and OpenCode (#23772, @B-Step62)
  • [Tracing] Fix Windows trace user attribution (#26221, @joshuawong-db)
  • [UI] Fix dataset navigation highlighting on detail pages (#26187, @DaoDaoNoCode)
  • [Gateway / Tracing / Tracking] Raise invalid-parameter errors for SQLAlchemy experiment ID parsing (#26223, @joshuawong-db)
  • [Tracing] Raise helpful AttributeError on Span.get() access (#26165, @Rohitkanithi)
  • [Tracing / Tracking] Fix trace.text search missing non-ASCII span content (#26130, @pablo-legeren)
  • [Gateway] Group parallel tool call results into one user turn in GeminiAdapter (#26001, @rhamzatov)
  • [Tracing] Propagate session metadata to TypeScript UC root spans (#26209, @B-Step62)
  • [Tracing] Strip spaces around --trace-ids entries in mlflow traces delete (#26204, @breken-ai)
  • [Tracking] Stop a metric filter from shrinking search_logged_models pages (#26057, @lazarevtill)
  • [Gateway] Handle mixed text and functionCall parts in GeminiAdapter (#26109, @r14dd)
  • [Tracing] Strip spaces around --order-by entries in mlflow traces search (#26192, @breken-ai)
  • [Evaluation / Tracking] Fix numeric attribute parsing in SearchUtils (#26180, @B-Step62)
  • [Evaluation / Tracing] calculate_trace_filter_correlation binds integer experiment IDs (#26179, @B-Step62)
  • [Tracing] Propagate trace context in mistral and groq autologging (#26177, @B-Step62)
  • [Tracking] Eagerly load tags, params and metrics in search_logged_models (#25983, @lazarevtill)
  • [Gateway] Evaluate a budget window only against the policy version that defined it (#26075, @rhamzatov)
  • [Tracing / Tracking] Add trace_id property and fix __repr__ on Trace (#26007, @Rohitkanithi)
  • [Evaluation] Fix loading @scorer functions whose signature contains parentheses (#26172, @anishmehta24)
  • [Model Registry] Remove stale aliases when deleting model versions (#26173, @copilot-swe-agent)
  • [Tracing] Fix span status description when record_exception is given a string (#26171, @anishmehta24)
  • [Evaluation] Fix ndcg_at_k document ID collisions (#26041, @kadyrbekovhamit-cyber)
  • [Evaluation] Validate deduplication group references in issue discovery (#26082, @vb-dbrks)
  • [Model Registry / Tracking] Coerce numeric SQL search filter values for psycopg v3 (#26170, @copilot-swe-agent)
  • [Docs / Models] Preserve backward-compatible serialization defaults for Databricks (#25992, @B-Step62)
  • [Models] Use cloudpickle for sklearn models nested in SHAP explainers (#26138, @B-Step62)
  • [Tracing] Make bundled model cost lookup deterministic (#26154, @copilot-swe-agent)
  • [Tracing] Raise helpful TypeError on Span subscript access (#26008, @Rohitkanithi)
  • [Model Registry] Validate CreateModelVersion sources against declared resources (#26037, @joshuawong-db)
  • [Tracing] Avoid duplicate MlflowLangchainTracer registration in LangGraph lifecycle callbacks (#26136, @AbdulAliMamnun)
  • [UI] Fix the MLflow UI hanging forever when navigator.onLine is false (#25961, @nrhys2005)
  • [Gateway] Add support for LiteLLM's responses model mode in the catalog sync (#26095, @TomeHirata)
  • [Tracking] Fix health probes auth bypass when static prefix applied (#25114, @adrianAzoitei)
  • [Scoring] Preserve inherited fields in nested dataclass signatures (#26071, @HaokaiDing)
  • [Tracing / UI] Fix duplicate top-level trace chat messages (#26097, @joshuawong-db)
  • [Tracking] Fix MSSQL label schema boolean predicate (#26093, @joshuawong-db)
  • [Tracing / UI] Fix precision loss for large numeric-string span attributes in trace explorer (#25219, @vpirhach)
  • [Tracing / UI] Support OpenInference request and response model-name attributes (#26047, @xq-yin)
  • [Prompts] Scope prompt cache entries by registry (#26066, @joshuawong-db)
  • [Gateway] Fix gateway request authorization parsing (#25937, @joshuawong-db)
  • [Tracking / UI] Treat .ipynb notebooks as text/plain in artifact preview (#25829, @harshal-paltse)
  • [UI] Time out the server-info request instead of hanging the UI (#26027, @nrhys2005)
  • [Gateway] Preserve the upstream error message in send_stream_request (#26036, @rhamzatov)
  • [Tracking] Fix Azure multipart uploads with DefaultAzureCredential (#26031, @joshuawong-db)
  • [Tracing] Fix Claude Code usage spans for tool calls (#25931, @joshuawong-db)
  • [Models] Suppress import warnings from mlflow.types.responses (#26033, @joshuawong-db)
  • [Tracking] Fix NaN metrics matching numeric search filters in SqlAlchemyStore (#25802, @2sumtech)
  • [Model Registry / Tracking] Refuse to connect to client-named artifact hosts outside the default artifact root (GHSA-mr9f-g8qf-4w4j) (#25891, @tanghaoji)
  • [Gateway / Tracking] Reject conflicting protobuf field spellings in request bodies (GHSA-3g8m-hm3x-gh2r) (#25869, @tanghaoji)
  • [Evaluation / Tracking] Bind trace_ids to the authorized experiment on issues/invoke and genai/evaluate/invoke (#25873, @tanghaoji)
  • [Evaluation] Fix positional Series alignment in eval_results_table (#25799, @Pdevadiga45)
  • [UI] Filter assessment metrics by logged model (#25928, @joshuawong-db)
  • [Tracking] Fix logged model metric order pagination (#25935, @joshuawong-db)
  • [Tracking] Reject scheme-less relative workspace default_artifact_root (#25700, @KR-Ravindra)
  • [UI] Reduce unsolicited MLflow Assistant response padding (#25925, @joshuawong-db)
  • [Evaluation / Tracking] Match third-party scorer modules exactly instead of by package prefix (GHSA-26p8-2jq9-3vq9) (#25906, @tanghaoji)
  • [Model Registry / Tracking] Filter nested run.modelVersions GraphQL field by registered-model permission (GHSA-f253-vggg-rwh8) (#25905, @tanghaoji)
  • [Tracking] Scope native FastAPI /jobs/search to the caller under basic-auth (GHSA-9pch-m9gq-c25q) (#25899, @tanghaoji)
  • [Gateway / Tracking] Gate CreateGatewaySecret on the workspace create grant in basic-auth (#25895, @tanghaoji)
  • [Model Registry / Tracking] Authorize CreateModelVersion camelCase runId/modelId aliases in basic-auth (GHSA-442c-p479-46xg) (#25892, @tanghaoji)
  • [Evaluation / Tracking] Reject egress-steering kwargs in third-party scorer payloads (GHSA-2wqp-q3c6-ccj5) (#25890, @tanghaoji)
  • [Gateway] Handle non-JSON tool message content in the Gemini gateway adapter (#25868, @rhamzatov)
  • [Tracking] Use _bulk_upsert in set_logged_model_tags for SQLite, PostgreSQL, and MySQL (#25862, @rautaditya2606)
  • [Evaluation / Tracing] Add Databricks tracking URI guardrail to mlflow.genai.review_queues (#25879, @kishor-rkrishnan)
  • [Model Registry / Prompts] Reject schemeless path sources for prompt model versions in _create_model_version (#25870, @tanghaoji)
  • [Tracing / Tracking] Redact tracking URI credentials in the mlflow-artifacts scheme error (GHSA-c8c4-r4p8-p4m4) (#25874, @tanghaoji)
  • [Gateway] Fix Gemini thoughtSignature placement in AI Gateway adapter (#25865, @aytero)
  • [Tracing / Tracking] Sanitize CrewAI LLM credentials from mlflow.crewai.autolog spans (GHSA-j7qq-vr8c-xvw3) (#25845, @tanghaoji)
  • [Gateway] Post Vertex AI MaaS raw proxy requests to the /endpoints/openapi base URL (#25834, @rhamzatov)
  • [Models] Validate pt2 archives when MLFLOW_ALLOW_PICKLE_DESERIALIZATION is disabled (#25849, @tanghaoji)
  • [Gateway] Add vertex_anthropic_betas to control anthropic-beta forwarding for Claude on Vertex AI (#25835, @rhamzatov)
  • [Gateway / Tracking] Require USE on the gateway secret for issues/invoke (GHSA-2m86-c5q7-rxgr) (#25848, @tanghaoji)
  • [Gateway] Forward VertexAIProvider passthrough and proxy routes to its Claude/MaaS delegates (#25833, @rhamzatov)
  • [Docs / Gateway] Validate gateway secret api_base to prevent SSRF (GHSA-h7x2-h6g9-p789) (#25761, @tanghaoji)
  • [Tracking] Bound _hard_delete_run memory with bulk deletes (#25773, @dyld-w)
  • [Tracing] Fix Codex authentication with databricks://<profile> (#25823, @B-Step62)
  • [Tracing] Honor CODEX_HOME when locating Codex transcripts (#25822, @B-Step62)
  • [Evaluation / Gateway / Tracking] Fix ScorerVersion experiment ID type after REST hydration (#25768, @CoralGarden52)
  • [Tracking] Roll back the experiment when trace-location linking fails in create_experiment (#25604, @adamgurary)
  • [Gateway] Map top_p to topP in the Bedrock Titan and AI21 completions adapters (#25795, @Yash-Chindam)
  • [Tracing / UI] Fix token totals for grouped trace sessions (#25608, @adamgurary)
  • [Tracing] Fix strands.autolog crash on foreign OpenTelemetry spans (#25807, @Hasnaathussain)
  • [Models / Scoring] Bound apt socket timeouts in generated serving Dockerfiles (#25800, @copilot-swe-agent)
  • [Tracing / UI] Fix custom trace views in the session trace drawer (#25779, @joshuawong-db)
  • [Tracking] Fail fast in mlflow server when MLFLOW_FLASK_SERVER_SECRET_KEY is unset for basic-auth (#25754, @tanghaoji)
  • [Gateway] Stop forwarding client auth headers on passthrough routes (#25129, @uuzzrm)
  • [UI] Fix session-level scorer evaluation silently dropping selected sessions (#24937, @demonze)
  • [Tracking] Preserve the original exception when cleanup fails in remove_on_error (#25626, @NestDream)
  • [Tracing] Enable async trace logging by default for Claude Code (#25541, @mukeshbhandarkar)
  • [Evaluation / Tracking] Authorize scorer/invoke and bind traces to the caller's experiment (GHSA-6c27-cp6h-c66m) (#25721, @kriscon-db)
  • [Build] Fail the mlflow-skinny/mlflow-tracing build instead of shipping an empty wheel (#25713, @siddharthgaur1)
  • [Evaluation] Fix evaluate list input normalization for NumPy targets (#25623, @CoralGarden52)
  • [Tracking] Enforce password policy on the basic-auth password-update path (GHSA-v67f-7g57-fjhv) (#25722, @kriscon-db)
  • [Gateway] Preserve an unset max_attempts in FallbackConfig.from_proto (#25532, @VenishPaneliya)
  • [UI] Fix Assistant Bash execution on Windows selector loops (#25687, @joshuawong-db)
  • [UI] Fix MLflow Assistant CLI providers on Windows with >1 server worker (#24418, @joshuawong-db)
  • [Scoring] Reject unsupported env_manager values when building a model container (#25514, @alekseevpavel04)
  • [Model Registry] Return None for unset deployment_job_state in UC model-version converters (#25690, @kriscon-db)
  • [Model Registry] Fix ModelVersion.to_proto dropping deployment_job_state (#25635, @2sumtech)
  • [Server-infra] Count fragment selections in GraphQL query-cost limits (#25665, @kriscon-db)
  • [Server-infra / Tracking] Require model_id permission for LogMetric/LogBatch metric routing (#25664, @kriscon-db)
  • [Tracing / Tracking] Avoid re-serializing unmodified LazySpan JSON on get-trace-artifact. (#24569, @shivamAmrutia)
  • [Evaluation / Gateway] Apply Vertex Anthropic request fields in adapter_class so judges work (#25556, @Yash-Chindam)
  • [Evaluation] Fix bullet stripping eating leading hyphens in failure labels (#25588, @copilot-swe-agent)
  • [Evaluation / Tracking] Release Databricks SDK connections in rest_utils.http_request (#25561, @TimMsnBlueforte)
  • [Tracing] Ignore cross-async-context ValueError when detaching a span (#22945, @SahilKumar75)
  • [Tracing / UI] Add span link UI to redesigned trace explorer (#25573, @B-Step62)
  • [Build / Scoring] Exclude anyio 4.15.0 which breaks server /health (#25559, @joshuawong-db)
  • [Prompts / Tracking] Log Catalog Explorer URL in register_prompt (#24778, @adamgurary)

Documentation updates:

  • [Docs / Tracing] Update bundled mlflow/assistant/skills to latest upstream (#26455, @B-Step62)
  • [Docs] Add a Custom Trace Views page to the tracing docs (#26356, @rrioh)
  • [Docs] Update Model Registry tutorial for skops serialization (#26287, @copilot-swe-agent)
  • [Docs / Evaluation / Gateway] Document TypeSafe judges and System One Gateway usage (#26153, @joshuawong-db)
  • [Docs / Tracing / UI] Use hosted MLflow setup wizard in docs and OSS onboarding (#25949, @B-Step62)
  • [Docs] Document missing span types WORKFLOW, TASK, GUARDRAIL and EVALUATOR (#25736, @setsaa)
  • [Docs / Model Registry / Prompts] Correct register_prompt return type documentation (#25650, @copilot-swe-agent)
  • [Build] Nudge Copilot code review to verify when it's cheap (#25586, @copilot-swe-agent)

Small bug fixes and documentation updates:

#26464, #26458, @tanghaoji; #26457, #26456, #26419, #26404, #26403, #26401, #26398, #26391, #26389, #26386, #26385, #26384, #26383, #26382, #26381, #26380, #26379, #26372, #26371, #26357, #26354, #26353, #26350, #26349, #26347, #26345, #26343, #26344, #26330, #26329, #26326, #26325, #26324, #26323, #26322, #26318, #26304, #26299, #26296, #26295, #26294, #26286, #26285, #26281, #26280, #26264, #26255, #26196, #26195, #26183, #26169, #26167, #26168, #26155, #26139, #26145, #26135, #26132, #26118, #26113, #26112, #26110, #26107, #26106, #26098, #26094, #26065, #26044, #26038, #26035, #26030, #26028, #26023, #26020, #26018, #26014, #26013, #26010, #25998, #25996, #25995, #25981, #25968, #25947, #25943, #25939, #25932, #25930, #25910, #25907, #25904, #25902, #25901, #25900, #25896, #25893, #25894, #25876, #25875, #25871, #25866, #25864, #25850, #25846, #25836, #25828, #25819, #25815, #25816, #25814, #25813, #25812, #25811, #25810, #25809, #25804, #25801, #25787, #25786, #25782, #25770, #25765, #25763, #25759, #25758, #25757, #25753, #25752, #25738, #25737, #25731, #25729, #25726, #25724, #25725, #25723, #25705, #25691, #25689, #25688, #25678, #25677, #25674, #25673, #25671, #25669, #25668, #25667, #25661, #25658, #25657, #25656, #25655, #25654, #25652, #25651, #25645, #25642, #25633, #25631, #25628, #25625, #25624, #25620, #25622, #25621, #25619, #25617, #25616, #25614, #25611, #25605, #25603, #25602, #25596, #25594, #25595, #25591, #25592, #25590, #25567, @copilot-swe-agent; #26427, #26424, #26242, #26181, #25952, #25719, #25803, @B-Step62; #26429, @aaronteo-db; #26292, #26257, #26246, #25969, #26120, #26102, #26063, #25964, #25584, #25694, #25582, #25580, #25565, @joshuawong-db; #26263, #26068, #25936, @dependabot; #26245, #26244, @anishmehta24; #25979, @jonburdo; #26205, #25993, #25555, #25550, #25293, #25285, #26012, #25686, #25685, #25684, #25557, #25566, @kriscon-db; #25923, @cyficowley; #24761, @Zuhef; #25200, @bardenr; #24680, #25589, #24877, @NeriCarcasci; #23128, #22974, #24760, #24588, @kramaranya; #22568, #22520, @mprahl; #26124, @HumairAK; #26081, @daanknoope; #25569, @IgorShishkin12; #24699, @Andrej730; #25999, @M-Iswarya2; #25960, @TomeHirata; #25903, @harupy; #24999, @kaikaila; #25134, @MarkHe1222; #25717, @acheamponge; #25583, @hpenedones; #25539, @gustaff-weldon; #25644, @adamgurary; #25636, @chenlichao

← MLflowAll Companies