pystreamai 2.1.0__tar.gz → 2.1.2__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.
- pystreamai-2.1.2/.github/ISSUE_TEMPLATE/bug_report.yml +46 -0
- pystreamai-2.1.2/.github/ISSUE_TEMPLATE/feature_request.yml +29 -0
- pystreamai-2.1.2/.github/dependabot.yml +19 -0
- pystreamai-2.1.2/.github/pull_request_template.md +17 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/.github/workflows/build-wheels.yml +3 -5
- pystreamai-2.1.2/.github/workflows/security-audit.yml +48 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/.github/workflows/tests.yml +2 -4
- {pystreamai-2.1.0 → pystreamai-2.1.2}/.gitignore +6 -1
- pystreamai-2.1.2/.graphifyignore +31 -0
- pystreamai-2.1.2/CHANGELOG.md +98 -0
- pystreamai-2.1.2/CODE_OF_CONDUCT.md +37 -0
- pystreamai-2.1.2/CONTRIBUTING.md +80 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/Cargo.lock +1 -1
- {pystreamai-2.1.0 → pystreamai-2.1.2}/Cargo.toml +2 -2
- pystreamai-2.1.2/LICENSE +202 -0
- pystreamai-2.1.2/PKG-INFO +279 -0
- pystreamai-2.1.2/README.md +237 -0
- pystreamai-2.1.2/ROADMAP_HONEST.md +216 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/docs/ROADMAP.md +16 -3
- {pystreamai-2.1.0 → pystreamai-2.1.2}/pyproject.toml +25 -3
- {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/__init__.py +1 -1
- {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/advanced_caching.py +3 -3
- {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/api.py +9 -8
- {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/observability.py +19 -8
- {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/test_onnx_runtime.py +1 -1
- {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/test_platform_onnx_predict.py +1 -1
- pystreamai-2.1.2/tools/graphify/README.md +63 -0
- pystreamai-2.1.2/tools/graphify/graphify_adapter.py +242 -0
- pystreamai-2.1.0/.env.example +0 -27
- pystreamai-2.1.0/FINAL_REPORT.txt +0 -2
- pystreamai-2.1.0/LICENSE +0 -22
- pystreamai-2.1.0/PKG-INFO +0 -395
- pystreamai-2.1.0/README.md +0 -355
- {pystreamai-2.1.0 → pystreamai-2.1.2}/SECURITY.md +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/benchmarks/README.md +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/benchmarks/__init__.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/benchmarks/bench_bert_llm.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/benchmarks/bench_oss_comparison.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/benchmarks/inference.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/benchmarks/models.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/benchmarks/runner.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/docs/API_REFERENCE.md +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/docs/DEPLOYMENT.md +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/docs/GETTING_STARTED.md +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/docs/INTEGRATIONS.md +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/docs/OPTIMIZATION.md +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/docs/PUBLISH.md +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/docs/SERVING.md +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/examples/__init__.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/examples/serve_model.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/examples/start_http_server.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/cost_tracking.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/dashboard.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/decorators.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/deployment.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/edge_deployment.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/gpu.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/hot_reload.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/llm_optimization.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/model_registry.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/monitoring.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/onnx_runtime.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/platform.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/request_scheduler.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/serving.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/testing.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/requirements-benchmark.txt +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/requirements-serving.txt +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/src/backend.rs +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/src/executor.rs +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/src/gpu.rs +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/src/inference.rs +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/src/lib.rs +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/src/memory_manager.rs +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/src/scheduler.rs +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/src/storage.rs +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/src/streaming.rs +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/__init__.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/conftest.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/test_api.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/test_core_extension.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/test_cost_tracking.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/test_deployment.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/test_gpu.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/test_hot_reload.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/test_misc_modules.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/test_model_failure_states.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/test_model_registry.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/test_monitoring.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/test_platform.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/test_request_scheduler.py +0 -0
- {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/test_serving.py +0 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
name: Bug report
|
|
2
|
+
description: Report a real, reproducible problem in PyStreamAI
|
|
3
|
+
labels: ["bug"]
|
|
4
|
+
body:
|
|
5
|
+
- type: markdown
|
|
6
|
+
attributes:
|
|
7
|
+
value: |
|
|
8
|
+
Before filing: check the README's "How this works today" and "Known
|
|
9
|
+
issues" sections - several things that look like bugs (no cloud
|
|
10
|
+
backend, no auth, `pystreamai.gpu` being advisory-only, HF upload
|
|
11
|
+
being a no-op) are already-known, documented limitations rather
|
|
12
|
+
than new bugs.
|
|
13
|
+
- type: input
|
|
14
|
+
id: version
|
|
15
|
+
attributes:
|
|
16
|
+
label: PyStreamAI version
|
|
17
|
+
description: Output of `python3 -c "import pystreamai; print(pystreamai.__version__)"`
|
|
18
|
+
validations:
|
|
19
|
+
required: true
|
|
20
|
+
- type: input
|
|
21
|
+
id: environment
|
|
22
|
+
attributes:
|
|
23
|
+
label: Environment
|
|
24
|
+
description: OS, Python version, and whether you used a prebuilt wheel or built from source
|
|
25
|
+
placeholder: "e.g. macOS 15, Python 3.11, pip install pystreamai"
|
|
26
|
+
validations:
|
|
27
|
+
required: true
|
|
28
|
+
- type: textarea
|
|
29
|
+
id: repro
|
|
30
|
+
attributes:
|
|
31
|
+
label: Steps to reproduce
|
|
32
|
+
description: Minimal code that reproduces the issue
|
|
33
|
+
render: python
|
|
34
|
+
validations:
|
|
35
|
+
required: true
|
|
36
|
+
- type: textarea
|
|
37
|
+
id: expected
|
|
38
|
+
attributes:
|
|
39
|
+
label: Expected vs. actual behavior
|
|
40
|
+
validations:
|
|
41
|
+
required: true
|
|
42
|
+
- type: textarea
|
|
43
|
+
id: logs
|
|
44
|
+
attributes:
|
|
45
|
+
label: Full error / traceback
|
|
46
|
+
render: shell
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
name: Feature request
|
|
2
|
+
description: Propose a new feature or improvement
|
|
3
|
+
labels: ["enhancement"]
|
|
4
|
+
body:
|
|
5
|
+
- type: markdown
|
|
6
|
+
attributes:
|
|
7
|
+
value: |
|
|
8
|
+
Check `docs/ROADMAP.md` and the README's "Known issues" section
|
|
9
|
+
first - your idea may already be tracked (e.g. cloud backends,
|
|
10
|
+
real GPU benchmarking, Hugging Face upload, LLM optimizations,
|
|
11
|
+
edge deployment) as a known gap rather than something to propose
|
|
12
|
+
from scratch.
|
|
13
|
+
- type: textarea
|
|
14
|
+
id: problem
|
|
15
|
+
attributes:
|
|
16
|
+
label: What problem does this solve?
|
|
17
|
+
description: What are you trying to do that PyStreamAI doesn't support today?
|
|
18
|
+
validations:
|
|
19
|
+
required: true
|
|
20
|
+
- type: textarea
|
|
21
|
+
id: proposal
|
|
22
|
+
attributes:
|
|
23
|
+
label: Proposed solution
|
|
24
|
+
validations:
|
|
25
|
+
required: true
|
|
26
|
+
- type: textarea
|
|
27
|
+
id: alternatives
|
|
28
|
+
attributes:
|
|
29
|
+
label: Alternatives considered
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
updates:
|
|
3
|
+
- package-ecosystem: "pip"
|
|
4
|
+
directory: "/"
|
|
5
|
+
schedule:
|
|
6
|
+
interval: "weekly"
|
|
7
|
+
open-pull-requests-limit: 10
|
|
8
|
+
|
|
9
|
+
- package-ecosystem: "cargo"
|
|
10
|
+
directory: "/"
|
|
11
|
+
schedule:
|
|
12
|
+
interval: "weekly"
|
|
13
|
+
open-pull-requests-limit: 10
|
|
14
|
+
|
|
15
|
+
- package-ecosystem: "github-actions"
|
|
16
|
+
directory: "/"
|
|
17
|
+
schedule:
|
|
18
|
+
interval: "weekly"
|
|
19
|
+
open-pull-requests-limit: 10
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
## What does this change do?
|
|
2
|
+
|
|
3
|
+
<!-- Describe the change and why it's needed. -->
|
|
4
|
+
|
|
5
|
+
## How was this tested?
|
|
6
|
+
|
|
7
|
+
<!-- Real commands you ran, e.g. `pytest`, `cargo test --release`, `ruff check .`,
|
|
8
|
+
`maturin develop --release`. If a code path wasn't exercised, say so - don't
|
|
9
|
+
imply test coverage that doesn't exist. -->
|
|
10
|
+
|
|
11
|
+
## Checklist
|
|
12
|
+
|
|
13
|
+
- [ ] `pytest` passes locally
|
|
14
|
+
- [ ] `ruff check .` passes locally
|
|
15
|
+
- [ ] `cargo test --release` passes locally (if `src/*.rs` changed)
|
|
16
|
+
- [ ] If this changes behavior described in `README.md` / `docs/`, those docs are updated in the same PR
|
|
17
|
+
- [ ] If this adds a new simulated/placeholder/advisory-only code path, it is labeled as such in code comments and in the README (see "no fake stubs" precedent in this repo - don't add unlabeled placeholder logic)
|
|
@@ -10,15 +10,13 @@ jobs:
|
|
|
10
10
|
build:
|
|
11
11
|
runs-on: ubuntu-latest
|
|
12
12
|
steps:
|
|
13
|
-
- uses: actions/checkout@
|
|
13
|
+
- uses: actions/checkout@v4
|
|
14
14
|
|
|
15
15
|
- name: Set up Rust
|
|
16
|
-
uses:
|
|
17
|
-
with:
|
|
18
|
-
toolchain: stable
|
|
16
|
+
uses: dtolnay/rust-toolchain@stable
|
|
19
17
|
|
|
20
18
|
- name: Set up Python
|
|
21
|
-
uses: actions/setup-python@
|
|
19
|
+
uses: actions/setup-python@v5
|
|
22
20
|
with:
|
|
23
21
|
python-version: '3.10'
|
|
24
22
|
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
name: Security Audit
|
|
2
|
+
|
|
3
|
+
# Runs on a schedule + manual dispatch rather than on every push/PR, so a
|
|
4
|
+
# newly-discovered advisory in a transitive dependency doesn't block
|
|
5
|
+
# unrelated PRs from merging. Findings should be triaged as issues, not
|
|
6
|
+
# silently ignored - this job intentionally does NOT swallow failures with
|
|
7
|
+
# `|| true`; a red run here means a real advisory was found and should be
|
|
8
|
+
# looked at.
|
|
9
|
+
#
|
|
10
|
+
# NOTE: not runnable/verifiable in the sandbox this workflow was authored
|
|
11
|
+
# in (no network access to pypi.org/crates.io/GitHub's advisory DB). It has
|
|
12
|
+
# not been confirmed green on actual GitHub Actions infrastructure yet.
|
|
13
|
+
on:
|
|
14
|
+
schedule:
|
|
15
|
+
- cron: '0 6 * * 1' # weekly, Monday 06:00 UTC
|
|
16
|
+
workflow_dispatch: {}
|
|
17
|
+
pull_request:
|
|
18
|
+
paths:
|
|
19
|
+
- 'pyproject.toml'
|
|
20
|
+
- 'Cargo.toml'
|
|
21
|
+
- 'Cargo.lock'
|
|
22
|
+
- '.github/workflows/security-audit.yml'
|
|
23
|
+
|
|
24
|
+
jobs:
|
|
25
|
+
pip-audit:
|
|
26
|
+
runs-on: ubuntu-latest
|
|
27
|
+
steps:
|
|
28
|
+
- uses: actions/checkout@v4
|
|
29
|
+
- uses: actions/setup-python@v5
|
|
30
|
+
with:
|
|
31
|
+
python-version: '3.11'
|
|
32
|
+
- name: Install project + pip-audit
|
|
33
|
+
run: |
|
|
34
|
+
python -m pip install --upgrade pip
|
|
35
|
+
pip install -e ".[dev,serving,onnx,observability,registry]"
|
|
36
|
+
pip install pip-audit
|
|
37
|
+
- name: pip-audit
|
|
38
|
+
run: pip-audit
|
|
39
|
+
|
|
40
|
+
cargo-audit:
|
|
41
|
+
runs-on: ubuntu-latest
|
|
42
|
+
steps:
|
|
43
|
+
- uses: actions/checkout@v4
|
|
44
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
45
|
+
- name: Install cargo-audit
|
|
46
|
+
run: cargo install cargo-audit --locked
|
|
47
|
+
- name: cargo audit
|
|
48
|
+
run: cargo audit
|
|
@@ -13,13 +13,11 @@ jobs:
|
|
|
13
13
|
python-version: ["3.10", "3.11", "3.12"]
|
|
14
14
|
steps:
|
|
15
15
|
- uses: actions/checkout@v4
|
|
16
|
-
- uses: actions/setup-python@
|
|
16
|
+
- uses: actions/setup-python@v5
|
|
17
17
|
with:
|
|
18
18
|
python-version: ${{ matrix.python-version }}
|
|
19
19
|
- name: Set up Rust
|
|
20
|
-
uses:
|
|
21
|
-
with:
|
|
22
|
-
toolchain: stable
|
|
20
|
+
uses: dtolnay/rust-toolchain@stable
|
|
23
21
|
- name: Install dependencies
|
|
24
22
|
run: |
|
|
25
23
|
python -m pip install --upgrade pip
|
|
@@ -34,7 +34,10 @@ env/
|
|
|
34
34
|
|
|
35
35
|
# Rust
|
|
36
36
|
target/
|
|
37
|
-
Cargo.lock
|
|
37
|
+
# Cargo.lock is intentionally committed (not ignored): this crate builds a
|
|
38
|
+
# cdylib (a PyO3 extension shipped in wheels), not a library consumed by
|
|
39
|
+
# other Cargo projects, so per Cargo's own guidance the lockfile should be
|
|
40
|
+
# checked in for reproducible builds.
|
|
38
41
|
|
|
39
42
|
# Compiled PyO3/maturin extension (built locally via `maturin develop`)
|
|
40
43
|
pystreamai/_core*.so
|
|
@@ -49,3 +52,5 @@ tmp/
|
|
|
49
52
|
|
|
50
53
|
# Real training artifacts written by Platform.train() when code is a script
|
|
51
54
|
pystreamai_artifacts/
|
|
55
|
+
|
|
56
|
+
graphify-out/
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Graphify ignore file - https://docs.graphify.com/reference/configuration
|
|
2
|
+
# Keep the scan (and therefore the agent's graph) focused on real source.
|
|
3
|
+
.git/
|
|
4
|
+
.github/
|
|
5
|
+
graphify-out/
|
|
6
|
+
|
|
7
|
+
# Build output / artifacts
|
|
8
|
+
target/
|
|
9
|
+
dist/
|
|
10
|
+
build/
|
|
11
|
+
*.egg-info/
|
|
12
|
+
node_modules/
|
|
13
|
+
.venv/
|
|
14
|
+
venv/
|
|
15
|
+
env/
|
|
16
|
+
|
|
17
|
+
# Caches
|
|
18
|
+
__pycache__/
|
|
19
|
+
*.pyc
|
|
20
|
+
.pytest_cache/
|
|
21
|
+
.mypy_cache/
|
|
22
|
+
.ruff_cache/
|
|
23
|
+
.tox/
|
|
24
|
+
.nox/
|
|
25
|
+
.coverage
|
|
26
|
+
htmlcov/
|
|
27
|
+
|
|
28
|
+
# Vendored / generated
|
|
29
|
+
*.min.js
|
|
30
|
+
*.min.css
|
|
31
|
+
*.lock
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project are documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
6
|
+
|
|
7
|
+
This file did not exist before 2026-09-19 - there is no reconstructed
|
|
8
|
+
history here for `v0.1.0` through `v2.1.0`. For that history, see
|
|
9
|
+
`git log`, the repository's git tags (`v0.1.0`, `v0.2.0`, `v0.2.1`,
|
|
10
|
+
`v0.3.0`, `v2.0.0`, ...), and `docs/PUBLISH.md` /
|
|
11
|
+
`docs/ROADMAP.md`. Do not treat the absence of pre-2026-09-19 entries as
|
|
12
|
+
"nothing happened" - it means this file wasn't being kept yet.
|
|
13
|
+
|
|
14
|
+
## [Unreleased]
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
- `pyproject.toml`'s `[onnx]` extra was missing the `onnx` package itself,
|
|
18
|
+
so `tests/test_onnx_runtime.py` / `tests/test_platform_onnx_predict.py`
|
|
19
|
+
were silently skipped in CI. Added `onnx>=1.15.0,<1.23.0` to the
|
|
20
|
+
extra - pinned below 1.23.0 because onnx 1.23.0 is the first release
|
|
21
|
+
that writes IR version 14 graphs, which the currently-resolved
|
|
22
|
+
`onnxruntime` (1.30.0, satisfying `>=1.15.0`) rejects (max supported
|
|
23
|
+
IR version 13; verified directly, not just from the error message).
|
|
24
|
+
onnx 1.15.0-1.22.0 all write IR versions 9-13, which onnxruntime
|
|
25
|
+
1.30.0 loads correctly. All 8 previously-skipped ONNX tests now run
|
|
26
|
+
and pass for real.
|
|
27
|
+
- `pyproject.toml`'s `dev` extra was missing `httpx`, so
|
|
28
|
+
`tests/test_api.py` and `tests/test_model_failure_states.py` (15
|
|
29
|
+
tests total) were also silently skipped in CI via
|
|
30
|
+
`pytest.importorskip("httpx", ...)` (needed by
|
|
31
|
+
`fastapi.testclient.TestClient`) - same shape of bug as the ONNX gap
|
|
32
|
+
above, found while investigating it. Added `httpx>=0.24.0` to `dev`.
|
|
33
|
+
- Full suite is now 169 passed / 0 skipped (previously 146 passed / 4
|
|
34
|
+
skipped when `[dev,serving,onnx]` was installed without the two fixes
|
|
35
|
+
above), `ruff check .` clean, `cargo test --release` 16 passed.
|
|
36
|
+
|
|
37
|
+
### Added
|
|
38
|
+
- `ROADMAP_HONEST.md` - honest, bucketed roadmap and technical debt list
|
|
39
|
+
(dead Rust code, fake `llm_optimization`/`edge_deployment` modules, the
|
|
40
|
+
ONNX test suite's actual CI/version-compatibility status, etc).
|
|
41
|
+
- `CONTRIBUTING.md`, `CODE_OF_CONDUCT.md`, this `CHANGELOG.md`.
|
|
42
|
+
- `.github/dependabot.yml` (pip, cargo, github-actions ecosystems).
|
|
43
|
+
- `.github/ISSUE_TEMPLATE/bug_report.yml`, `feature_request.yml`, and
|
|
44
|
+
`.github/pull_request_template.md`.
|
|
45
|
+
- `.github/workflows/security-audit.yml` - `pip-audit` + `cargo audit`,
|
|
46
|
+
scheduled weekly plus manual dispatch (not run on every PR). Not yet
|
|
47
|
+
confirmed green on real GitHub Actions infrastructure - authored and
|
|
48
|
+
`actionlint`-checked in a sandbox with no network access to PyPI/
|
|
49
|
+
crates.io/GitHub's advisory database.
|
|
50
|
+
- `Cargo.lock` is now committed (previously gitignored) for reproducible
|
|
51
|
+
builds of this cdylib/PyO3 extension.
|
|
52
|
+
|
|
53
|
+
### Changed
|
|
54
|
+
- `pyproject.toml`: added `[tool.maturin] include = ["LICENSE"]` so
|
|
55
|
+
`maturin sdist` doesn't omit `LICENSE` from the sdist tarball (a
|
|
56
|
+
recurring issue across this org's maturin-based projects that causes
|
|
57
|
+
PyPI to reject the upload).
|
|
58
|
+
- `.github/workflows/tests.yml` / `build-wheels.yml`: replaced the
|
|
59
|
+
unmaintained `actions-rs/toolchain@v1` with `dtolnay/rust-toolchain@stable`,
|
|
60
|
+
and bumped `actions/checkout` to v4 and `actions/setup-python` to v5
|
|
61
|
+
(flagged by `actionlint` as running on a deprecated/EOL runner).
|
|
62
|
+
- `README.md`: disclosed that `pystreamai.llm_optimization` and
|
|
63
|
+
`pystreamai.edge_deployment` are almost entirely fabricated (return
|
|
64
|
+
hardcoded values, never touch real models/files) - not previously
|
|
65
|
+
documented anywhere outside a test-file comment; disclosed that the
|
|
66
|
+
Rust extension's `Platform.train()`/`serve()`/`predict()` are literal
|
|
67
|
+
string formatters with no real behavior; disclosed that
|
|
68
|
+
`tests/test_onnx_runtime.py` / `tests/test_platform_onnx_predict.py`
|
|
69
|
+
are silently skipped in CI (missing `onnx` package) and actually fail
|
|
70
|
+
if run manually due to an `onnx`/`onnxruntime` IR-version mismatch.
|
|
71
|
+
|
|
72
|
+
### Removed
|
|
73
|
+
- `.env.example` - described `API_KEY`/`DATABASE_URL`/`REDIS_URL`/
|
|
74
|
+
`ELASTICSEARCH_URL`/`SECRET_KEY` etc., none of which are read anywhere
|
|
75
|
+
in this codebase (`grep -r "os.environ\|os.getenv" pystreamai/ src/`
|
|
76
|
+
returns nothing). Kept unremoved, it implied config surface that
|
|
77
|
+
doesn't exist.
|
|
78
|
+
|
|
79
|
+
## [2.1.2] - 2026-10-18
|
|
80
|
+
|
|
81
|
+
### Security
|
|
82
|
+
- Default `APIServer.run()` bind address to loopback `127.0.0.1` instead of `0.0.0.0` (RECHECK-002).
|
|
83
|
+
|
|
84
|
+
### Fixed
|
|
85
|
+
- Set `ir_version=9` on ONNX test graphs so `onnxruntime` on Python 3.10 (max IR 11) loads graphs built with `onnx >= 1.21`.
|
|
86
|
+
|
|
87
|
+
## [2.1.1] - 2026-10-17
|
|
88
|
+
|
|
89
|
+
### Fixed
|
|
90
|
+
- Audit remediation: security hardening, correctness fixes, and lint/CI gates.
|
|
91
|
+
|
|
92
|
+
## Earlier versions
|
|
93
|
+
|
|
94
|
+
Version bumps prior to this file (`0.1.0` → `2.1.0`) happened via
|
|
95
|
+
`pyproject.toml`/`Cargo.toml` version fields and git tags without a
|
|
96
|
+
changelog. See `git log --oneline` and `docs/PUBLISH.md` for the real
|
|
97
|
+
mechanics of how releases were built and what changed in the `v1.1.0`
|
|
98
|
+
restoration and the `v2.0.0` breaking-change release.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Code of Conduct
|
|
2
|
+
|
|
3
|
+
## Our Pledge
|
|
4
|
+
|
|
5
|
+
We as contributors and maintainers pledge to make participation in this
|
|
6
|
+
project a harassment-free experience for everyone, regardless of age,
|
|
7
|
+
body size, visible or invisible disability, ethnicity, sex
|
|
8
|
+
characteristics, gender identity and expression, level of experience,
|
|
9
|
+
education, socio-economic status, nationality, personal appearance,
|
|
10
|
+
race, religion, or sexual identity and orientation.
|
|
11
|
+
|
|
12
|
+
## Our Standards
|
|
13
|
+
|
|
14
|
+
Examples of behavior that contributes to a positive environment:
|
|
15
|
+
|
|
16
|
+
- Being respectful of differing opinions, viewpoints, and experiences
|
|
17
|
+
- Giving and gracefully accepting constructive feedback
|
|
18
|
+
- Focusing on what is best for the community
|
|
19
|
+
|
|
20
|
+
Examples of unacceptable behavior:
|
|
21
|
+
|
|
22
|
+
- Harassment, insulting or derogatory comments, and personal or political attacks
|
|
23
|
+
- Publishing others' private information without explicit permission
|
|
24
|
+
- Other conduct which could reasonably be considered inappropriate in a
|
|
25
|
+
professional setting
|
|
26
|
+
|
|
27
|
+
## Enforcement
|
|
28
|
+
|
|
29
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may
|
|
30
|
+
be reported to mullassery@gmail.com. All complaints will be reviewed and
|
|
31
|
+
investigated promptly and fairly. Maintainers are obligated to respect
|
|
32
|
+
the privacy and security of the reporter of any incident.
|
|
33
|
+
|
|
34
|
+
## Attribution
|
|
35
|
+
|
|
36
|
+
This Code of Conduct is adapted from the
|
|
37
|
+
[Contributor Covenant](https://www.contributor-covenant.org), version 2.1.
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Contributing to PyStreamAI
|
|
2
|
+
|
|
3
|
+
Thanks for considering a contribution. This project is early-stage
|
|
4
|
+
(v2.1.0, source-available, Apache-2.0) - read the README's "Status" and
|
|
5
|
+
"How this works today" sections first so you know which parts are real
|
|
6
|
+
and which are documented placeholders before you patch either.
|
|
7
|
+
|
|
8
|
+
## Before you start
|
|
9
|
+
|
|
10
|
+
- Check `README.md`'s "Known issues" section and `ROADMAP_HONEST.md` -
|
|
11
|
+
your bug or idea may already be tracked there with more detail than an
|
|
12
|
+
issue would have.
|
|
13
|
+
- For anything beyond a small fix, open an issue first to discuss the
|
|
14
|
+
approach. This avoids wasted work on something that conflicts with the
|
|
15
|
+
project's direction.
|
|
16
|
+
|
|
17
|
+
## Development setup
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
git clone https://github.com/Mullassery/PyStreamAI.git
|
|
21
|
+
cd PyStreamAI
|
|
22
|
+
python3 -m venv .venv && source .venv/bin/activate
|
|
23
|
+
pip install -e ".[dev,serving,onnx]"
|
|
24
|
+
maturin develop --release # builds the Rust extension (src/*.rs) into the venv
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Requires Python 3.10+ and a Rust toolchain (stable) if you're touching
|
|
28
|
+
`src/*.rs`.
|
|
29
|
+
|
|
30
|
+
## Running checks locally
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
pytest # Python test suite
|
|
34
|
+
ruff check . # lint (pyflakes + core pycodestyle rules only, see pyproject.toml)
|
|
35
|
+
cargo test --release # Rust unit tests (src/*.rs)
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
All three must pass before opening a PR. If you add a new module or
|
|
39
|
+
function, add a real test for it - not a smoke test that only checks it
|
|
40
|
+
doesn't raise. If you can't add a real test yet (e.g. the feature is
|
|
41
|
+
genuinely a hardcoded placeholder), say so explicitly in the code comment
|
|
42
|
+
and the PR description; don't leave it implied.
|
|
43
|
+
|
|
44
|
+
## The "no fake stubs" rule
|
|
45
|
+
|
|
46
|
+
This codebase has a documented history of shipping code that looked done
|
|
47
|
+
but wasn't (see README's "Performance claims" and "Known issues"
|
|
48
|
+
sections, and `ROADMAP_HONEST.md`'s technical debt list for current
|
|
49
|
+
examples still being cleaned up). When contributing:
|
|
50
|
+
|
|
51
|
+
- If a function can't do the real thing yet (no test hardware, no real
|
|
52
|
+
backend, etc.), it must say so in its docstring and return values that
|
|
53
|
+
can't be mistaken for real measurements/results - not a plausible-looking
|
|
54
|
+
hardcoded number.
|
|
55
|
+
- Don't add "TODO: implement later" methods that silently return success.
|
|
56
|
+
Either implement it for real or leave it unimplemented and raise
|
|
57
|
+
`NotImplementedError`.
|
|
58
|
+
- If you're fixing one of the fake modules in `ROADMAP_HONEST.md` (e.g.
|
|
59
|
+
`pystreamai.llm_optimization`, `pystreamai.edge_deployment`), remove the
|
|
60
|
+
"not real" disclosure for that specific function in the same PR that
|
|
61
|
+
makes it real - don't let docs and code drift apart again.
|
|
62
|
+
|
|
63
|
+
## Commit / PR conventions
|
|
64
|
+
|
|
65
|
+
- Keep commits focused; one logical change per commit.
|
|
66
|
+
- Update `README.md` and the relevant file under `docs/` in the same PR
|
|
67
|
+
as any behavior change - stale docs are treated as a bug here.
|
|
68
|
+
- Add an entry to `CHANGELOG.md` under `[Unreleased]` for user-visible
|
|
69
|
+
changes.
|
|
70
|
+
- Use the PR template (`.github/pull_request_template.md`) checklist.
|
|
71
|
+
|
|
72
|
+
## Reporting security issues
|
|
73
|
+
|
|
74
|
+
Do not open a public issue for a security vulnerability - see
|
|
75
|
+
`SECURITY.md`.
|
|
76
|
+
|
|
77
|
+
## License
|
|
78
|
+
|
|
79
|
+
By contributing, you agree your contributions are licensed under this
|
|
80
|
+
project's Apache License 2.0 (see `LICENSE`).
|