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.
Files changed (54) hide show
  1. {predikit-0.6.2 → predikit-0.6.3}/CHANGELOG.md +149 -141
  2. {predikit-0.6.2 → predikit-0.6.3}/PKG-INFO +10 -4
  3. {predikit-0.6.2 → predikit-0.6.3}/README.md +9 -3
  4. {predikit-0.6.2 → predikit-0.6.3}/pyproject.toml +1 -1
  5. {predikit-0.6.2 → predikit-0.6.3}/src/predikit/__init__.py +16 -16
  6. {predikit-0.6.2 → predikit-0.6.3}/.gitattributes +0 -0
  7. {predikit-0.6.2 → predikit-0.6.3}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  8. {predikit-0.6.2 → predikit-0.6.3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  9. {predikit-0.6.2 → predikit-0.6.3}/.github/workflows/publish.yml +0 -0
  10. {predikit-0.6.2 → predikit-0.6.3}/.github/workflows/test.yml +0 -0
  11. {predikit-0.6.2 → predikit-0.6.3}/.gitignore +0 -0
  12. {predikit-0.6.2 → predikit-0.6.3}/.pre-commit-config.yaml +0 -0
  13. {predikit-0.6.2 → predikit-0.6.3}/CLAUDE.md +0 -0
  14. {predikit-0.6.2 → predikit-0.6.3}/CONTRIBUTING.md +0 -0
  15. {predikit-0.6.2 → predikit-0.6.3}/LICENSE +0 -0
  16. {predikit-0.6.2 → predikit-0.6.3}/docs/logo.gif +0 -0
  17. {predikit-0.6.2 → predikit-0.6.3}/docs/logo.png +0 -0
  18. {predikit-0.6.2 → predikit-0.6.3}/examples/01_basic_sklearn.py +0 -0
  19. {predikit-0.6.2 → predikit-0.6.3}/examples/02_xgboost_regression.py +0 -0
  20. {predikit-0.6.2 → predikit-0.6.3}/examples/03_orlando_real_estate.py +0 -0
  21. {predikit-0.6.2 → predikit-0.6.3}/examples/04_confidence_routing.py +0 -0
  22. {predikit-0.6.2 → predikit-0.6.3}/examples/05_multi_model_ensemble.py +0 -0
  23. {predikit-0.6.2 → predikit-0.6.3}/examples/06_mlflow_loader.py +0 -0
  24. {predikit-0.6.2 → predikit-0.6.3}/examples/07_snowflake_loader.py +0 -0
  25. {predikit-0.6.2 → predikit-0.6.3}/src/predikit/cli.py +0 -0
  26. {predikit-0.6.2 → predikit-0.6.3}/src/predikit/coerce.py +0 -0
  27. {predikit-0.6.2 → predikit-0.6.3}/src/predikit/ensemble.py +0 -0
  28. {predikit-0.6.2 → predikit-0.6.3}/src/predikit/exceptions.py +0 -0
  29. {predikit-0.6.2 → predikit-0.6.3}/src/predikit/exporters/__init__.py +0 -0
  30. {predikit-0.6.2 → predikit-0.6.3}/src/predikit/exporters/langchain.py +0 -0
  31. {predikit-0.6.2 → predikit-0.6.3}/src/predikit/exporters/openai.py +0 -0
  32. {predikit-0.6.2 → predikit-0.6.3}/src/predikit/introspect.py +0 -0
  33. {predikit-0.6.2 → predikit-0.6.3}/src/predikit/loaders/__init__.py +0 -0
  34. {predikit-0.6.2 → predikit-0.6.3}/src/predikit/loaders/mlflow.py +0 -0
  35. {predikit-0.6.2 → predikit-0.6.3}/src/predikit/loaders/snowflake.py +0 -0
  36. {predikit-0.6.2 → predikit-0.6.3}/src/predikit/mcp.py +0 -0
  37. {predikit-0.6.2 → predikit-0.6.3}/src/predikit/py.typed +0 -0
  38. {predikit-0.6.2 → predikit-0.6.3}/src/predikit/registry.py +0 -0
  39. {predikit-0.6.2 → predikit-0.6.3}/src/predikit/tool.py +0 -0
  40. {predikit-0.6.2 → predikit-0.6.3}/tests/__init__.py +0 -0
  41. {predikit-0.6.2 → predikit-0.6.3}/tests/test_cli.py +0 -0
  42. {predikit-0.6.2 → predikit-0.6.3}/tests/test_coerce.py +0 -0
  43. {predikit-0.6.2 → predikit-0.6.3}/tests/test_confidence.py +0 -0
  44. {predikit-0.6.2 → predikit-0.6.3}/tests/test_ensemble.py +0 -0
  45. {predikit-0.6.2 → predikit-0.6.3}/tests/test_exporters_langchain.py +0 -0
  46. {predikit-0.6.2 → predikit-0.6.3}/tests/test_exporters_openai.py +0 -0
  47. {predikit-0.6.2 → predikit-0.6.3}/tests/test_introspect.py +0 -0
  48. {predikit-0.6.2 → predikit-0.6.3}/tests/test_loaders_mlflow.py +0 -0
  49. {predikit-0.6.2 → predikit-0.6.3}/tests/test_loaders_snowflake.py +0 -0
  50. {predikit-0.6.2 → predikit-0.6.3}/tests/test_logging.py +0 -0
  51. {predikit-0.6.2 → predikit-0.6.3}/tests/test_mcp.py +0 -0
  52. {predikit-0.6.2 → predikit-0.6.3}/tests/test_registry.py +0 -0
  53. {predikit-0.6.2 → predikit-0.6.3}/tests/test_tool.py +0 -0
  54. {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.2] - 2026-08-22
10
-
11
- ### Added
12
- - `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.
13
-
14
- ### Changed
15
- - `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.
16
- - CI lints and format-checks `examples/` alongside `src/` and `tests/`.
17
-
18
- ### Removed
19
- - `uv.lock`. Nothing consumed it — CI installs with `pip install -e ".[dev]"` — and a library should not pin its consumers' transitive dependencies.
20
- - `.claude/settings.local.json` from version control. It holds per-developer machine paths.
21
-
22
- ## [0.6.1] - 2026-08-15
23
-
24
- ### Fixed
25
- - 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.
26
- - 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.
27
- - `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`.
28
- - `coerce_value()` converts `True` / `False` to `1` / `0` for `int` fields. `isinstance(True, int)` is true in Python, so bools previously passed through unconverted.
29
-
30
- ### Added
31
- - `--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`.
32
- - `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.
33
- - Python 3.13 in the CI matrix and the package classifiers.
34
-
35
- ### Changed
36
- - `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.
37
- - Test coverage for `predikit serve`, which previously had none.
38
-
39
- ## [0.6.0] - 2026-08-03
40
-
41
- ### Added
42
- - MCP server integration via `create_mcp_server()` and `predikit serve`.
43
- - Optional `mcp` dependency for exposing `ToolRegistry` tools to MCP-compatible clients.
44
-
45
- ## [0.5.2] - 2026-08-01
46
-
47
- ### Fixed
48
- - Repaired the development lockfile so `uv` can resolve the pinned Colorama artifact.
49
- - Added repository-wide LF line-ending normalization so Ruff formatting is stable across platforms.
50
-
51
- ### Added
52
- - Regression coverage for invalid Snowflake output methods and duplicate registry names.
53
- - CI package-build verification to catch release artifacts that cannot be built.
54
-
55
- ## [0.5.1] - 2026-07-21
56
-
57
- ### Added
58
- - Test coverage for the LangChain exporter (`test_exporters_langchain.py`) — previously untested
59
- - Warning when `confidence_threshold` is set on a classifier whose model has no `predict_proba` method, mirroring the existing regressor warning
60
- - Test coverage for both `confidence_threshold` construction-time warnings (regressor, and classifier without `predict_proba`)
61
-
62
- ### Fixed
63
- - `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
64
-
65
- ## [0.5.0] - 2026-07-01
66
-
67
- ### Fixed
68
- - Improved `ModelTool` input coercion for optional scalar annotations like `float | None`, `bool | None`, `int | None`, and `str | None`
69
- - Added test coverage for optional scalar string inputs to keep LLM-friendly coercion consistent across modern Pydantic schemas
70
-
71
- ### Changed
72
- - Removed generated MLflow run artifacts from source control and ignored future `mlruns/` outputs
73
- - Cleaned package metadata and CLI text to avoid Unicode dash rendering issues in terminals and package indexes
74
-
75
- ## [0.4.5] - 2026-07-01
76
-
77
- ### Fixed
78
- - Added validation for `confidence_threshold` so values outside `0.0` to `1.0` fail at construction time
79
- - Added `ModelEnsemble` validation for duplicate `collect` outputs, mismatched aggregate output names, negative weights, and zero-total weighted strategies
80
- - Added `ToolRegistry` duplicate-name validation across tools and ensembles
81
- - Updated `ToolRegistry.get()` to retrieve both tools and ensembles with clearer missing-name errors
82
- - Cleaned up example lint issues and corrected stale `modelbridge[xgboost]` install text
83
-
84
- ### Changed
85
- - Marked MLflow loader tests as opt-in integration tests so the default pytest suite stays fast and deterministic
86
-
87
- ## [0.4.4] - 2026-06-24
88
-
89
- ### Changed
90
- - README overhauled: added "Why predikit?" comparison table, "Works with" ecosystem section, GitHub star/fork badges, and a shipped-vs-planned roadmap
91
- - Quick start section replaces "30-second example" heading; `---` dividers added between major sections for better scanability
92
- - PyPI package description updated to a more descriptive one-liner
93
- - Keywords expanded: added `scikit-learn`, `tool-use`, `openai`, `langchain`, `mlops`, `ai-agents`, `pydantic`, `model-serving`
94
- - Added `Documentation` URL to `[project.urls]` in `pyproject.toml`
95
- - Added `Topic :: Software Development :: Libraries :: Python Modules` and `Typing :: Typed` classifiers
96
-
97
- ## [0.4.2] - 2026-06-13
98
-
99
- ### Changed
100
- - Redesigned PyPI/README hero: logo, centered tagline, and badges in a unified `<p align="center">` block
101
- - Tagline moved from a `##` heading to a proper descriptive paragraph
102
- - Badges converted to centered HTML `<img>` links for consistent rendering on PyPI
103
- - Quick code teaser repositioned directly below badges (before Table of Contents)
104
- - "Field naming rule" added to Table of Contents
105
- - `ainvoke()` added to `ModelTool` Core API reference table
106
- - `ModelEnsemble` Core API subsection added with constructor signature and full strategy table
107
- - Project Traffic / download badge moved to bottom of README
108
- - Development Status classifier bumped from `3 - Alpha` to `4 - Beta` in `pyproject.toml`
109
- - Removed CI test status badge from README
110
-
111
- ## [0.4.1] - 2026-06-02
112
-
113
- ### Added
114
- - `ruff` (lint + format) and `mypy` (type checking) configured in `pyproject.toml`
115
- - `.pre-commit-config.yaml` — ruff and mypy hooks run automatically before every commit
116
- - Lint CI job in GitHub Actions — runs `ruff check`, `ruff format --check`, and `mypy` on every push and PR
117
- - `CONTRIBUTING.md` — development setup, code style, and PR guidelines
118
- - `CHANGELOG.md`
119
- - `CLAUDE.md` — project context for Claude Code
120
-
121
- ### Changed
122
- - Bumped version to `0.4.1`
123
- - Added `ruff>=0.4.0`, `mypy>=1.10`, and `pre-commit>=3.0` to `[dev]` extras
124
-
125
- ## [0.4.0] - 2026-05-01
126
-
127
- ### Added
128
- - `ModelEnsemble` with `weighted_mean` and `weighted_vote` strategies
129
- - `ainvoke()` async wrapper on `ModelTool` (runs blocking predict in a thread pool)
130
- - Verbose logging via `verbose=True` on `ModelTool`
131
- - Snowflake Model Registry loader (`from_snowflake`)
132
- - MLflow Model Registry loader (`from_mlflow`)
133
- - `predikit inspect` CLI command
134
-
135
- ### Changed
136
- - Moved to `src/` layout with hatchling build backend
137
- - Upgraded Pydantic dependency to v2
138
-
139
- ## [0.3.x] and earlier
140
-
141
- See [GitHub Releases](https://github.com/Tejas-TA/predikit/releases) for earlier history.
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.2
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. MCP tools use the same Pydantic input validation and model
343
- execution as direct `invoke()` calls.
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. MCP tools use the same Pydantic input validation and model
286
- execution as direct `invoke()` calls.
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.2"
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.2"
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