Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
212 changes: 212 additions & 0 deletions mlops_test_notebook.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,212 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "a5970e13",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied: mlflow in ./.venv/lib/python3.11/site-packages (2.22.0)\n",
"Requirement already satisfied: mlflow-skinny==2.22.0 in ./.venv/lib/python3.11/site-packages (from mlflow) (2.22.0)\n",
"Requirement already satisfied: Flask<4 in ./.venv/lib/python3.11/site-packages (from mlflow) (3.1.0)\n",
"Requirement already satisfied: Jinja2<4,>=2.11 in ./.venv/lib/python3.11/site-packages (from mlflow) (3.1.6)\n",
"Requirement already satisfied: alembic!=1.10.0,<2 in ./.venv/lib/python3.11/site-packages (from mlflow) (1.15.2)\n",
"Requirement already satisfied: docker<8,>=4.0.0 in ./.venv/lib/python3.11/site-packages (from mlflow) (7.1.0)\n",
"Requirement already satisfied: graphene<4 in ./.venv/lib/python3.11/site-packages (from mlflow) (3.4.3)\n",
"Requirement already satisfied: gunicorn<24 in ./.venv/lib/python3.11/site-packages (from mlflow) (23.0.0)\n",
"Requirement already satisfied: markdown<4,>=3.3 in ./.venv/lib/python3.11/site-packages (from mlflow) (3.8)\n",
"Requirement already satisfied: matplotlib<4 in ./.venv/lib/python3.11/site-packages (from mlflow) (3.10.1)\n",
"Requirement already satisfied: numpy<3 in ./.venv/lib/python3.11/site-packages (from mlflow) (2.2.5)\n",
"Requirement already satisfied: pandas<3 in ./.venv/lib/python3.11/site-packages (from mlflow) (2.2.3)\n",
"Requirement already satisfied: pyarrow<20,>=4.0.0 in ./.venv/lib/python3.11/site-packages (from mlflow) (19.0.1)\n",
"Requirement already satisfied: scikit-learn<2 in ./.venv/lib/python3.11/site-packages (from mlflow) (1.6.1)\n",
"Requirement already satisfied: scipy<2 in ./.venv/lib/python3.11/site-packages (from mlflow) (1.15.2)\n",
"Requirement already satisfied: sqlalchemy<3,>=1.4.0 in ./.venv/lib/python3.11/site-packages (from mlflow) (2.0.40)\n",
"Requirement already satisfied: cachetools<6,>=5.0.0 in ./.venv/lib/python3.11/site-packages (from mlflow-skinny==2.22.0->mlflow) (5.5.2)\n",
"Requirement already satisfied: click<9,>=7.0 in ./.venv/lib/python3.11/site-packages (from mlflow-skinny==2.22.0->mlflow) (8.1.8)\n",
"Requirement already satisfied: cloudpickle<4 in ./.venv/lib/python3.11/site-packages (from mlflow-skinny==2.22.0->mlflow) (3.1.1)\n",
"Requirement already satisfied: databricks-sdk<1,>=0.20.0 in ./.venv/lib/python3.11/site-packages (from mlflow-skinny==2.22.0->mlflow) (0.50.0)\n",
"Requirement already satisfied: fastapi<1 in ./.venv/lib/python3.11/site-packages (from mlflow-skinny==2.22.0->mlflow) (0.115.12)\n",
"Requirement already satisfied: gitpython<4,>=3.1.9 in ./.venv/lib/python3.11/site-packages (from mlflow-skinny==2.22.0->mlflow) (3.1.44)\n",
"Requirement already satisfied: importlib_metadata!=4.7.0,<9,>=3.7.0 in ./.venv/lib/python3.11/site-packages (from mlflow-skinny==2.22.0->mlflow) (8.6.1)\n",
"Requirement already satisfied: opentelemetry-api<3,>=1.9.0 in ./.venv/lib/python3.11/site-packages (from mlflow-skinny==2.22.0->mlflow) (1.32.1)\n",
"Requirement already satisfied: opentelemetry-sdk<3,>=1.9.0 in ./.venv/lib/python3.11/site-packages (from mlflow-skinny==2.22.0->mlflow) (1.32.1)\n",
"Requirement already satisfied: packaging<25 in ./.venv/lib/python3.11/site-packages (from mlflow-skinny==2.22.0->mlflow) (24.2)\n",
"Requirement already satisfied: protobuf<7,>=3.12.0 in ./.venv/lib/python3.11/site-packages (from mlflow-skinny==2.22.0->mlflow) (6.30.2)\n",
"Requirement already satisfied: pydantic<3,>=1.10.8 in ./.venv/lib/python3.11/site-packages (from mlflow-skinny==2.22.0->mlflow) (2.11.3)\n",
"Requirement already satisfied: pyyaml<7,>=5.1 in ./.venv/lib/python3.11/site-packages (from mlflow-skinny==2.22.0->mlflow) (6.0.2)\n",
"Requirement already satisfied: requests<3,>=2.17.3 in ./.venv/lib/python3.11/site-packages (from mlflow-skinny==2.22.0->mlflow) (2.32.3)\n",
"Requirement already satisfied: sqlparse<1,>=0.4.0 in ./.venv/lib/python3.11/site-packages (from mlflow-skinny==2.22.0->mlflow) (0.5.3)\n",
"Requirement already satisfied: typing-extensions<5,>=4.0.0 in ./.venv/lib/python3.11/site-packages (from mlflow-skinny==2.22.0->mlflow) (4.13.2)\n",
"Requirement already satisfied: uvicorn<1 in ./.venv/lib/python3.11/site-packages (from mlflow-skinny==2.22.0->mlflow) (0.34.2)\n",
"Requirement already satisfied: Mako in ./.venv/lib/python3.11/site-packages (from alembic!=1.10.0,<2->mlflow) (1.3.10)\n",
"Requirement already satisfied: urllib3>=1.26.0 in ./.venv/lib/python3.11/site-packages (from docker<8,>=4.0.0->mlflow) (2.1.0)\n",
"Requirement already satisfied: Werkzeug>=3.1 in ./.venv/lib/python3.11/site-packages (from Flask<4->mlflow) (3.1.3)\n",
"Requirement already satisfied: itsdangerous>=2.2 in ./.venv/lib/python3.11/site-packages (from Flask<4->mlflow) (2.2.0)\n",
"Requirement already satisfied: blinker>=1.9 in ./.venv/lib/python3.11/site-packages (from Flask<4->mlflow) (1.9.0)\n",
"Requirement already satisfied: graphql-core<3.3,>=3.1 in ./.venv/lib/python3.11/site-packages (from graphene<4->mlflow) (3.2.6)\n",
"Requirement already satisfied: graphql-relay<3.3,>=3.1 in ./.venv/lib/python3.11/site-packages (from graphene<4->mlflow) (3.2.0)\n",
"Requirement already satisfied: python-dateutil<3,>=2.7.0 in ./.venv/lib/python3.11/site-packages (from graphene<4->mlflow) (2.9.0.post0)\n",
"Requirement already satisfied: MarkupSafe>=2.0 in ./.venv/lib/python3.11/site-packages (from Jinja2<4,>=2.11->mlflow) (3.0.2)\n",
"Requirement already satisfied: contourpy>=1.0.1 in ./.venv/lib/python3.11/site-packages (from matplotlib<4->mlflow) (1.3.2)\n",
"Requirement already satisfied: cycler>=0.10 in ./.venv/lib/python3.11/site-packages (from matplotlib<4->mlflow) (0.12.1)\n",
"Requirement already satisfied: fonttools>=4.22.0 in ./.venv/lib/python3.11/site-packages (from matplotlib<4->mlflow) (4.57.0)\n",
"Requirement already satisfied: kiwisolver>=1.3.1 in ./.venv/lib/python3.11/site-packages (from matplotlib<4->mlflow) (1.4.8)\n",
"Requirement already satisfied: pillow>=8 in ./.venv/lib/python3.11/site-packages (from matplotlib<4->mlflow) (11.2.1)\n",
"Requirement already satisfied: pyparsing>=2.3.1 in ./.venv/lib/python3.11/site-packages (from matplotlib<4->mlflow) (3.2.3)\n",
"Requirement already satisfied: pytz>=2020.1 in ./.venv/lib/python3.11/site-packages (from pandas<3->mlflow) (2025.2)\n",
"Requirement already satisfied: tzdata>=2022.7 in ./.venv/lib/python3.11/site-packages (from pandas<3->mlflow) (2025.2)\n",
"Requirement already satisfied: joblib>=1.2.0 in ./.venv/lib/python3.11/site-packages (from scikit-learn<2->mlflow) (1.4.2)\n",
"Requirement already satisfied: threadpoolctl>=3.1.0 in ./.venv/lib/python3.11/site-packages (from scikit-learn<2->mlflow) (3.6.0)\n",
"Requirement already satisfied: google-auth~=2.0 in ./.venv/lib/python3.11/site-packages (from databricks-sdk<1,>=0.20.0->mlflow-skinny==2.22.0->mlflow) (2.39.0)\n",
"Requirement already satisfied: starlette<0.47.0,>=0.40.0 in ./.venv/lib/python3.11/site-packages (from fastapi<1->mlflow-skinny==2.22.0->mlflow) (0.46.2)\n",
"Requirement already satisfied: gitdb<5,>=4.0.1 in ./.venv/lib/python3.11/site-packages (from gitpython<4,>=3.1.9->mlflow-skinny==2.22.0->mlflow) (4.0.12)\n",
"Requirement already satisfied: zipp>=3.20 in ./.venv/lib/python3.11/site-packages (from importlib_metadata!=4.7.0,<9,>=3.7.0->mlflow-skinny==2.22.0->mlflow) (3.21.0)\n",
"Requirement already satisfied: deprecated>=1.2.6 in ./.venv/lib/python3.11/site-packages (from opentelemetry-api<3,>=1.9.0->mlflow-skinny==2.22.0->mlflow) (1.2.18)\n",
"Requirement already satisfied: opentelemetry-semantic-conventions==0.53b1 in ./.venv/lib/python3.11/site-packages (from opentelemetry-sdk<3,>=1.9.0->mlflow-skinny==2.22.0->mlflow) (0.53b1)\n",
"Requirement already satisfied: annotated-types>=0.6.0 in ./.venv/lib/python3.11/site-packages (from pydantic<3,>=1.10.8->mlflow-skinny==2.22.0->mlflow) (0.7.0)\n",
"Requirement already satisfied: pydantic-core==2.33.1 in ./.venv/lib/python3.11/site-packages (from pydantic<3,>=1.10.8->mlflow-skinny==2.22.0->mlflow) (2.33.1)\n",
"Requirement already satisfied: typing-inspection>=0.4.0 in ./.venv/lib/python3.11/site-packages (from pydantic<3,>=1.10.8->mlflow-skinny==2.22.0->mlflow) (0.4.0)\n",
"Requirement already satisfied: six>=1.5 in ./.venv/lib/python3.11/site-packages (from python-dateutil<3,>=2.7.0->graphene<4->mlflow) (1.17.0)\n",
"Requirement already satisfied: charset-normalizer<4,>=2 in ./.venv/lib/python3.11/site-packages (from requests<3,>=2.17.3->mlflow-skinny==2.22.0->mlflow) (3.4.1)\n",
"Requirement already satisfied: idna<4,>=2.5 in ./.venv/lib/python3.11/site-packages (from requests<3,>=2.17.3->mlflow-skinny==2.22.0->mlflow) (3.10)\n",
"Requirement already satisfied: certifi>=2017.4.17 in ./.venv/lib/python3.11/site-packages (from requests<3,>=2.17.3->mlflow-skinny==2.22.0->mlflow) (2025.4.26)\n",
"Requirement already satisfied: h11>=0.8 in ./.venv/lib/python3.11/site-packages (from uvicorn<1->mlflow-skinny==2.22.0->mlflow) (0.16.0)\n",
"Requirement already satisfied: wrapt<2,>=1.10 in ./.venv/lib/python3.11/site-packages (from deprecated>=1.2.6->opentelemetry-api<3,>=1.9.0->mlflow-skinny==2.22.0->mlflow) (1.17.2)\n",
"Requirement already satisfied: smmap<6,>=3.0.1 in ./.venv/lib/python3.11/site-packages (from gitdb<5,>=4.0.1->gitpython<4,>=3.1.9->mlflow-skinny==2.22.0->mlflow) (5.0.2)\n",
"Requirement already satisfied: pyasn1-modules>=0.2.1 in ./.venv/lib/python3.11/site-packages (from google-auth~=2.0->databricks-sdk<1,>=0.20.0->mlflow-skinny==2.22.0->mlflow) (0.4.2)\n",
"Requirement already satisfied: rsa<5,>=3.1.4 in ./.venv/lib/python3.11/site-packages (from google-auth~=2.0->databricks-sdk<1,>=0.20.0->mlflow-skinny==2.22.0->mlflow) (4.9.1)\n",
"Requirement already satisfied: anyio<5,>=3.6.2 in ./.venv/lib/python3.11/site-packages (from starlette<0.47.0,>=0.40.0->fastapi<1->mlflow-skinny==2.22.0->mlflow) (4.9.0)\n",
"Requirement already satisfied: sniffio>=1.1 in ./.venv/lib/python3.11/site-packages (from anyio<5,>=3.6.2->starlette<0.47.0,>=0.40.0->fastapi<1->mlflow-skinny==2.22.0->mlflow) (1.3.1)\n",
"Requirement already satisfied: pyasn1<0.7.0,>=0.6.1 in ./.venv/lib/python3.11/site-packages (from pyasn1-modules>=0.2.1->google-auth~=2.0->databricks-sdk<1,>=0.20.0->mlflow-skinny==2.22.0->mlflow) (0.6.1)\n",
"\u001b[33mWARNING: There was an error checking the latest version of pip.\u001b[0m\u001b[33m\n",
"\u001b[0mObtaining file:///Users/muwongekhalifan/Desktop/work/cranecloud-cli\n",
" Installing build dependencies ... \u001b[?25ldone\n",
"\u001b[?25h Checking if build backend supports build_editable ... \u001b[?25ldone\n",
"\u001b[?25h Getting requirements to build editable ... \u001b[?25ldone\n",
"\u001b[?25h Preparing editable metadata (pyproject.toml) ... \u001b[?25ldone\n",
"\u001b[?25hRequirement already satisfied: Click in ./.venv/lib/python3.11/site-packages (from cranecloud==0.0.6) (8.1.8)\n",
"Requirement already satisfied: requests in ./.venv/lib/python3.11/site-packages (from cranecloud==0.0.6) (2.32.3)\n",
"Requirement already satisfied: keyring==24.3.0 in ./.venv/lib/python3.11/site-packages (from cranecloud==0.0.6) (24.3.0)\n",
"Requirement already satisfied: tabulate in ./.venv/lib/python3.11/site-packages (from cranecloud==0.0.6) (0.9.0)\n",
"Requirement already satisfied: colorama in ./.venv/lib/python3.11/site-packages (from cranecloud==0.0.6) (0.4.6)\n",
"Requirement already satisfied: Pygments in ./.venv/lib/python3.11/site-packages (from cranecloud==0.0.6) (2.19.1)\n",
"Requirement already satisfied: rich in ./.venv/lib/python3.11/site-packages (from cranecloud==0.0.6) (14.0.0)\n",
"Requirement already satisfied: python-dotenv in ./.venv/lib/python3.11/site-packages (from cranecloud==0.0.6) (1.1.0)\n",
"Requirement already satisfied: urllib3==2.1.0 in ./.venv/lib/python3.11/site-packages (from cranecloud==0.0.6) (2.1.0)\n",
"Requirement already satisfied: toml==0.10.2 in ./.venv/lib/python3.11/site-packages (from cranecloud==0.0.6) (0.10.2)\n",
"Requirement already satisfied: configparser==6.0.0 in ./.venv/lib/python3.11/site-packages (from cranecloud==0.0.6) (6.0.0)\n",
"Requirement already satisfied: jaraco.classes in ./.venv/lib/python3.11/site-packages (from keyring==24.3.0->cranecloud==0.0.6) (3.4.0)\n",
"Requirement already satisfied: importlib-metadata>=4.11.4 in ./.venv/lib/python3.11/site-packages (from keyring==24.3.0->cranecloud==0.0.6) (8.6.1)\n",
"Requirement already satisfied: charset-normalizer<4,>=2 in ./.venv/lib/python3.11/site-packages (from requests->cranecloud==0.0.6) (3.4.1)\n",
"Requirement already satisfied: idna<4,>=2.5 in ./.venv/lib/python3.11/site-packages (from requests->cranecloud==0.0.6) (3.10)\n",
"Requirement already satisfied: certifi>=2017.4.17 in ./.venv/lib/python3.11/site-packages (from requests->cranecloud==0.0.6) (2025.4.26)\n",
"Requirement already satisfied: markdown-it-py>=2.2.0 in ./.venv/lib/python3.11/site-packages (from rich->cranecloud==0.0.6) (3.0.0)\n",
"Requirement already satisfied: zipp>=3.20 in ./.venv/lib/python3.11/site-packages (from importlib-metadata>=4.11.4->keyring==24.3.0->cranecloud==0.0.6) (3.21.0)\n",
"Requirement already satisfied: mdurl~=0.1 in ./.venv/lib/python3.11/site-packages (from markdown-it-py>=2.2.0->rich->cranecloud==0.0.6) (0.1.2)\n",
"Requirement already satisfied: more-itertools in ./.venv/lib/python3.11/site-packages (from jaraco.classes->keyring==24.3.0->cranecloud==0.0.6) (10.7.0)\n",
"Building wheels for collected packages: cranecloud\n",
" Building editable for cranecloud (pyproject.toml) ... \u001b[?25ldone\n",
"\u001b[?25h Created wheel for cranecloud: filename=cranecloud-0.0.6-0.editable-py3-none-any.whl size=3337 sha256=1023906d7ea44a29f6e340aa649d429be63067315f5454b7fabe342e552208a6\n",
" Stored in directory: /private/var/folders/9f/hvfhgw051hl1bys9h0l3x8k80000gn/T/pip-ephem-wheel-cache-b0naq4l2/wheels/4b/3c/d2/12736bf6496f3fa3d79f4668cfe42aab1c633b2f72293a68af\n",
"Successfully built cranecloud\n",
"Installing collected packages: cranecloud\n",
" Attempting uninstall: cranecloud\n",
" Found existing installation: cranecloud 0.0.6\n",
" Uninstalling cranecloud-0.0.6:\n",
" Successfully uninstalled cranecloud-0.0.6\n",
"Successfully installed cranecloud-0.0.6\n",
"\u001b[33mWARNING: There was an error checking the latest version of pip.\u001b[0m\u001b[33m\n",
"\u001b[0m"
]
}
],
"source": [
"!pip install mlflow\n",
"!pip install -e ."
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "52f9a80e",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<Experiment: artifact_location='mlflow-artifacts:/51', creation_time=1746771072709, experiment_id='51', last_update_time=1746771072709, lifecycle_stage='active', name='experiment_e3879b5d', tags={'app_tag': 'noteb-41c43049-8ec2-4af4-b07b',\n",
" 'user_tag': '1feb8d0d-b98b-422b-9318-dbe5ac0a03b2'}>"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import mlflow\n",
"from mlflow.models import infer_signature\n",
"from cranecloud import MLOpsClient\n",
"\n",
"token = \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmcmVzaCI6ZmFsc2UsImlhdCI6MTc0Njc3MDkxMiwianRpIjoiZThjNjhkNGItN2E5OC00ODI0LWIyNTMtMGY4MDBmZDQ5NjdiIiwidHlwZSI6ImFjY2VzcyIsInN1YiI6eyJ1c2VyX2lkIjoiMWZlYjhkMGQtYjk4Yi00MjJiLTkzMTgtZGJlNWFjMGEwM2IyIiwiYXBwX2FsaWFzIjoibm90ZWItNDFjNDMwNDktOGVjMi00YWY0LWIwN2IifSwibmJmIjoxNzQ2NzcwOTEyLCJjc3JmIjoiYWYwNWRjODEtNmZlMy00NTczLWJiMGYtZDgyYWJmZDIzOTc2IiwiZXhwIjoxNzQ2NzcxODEyfQ.i-Nysr-WHBWse9mEhHW2UiX24tDlT-z8Rpto1hHwbE4\"\n",
"\n",
"client = MLOpsClient()\n",
"\n",
"tracking_url, experiment_id = client.create_experiment(token=token)\n",
"mlflow.set_tracking_uri(uri=tracking_url)\n",
"mlflow.set_experiment(experiment_id=experiment_id)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "de9e2703",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"🏃 View run bedecked-carp-618 at: https://mlflow.ahumain.cranecloud.io/#/experiments/51/runs/52bc67ce10624e8685351ad4b326b644\n",
"🧪 View experiment at: https://mlflow.ahumain.cranecloud.io/#/experiments/51\n"
]
}
],
"source": [
"# Step 3: Start a run and log something\n",
"if mlflow.active_run() is not None:\n",
" mlflow.end_run()\n",
"\n",
"with mlflow.start_run() as run:\n",
" mlflow.log_param(\"learning_rate\", 0.01)\n",
" mlflow.log_metric(\"accuracy\", 0.92)\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": ".venv",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.4"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
8 changes: 4 additions & 4 deletions src/cranecloud/commands/ml_ops.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,15 @@ def mlops():
pass


# include token
@mlops.command('create-experiment', help='Create an MLOps experiment.')
@click.option('--user-id', required=True, help='User ID')
@click.option('--app-alias', required=True, help='App alias')
def create_experiment(user_id, app_alias):
@click.option('--token', required=True, help='User app token.')
def create_experiment(token):
"""Create a new experiment ."""
try:
# Use the core client to do the actual work
tracking_uri, experiment_id = mlops_client.create_experiment(
user_id, app_alias, verbose=True)
token=token, verbose=True)

click.echo(f"Experiment created with ID: {experiment_id}")
return tracking_uri, experiment_id
Expand Down
Loading