predikit 0.4.2__tar.gz → 0.4.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. predikit-0.4.4/.claude/settings.local.json +15 -0
  2. {predikit-0.4.2 → predikit-0.4.4}/CHANGELOG.md +10 -0
  3. {predikit-0.4.2 → predikit-0.4.4}/PKG-INFO +91 -24
  4. {predikit-0.4.2 → predikit-0.4.4}/README.md +85 -21
  5. predikit-0.4.4/mlruns/1/models/m-27a74bc0ab2f40e09dc3d6c4f026cc1e/artifacts/MLmodel +23 -0
  6. predikit-0.4.4/mlruns/1/models/m-27a74bc0ab2f40e09dc3d6c4f026cc1e/artifacts/conda.yaml +22 -0
  7. predikit-0.4.4/mlruns/1/models/m-27a74bc0ab2f40e09dc3d6c4f026cc1e/artifacts/model.skops +0 -0
  8. predikit-0.4.4/mlruns/1/models/m-27a74bc0ab2f40e09dc3d6c4f026cc1e/artifacts/python_env.yaml +7 -0
  9. predikit-0.4.4/mlruns/1/models/m-27a74bc0ab2f40e09dc3d6c4f026cc1e/artifacts/requirements.txt +15 -0
  10. predikit-0.4.4/mlruns/1/models/m-28173468f0874040a705d2d3820a4f5c/artifacts/MLmodel +23 -0
  11. predikit-0.4.4/mlruns/1/models/m-28173468f0874040a705d2d3820a4f5c/artifacts/conda.yaml +22 -0
  12. predikit-0.4.4/mlruns/1/models/m-28173468f0874040a705d2d3820a4f5c/artifacts/model.skops +0 -0
  13. predikit-0.4.4/mlruns/1/models/m-28173468f0874040a705d2d3820a4f5c/artifacts/python_env.yaml +7 -0
  14. predikit-0.4.4/mlruns/1/models/m-28173468f0874040a705d2d3820a4f5c/artifacts/requirements.txt +15 -0
  15. predikit-0.4.4/mlruns/1/models/m-3eabd93b6ac447808321a1d58fef2b9b/artifacts/MLmodel +23 -0
  16. predikit-0.4.4/mlruns/1/models/m-3eabd93b6ac447808321a1d58fef2b9b/artifacts/conda.yaml +22 -0
  17. predikit-0.4.4/mlruns/1/models/m-3eabd93b6ac447808321a1d58fef2b9b/artifacts/model.skops +0 -0
  18. predikit-0.4.4/mlruns/1/models/m-3eabd93b6ac447808321a1d58fef2b9b/artifacts/python_env.yaml +7 -0
  19. predikit-0.4.4/mlruns/1/models/m-3eabd93b6ac447808321a1d58fef2b9b/artifacts/requirements.txt +15 -0
  20. predikit-0.4.4/mlruns/1/models/m-4816da14ba9c47c2b69d7d959f186d4e/artifacts/MLmodel +23 -0
  21. predikit-0.4.4/mlruns/1/models/m-4816da14ba9c47c2b69d7d959f186d4e/artifacts/conda.yaml +22 -0
  22. predikit-0.4.4/mlruns/1/models/m-4816da14ba9c47c2b69d7d959f186d4e/artifacts/model.skops +0 -0
  23. predikit-0.4.4/mlruns/1/models/m-4816da14ba9c47c2b69d7d959f186d4e/artifacts/python_env.yaml +7 -0
  24. predikit-0.4.4/mlruns/1/models/m-4816da14ba9c47c2b69d7d959f186d4e/artifacts/requirements.txt +15 -0
  25. predikit-0.4.4/mlruns/1/models/m-4deda032d5434d74888edc6f4df2e642/artifacts/MLmodel +23 -0
  26. predikit-0.4.4/mlruns/1/models/m-4deda032d5434d74888edc6f4df2e642/artifacts/conda.yaml +22 -0
  27. predikit-0.4.4/mlruns/1/models/m-4deda032d5434d74888edc6f4df2e642/artifacts/model.skops +0 -0
  28. predikit-0.4.4/mlruns/1/models/m-4deda032d5434d74888edc6f4df2e642/artifacts/python_env.yaml +7 -0
  29. predikit-0.4.4/mlruns/1/models/m-4deda032d5434d74888edc6f4df2e642/artifacts/requirements.txt +15 -0
  30. predikit-0.4.4/mlruns/1/models/m-6988b8fc759d4a6d9ba42b3ef9c5bbad/artifacts/MLmodel +23 -0
  31. predikit-0.4.4/mlruns/1/models/m-6988b8fc759d4a6d9ba42b3ef9c5bbad/artifacts/conda.yaml +22 -0
  32. predikit-0.4.4/mlruns/1/models/m-6988b8fc759d4a6d9ba42b3ef9c5bbad/artifacts/model.skops +0 -0
  33. predikit-0.4.4/mlruns/1/models/m-6988b8fc759d4a6d9ba42b3ef9c5bbad/artifacts/python_env.yaml +7 -0
  34. predikit-0.4.4/mlruns/1/models/m-6988b8fc759d4a6d9ba42b3ef9c5bbad/artifacts/requirements.txt +15 -0
  35. predikit-0.4.4/mlruns/1/models/m-885ed3e972dd4583aa9b4c518b369316/artifacts/MLmodel +23 -0
  36. predikit-0.4.4/mlruns/1/models/m-885ed3e972dd4583aa9b4c518b369316/artifacts/conda.yaml +22 -0
  37. predikit-0.4.4/mlruns/1/models/m-885ed3e972dd4583aa9b4c518b369316/artifacts/model.skops +0 -0
  38. predikit-0.4.4/mlruns/1/models/m-885ed3e972dd4583aa9b4c518b369316/artifacts/python_env.yaml +7 -0
  39. predikit-0.4.4/mlruns/1/models/m-885ed3e972dd4583aa9b4c518b369316/artifacts/requirements.txt +15 -0
  40. predikit-0.4.4/mlruns/1/models/m-936aa30d653c4e79920e98dd23b2e352/artifacts/MLmodel +23 -0
  41. predikit-0.4.4/mlruns/1/models/m-936aa30d653c4e79920e98dd23b2e352/artifacts/conda.yaml +22 -0
  42. predikit-0.4.4/mlruns/1/models/m-936aa30d653c4e79920e98dd23b2e352/artifacts/model.skops +0 -0
  43. predikit-0.4.4/mlruns/1/models/m-936aa30d653c4e79920e98dd23b2e352/artifacts/python_env.yaml +7 -0
  44. predikit-0.4.4/mlruns/1/models/m-936aa30d653c4e79920e98dd23b2e352/artifacts/requirements.txt +15 -0
  45. predikit-0.4.4/mlruns/1/models/m-9c8120122eb744128b3c91e724536d7e/artifacts/MLmodel +23 -0
  46. predikit-0.4.4/mlruns/1/models/m-9c8120122eb744128b3c91e724536d7e/artifacts/conda.yaml +22 -0
  47. predikit-0.4.4/mlruns/1/models/m-9c8120122eb744128b3c91e724536d7e/artifacts/model.skops +0 -0
  48. predikit-0.4.4/mlruns/1/models/m-9c8120122eb744128b3c91e724536d7e/artifacts/python_env.yaml +7 -0
  49. predikit-0.4.4/mlruns/1/models/m-9c8120122eb744128b3c91e724536d7e/artifacts/requirements.txt +15 -0
  50. predikit-0.4.4/mlruns/1/models/m-bc53e68577e64ed5b64b173ae23eb99d/artifacts/MLmodel +23 -0
  51. predikit-0.4.4/mlruns/1/models/m-bc53e68577e64ed5b64b173ae23eb99d/artifacts/conda.yaml +22 -0
  52. predikit-0.4.4/mlruns/1/models/m-bc53e68577e64ed5b64b173ae23eb99d/artifacts/model.skops +0 -0
  53. predikit-0.4.4/mlruns/1/models/m-bc53e68577e64ed5b64b173ae23eb99d/artifacts/python_env.yaml +7 -0
  54. predikit-0.4.4/mlruns/1/models/m-bc53e68577e64ed5b64b173ae23eb99d/artifacts/requirements.txt +15 -0
  55. predikit-0.4.4/mlruns/1/models/m-d5e1b20e8a9a4414b74b95d613362ae0/artifacts/MLmodel +23 -0
  56. predikit-0.4.4/mlruns/1/models/m-d5e1b20e8a9a4414b74b95d613362ae0/artifacts/conda.yaml +22 -0
  57. predikit-0.4.4/mlruns/1/models/m-d5e1b20e8a9a4414b74b95d613362ae0/artifacts/model.skops +0 -0
  58. predikit-0.4.4/mlruns/1/models/m-d5e1b20e8a9a4414b74b95d613362ae0/artifacts/python_env.yaml +7 -0
  59. predikit-0.4.4/mlruns/1/models/m-d5e1b20e8a9a4414b74b95d613362ae0/artifacts/requirements.txt +15 -0
  60. predikit-0.4.4/mlruns/1/models/m-e368d86129cb416cbdc24ce1f4d4062b/artifacts/MLmodel +23 -0
  61. predikit-0.4.4/mlruns/1/models/m-e368d86129cb416cbdc24ce1f4d4062b/artifacts/conda.yaml +22 -0
  62. predikit-0.4.4/mlruns/1/models/m-e368d86129cb416cbdc24ce1f4d4062b/artifacts/model.skops +0 -0
  63. predikit-0.4.4/mlruns/1/models/m-e368d86129cb416cbdc24ce1f4d4062b/artifacts/python_env.yaml +7 -0
  64. predikit-0.4.4/mlruns/1/models/m-e368d86129cb416cbdc24ce1f4d4062b/artifacts/requirements.txt +15 -0
  65. predikit-0.4.4/mlruns/1/models/m-e71aea9d1d2646f0970b78d821200719/artifacts/MLmodel +23 -0
  66. predikit-0.4.4/mlruns/1/models/m-e71aea9d1d2646f0970b78d821200719/artifacts/conda.yaml +22 -0
  67. predikit-0.4.4/mlruns/1/models/m-e71aea9d1d2646f0970b78d821200719/artifacts/model.skops +0 -0
  68. predikit-0.4.4/mlruns/1/models/m-e71aea9d1d2646f0970b78d821200719/artifacts/python_env.yaml +7 -0
  69. predikit-0.4.4/mlruns/1/models/m-e71aea9d1d2646f0970b78d821200719/artifacts/requirements.txt +15 -0
  70. predikit-0.4.4/mlruns/1/models/m-f374e93dce4f4be498ccf04e1fb1ac9e/artifacts/MLmodel +23 -0
  71. predikit-0.4.4/mlruns/1/models/m-f374e93dce4f4be498ccf04e1fb1ac9e/artifacts/conda.yaml +22 -0
  72. predikit-0.4.4/mlruns/1/models/m-f374e93dce4f4be498ccf04e1fb1ac9e/artifacts/model.skops +0 -0
  73. predikit-0.4.4/mlruns/1/models/m-f374e93dce4f4be498ccf04e1fb1ac9e/artifacts/python_env.yaml +7 -0
  74. predikit-0.4.4/mlruns/1/models/m-f374e93dce4f4be498ccf04e1fb1ac9e/artifacts/requirements.txt +15 -0
  75. {predikit-0.4.2 → predikit-0.4.4}/pyproject.toml +11 -3
  76. {predikit-0.4.2 → predikit-0.4.4}/src/predikit/__init__.py +1 -1
  77. {predikit-0.4.2 → predikit-0.4.4}/src/predikit/cli.py +2 -1
  78. {predikit-0.4.2 → predikit-0.4.4}/src/predikit/exporters/langchain.py +2 -1
  79. {predikit-0.4.2 → predikit-0.4.4}/src/predikit/exporters/openai.py +3 -2
  80. {predikit-0.4.2 → predikit-0.4.4}/src/predikit/loaders/mlflow.py +2 -2
  81. {predikit-0.4.2 → predikit-0.4.4}/src/predikit/loaders/snowflake.py +5 -1
  82. {predikit-0.4.2 → predikit-0.4.4}/src/predikit/tool.py +12 -0
  83. {predikit-0.4.2 → predikit-0.4.4}/tests/test_confidence.py +3 -3
  84. predikit-0.4.4/uv.lock +5166 -0
  85. predikit-0.4.2/.claude/settings.local.json +0 -10
  86. {predikit-0.4.2 → predikit-0.4.4}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  87. {predikit-0.4.2 → predikit-0.4.4}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  88. {predikit-0.4.2 → predikit-0.4.4}/.github/workflows/publish.yml +0 -0
  89. {predikit-0.4.2 → predikit-0.4.4}/.github/workflows/test.yml +0 -0
  90. {predikit-0.4.2 → predikit-0.4.4}/.gitignore +0 -0
  91. {predikit-0.4.2 → predikit-0.4.4}/.pre-commit-config.yaml +0 -0
  92. {predikit-0.4.2 → predikit-0.4.4}/CLAUDE.md +0 -0
  93. {predikit-0.4.2 → predikit-0.4.4}/CONTRIBUTING.md +0 -0
  94. {predikit-0.4.2 → predikit-0.4.4}/LICENSE +0 -0
  95. {predikit-0.4.2 → predikit-0.4.4}/docs/logo.gif +0 -0
  96. {predikit-0.4.2 → predikit-0.4.4}/docs/logo.png +0 -0
  97. {predikit-0.4.2 → predikit-0.4.4}/examples/01_basic_sklearn.py +0 -0
  98. {predikit-0.4.2 → predikit-0.4.4}/examples/02_xgboost_regression.py +0 -0
  99. {predikit-0.4.2 → predikit-0.4.4}/examples/03_orlando_real_estate.py +0 -0
  100. {predikit-0.4.2 → predikit-0.4.4}/examples/04_confidence_routing.py +0 -0
  101. {predikit-0.4.2 → predikit-0.4.4}/examples/05_multi_model_ensemble.py +0 -0
  102. {predikit-0.4.2 → predikit-0.4.4}/examples/06_mlflow_loader.py +0 -0
  103. {predikit-0.4.2 → predikit-0.4.4}/examples/07_snowflake_loader.py +0 -0
  104. {predikit-0.4.2 → predikit-0.4.4}/src/predikit/coerce.py +0 -0
  105. {predikit-0.4.2 → predikit-0.4.4}/src/predikit/ensemble.py +0 -0
  106. {predikit-0.4.2 → predikit-0.4.4}/src/predikit/exceptions.py +0 -0
  107. {predikit-0.4.2 → predikit-0.4.4}/src/predikit/exporters/__init__.py +0 -0
  108. {predikit-0.4.2 → predikit-0.4.4}/src/predikit/introspect.py +0 -0
  109. {predikit-0.4.2 → predikit-0.4.4}/src/predikit/loaders/__init__.py +0 -0
  110. {predikit-0.4.2 → predikit-0.4.4}/src/predikit/registry.py +0 -0
  111. {predikit-0.4.2 → predikit-0.4.4}/tests/__init__.py +0 -0
  112. {predikit-0.4.2 → predikit-0.4.4}/tests/test_cli.py +0 -0
  113. {predikit-0.4.2 → predikit-0.4.4}/tests/test_coerce.py +0 -0
  114. {predikit-0.4.2 → predikit-0.4.4}/tests/test_ensemble.py +0 -0
  115. {predikit-0.4.2 → predikit-0.4.4}/tests/test_exporters_openai.py +0 -0
  116. {predikit-0.4.2 → predikit-0.4.4}/tests/test_introspect.py +0 -0
  117. {predikit-0.4.2 → predikit-0.4.4}/tests/test_loaders_mlflow.py +0 -0
  118. {predikit-0.4.2 → predikit-0.4.4}/tests/test_loaders_snowflake.py +0 -0
  119. {predikit-0.4.2 → predikit-0.4.4}/tests/test_logging.py +0 -0
  120. {predikit-0.4.2 → predikit-0.4.4}/tests/test_registry.py +0 -0
  121. {predikit-0.4.2 → predikit-0.4.4}/tests/test_tool.py +0 -0
  122. {predikit-0.4.2 → predikit-0.4.4}/tests/test_weighted_ensemble.py +0 -0
@@ -0,0 +1,15 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(git add *)",
5
+ "Bash(git commit -m ' *)",
6
+ "Bash(python -m pytest tests/ -v --tb=short --cov=src/predikit --cov-report=term-missing)",
7
+ "WebFetch(domain:github.com)",
8
+ "PowerShell(python -m pip install mypy -q)",
9
+ "PowerShell(python -m mypy src/predikit)",
10
+ "Bash(python -m pytest --tb=short -q)",
11
+ "Bash(uv run *)",
12
+ "PowerShell(C:\\\\AI\\\\predikit\\\\.venv\\\\Scripts\\\\python.exe -m ensurepip --upgrade)"
13
+ ]
14
+ }
15
+ }
@@ -6,6 +6,16 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.4.4] - 2026-06-24
10
+
11
+ ### Changed
12
+ - README overhauled: added "Why predikit?" comparison table, "Works with" ecosystem section, GitHub star/fork badges, and a shipped-vs-planned roadmap
13
+ - Quick start section replaces "30-second example" heading; `---` dividers added between major sections for better scanability
14
+ - PyPI package description updated to a more descriptive one-liner
15
+ - Keywords expanded: added `scikit-learn`, `tool-use`, `openai`, `langchain`, `mlops`, `ai-agents`, `pydantic`, `model-serving`
16
+ - Added `Documentation` URL to `[project.urls]` in `pyproject.toml`
17
+ - Added `Topic :: Software Development :: Libraries :: Python Modules` and `Typing :: Typed` classifiers
18
+
9
19
  ## [0.4.2] - 2026-06-13
10
20
 
11
21
  ### Changed
@@ -1,15 +1,16 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: predikit
3
- Version: 0.4.2
4
- Summary: Turn any trained sklearn/XGBoost model into an LLM-callable tool with auto-generated schemas and typed I/O.
3
+ Version: 0.4.4
4
+ Summary: Wrap any trained sklearn/XGBoost model as an LLM-callable tool auto-generated JSON schemas, Pydantic I/O, OpenAI & LangChain ready, zero boilerplate.
5
5
  Project-URL: Homepage, https://github.com/Tejas-TA/predikit
6
6
  Project-URL: Repository, https://github.com/Tejas-TA/predikit
7
+ Project-URL: Documentation, https://github.com/Tejas-TA/predikit#readme
7
8
  Project-URL: Bug Tracker, https://github.com/Tejas-TA/predikit/issues
8
9
  Project-URL: Changelog, https://github.com/Tejas-TA/predikit/releases
9
10
  Author-email: Tejas Tumakuru Ashok <tejasta@gmail.com>
10
11
  License: MIT
11
12
  License-File: LICENSE
12
- Keywords: agents,function-calling,llm,ml-tools,sklearn,xgboost
13
+ Keywords: agents,ai-agents,function-calling,langchain,llm,machine-learning,ml-tools,mlops,model-serving,openai,pydantic,scikit-learn,sklearn,tool-use,xgboost
13
14
  Classifier: Development Status :: 4 - Beta
14
15
  Classifier: Intended Audience :: Developers
15
16
  Classifier: Intended Audience :: Science/Research
@@ -19,6 +20,8 @@ Classifier: Programming Language :: Python :: 3.10
19
20
  Classifier: Programming Language :: Python :: 3.11
20
21
  Classifier: Programming Language :: Python :: 3.12
21
22
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
23
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
24
+ Classifier: Typing :: Typed
22
25
  Requires-Python: >=3.10
23
26
  Requires-Dist: numpy>=1.24
24
27
  Requires-Dist: pydantic>=2.0
@@ -56,7 +59,8 @@ Description-Content-Type: text/markdown
56
59
  </p>
57
60
 
58
61
  <p align="center">
59
- Turn any trained scikit-learn or XGBoost model into an LLM-callable tool —<br/>
62
+ <strong>The bridge between your ML models and LLM agents.</strong><br/>
63
+ Wrap any trained scikit-learn or XGBoost model as an LLM-callable tool —<br/>
60
64
  auto-generated JSON schemas, typed I/O, zero boilerplate.
61
65
  </p>
62
66
 
@@ -68,6 +72,8 @@ Description-Content-Type: text/markdown
68
72
  </p>
69
73
 
70
74
  <p align="center">
75
+ <a href="https://github.com/Tejas-TA/predikit/stargazers"><img src="https://img.shields.io/github/stars/Tejas-TA/predikit?style=social" alt="GitHub Stars"/></a>
76
+ <a href="https://github.com/Tejas-TA/predikit/network/members"><img src="https://img.shields.io/github/forks/Tejas-TA/predikit?style=social" alt="GitHub Forks"/></a>
71
77
  <a href="https://pepy.tech/project/predikit"><img src="https://static.pepy.tech/personalized-badge/predikit?period=week&units=international_system&left_color=grey&right_color=blue&left_text=weekly+downloads" alt="Weekly Downloads"/></a>
72
78
  <a href="https://pepy.tech/project/predikit"><img src="https://static.pepy.tech/personalized-badge/predikit?period=month&units=international_system&left_color=grey&right_color=blue&left_text=monthly+downloads" alt="Monthly Downloads"/></a>
73
79
  <a href="https://pepy.tech/project/predikit"><img src="https://static.pepy.tech/personalized-badge/predikit?period=total&units=international_system&left_color=grey&right_color=blue&left_text=total+downloads" alt="Total Downloads"/></a>
@@ -79,34 +85,71 @@ tool.to_openai() # OpenAI function schema, ready to pass to the API
79
85
  tool.invoke({"sqft": 2200}) # → {"price_usd": 370730}
80
86
  ```
81
87
 
88
+ ---
89
+
82
90
  ## Table of Contents
91
+ - [Why predikit?](#why-predikit)
92
+ - [Works with](#works-with)
83
93
  - [Install](#install)
84
- - [30-second example](#30-second-example)
94
+ - [Quick start](#quick-start)
85
95
  - [Core API](#core-api)
86
96
  - [Field naming rule](#field-naming-rule)
87
97
  - [Cookbook](#cookbook)
98
+ - [Roadmap](#roadmap)
88
99
  - [Contributing](#contributing)
89
100
  - [License](#license)
90
101
 
91
- ## Install
102
+ ---
92
103
 
93
- ```bash
94
- pip install predikit
104
+ ## Why predikit?
105
+
106
+ Most ML pipelines stop at `.predict()`. Getting that prediction callable by an LLM agent — with validated inputs, correct types, and a schema the model can reason about — requires glue code that's tedious to write and easy to get wrong.
107
+
108
+ predikit handles that layer for you:
109
+
110
+ | | Without predikit | With predikit |
111
+ |--|------------------|---------------|
112
+ | **Schema** | Hand-write JSON Schema for every model | Auto-generated from your Pydantic `BaseModel` |
113
+ | **Type safety** | Manual casting, silent failures | Pydantic v2 validation with clear error messages |
114
+ | **LLM integration** | OpenAI / LangChain boilerplate per model | `.to_openai()` / `.to_langchain()` in one line |
115
+ | **Ensemble routing** | Custom aggregation logic per project | `ModelEnsemble` with 5 built-in strategies |
116
+ | **Confidence handling** | Write your own threshold checks | `confidence_threshold` + `on_low_confidence` |
117
+ | **Model registries** | Manual MLflow / Snowflake registry calls | `from_mlflow()` / `from_snowflake()` loaders |
118
+ | **Async** | `asyncio.get_event_loop().run_in_executor(...)` | `await tool.ainvoke(inputs)` |
119
+
120
+ ---
121
+
122
+ ## Works with
123
+
124
+ predikit is designed to plug into the tools your team already uses:
125
+
126
+ **Models** — scikit-learn · XGBoost
127
+
128
+ **LLM frameworks** — OpenAI function calling · LangChain · any tool-calling API that accepts JSON Schema
129
+
130
+ **Model registries** — MLflow Model Registry · Snowflake Model Registry
131
+
132
+ **Validation** — Pydantic v2
95
133
 
96
- # With XGBoost support
97
- pip install predikit[xgboost]
134
+ **Async** `asyncio`-compatible via `ainvoke()`
98
135
 
99
- # With LangChain support
100
- pip install predikit[langchain]
136
+ ---
101
137
 
102
- # With MLflow Model Registry support
103
- pip install predikit[mlflow]
138
+ ## Install
139
+
140
+ ```bash
141
+ pip install predikit
104
142
 
105
- # With Snowflake Model Registry support
106
- pip install predikit[snowflake]
143
+ # Optional extras
144
+ pip install predikit[xgboost] # XGBoost support
145
+ pip install predikit[langchain] # LangChain StructuredTool export
146
+ pip install predikit[mlflow] # MLflow Model Registry loader
147
+ pip install predikit[snowflake] # Snowflake Model Registry loader
107
148
  ```
108
149
 
109
- ## 30-second example
150
+ ---
151
+
152
+ ## Quick start
110
153
 
111
154
  ```python
112
155
  from pydantic import BaseModel, Field
@@ -147,6 +190,8 @@ tool.invoke({
147
190
  # → {"species": 0}
148
191
  ```
149
192
 
193
+ ---
194
+
150
195
  ## Core API
151
196
 
152
197
  ### `ModelTool`
@@ -205,6 +250,8 @@ ModelEnsemble(
205
250
 
206
251
  `ModelEnsemble` exposes the same `.invoke()`, `.ainvoke()`, `.to_openai()`, and `.to_langchain()` interface as `ModelTool`.
207
252
 
253
+ ---
254
+
208
255
  ## Field naming rule
209
256
 
210
257
  **Your Pydantic schema field names must exactly match the column names the model was trained on.**
@@ -234,6 +281,8 @@ Schema has: ['square_footage', 'beds', 'bathrooms'], model expects: ['sqft', 'be
234
281
 
235
282
  > **Tip:** If you trained with a numpy array (no DataFrame), predikit has no feature names to check — it uses your schema's field definition order instead.
236
283
 
284
+ ---
285
+
237
286
  ## Cookbook
238
287
 
239
288
  ### XGBoost regression
@@ -389,23 +438,41 @@ tool = from_snowflake(
389
438
 
390
439
  Pass `output_method="predict_proba"` or any other method your Snowflake model exposes. The returned `ModelTool` is identical to one built directly — all exporters, confidence routing, and ensemble strategies work as-is. Requires `pip install predikit[snowflake]`.
391
440
 
392
- ### Orlando real estate demo
441
+ ### End-to-end demo
442
+
443
+ See [`examples/03_orlando_real_estate.py`](examples/03_orlando_real_estate.py) for a full walkthrough: synthetic dataset → XGBoost training → `ModelTool` → registry → OpenAI schema → prediction.
393
444
 
394
- See [`examples/03_orlando_real_estate.py`](examples/03_orlando_real_estate.py) for a full end-to-end walkthrough: synthetic dataset → XGBoost training → `ModelTool` → registry → OpenAI schema → prediction.
445
+ ---
395
446
 
396
447
  ## Roadmap
397
448
 
398
- Planned for later releases:
449
+ ### Shipped
450
+
451
+ - [x] OpenAI function-calling schema export
452
+ - [x] LangChain `StructuredTool` export
453
+ - [x] Pydantic v2 typed I/O validation
454
+ - [x] Multi-model `ModelEnsemble` — collect / mean / vote / weighted variants
455
+ - [x] Confidence routing — `warn` / `raise` / `fallback`
456
+ - [x] Async `ainvoke()` via thread pool executor
457
+ - [x] MLflow Model Registry loader
458
+ - [x] Snowflake Model Registry loader
459
+ - [x] `predikit inspect` CLI
460
+
461
+ ### Planned
399
462
 
400
- - HuggingFace / PyTorch / TensorFlow model support
401
- - Streaming inference support
402
- - OpenAI Assistants API integration
463
+ - [ ] HuggingFace / PyTorch / TensorFlow model support
464
+ - [ ] Streaming inference support
465
+ - [ ] OpenAI Assistants API integration
466
+ - [ ] MCP server mode
467
+
468
+ ---
403
469
 
404
470
  ## Contributing
405
471
 
406
472
  See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, code style, and PR guidelines. The [CHANGELOG](CHANGELOG.md) tracks notable changes per release.
407
473
 
474
+ Issues and PRs are welcome — if you're wrapping a model type or registry that predikit doesn't support yet, open a discussion.
475
+
408
476
  ## License
409
477
 
410
478
  MIT © Tejas Tumakuru Ashok
411
-
@@ -6,7 +6,8 @@
6
6
  </p>
7
7
 
8
8
  <p align="center">
9
- Turn any trained scikit-learn or XGBoost model into an LLM-callable tool —<br/>
9
+ <strong>The bridge between your ML models and LLM agents.</strong><br/>
10
+ Wrap any trained scikit-learn or XGBoost model as an LLM-callable tool —<br/>
10
11
  auto-generated JSON schemas, typed I/O, zero boilerplate.
11
12
  </p>
12
13
 
@@ -18,6 +19,8 @@
18
19
  </p>
19
20
 
20
21
  <p align="center">
22
+ <a href="https://github.com/Tejas-TA/predikit/stargazers"><img src="https://img.shields.io/github/stars/Tejas-TA/predikit?style=social" alt="GitHub Stars"/></a>
23
+ <a href="https://github.com/Tejas-TA/predikit/network/members"><img src="https://img.shields.io/github/forks/Tejas-TA/predikit?style=social" alt="GitHub Forks"/></a>
21
24
  <a href="https://pepy.tech/project/predikit"><img src="https://static.pepy.tech/personalized-badge/predikit?period=week&units=international_system&left_color=grey&right_color=blue&left_text=weekly+downloads" alt="Weekly Downloads"/></a>
22
25
  <a href="https://pepy.tech/project/predikit"><img src="https://static.pepy.tech/personalized-badge/predikit?period=month&units=international_system&left_color=grey&right_color=blue&left_text=monthly+downloads" alt="Monthly Downloads"/></a>
23
26
  <a href="https://pepy.tech/project/predikit"><img src="https://static.pepy.tech/personalized-badge/predikit?period=total&units=international_system&left_color=grey&right_color=blue&left_text=total+downloads" alt="Total Downloads"/></a>
@@ -29,34 +32,71 @@ tool.to_openai() # OpenAI function schema, ready to pass to the API
29
32
  tool.invoke({"sqft": 2200}) # → {"price_usd": 370730}
30
33
  ```
31
34
 
35
+ ---
36
+
32
37
  ## Table of Contents
38
+ - [Why predikit?](#why-predikit)
39
+ - [Works with](#works-with)
33
40
  - [Install](#install)
34
- - [30-second example](#30-second-example)
41
+ - [Quick start](#quick-start)
35
42
  - [Core API](#core-api)
36
43
  - [Field naming rule](#field-naming-rule)
37
44
  - [Cookbook](#cookbook)
45
+ - [Roadmap](#roadmap)
38
46
  - [Contributing](#contributing)
39
47
  - [License](#license)
40
48
 
41
- ## Install
49
+ ---
42
50
 
43
- ```bash
44
- pip install predikit
51
+ ## Why predikit?
52
+
53
+ Most ML pipelines stop at `.predict()`. Getting that prediction callable by an LLM agent — with validated inputs, correct types, and a schema the model can reason about — requires glue code that's tedious to write and easy to get wrong.
54
+
55
+ predikit handles that layer for you:
56
+
57
+ | | Without predikit | With predikit |
58
+ |--|------------------|---------------|
59
+ | **Schema** | Hand-write JSON Schema for every model | Auto-generated from your Pydantic `BaseModel` |
60
+ | **Type safety** | Manual casting, silent failures | Pydantic v2 validation with clear error messages |
61
+ | **LLM integration** | OpenAI / LangChain boilerplate per model | `.to_openai()` / `.to_langchain()` in one line |
62
+ | **Ensemble routing** | Custom aggregation logic per project | `ModelEnsemble` with 5 built-in strategies |
63
+ | **Confidence handling** | Write your own threshold checks | `confidence_threshold` + `on_low_confidence` |
64
+ | **Model registries** | Manual MLflow / Snowflake registry calls | `from_mlflow()` / `from_snowflake()` loaders |
65
+ | **Async** | `asyncio.get_event_loop().run_in_executor(...)` | `await tool.ainvoke(inputs)` |
66
+
67
+ ---
68
+
69
+ ## Works with
70
+
71
+ predikit is designed to plug into the tools your team already uses:
72
+
73
+ **Models** — scikit-learn · XGBoost
74
+
75
+ **LLM frameworks** — OpenAI function calling · LangChain · any tool-calling API that accepts JSON Schema
76
+
77
+ **Model registries** — MLflow Model Registry · Snowflake Model Registry
78
+
79
+ **Validation** — Pydantic v2
45
80
 
46
- # With XGBoost support
47
- pip install predikit[xgboost]
81
+ **Async** `asyncio`-compatible via `ainvoke()`
48
82
 
49
- # With LangChain support
50
- pip install predikit[langchain]
83
+ ---
51
84
 
52
- # With MLflow Model Registry support
53
- pip install predikit[mlflow]
85
+ ## Install
86
+
87
+ ```bash
88
+ pip install predikit
54
89
 
55
- # With Snowflake Model Registry support
56
- pip install predikit[snowflake]
90
+ # Optional extras
91
+ pip install predikit[xgboost] # XGBoost support
92
+ pip install predikit[langchain] # LangChain StructuredTool export
93
+ pip install predikit[mlflow] # MLflow Model Registry loader
94
+ pip install predikit[snowflake] # Snowflake Model Registry loader
57
95
  ```
58
96
 
59
- ## 30-second example
97
+ ---
98
+
99
+ ## Quick start
60
100
 
61
101
  ```python
62
102
  from pydantic import BaseModel, Field
@@ -97,6 +137,8 @@ tool.invoke({
97
137
  # → {"species": 0}
98
138
  ```
99
139
 
140
+ ---
141
+
100
142
  ## Core API
101
143
 
102
144
  ### `ModelTool`
@@ -155,6 +197,8 @@ ModelEnsemble(
155
197
 
156
198
  `ModelEnsemble` exposes the same `.invoke()`, `.ainvoke()`, `.to_openai()`, and `.to_langchain()` interface as `ModelTool`.
157
199
 
200
+ ---
201
+
158
202
  ## Field naming rule
159
203
 
160
204
  **Your Pydantic schema field names must exactly match the column names the model was trained on.**
@@ -184,6 +228,8 @@ Schema has: ['square_footage', 'beds', 'bathrooms'], model expects: ['sqft', 'be
184
228
 
185
229
  > **Tip:** If you trained with a numpy array (no DataFrame), predikit has no feature names to check — it uses your schema's field definition order instead.
186
230
 
231
+ ---
232
+
187
233
  ## Cookbook
188
234
 
189
235
  ### XGBoost regression
@@ -339,23 +385,41 @@ tool = from_snowflake(
339
385
 
340
386
  Pass `output_method="predict_proba"` or any other method your Snowflake model exposes. The returned `ModelTool` is identical to one built directly — all exporters, confidence routing, and ensemble strategies work as-is. Requires `pip install predikit[snowflake]`.
341
387
 
342
- ### Orlando real estate demo
388
+ ### End-to-end demo
389
+
390
+ See [`examples/03_orlando_real_estate.py`](examples/03_orlando_real_estate.py) for a full walkthrough: synthetic dataset → XGBoost training → `ModelTool` → registry → OpenAI schema → prediction.
343
391
 
344
- See [`examples/03_orlando_real_estate.py`](examples/03_orlando_real_estate.py) for a full end-to-end walkthrough: synthetic dataset → XGBoost training → `ModelTool` → registry → OpenAI schema → prediction.
392
+ ---
345
393
 
346
394
  ## Roadmap
347
395
 
348
- Planned for later releases:
396
+ ### Shipped
397
+
398
+ - [x] OpenAI function-calling schema export
399
+ - [x] LangChain `StructuredTool` export
400
+ - [x] Pydantic v2 typed I/O validation
401
+ - [x] Multi-model `ModelEnsemble` — collect / mean / vote / weighted variants
402
+ - [x] Confidence routing — `warn` / `raise` / `fallback`
403
+ - [x] Async `ainvoke()` via thread pool executor
404
+ - [x] MLflow Model Registry loader
405
+ - [x] Snowflake Model Registry loader
406
+ - [x] `predikit inspect` CLI
407
+
408
+ ### Planned
349
409
 
350
- - HuggingFace / PyTorch / TensorFlow model support
351
- - Streaming inference support
352
- - OpenAI Assistants API integration
410
+ - [ ] HuggingFace / PyTorch / TensorFlow model support
411
+ - [ ] Streaming inference support
412
+ - [ ] OpenAI Assistants API integration
413
+ - [ ] MCP server mode
414
+
415
+ ---
353
416
 
354
417
  ## Contributing
355
418
 
356
419
  See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, code style, and PR guidelines. The [CHANGELOG](CHANGELOG.md) tracks notable changes per release.
357
420
 
421
+ Issues and PRs are welcome — if you're wrapping a model type or registry that predikit doesn't support yet, open a discussion.
422
+
358
423
  ## License
359
424
 
360
425
  MIT © Tejas Tumakuru Ashok
361
-
@@ -0,0 +1,23 @@
1
+ artifact_path: file:C:/AI/predikit/mlruns/1/models/m-27a74bc0ab2f40e09dc3d6c4f026cc1e/artifacts
2
+ flavors:
3
+ python_function:
4
+ env:
5
+ conda: conda.yaml
6
+ virtualenv: python_env.yaml
7
+ loader_module: mlflow.sklearn
8
+ model_path: model.skops
9
+ predict_fn: predict
10
+ python_version: 3.13.5
11
+ sklearn:
12
+ code: null
13
+ pickled_model: model.skops
14
+ serialization_format: skops
15
+ sklearn_version: 1.7.2
16
+ skops_trusted_types: null
17
+ mlflow_version: 3.14.0
18
+ model_id: m-27a74bc0ab2f40e09dc3d6c4f026cc1e
19
+ model_size_bytes: 9581
20
+ model_uuid: m-27a74bc0ab2f40e09dc3d6c4f026cc1e
21
+ prompts: null
22
+ run_id: cf4fc6366185416489e3a600ec4d813d
23
+ utc_time_created: '2026-06-20 21:48:25.168465'
@@ -0,0 +1,22 @@
1
+ channels:
2
+ - conda-forge
3
+ dependencies:
4
+ - python=3.13.5
5
+ - pip
6
+ - pip:
7
+ - mlflow==3.14.0
8
+ - annotated-types==0.7.0
9
+ - joblib==1.5.3
10
+ - numpy==2.2.6; python_full_version < "3.11"
11
+ - numpy==2.4.6; python_full_version >= "3.11"
12
+ - pydantic-core==2.46.4
13
+ - pydantic==2.13.4
14
+ - scikit-learn==1.7.2
15
+ - scipy==1.15.3; python_full_version < "3.11"
16
+ - scipy==1.17.1; python_full_version == "3.11.*"
17
+ - scipy==1.18.0; python_full_version >= "3.12"
18
+ - skops==0.14.0
19
+ - threadpoolctl==3.6.0
20
+ - typing-extensions==4.15.0
21
+ - typing-inspection==0.4.2
22
+ name: mlflow-env
@@ -0,0 +1,7 @@
1
+ python: 3.13.5
2
+ build_dependencies:
3
+ - pip
4
+ - setuptools
5
+ - wheel
6
+ dependencies:
7
+ - -r requirements.txt
@@ -0,0 +1,15 @@
1
+ mlflow==3.14.0
2
+ annotated-types==0.7.0
3
+ joblib==1.5.3
4
+ numpy==2.2.6; python_full_version < "3.11"
5
+ numpy==2.4.6; python_full_version >= "3.11"
6
+ pydantic-core==2.46.4
7
+ pydantic==2.13.4
8
+ scikit-learn==1.7.2
9
+ scipy==1.15.3; python_full_version < "3.11"
10
+ scipy==1.17.1; python_full_version == "3.11.*"
11
+ scipy==1.18.0; python_full_version >= "3.12"
12
+ skops==0.14.0
13
+ threadpoolctl==3.6.0
14
+ typing-extensions==4.15.0
15
+ typing-inspection==0.4.2
@@ -0,0 +1,23 @@
1
+ artifact_path: file:C:/AI/predikit/mlruns/1/models/m-28173468f0874040a705d2d3820a4f5c/artifacts
2
+ flavors:
3
+ python_function:
4
+ env:
5
+ conda: conda.yaml
6
+ virtualenv: python_env.yaml
7
+ loader_module: mlflow.sklearn
8
+ model_path: model.skops
9
+ predict_fn: predict
10
+ python_version: 3.13.5
11
+ sklearn:
12
+ code: null
13
+ pickled_model: model.skops
14
+ serialization_format: skops
15
+ sklearn_version: 1.7.2
16
+ skops_trusted_types: null
17
+ mlflow_version: 3.14.0
18
+ model_id: m-28173468f0874040a705d2d3820a4f5c
19
+ model_size_bytes: 9581
20
+ model_uuid: m-28173468f0874040a705d2d3820a4f5c
21
+ prompts: null
22
+ run_id: c0cfa92fb12c454fb2715f1ef48be4ff
23
+ utc_time_created: '2026-06-20 21:47:19.880624'
@@ -0,0 +1,22 @@
1
+ channels:
2
+ - conda-forge
3
+ dependencies:
4
+ - python=3.13.5
5
+ - pip
6
+ - pip:
7
+ - mlflow==3.14.0
8
+ - annotated-types==0.7.0
9
+ - joblib==1.5.3
10
+ - numpy==2.2.6; python_full_version < "3.11"
11
+ - numpy==2.4.6; python_full_version >= "3.11"
12
+ - pydantic-core==2.46.4
13
+ - pydantic==2.13.4
14
+ - scikit-learn==1.7.2
15
+ - scipy==1.15.3; python_full_version < "3.11"
16
+ - scipy==1.17.1; python_full_version == "3.11.*"
17
+ - scipy==1.18.0; python_full_version >= "3.12"
18
+ - skops==0.14.0
19
+ - threadpoolctl==3.6.0
20
+ - typing-extensions==4.15.0
21
+ - typing-inspection==0.4.2
22
+ name: mlflow-env
@@ -0,0 +1,7 @@
1
+ python: 3.13.5
2
+ build_dependencies:
3
+ - pip
4
+ - setuptools
5
+ - wheel
6
+ dependencies:
7
+ - -r requirements.txt
@@ -0,0 +1,15 @@
1
+ mlflow==3.14.0
2
+ annotated-types==0.7.0
3
+ joblib==1.5.3
4
+ numpy==2.2.6; python_full_version < "3.11"
5
+ numpy==2.4.6; python_full_version >= "3.11"
6
+ pydantic-core==2.46.4
7
+ pydantic==2.13.4
8
+ scikit-learn==1.7.2
9
+ scipy==1.15.3; python_full_version < "3.11"
10
+ scipy==1.17.1; python_full_version == "3.11.*"
11
+ scipy==1.18.0; python_full_version >= "3.12"
12
+ skops==0.14.0
13
+ threadpoolctl==3.6.0
14
+ typing-extensions==4.15.0
15
+ typing-inspection==0.4.2
@@ -0,0 +1,23 @@
1
+ artifact_path: file:c:/AI/predikit/mlruns/1/models/m-3eabd93b6ac447808321a1d58fef2b9b/artifacts
2
+ flavors:
3
+ python_function:
4
+ env:
5
+ conda: conda.yaml
6
+ virtualenv: python_env.yaml
7
+ loader_module: mlflow.sklearn
8
+ model_path: model.skops
9
+ predict_fn: predict
10
+ python_version: 3.13.5
11
+ sklearn:
12
+ code: null
13
+ pickled_model: model.skops
14
+ serialization_format: skops
15
+ sklearn_version: 1.7.2
16
+ skops_trusted_types: null
17
+ mlflow_version: 3.14.0
18
+ model_id: m-3eabd93b6ac447808321a1d58fef2b9b
19
+ model_size_bytes: 9581
20
+ model_uuid: m-3eabd93b6ac447808321a1d58fef2b9b
21
+ prompts: null
22
+ run_id: ede0865607194eba8f4bcb00ba747744
23
+ utc_time_created: '2026-06-20 21:49:57.444715'
@@ -0,0 +1,22 @@
1
+ channels:
2
+ - conda-forge
3
+ dependencies:
4
+ - python=3.13.5
5
+ - pip
6
+ - pip:
7
+ - mlflow==3.14.0
8
+ - annotated-types==0.7.0
9
+ - joblib==1.5.3
10
+ - numpy==2.2.6; python_full_version < "3.11"
11
+ - numpy==2.4.6; python_full_version >= "3.11"
12
+ - pydantic-core==2.46.4
13
+ - pydantic==2.13.4
14
+ - scikit-learn==1.7.2
15
+ - scipy==1.15.3; python_full_version < "3.11"
16
+ - scipy==1.17.1; python_full_version == "3.11.*"
17
+ - scipy==1.18.0; python_full_version >= "3.12"
18
+ - skops==0.14.0
19
+ - threadpoolctl==3.6.0
20
+ - typing-extensions==4.15.0
21
+ - typing-inspection==0.4.2
22
+ name: mlflow-env
@@ -0,0 +1,7 @@
1
+ python: 3.13.5
2
+ build_dependencies:
3
+ - pip
4
+ - setuptools
5
+ - wheel
6
+ dependencies:
7
+ - -r requirements.txt
@@ -0,0 +1,15 @@
1
+ mlflow==3.14.0
2
+ annotated-types==0.7.0
3
+ joblib==1.5.3
4
+ numpy==2.2.6; python_full_version < "3.11"
5
+ numpy==2.4.6; python_full_version >= "3.11"
6
+ pydantic-core==2.46.4
7
+ pydantic==2.13.4
8
+ scikit-learn==1.7.2
9
+ scipy==1.15.3; python_full_version < "3.11"
10
+ scipy==1.17.1; python_full_version == "3.11.*"
11
+ scipy==1.18.0; python_full_version >= "3.12"
12
+ skops==0.14.0
13
+ threadpoolctl==3.6.0
14
+ typing-extensions==4.15.0
15
+ typing-inspection==0.4.2
@@ -0,0 +1,23 @@
1
+ artifact_path: file:c:/AI/predikit/mlruns/1/models/m-4816da14ba9c47c2b69d7d959f186d4e/artifacts
2
+ flavors:
3
+ python_function:
4
+ env:
5
+ conda: conda.yaml
6
+ virtualenv: python_env.yaml
7
+ loader_module: mlflow.sklearn
8
+ model_path: model.skops
9
+ predict_fn: predict
10
+ python_version: 3.13.5
11
+ sklearn:
12
+ code: null
13
+ pickled_model: model.skops
14
+ serialization_format: skops
15
+ sklearn_version: 1.7.2
16
+ skops_trusted_types: null
17
+ mlflow_version: 3.14.0
18
+ model_id: m-4816da14ba9c47c2b69d7d959f186d4e
19
+ model_size_bytes: 9581
20
+ model_uuid: m-4816da14ba9c47c2b69d7d959f186d4e
21
+ prompts: null
22
+ run_id: e049ecc2fa2d4e1a920d7aed96dde64f
23
+ utc_time_created: '2026-06-20 21:50:39.894015'