predikit 0.6.2__tar.gz → 0.6.3__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.
- {predikit-0.6.2 → predikit-0.6.3}/CHANGELOG.md +149 -141
- {predikit-0.6.2 → predikit-0.6.3}/PKG-INFO +10 -4
- {predikit-0.6.2 → predikit-0.6.3}/README.md +9 -3
- {predikit-0.6.2 → predikit-0.6.3}/pyproject.toml +1 -1
- {predikit-0.6.2 → predikit-0.6.3}/src/predikit/__init__.py +16 -16
- {predikit-0.6.2 → predikit-0.6.3}/.gitattributes +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/.github/workflows/publish.yml +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/.github/workflows/test.yml +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/.gitignore +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/.pre-commit-config.yaml +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/CLAUDE.md +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/CONTRIBUTING.md +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/LICENSE +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/docs/logo.gif +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/docs/logo.png +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/examples/01_basic_sklearn.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/examples/02_xgboost_regression.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/examples/03_orlando_real_estate.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/examples/04_confidence_routing.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/examples/05_multi_model_ensemble.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/examples/06_mlflow_loader.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/examples/07_snowflake_loader.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/src/predikit/cli.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/src/predikit/coerce.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/src/predikit/ensemble.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/src/predikit/exceptions.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/src/predikit/exporters/__init__.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/src/predikit/exporters/langchain.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/src/predikit/exporters/openai.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/src/predikit/introspect.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/src/predikit/loaders/__init__.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/src/predikit/loaders/mlflow.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/src/predikit/loaders/snowflake.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/src/predikit/mcp.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/src/predikit/py.typed +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/src/predikit/registry.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/src/predikit/tool.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/tests/__init__.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/tests/test_cli.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/tests/test_coerce.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/tests/test_confidence.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/tests/test_ensemble.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/tests/test_exporters_langchain.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/tests/test_exporters_openai.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/tests/test_introspect.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/tests/test_loaders_mlflow.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/tests/test_loaders_snowflake.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/tests/test_logging.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/tests/test_mcp.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/tests/test_registry.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/tests/test_tool.py +0 -0
- {predikit-0.6.2 → predikit-0.6.3}/tests/test_weighted_ensemble.py +0 -0
|
@@ -1,141 +1,149 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
All notable changes to this project will be documented in this file.
|
|
4
|
-
|
|
5
|
-
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
|
-
|
|
7
|
-
## [Unreleased]
|
|
8
|
-
|
|
9
|
-
## [0.6.
|
|
10
|
-
|
|
11
|
-
###
|
|
12
|
-
-
|
|
13
|
-
|
|
14
|
-
### Changed
|
|
15
|
-
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
- `
|
|
28
|
-
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
- `
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
-
|
|
81
|
-
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
-
|
|
101
|
-
-
|
|
102
|
-
-
|
|
103
|
-
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
-
|
|
109
|
-
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
- `
|
|
115
|
-
-
|
|
116
|
-
-
|
|
117
|
-
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
###
|
|
122
|
-
-
|
|
123
|
-
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
-
|
|
131
|
-
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
###
|
|
136
|
-
-
|
|
137
|
-
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
|
+
|
|
7
|
+
## [Unreleased]
|
|
8
|
+
|
|
9
|
+
## [0.6.3] - 2026-09-13
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
- Corrected the MCP quick-start command: `predikit serve` requires both the `mcp` and `cli` extras. The MCP library API itself remains available with `predikit[mcp]` alone.
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
- Polished the README installation guidance and documented MCP HTTP host/port options.
|
|
16
|
+
|
|
17
|
+
## [0.6.2] - 2026-08-22
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
- `py.typed` marker, so type checkers actually consume the annotations. Every module is annotated and mypy-clean, and the package declares the `Typing :: Typed` classifier, but without the PEP 561 marker downstream consumers got no type information at all.
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
- `from_snowflake()` imports `snowflake.ml.registry` inside the function body instead of at module level, matching `from_mlflow()` and the project's own rule for optional dependencies. The module-level `Registry = None` sentinel is gone.
|
|
24
|
+
- CI lints and format-checks `examples/` alongside `src/` and `tests/`.
|
|
25
|
+
|
|
26
|
+
### Removed
|
|
27
|
+
- `uv.lock`. Nothing consumed it — CI installs with `pip install -e ".[dev]"` — and a library should not pin its consumers' transitive dependencies.
|
|
28
|
+
- `.claude/settings.local.json` from version control. It holds per-developer machine paths.
|
|
29
|
+
|
|
30
|
+
## [0.6.1] - 2026-08-15
|
|
31
|
+
|
|
32
|
+
### Fixed
|
|
33
|
+
- MCP tools now advertise an `outputSchema` and return `structuredContent`. The generated callable carried no return annotation, so FastMCP emitted `outputSchema: null` and every result came back as unstructured text. Output fields are named from the tool's `output_name` / `output_description`, and a `collect` ensemble declares each member's output.
|
|
34
|
+
- Low-confidence results keep their `_confidence` and `_low_confidence` keys when served over MCP. The output model allows extra keys; a strict one validates them away silently.
|
|
35
|
+
- `predikit serve` no longer disguises unrelated failures as a bad registry target. Module import and attribute lookup are handled separately, and errors raised while building or running the server propagate with their own traceback instead of being reported as `Could not load registry target`.
|
|
36
|
+
- `coerce_value()` converts `True` / `False` to `1` / `0` for `int` fields. `isinstance(True, int)` is true in Python, so bools previously passed through unconverted.
|
|
37
|
+
|
|
38
|
+
### Added
|
|
39
|
+
- `--host` and `--port` options on `predikit serve`, plus matching `host` / `port` arguments on `create_mcp_server()`. The `streamable-http` transport was previously stuck on the SDK default of `127.0.0.1:8000`.
|
|
40
|
+
- `ToolRegistry.items()`, `.names()`, `__iter__`, and `__len__` as the public way to enumerate a registry. `create_mcp_server()` used the private `_tools` / `_ensembles` attributes; `to_openai()` and `to_langchain()` now share the same accessor.
|
|
41
|
+
- Python 3.13 in the CI matrix and the package classifiers.
|
|
42
|
+
|
|
43
|
+
### Changed
|
|
44
|
+
- `mcp` is now a dev dependency, so the MCP integration is tested against the real SDK. The previous tests substituted a fake `FastMCP` and reported full coverage of `mcp.py` while never exercising the SDK — which is how the missing output schema shipped.
|
|
45
|
+
- Test coverage for `predikit serve`, which previously had none.
|
|
46
|
+
|
|
47
|
+
## [0.6.0] - 2026-08-03
|
|
48
|
+
|
|
49
|
+
### Added
|
|
50
|
+
- MCP server integration via `create_mcp_server()` and `predikit serve`.
|
|
51
|
+
- Optional `mcp` dependency for exposing `ToolRegistry` tools to MCP-compatible clients.
|
|
52
|
+
|
|
53
|
+
## [0.5.2] - 2026-08-01
|
|
54
|
+
|
|
55
|
+
### Fixed
|
|
56
|
+
- Repaired the development lockfile so `uv` can resolve the pinned Colorama artifact.
|
|
57
|
+
- Added repository-wide LF line-ending normalization so Ruff formatting is stable across platforms.
|
|
58
|
+
|
|
59
|
+
### Added
|
|
60
|
+
- Regression coverage for invalid Snowflake output methods and duplicate registry names.
|
|
61
|
+
- CI package-build verification to catch release artifacts that cannot be built.
|
|
62
|
+
|
|
63
|
+
## [0.5.1] - 2026-07-21
|
|
64
|
+
|
|
65
|
+
### Added
|
|
66
|
+
- Test coverage for the LangChain exporter (`test_exporters_langchain.py`) — previously untested
|
|
67
|
+
- Warning when `confidence_threshold` is set on a classifier whose model has no `predict_proba` method, mirroring the existing regressor warning
|
|
68
|
+
- Test coverage for both `confidence_threshold` construction-time warnings (regressor, and classifier without `predict_proba`)
|
|
69
|
+
|
|
70
|
+
### Fixed
|
|
71
|
+
- `to_langchain()` now wires up `ainvoke()` as the LangChain tool's `coroutine`, so async LangChain agents actually get async execution instead of silently falling back to sync
|
|
72
|
+
|
|
73
|
+
## [0.5.0] - 2026-07-01
|
|
74
|
+
|
|
75
|
+
### Fixed
|
|
76
|
+
- Improved `ModelTool` input coercion for optional scalar annotations like `float | None`, `bool | None`, `int | None`, and `str | None`
|
|
77
|
+
- Added test coverage for optional scalar string inputs to keep LLM-friendly coercion consistent across modern Pydantic schemas
|
|
78
|
+
|
|
79
|
+
### Changed
|
|
80
|
+
- Removed generated MLflow run artifacts from source control and ignored future `mlruns/` outputs
|
|
81
|
+
- Cleaned package metadata and CLI text to avoid Unicode dash rendering issues in terminals and package indexes
|
|
82
|
+
|
|
83
|
+
## [0.4.5] - 2026-07-01
|
|
84
|
+
|
|
85
|
+
### Fixed
|
|
86
|
+
- Added validation for `confidence_threshold` so values outside `0.0` to `1.0` fail at construction time
|
|
87
|
+
- Added `ModelEnsemble` validation for duplicate `collect` outputs, mismatched aggregate output names, negative weights, and zero-total weighted strategies
|
|
88
|
+
- Added `ToolRegistry` duplicate-name validation across tools and ensembles
|
|
89
|
+
- Updated `ToolRegistry.get()` to retrieve both tools and ensembles with clearer missing-name errors
|
|
90
|
+
- Cleaned up example lint issues and corrected stale `modelbridge[xgboost]` install text
|
|
91
|
+
|
|
92
|
+
### Changed
|
|
93
|
+
- Marked MLflow loader tests as opt-in integration tests so the default pytest suite stays fast and deterministic
|
|
94
|
+
|
|
95
|
+
## [0.4.4] - 2026-06-24
|
|
96
|
+
|
|
97
|
+
### Changed
|
|
98
|
+
- README overhauled: added "Why predikit?" comparison table, "Works with" ecosystem section, GitHub star/fork badges, and a shipped-vs-planned roadmap
|
|
99
|
+
- Quick start section replaces "30-second example" heading; `---` dividers added between major sections for better scanability
|
|
100
|
+
- PyPI package description updated to a more descriptive one-liner
|
|
101
|
+
- Keywords expanded: added `scikit-learn`, `tool-use`, `openai`, `langchain`, `mlops`, `ai-agents`, `pydantic`, `model-serving`
|
|
102
|
+
- Added `Documentation` URL to `[project.urls]` in `pyproject.toml`
|
|
103
|
+
- Added `Topic :: Software Development :: Libraries :: Python Modules` and `Typing :: Typed` classifiers
|
|
104
|
+
|
|
105
|
+
## [0.4.2] - 2026-06-13
|
|
106
|
+
|
|
107
|
+
### Changed
|
|
108
|
+
- Redesigned PyPI/README hero: logo, centered tagline, and badges in a unified `<p align="center">` block
|
|
109
|
+
- Tagline moved from a `##` heading to a proper descriptive paragraph
|
|
110
|
+
- Badges converted to centered HTML `<img>` links for consistent rendering on PyPI
|
|
111
|
+
- Quick code teaser repositioned directly below badges (before Table of Contents)
|
|
112
|
+
- "Field naming rule" added to Table of Contents
|
|
113
|
+
- `ainvoke()` added to `ModelTool` Core API reference table
|
|
114
|
+
- `ModelEnsemble` Core API subsection added with constructor signature and full strategy table
|
|
115
|
+
- Project Traffic / download badge moved to bottom of README
|
|
116
|
+
- Development Status classifier bumped from `3 - Alpha` to `4 - Beta` in `pyproject.toml`
|
|
117
|
+
- Removed CI test status badge from README
|
|
118
|
+
|
|
119
|
+
## [0.4.1] - 2026-06-02
|
|
120
|
+
|
|
121
|
+
### Added
|
|
122
|
+
- `ruff` (lint + format) and `mypy` (type checking) configured in `pyproject.toml`
|
|
123
|
+
- `.pre-commit-config.yaml` — ruff and mypy hooks run automatically before every commit
|
|
124
|
+
- Lint CI job in GitHub Actions — runs `ruff check`, `ruff format --check`, and `mypy` on every push and PR
|
|
125
|
+
- `CONTRIBUTING.md` — development setup, code style, and PR guidelines
|
|
126
|
+
- `CHANGELOG.md`
|
|
127
|
+
- `CLAUDE.md` — project context for Claude Code
|
|
128
|
+
|
|
129
|
+
### Changed
|
|
130
|
+
- Bumped version to `0.4.1`
|
|
131
|
+
- Added `ruff>=0.4.0`, `mypy>=1.10`, and `pre-commit>=3.0` to `[dev]` extras
|
|
132
|
+
|
|
133
|
+
## [0.4.0] - 2026-05-01
|
|
134
|
+
|
|
135
|
+
### Added
|
|
136
|
+
- `ModelEnsemble` with `weighted_mean` and `weighted_vote` strategies
|
|
137
|
+
- `ainvoke()` async wrapper on `ModelTool` (runs blocking predict in a thread pool)
|
|
138
|
+
- Verbose logging via `verbose=True` on `ModelTool`
|
|
139
|
+
- Snowflake Model Registry loader (`from_snowflake`)
|
|
140
|
+
- MLflow Model Registry loader (`from_mlflow`)
|
|
141
|
+
- `predikit inspect` CLI command
|
|
142
|
+
|
|
143
|
+
### Changed
|
|
144
|
+
- Moved to `src/` layout with hatchling build backend
|
|
145
|
+
- Upgraded Pydantic dependency to v2
|
|
146
|
+
|
|
147
|
+
## [0.3.x] and earlier
|
|
148
|
+
|
|
149
|
+
See [GitHub Releases](https://github.com/Tejas-TA/predikit/releases) for earlier history.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: predikit
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.3
|
|
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
|
|
@@ -99,6 +99,8 @@ tool.invoke({"sqft": 2200}) # → {"price_usd": 370730}
|
|
|
99
99
|
- [Core API](#core-api)
|
|
100
100
|
- [Field naming rule](#field-naming-rule)
|
|
101
101
|
- [Cookbook](#cookbook)
|
|
102
|
+
- [Command line](#command-line)
|
|
103
|
+
- [MCP server](#mcp-server)
|
|
102
104
|
- [Roadmap](#roadmap)
|
|
103
105
|
- [Contributing](#contributing)
|
|
104
106
|
- [License](#license)
|
|
@@ -149,6 +151,8 @@ pip install predikit[xgboost] # XGBoost support
|
|
|
149
151
|
pip install predikit[langchain] # LangChain StructuredTool export
|
|
150
152
|
pip install predikit[mlflow] # MLflow Model Registry loader
|
|
151
153
|
pip install predikit[snowflake] # Snowflake Model Registry loader
|
|
154
|
+
pip install predikit[cli] # `predikit inspect` and `predikit serve`
|
|
155
|
+
pip install predikit[mcp,cli] # serve a registry over MCP
|
|
152
156
|
```
|
|
153
157
|
|
|
154
158
|
---
|
|
@@ -333,14 +337,16 @@ agent = initialize_agent(tools=registry.to_langchain(), ...)
|
|
|
333
337
|
Expose the same registry to MCP-compatible clients with the optional MCP extra:
|
|
334
338
|
|
|
335
339
|
```bash
|
|
336
|
-
pip install predikit[mcp]
|
|
340
|
+
pip install predikit[mcp,cli]
|
|
337
341
|
predikit serve my_tools:registry
|
|
338
342
|
```
|
|
339
343
|
|
|
340
344
|
`my_tools:registry` must point to a `ToolRegistry`, or to a zero-argument function
|
|
341
345
|
that returns one. The default transport is `stdio`; use `--transport streamable-http`
|
|
342
|
-
when serving over HTTP
|
|
343
|
-
|
|
346
|
+
when serving over HTTP, optionally with `--host` and `--port`. MCP tools advertise
|
|
347
|
+
their output schemas and use the same Pydantic input validation and model execution
|
|
348
|
+
as direct `invoke()` calls. For an in-process server instead of the CLI, install
|
|
349
|
+
`predikit[mcp]` and call `create_mcp_server(registry)`.
|
|
344
350
|
|
|
345
351
|
### Bool inputs from an LLM
|
|
346
352
|
|
|
@@ -42,6 +42,8 @@ tool.invoke({"sqft": 2200}) # → {"price_usd": 370730}
|
|
|
42
42
|
- [Core API](#core-api)
|
|
43
43
|
- [Field naming rule](#field-naming-rule)
|
|
44
44
|
- [Cookbook](#cookbook)
|
|
45
|
+
- [Command line](#command-line)
|
|
46
|
+
- [MCP server](#mcp-server)
|
|
45
47
|
- [Roadmap](#roadmap)
|
|
46
48
|
- [Contributing](#contributing)
|
|
47
49
|
- [License](#license)
|
|
@@ -92,6 +94,8 @@ pip install predikit[xgboost] # XGBoost support
|
|
|
92
94
|
pip install predikit[langchain] # LangChain StructuredTool export
|
|
93
95
|
pip install predikit[mlflow] # MLflow Model Registry loader
|
|
94
96
|
pip install predikit[snowflake] # Snowflake Model Registry loader
|
|
97
|
+
pip install predikit[cli] # `predikit inspect` and `predikit serve`
|
|
98
|
+
pip install predikit[mcp,cli] # serve a registry over MCP
|
|
95
99
|
```
|
|
96
100
|
|
|
97
101
|
---
|
|
@@ -276,14 +280,16 @@ agent = initialize_agent(tools=registry.to_langchain(), ...)
|
|
|
276
280
|
Expose the same registry to MCP-compatible clients with the optional MCP extra:
|
|
277
281
|
|
|
278
282
|
```bash
|
|
279
|
-
pip install predikit[mcp]
|
|
283
|
+
pip install predikit[mcp,cli]
|
|
280
284
|
predikit serve my_tools:registry
|
|
281
285
|
```
|
|
282
286
|
|
|
283
287
|
`my_tools:registry` must point to a `ToolRegistry`, or to a zero-argument function
|
|
284
288
|
that returns one. The default transport is `stdio`; use `--transport streamable-http`
|
|
285
|
-
when serving over HTTP
|
|
286
|
-
|
|
289
|
+
when serving over HTTP, optionally with `--host` and `--port`. MCP tools advertise
|
|
290
|
+
their output schemas and use the same Pydantic input validation and model execution
|
|
291
|
+
as direct `invoke()` calls. For an in-process server instead of the CLI, install
|
|
292
|
+
`predikit[mcp]` and call `create_mcp_server(registry)`.
|
|
287
293
|
|
|
288
294
|
### Bool inputs from an LLM
|
|
289
295
|
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "predikit"
|
|
7
|
-
version = "0.6.
|
|
7
|
+
version = "0.6.3"
|
|
8
8
|
description = "Wrap any trained sklearn/XGBoost model as an LLM-callable tool: auto-generated JSON schemas, Pydantic I/O, OpenAI & LangChain ready, zero boilerplate."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = {text = "MIT"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
"""Wrap fitted scikit-learn / XGBoost models as LLM-callable tools."""
|
|
2
|
-
|
|
3
|
-
from .ensemble import ModelEnsemble
|
|
4
|
-
from .exceptions import LowConfidenceError
|
|
5
|
-
from .mcp import create_mcp_server
|
|
6
|
-
from .registry import ToolRegistry
|
|
7
|
-
from .tool import ModelTool
|
|
8
|
-
|
|
9
|
-
__all__ = [
|
|
10
|
-
"LowConfidenceError",
|
|
11
|
-
"ModelEnsemble",
|
|
12
|
-
"ModelTool",
|
|
13
|
-
"ToolRegistry",
|
|
14
|
-
"create_mcp_server",
|
|
15
|
-
]
|
|
16
|
-
__version__ = "0.6.
|
|
1
|
+
"""Wrap fitted scikit-learn / XGBoost models as LLM-callable tools."""
|
|
2
|
+
|
|
3
|
+
from .ensemble import ModelEnsemble
|
|
4
|
+
from .exceptions import LowConfidenceError
|
|
5
|
+
from .mcp import create_mcp_server
|
|
6
|
+
from .registry import ToolRegistry
|
|
7
|
+
from .tool import ModelTool
|
|
8
|
+
|
|
9
|
+
__all__ = [
|
|
10
|
+
"LowConfidenceError",
|
|
11
|
+
"ModelEnsemble",
|
|
12
|
+
"ModelTool",
|
|
13
|
+
"ToolRegistry",
|
|
14
|
+
"create_mcp_server",
|
|
15
|
+
]
|
|
16
|
+
__version__ = "0.6.3"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|