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.
Files changed (92) hide show
  1. pystreamai-2.1.2/.github/ISSUE_TEMPLATE/bug_report.yml +46 -0
  2. pystreamai-2.1.2/.github/ISSUE_TEMPLATE/feature_request.yml +29 -0
  3. pystreamai-2.1.2/.github/dependabot.yml +19 -0
  4. pystreamai-2.1.2/.github/pull_request_template.md +17 -0
  5. {pystreamai-2.1.0 → pystreamai-2.1.2}/.github/workflows/build-wheels.yml +3 -5
  6. pystreamai-2.1.2/.github/workflows/security-audit.yml +48 -0
  7. {pystreamai-2.1.0 → pystreamai-2.1.2}/.github/workflows/tests.yml +2 -4
  8. {pystreamai-2.1.0 → pystreamai-2.1.2}/.gitignore +6 -1
  9. pystreamai-2.1.2/.graphifyignore +31 -0
  10. pystreamai-2.1.2/CHANGELOG.md +98 -0
  11. pystreamai-2.1.2/CODE_OF_CONDUCT.md +37 -0
  12. pystreamai-2.1.2/CONTRIBUTING.md +80 -0
  13. {pystreamai-2.1.0 → pystreamai-2.1.2}/Cargo.lock +1 -1
  14. {pystreamai-2.1.0 → pystreamai-2.1.2}/Cargo.toml +2 -2
  15. pystreamai-2.1.2/LICENSE +202 -0
  16. pystreamai-2.1.2/PKG-INFO +279 -0
  17. pystreamai-2.1.2/README.md +237 -0
  18. pystreamai-2.1.2/ROADMAP_HONEST.md +216 -0
  19. {pystreamai-2.1.0 → pystreamai-2.1.2}/docs/ROADMAP.md +16 -3
  20. {pystreamai-2.1.0 → pystreamai-2.1.2}/pyproject.toml +25 -3
  21. {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/__init__.py +1 -1
  22. {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/advanced_caching.py +3 -3
  23. {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/api.py +9 -8
  24. {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/observability.py +19 -8
  25. {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/test_onnx_runtime.py +1 -1
  26. {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/test_platform_onnx_predict.py +1 -1
  27. pystreamai-2.1.2/tools/graphify/README.md +63 -0
  28. pystreamai-2.1.2/tools/graphify/graphify_adapter.py +242 -0
  29. pystreamai-2.1.0/.env.example +0 -27
  30. pystreamai-2.1.0/FINAL_REPORT.txt +0 -2
  31. pystreamai-2.1.0/LICENSE +0 -22
  32. pystreamai-2.1.0/PKG-INFO +0 -395
  33. pystreamai-2.1.0/README.md +0 -355
  34. {pystreamai-2.1.0 → pystreamai-2.1.2}/SECURITY.md +0 -0
  35. {pystreamai-2.1.0 → pystreamai-2.1.2}/benchmarks/README.md +0 -0
  36. {pystreamai-2.1.0 → pystreamai-2.1.2}/benchmarks/__init__.py +0 -0
  37. {pystreamai-2.1.0 → pystreamai-2.1.2}/benchmarks/bench_bert_llm.py +0 -0
  38. {pystreamai-2.1.0 → pystreamai-2.1.2}/benchmarks/bench_oss_comparison.py +0 -0
  39. {pystreamai-2.1.0 → pystreamai-2.1.2}/benchmarks/inference.py +0 -0
  40. {pystreamai-2.1.0 → pystreamai-2.1.2}/benchmarks/models.py +0 -0
  41. {pystreamai-2.1.0 → pystreamai-2.1.2}/benchmarks/runner.py +0 -0
  42. {pystreamai-2.1.0 → pystreamai-2.1.2}/docs/API_REFERENCE.md +0 -0
  43. {pystreamai-2.1.0 → pystreamai-2.1.2}/docs/DEPLOYMENT.md +0 -0
  44. {pystreamai-2.1.0 → pystreamai-2.1.2}/docs/GETTING_STARTED.md +0 -0
  45. {pystreamai-2.1.0 → pystreamai-2.1.2}/docs/INTEGRATIONS.md +0 -0
  46. {pystreamai-2.1.0 → pystreamai-2.1.2}/docs/OPTIMIZATION.md +0 -0
  47. {pystreamai-2.1.0 → pystreamai-2.1.2}/docs/PUBLISH.md +0 -0
  48. {pystreamai-2.1.0 → pystreamai-2.1.2}/docs/SERVING.md +0 -0
  49. {pystreamai-2.1.0 → pystreamai-2.1.2}/examples/__init__.py +0 -0
  50. {pystreamai-2.1.0 → pystreamai-2.1.2}/examples/serve_model.py +0 -0
  51. {pystreamai-2.1.0 → pystreamai-2.1.2}/examples/start_http_server.py +0 -0
  52. {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/cost_tracking.py +0 -0
  53. {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/dashboard.py +0 -0
  54. {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/decorators.py +0 -0
  55. {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/deployment.py +0 -0
  56. {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/edge_deployment.py +0 -0
  57. {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/gpu.py +0 -0
  58. {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/hot_reload.py +0 -0
  59. {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/llm_optimization.py +0 -0
  60. {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/model_registry.py +0 -0
  61. {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/monitoring.py +0 -0
  62. {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/onnx_runtime.py +0 -0
  63. {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/platform.py +0 -0
  64. {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/request_scheduler.py +0 -0
  65. {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/serving.py +0 -0
  66. {pystreamai-2.1.0 → pystreamai-2.1.2}/pystreamai/testing.py +0 -0
  67. {pystreamai-2.1.0 → pystreamai-2.1.2}/requirements-benchmark.txt +0 -0
  68. {pystreamai-2.1.0 → pystreamai-2.1.2}/requirements-serving.txt +0 -0
  69. {pystreamai-2.1.0 → pystreamai-2.1.2}/src/backend.rs +0 -0
  70. {pystreamai-2.1.0 → pystreamai-2.1.2}/src/executor.rs +0 -0
  71. {pystreamai-2.1.0 → pystreamai-2.1.2}/src/gpu.rs +0 -0
  72. {pystreamai-2.1.0 → pystreamai-2.1.2}/src/inference.rs +0 -0
  73. {pystreamai-2.1.0 → pystreamai-2.1.2}/src/lib.rs +0 -0
  74. {pystreamai-2.1.0 → pystreamai-2.1.2}/src/memory_manager.rs +0 -0
  75. {pystreamai-2.1.0 → pystreamai-2.1.2}/src/scheduler.rs +0 -0
  76. {pystreamai-2.1.0 → pystreamai-2.1.2}/src/storage.rs +0 -0
  77. {pystreamai-2.1.0 → pystreamai-2.1.2}/src/streaming.rs +0 -0
  78. {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/__init__.py +0 -0
  79. {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/conftest.py +0 -0
  80. {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/test_api.py +0 -0
  81. {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/test_core_extension.py +0 -0
  82. {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/test_cost_tracking.py +0 -0
  83. {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/test_deployment.py +0 -0
  84. {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/test_gpu.py +0 -0
  85. {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/test_hot_reload.py +0 -0
  86. {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/test_misc_modules.py +0 -0
  87. {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/test_model_failure_states.py +0 -0
  88. {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/test_model_registry.py +0 -0
  89. {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/test_monitoring.py +0 -0
  90. {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/test_platform.py +0 -0
  91. {pystreamai-2.1.0 → pystreamai-2.1.2}/tests/test_request_scheduler.py +0 -0
  92. {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@v3
13
+ - uses: actions/checkout@v4
14
14
 
15
15
  - name: Set up Rust
16
- uses: actions-rs/toolchain@v1
17
- with:
18
- toolchain: stable
16
+ uses: dtolnay/rust-toolchain@stable
19
17
 
20
18
  - name: Set up Python
21
- uses: actions/setup-python@v4
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@v4
16
+ - uses: actions/setup-python@v5
17
17
  with:
18
18
  python-version: ${{ matrix.python-version }}
19
19
  - name: Set up Rust
20
- uses: actions-rs/toolchain@v1
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`).
@@ -283,7 +283,7 @@ dependencies = [
283
283
 
284
284
  [[package]]
285
285
  name = "pystreamai"
286
- version = "2.1.0"
286
+ version = "2.1.2"
287
287
  dependencies = [
288
288
  "async-trait",
289
289
  "chrono",
@@ -1,9 +1,9 @@
1
1
  [package]
2
2
  name = "pystreamai"
3
- version = "2.1.0"
3
+ version = "2.1.2"
4
4
  edition = "2021"
5
5
  description = "Rust orchestrator for PyStreamAI - simple ML deployment platform"
6
- license = "Proprietary"
6
+ license = "Apache-2.0"
7
7
  readme = "README.md"
8
8
 
9
9
  [lib]