<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Julia Community 🟣: Jose Esparza</title>
    <description>The latest articles on Julia Community 🟣 by Jose Esparza (@pebeto).</description>
    <link>https://forem.julialang.org/pebeto</link>
    <image>
      <url>https://forem.julialang.org/images/fgf9bINO08ijj6vEcN_VNorbwkwpTTBoS4BgdGOfBAc/rs:fill:90:90/g:sm/mb:500000/ar:1/aHR0cHM6Ly9mb3Jl/bS5qdWxpYWxhbmcu/b3JnL3JlbW90ZWlt/YWdlcy91cGxvYWRz/L3VzZXIvcHJvZmls/ZV9pbWFnZS8xMzg3/LzhiNTYyZDBlLTVi/NzYtNDE2OS1hMjE4/LWQ4NzgyOGRjYzg1/NS5qcGVn</url>
      <title>Julia Community 🟣: Jose Esparza</title>
      <link>https://forem.julialang.org/pebeto</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.julialang.org/feed/pebeto"/>
    <language>en</language>
    <item>
      <title>DearDiary.jl: A lightweight but powerful machine learning experiment tracking tool for Julia</title>
      <dc:creator>Jose Esparza</dc:creator>
      <pubDate>Tue, 04 Nov 2025 22:53:25 +0000</pubDate>
      <link>https://forem.julialang.org/pebeto/deardiaryjl-a-lightweight-but-powerful-machine-learning-experiment-tracking-tool-for-julia-56ap</link>
      <guid>https://forem.julialang.org/pebeto/deardiaryjl-a-lightweight-but-powerful-machine-learning-experiment-tracking-tool-for-julia-56ap</guid>
      <description>&lt;p&gt;After months of planning, and some weeks of development, the package is finally here and ready for use! As a solution for tracking machine learning experiments in Julia, &lt;a href="https://github.com/pebeto/DearDiary.jl" rel="noopener noreferrer"&gt;DearDiary.jl&lt;/a&gt; aims to be lightweight, easy to use, and flexible enough to adapt to different workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Motivation
&lt;/h2&gt;

&lt;p&gt;After the unpleasant experience trying to maintain an interface for the REST API from Python's &lt;a href="https://mlflow.org/" rel="noopener noreferrer"&gt;MLFlow&lt;/a&gt; (&lt;a href="https://github.com/JuliaAI/MLFlowClient.jl" rel="noopener noreferrer"&gt;MLFlowClient.jl&lt;/a&gt;, &lt;a href="https://github.com/JuliaAI/MLJFlow.jl" rel="noopener noreferrer"&gt;MLJFlow.jl&lt;/a&gt;), after finding out that it is poorly documented, incomplete, and has some abandoned or partially implemented features (and they are still adding new ones...); an idea came to my mind: why not write the same API but well designed and documented but in Julia? This package is that idea.&lt;/p&gt;

&lt;h2&gt;
  
  
  Core concepts
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Architecture-first
&lt;/h3&gt;

&lt;p&gt;Unlike the common monolithic architecture found in many Julia packages, my goal was to implement something that can be easily maintained and extended over time, focusing on developer experience and code readability (inspired by &lt;a href="https://www.ted.com/talks/alan_edelman_a_programming_language_to_heal_the_planet_together_julia" rel="noopener noreferrer"&gt;Alan Edelman's TED talk&lt;/a&gt; and &lt;a href="https://github.com/JuliaAI/MLJ.jl" rel="noopener noreferrer"&gt;MLJ.jl&lt;/a&gt; "micro-package" architecture).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pebeto/DearDiary.jl" rel="noopener noreferrer"&gt;DearDiary.jl&lt;/a&gt; consists of an N-layered architecture, which bring us the possibility of encapsulating different functionalities to allow better collaboration and separation of concerns.&lt;br&gt;
Now it is composed of the following layers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Repository layer: responsible for data storage and retrieval.&lt;/li&gt;
&lt;li&gt;Service layer: handles package logic and data processing.&lt;/li&gt;
&lt;li&gt;Route layer: manages RESTful API endpoints and HTTP requests.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And having the idea of implementing a frontend layer in the future.&lt;/p&gt;

&lt;h3&gt;
  
  
  Simple types
&lt;/h3&gt;

&lt;p&gt;One of the problems I found while working on the integration project was the overuse of  complex types. Imagine a type that has a field that is another type with field that is another type that has a field with an integer. Well, that's real and you can find it if you are curious enough. &lt;br&gt;
&lt;a href="https://github.com/pebeto/DearDiary.jl" rel="noopener noreferrer"&gt;DearDiary.jl&lt;/a&gt; tries to avoid that by keeping types simple and flat, totally immutable, and clear as possible. Never search for complexity when you don't need it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Flexible by design
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/pebeto/DearDiary.jl" rel="noopener noreferrer"&gt;DearDiary.jl&lt;/a&gt; is flexible enough to adapt to different workflows. You can use it as a standalone package, or integrate it with other tools in your ML pipeline, or call it from the "outside world" via its RESTful API.&lt;br&gt;
In the case something is not implemented in the way you want it, you can always modify or extend it, thanks to its modularity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Portability
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/pebeto/DearDiary.jl" rel="noopener noreferrer"&gt;DearDiary.jl&lt;/a&gt; is designed to be portable. You can run it locally, on a server, or in the cloud. Thanks to SQLite as the default storage backend, you can easily move your projects between different environments without worrying about compatibility issues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; one of the main goals for next releases is to support more storage backends, coming from SQL and NoSQL databases, or cloud storage solutions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started
&lt;/h2&gt;

&lt;p&gt;A &lt;a href="https://pebeto.github.io/DearDiary.jl/dev/tutorial/" rel="noopener noreferrer"&gt;Tutorial&lt;/a&gt; is available in the documentation. It covers installation, and a workflow example with &lt;a href="https://github.com/JuliaAI/MLJ.jl" rel="noopener noreferrer"&gt;MLJ.jl&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contributing
&lt;/h2&gt;

&lt;p&gt;Contributions are welcome! If you find a bug or have a feature request, please open an issue on the &lt;a href="https://github.com/pebeto/DearDiary.jl" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;. Pull requests are also encouraged. Please make sure to follow the existing &lt;a href="https://github.com/JuliaDiff/BlueStyle" rel="noopener noreferrer"&gt;code style&lt;/a&gt; and include tests for any new features.&lt;/p&gt;

</description>
      <category>mlops</category>
      <category>tracking</category>
      <category>workflow</category>
      <category>restapi</category>
    </item>
    <item>
      <title>Adding MLflow tracking to MLJ - GSoC'23</title>
      <dc:creator>Jose Esparza</dc:creator>
      <pubDate>Wed, 23 Aug 2023 07:01:07 +0000</pubDate>
      <link>https://forem.julialang.org/pebeto/adding-mlflow-tracking-to-mlj-gsoc23-38e3</link>
      <guid>https://forem.julialang.org/pebeto/adding-mlflow-tracking-to-mlj-gsoc23-38e3</guid>
      <description>&lt;p&gt;&lt;a href="https://forem.julialang.org/images/ci-qsPTUTIZqCxBdlUAM3AXE0VbuN7pi915Iyci8W40/w:800/mb:500000/ar:1/aHR0cHM6Ly9mb3Jl/bS5qdWxpYWxhbmcu/b3JnL3JlbW90ZWlt/YWdlcy91cGxvYWRz/L2FydGljbGVzL2li/c2V4NXZ6emNwOTNi/aHQyOGZvLkpQRUc" class="article-body-image-wrapper"&gt;&lt;img src="https://forem.julialang.org/images/ci-qsPTUTIZqCxBdlUAM3AXE0VbuN7pi915Iyci8W40/w:800/mb:500000/ar:1/aHR0cHM6Ly9mb3Jl/bS5qdWxpYWxhbmcu/b3JnL3JlbW90ZWlt/YWdlcy91cGxvYWRz/L2FydGljbGVzL2li/c2V4NXZ6emNwOTNi/aHQyOGZvLkpQRUc" alt="Gala and Missy" width="800" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;When I started in the world of Machine Learning, I used other programming languages throughout my learning process and also my professional development. Julia was introduced to me when I was searching for bleeding edge technologies that could be the field's future and contribute to the state of the art. In a short time, this programming language became my first line source of learning and the project I wanted to see it being applied across my country (Peru). So with hands on, I started practicing to implement some old projects but using the awesome features coming from Julia. But that wasn't enough; I knew about Google Summer of Code since I was in my college second year and I always wanted to be part of the program but I didn't considered myself as "eligible" (my imposter syndrome). Well, that was until this year that I decided to apply to an interesting project that I was using: &lt;a href="https://alan-turing-institute.github.io/MLJ.jl/dev/"&gt;MLJ&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Unravelling the depths
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Choosing the project
&lt;/h3&gt;

&lt;p&gt;When I started planning getting into the program, I didn't know exactly which project I will work on. I sent some emails to Anthony Blaom, the lead contributor of MLJ and also my mentor; showing my interest about participating in the program and also be a project contributor. He always answered all my concerns, and sent me a list of projects that I could take. My interest was divided by two projects: a survival analysis model implementation and a MLOps platform integration. My not advanced experience with statistics made me decide to work in the project related with &lt;a href="https://mlflow.org/"&gt;MLFlow&lt;/a&gt;, a well-known machine learning model tracking platform. After Anthony suggestion, I sent some emails to the other mentor behind this project, Deyan Dyankov, to delve into the details of MLFlow.&lt;/p&gt;

&lt;h3&gt;
  
  
  The project
&lt;/h3&gt;

&lt;p&gt;MLJ didn't have a way to log the most important workflow information in a simpler way, just like other programming languages that have special libraries to work with tracking platforms. The main goal was to adapt the MLJ components behind the training process to log all the required information. To achieve this objective, my mentors prepared me to understand the functionality behind each project that will allow the development of our interface: &lt;a href="https://github.com/JuliaAI/MLJBase.jl"&gt;MLJBase&lt;/a&gt;, &lt;a href="https://github.com/JuliaAI/MLJModelInterface.jl"&gt;MLJModelInterface&lt;/a&gt;, and &lt;a href="https://github.com/JuliaAI/MLFlowClient.jl"&gt;MLFlowClient&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Making MLFlowClient up to date
&lt;/h4&gt;

&lt;p&gt;Deyan mentioned that MLFlowClient was ensured to work with versions &lt;code&gt;1.21.0&lt;/code&gt; and &lt;code&gt;1.22.0&lt;/code&gt; of mlflow. However, some endpoints from the REST API changed their responses over time and this broke certain core functionalities.&lt;br&gt;
My first step in this project was about converting the server timestamps to UTC time. This error was particular because it was not completely related to the library, but with mlflow internal functionality (the UI platform is showing the client side time). It was good to know that with this change Deyan considered my GSoC application and sent a email to Anthony to continue with the selection process.&lt;br&gt;
A lot of work was done implementing new features coming from new versions of mlflow, but I consider that the most important change in this phase was the complete project refactoring. This update changed the entire project architecture structure and improved the test suite in a way that new developers can start collaborating with the project easily.&lt;br&gt;
After that, I revisited this project just to implement utilities that will be used by other projects (like the health check).&lt;/p&gt;
&lt;h4&gt;
  
  
  Different approaches with MLJBase
&lt;/h4&gt;

&lt;p&gt;Just after finishing with MLFlowClient, I continued learning about MLJBase: the core package behind the entire MLJ ecosystem. Anthony helped me a lot to understand the deep functionality behind everything on this project. I'm completely thankful about his patience, because some concepts were completely new for me (like multiple dispatch).&lt;/p&gt;
&lt;h5&gt;
  
  
  The package extensions approach
&lt;/h5&gt;

&lt;p&gt;Our first approach was to implement all the changes related to integrating MLFlowClient using package extensions. This bleeding edge feature was introduced in Julia 1.9, inheriting the functionality implemented by a package named &lt;a href="https://github.com/JuliaPackaging/Requires.jl"&gt;Requires&lt;/a&gt;. In simple terms, this allows us to include external dependencies without including them... that sounds weird, right? Well, it's very simple.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://forem.julialang.org/images/ZptsZoVre1puJn526VKuZi8NHLTHF2yxrJeDZ_N7iSw/w:800/mb:500000/ar:1/aHR0cHM6Ly9mb3Jl/bS5qdWxpYWxhbmcu/b3JnL3JlbW90ZWlt/YWdlcy91cGxvYWRz/L2FydGljbGVzL3Z0/eXI1bmd2amdzcmpm/YjVjZHJpLnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://forem.julialang.org/images/ZptsZoVre1puJn526VKuZi8NHLTHF2yxrJeDZ_N7iSw/w:800/mb:500000/ar:1/aHR0cHM6Ly9mb3Jl/bS5qdWxpYWxhbmcu/b3JnL3JlbW90ZWlt/YWdlcy91cGxvYWRz/L2FydGljbGVzL3Z0/eXI1bmd2amdzcmpm/YjVjZHJpLnBuZw" alt="Package extensions concept" width="441" height="281"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Figure 1: A package extensions example&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With this approach, we can define functions that use heavy dependencies without including them when we first instantiate the project, incrementing the importing speed a lot!&lt;br&gt;
However, even if it seems like a great way to implement the project, MLFlowClient wasn't the heavy project that will make MLJ slower, and also we disagreed with the idea that the user will need always to import that library. So was it completely necessarily? I don't think so.&lt;/p&gt;
&lt;h5&gt;
  
  
  An interface: a classical approach
&lt;/h5&gt;

&lt;p&gt;After our concerns, Anthony suggested to create a new package that joins all the MLJ components and MLFlowClient... what a great idea! This allowed different things that package extensions make difficult:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A clean and classical way to implement things&lt;/li&gt;
&lt;li&gt;Removing the extra step of importing the package to the user (enhancing user experience!)&lt;/li&gt;
&lt;li&gt;Sharing utilities across the extended functions (avoiding duplication)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We started to design how this is going to work, documenting our ideas and taking a weekly meeting to discuss about the next project steps.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://forem.julialang.org/images/ayxc19iTMLkbJOKlp0P52FkEAih0Hb9rnNL9Yb8H_do/w:800/mb:500000/ar:1/aHR0cHM6Ly9mb3Jl/bS5qdWxpYWxhbmcu/b3JnL3JlbW90ZWlt/YWdlcy91cGxvYWRz/L2FydGljbGVzL2l4/ZGpqdjR4dWF6OHBn/YmptZmpwLnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://forem.julialang.org/images/ayxc19iTMLkbJOKlp0P52FkEAih0Hb9rnNL9Yb8H_do/w:800/mb:500000/ar:1/aHR0cHM6Ly9mb3Jl/bS5qdWxpYWxhbmcu/b3JnL3JlbW90ZWlt/YWdlcy91cGxvYWRz/L2FydGljbGVzL2l4/ZGpqdjR4dWF6OHBn/YmptZmpwLnBuZw" alt="Project design" width="510" height="252"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Figure 2: The project design (well, until now)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With this in mind, the first task was moving the entire implementation made in the previous approach to the new package. This included changes in MLJBase.jl and MLJModelInterface.jl to allow our new logger type to be passed throughout the MLJ workflow. Next, we polished that code to met the project requirements, and improving it.&lt;/p&gt;
&lt;h2&gt;
  
  
  The project
&lt;/h2&gt;

&lt;p&gt;MLJFlow is a package that extends the MLJ capabilities to use MLFlow as a backend for model tracking and experiment management. Other programming languages have official API implementation, but Julia don't. This project helps it to achieve that. An example with a simple workflow is shown below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight julia"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="n"&gt;MLJ&lt;/span&gt;

&lt;span class="c"&gt;# Instancing the logger&lt;/span&gt;
&lt;span class="n"&gt;logger&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;MLFlowLogger&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;"http://127.0.0.1:5000"&lt;/span&gt;&lt;span class="x"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;experiment_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"MLJFlow test"&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;artifact_location&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"./mlj-test"&lt;/span&gt;
&lt;span class="x"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# Get the data and choose our favorite model&lt;/span&gt;
&lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;make_moons&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt; &lt;span class="c"&gt;# a table and a vector with 100 rows&lt;/span&gt;
&lt;span class="n"&gt;DecisionTreeClassifier&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nd"&gt;@load&lt;/span&gt; &lt;span class="n"&gt;DecisionTreeClassifier&lt;/span&gt; &lt;span class="n"&gt;pkg&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;DecisionTree&lt;/span&gt;
&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;DecisionTreeClassifier&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_depth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# Train it!&lt;/span&gt;
&lt;span class="n"&gt;evaluate&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;resampling&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;CV&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nfolds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="x"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;measures&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="x"&gt;[&lt;/span&gt;&lt;span class="n"&gt;LogLoss&lt;/span&gt;&lt;span class="x"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;Accuracy&lt;/span&gt;&lt;span class="x"&gt;()],&lt;/span&gt;
    &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;logger&lt;/span&gt;
&lt;span class="x"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The information must be logged in a new run in your MLFlow instance under the &lt;code&gt;MLJFlow test&lt;/code&gt; experiment name. You didn't need to define anything. That's awesome!&lt;/p&gt;

&lt;p&gt;You can see more detailed information in this &lt;a href="https://github.com/JuliaAI/MLJFlow.jl/tree/master"&gt;readme file&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is left to do?
&lt;/h3&gt;

&lt;p&gt;The project is perfectly working with singular models and composite ones. These contain simple non-special implementations in the functions that our project is using. However, the next cases are still in development:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MLJ's TunedModel workflow integration&lt;/li&gt;
&lt;li&gt;MLJ's IteratedModel workflow integration&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Achievements and acknowledgments
&lt;/h2&gt;

&lt;p&gt;For me, the most important achievement was learning about how to contribute to the open source community. I'm feeling grateful for that because it was a new adventure for my professional development. It's a fact that this opportunity is going to improve the way I think about how to implement a project. As a contributor from now on, I am quite enthusiastic to be able to cooperate with the MLJ project, to the point of being able to apply it within my professional and academic circle not only as a user, but also as an ambassador.&lt;/p&gt;

&lt;p&gt;I'm completely grateful with my mentors, Antony and Deyan, who had the patience to help me with my questions; giving me a piece of their time. I'll never forget it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Useful links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/JuliaAI/MLJFlow.jl/tree/master"&gt;MLJFlow.jl repo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/JuliaAI/MLFlowClient.jl"&gt;MLFlowClient.jl repo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/alan-turing-institute/MLJ.jl/issues/1029"&gt;MLJ proposal for mlflow evaluation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/JuliaAI/MLJBase.jl/pull/912"&gt;Old MLJBase.jl pull request&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/JuliaAI/MLJBase.jl/pull/925"&gt;MLJBase.jl pull request&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>gsoc</category>
      <category>mlj</category>
      <category>mlflow</category>
      <category>mlops</category>
    </item>
  </channel>
</rss>
