cosmos-xenna 0.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 (75) hide show
  1. cosmos_xenna-0.1.2/.github/workflows/release-from-tag.yml +132 -0
  2. cosmos_xenna-0.1.2/.gitignore +194 -0
  3. cosmos_xenna-0.1.2/.python-version +1 -0
  4. cosmos_xenna-0.1.2/.vscode/extensions.json +17 -0
  5. cosmos_xenna-0.1.2/.vscode/settings.json +33 -0
  6. cosmos_xenna-0.1.2/ATTRIBUTIONS.md +100 -0
  7. cosmos_xenna-0.1.2/CHANGELOG.md +34 -0
  8. cosmos_xenna-0.1.2/CONTRIBUTING.md +57 -0
  9. cosmos_xenna-0.1.2/LICENSE +201 -0
  10. cosmos_xenna-0.1.2/PKG-INFO +307 -0
  11. cosmos_xenna-0.1.2/README.md +91 -0
  12. cosmos_xenna-0.1.2/cosmos_xenna/README.md +57 -0
  13. cosmos_xenna-0.1.2/cosmos_xenna/__init__.py +14 -0
  14. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/__init__.py +14 -0
  15. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/private/__init__.py +14 -0
  16. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/private/batch.py +152 -0
  17. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/private/monitoring.py +531 -0
  18. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/private/monitoring_types.py +258 -0
  19. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/private/pipelines.py +172 -0
  20. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/private/scheduling/README.md +110 -0
  21. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/private/scheduling/__init__.py +14 -0
  22. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/private/scheduling/autoscaling_algorithms.py +893 -0
  23. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/private/scheduling/data_structures.py +446 -0
  24. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/private/scheduling/fragmentation_allocation_algorithms.py +730 -0
  25. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/private/scheduling/naiive_worker_allocation.py +448 -0
  26. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/private/scheduling/run_simulator.py +261 -0
  27. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/private/scheduling/simulator.py +946 -0
  28. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/private/scheduling/test_allocator.py +365 -0
  29. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/private/scheduling/test_autoscaling_algorithms.py +1342 -0
  30. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/private/scheduling/test_fragmentation_allocation_algorithms.py +729 -0
  31. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/private/scheduling/test_naiive_worker_allocation.py +741 -0
  32. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/private/specs.py +488 -0
  33. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/private/streaming.py +558 -0
  34. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/private/test_batch_size_hang.py +132 -0
  35. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/private/test_streaming.py +303 -0
  36. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/v1/__init__.py +45 -0
  37. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/v1/smoke_test_actor_pool_heavy.py +91 -0
  38. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/v1/smoke_test_allocating_with_limited_tasks.py +74 -0
  39. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/v1/smoke_test_autoscaling.py +76 -0
  40. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/v1/smoke_test_complex_pipeline.py +141 -0
  41. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/v1/smoke_test_dynamic_splitting.py +114 -0
  42. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/v1/smoke_test_empty_return.py +85 -0
  43. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/v1/smoke_test_empty_returns.py +71 -0
  44. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/v1/smoke_test_segfaulting_pipeline.py +78 -0
  45. cosmos_xenna-0.1.2/cosmos_xenna/pipelines/v1/smoke_test_slots_resizing.py +61 -0
  46. cosmos_xenna-0.1.2/cosmos_xenna/py.typed +0 -0
  47. cosmos_xenna-0.1.2/cosmos_xenna/ray_utils/__init__.py +14 -0
  48. cosmos_xenna-0.1.2/cosmos_xenna/ray_utils/actor_pool.py +1179 -0
  49. cosmos_xenna-0.1.2/cosmos_xenna/ray_utils/allocator.py +391 -0
  50. cosmos_xenna-0.1.2/cosmos_xenna/ray_utils/cluster.py +93 -0
  51. cosmos_xenna-0.1.2/cosmos_xenna/ray_utils/monitoring.py +73 -0
  52. cosmos_xenna-0.1.2/cosmos_xenna/ray_utils/resource_monitor.py +473 -0
  53. cosmos_xenna-0.1.2/cosmos_xenna/ray_utils/resources.py +1031 -0
  54. cosmos_xenna-0.1.2/cosmos_xenna/ray_utils/runtime_envs.py +54 -0
  55. cosmos_xenna-0.1.2/cosmos_xenna/ray_utils/smoke_test_stage_worker.py +225 -0
  56. cosmos_xenna-0.1.2/cosmos_xenna/ray_utils/stage.py +96 -0
  57. cosmos_xenna-0.1.2/cosmos_xenna/ray_utils/stage_worker.py +741 -0
  58. cosmos_xenna-0.1.2/cosmos_xenna/utils/__init__.py +14 -0
  59. cosmos_xenna-0.1.2/cosmos_xenna/utils/approx.py +57 -0
  60. cosmos_xenna-0.1.2/cosmos_xenna/utils/attrs_utils.py +35 -0
  61. cosmos_xenna-0.1.2/cosmos_xenna/utils/deque.py +26 -0
  62. cosmos_xenna-0.1.2/cosmos_xenna/utils/gpu.py +34 -0
  63. cosmos_xenna-0.1.2/cosmos_xenna/utils/grouping.py +155 -0
  64. cosmos_xenna-0.1.2/cosmos_xenna/utils/retry.py +71 -0
  65. cosmos_xenna-0.1.2/cosmos_xenna/utils/stats.py +119 -0
  66. cosmos_xenna-0.1.2/cosmos_xenna/utils/test_grouping.py +64 -0
  67. cosmos_xenna-0.1.2/cosmos_xenna/utils/test_retry.py +114 -0
  68. cosmos_xenna-0.1.2/cosmos_xenna/utils/test_stats.py +114 -0
  69. cosmos_xenna-0.1.2/cosmos_xenna/utils/test_timing.py +257 -0
  70. cosmos_xenna-0.1.2/cosmos_xenna/utils/timing.py +329 -0
  71. cosmos_xenna-0.1.2/cosmos_xenna/utils/verbosity.py +24 -0
  72. cosmos_xenna-0.1.2/examples/simple_vlm_inference.py +246 -0
  73. cosmos_xenna-0.1.2/pyproject.toml +201 -0
  74. cosmos_xenna-0.1.2/run_presubmit.py +223 -0
  75. cosmos_xenna-0.1.2/uv.lock +2751 -0
@@ -0,0 +1,132 @@
1
+ on:
2
+ push:
3
+ tags:
4
+ - '*'
5
+ workflow_dispatch:
6
+ inputs:
7
+ tag:
8
+ description: 'Tag to test release for'
9
+ required: true
10
+
11
+ permissions:
12
+ contents: write
13
+ id-token: write
14
+
15
+ jobs:
16
+ release:
17
+ runs-on: ubuntu-latest
18
+
19
+ steps:
20
+ - name: Checkout code
21
+ uses: actions/checkout@v4
22
+
23
+ - name: Extract changelog section for tag
24
+ id: extract
25
+ run: |
26
+ TAG="${{ github.event.inputs.tag || github.ref_name }}"
27
+ TAG=${TAG#v} # Strip leading 'v' if present
28
+ echo "Looking for changelog section for tag: $TAG"
29
+
30
+ # Extract relevant section
31
+ CHANGELOG=$(awk -v tag="$TAG" '
32
+ $0 ~ "## \\[" tag "\\]" {flag=1; next}
33
+ flag && /^## \[/ {flag=0}
34
+ flag && /^### Released/ {next}
35
+ flag && /^- [0-9]{4}-[0-9]{2}-[0-9]{2}/ {next}
36
+ flag {print}
37
+ ' CHANGELOG.md)
38
+
39
+ if [ -z "$CHANGELOG" ]; then
40
+ CHANGELOG="No changelog entry found for $TAG"
41
+ fi
42
+
43
+ # Write to a temp file
44
+ echo "$CHANGELOG" > release_notes.md
45
+
46
+ # Save multiline output to GITHUB_ENV via file
47
+ echo "RELEASE_BODY<<EOF" >> $GITHUB_ENV
48
+ cat release_notes.md >> $GITHUB_ENV
49
+ echo "EOF" >> $GITHUB_ENV
50
+
51
+ - name: Create GitHub release
52
+ uses: softprops/action-gh-release@v2
53
+ with:
54
+ tag_name: ${{ github.event.inputs.tag || github.ref_name }}
55
+ name: Release ${{ github.event.inputs.tag || github.ref_name }}
56
+ body_path: release_notes.md
57
+ env:
58
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
59
+
60
+ build-wheels:
61
+ needs: release
62
+ runs-on: ${{ matrix.conf.os }}
63
+ name: ${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target }}
64
+ strategy:
65
+ fail-fast: false
66
+ matrix:
67
+ python-version: [ '3.x' ]
68
+ conf:
69
+ - { os: ubuntu-latest, target: x86_64, target-triple: x86_64-unknown-linux-gnu, manylinux: auto }
70
+
71
+ steps:
72
+ - name: Check out source
73
+ uses: actions/checkout@v4
74
+
75
+ - name: Set up Python
76
+ uses: actions/setup-python@v5
77
+ with:
78
+ python-version: ${{ matrix.python-version }}
79
+
80
+ - name: Install build dependencies
81
+ run: |
82
+ python -m pip install --upgrade pip
83
+ pip install build
84
+
85
+ - name: Build wheel and sdist
86
+ run: |
87
+ python -m build
88
+
89
+ - name: Upload artifact
90
+ uses: actions/upload-artifact@v4
91
+ with:
92
+ name: wheel-${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target }}
93
+ path: dist/*
94
+
95
+ attach-and-publish:
96
+ needs: build-wheels
97
+ runs-on: ubuntu-latest
98
+ environment: pypi
99
+ steps:
100
+ - name: Download all wheel artifacts
101
+ uses: actions/download-artifact@v4
102
+ with:
103
+ path: dist
104
+
105
+ - name: Collect distributions
106
+ run: |
107
+ mkdir flat-dist
108
+ find dist -type f -maxdepth 2 -name "*.whl" -exec cp {} flat-dist/ \;
109
+ find dist -type f -maxdepth 2 -name "*.tar.gz" -exec cp {} flat-dist/ \;
110
+
111
+ - name: Attach wheels to release
112
+ uses: softprops/action-gh-release@v2
113
+ with:
114
+ tag_name: ${{ github.event.inputs.tag || github.ref_name }}
115
+ files: dist/**
116
+ env:
117
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
118
+
119
+ - name: Publish to TestPyPI
120
+ if: ${{ !(github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')) }}
121
+ uses: pypa/gh-action-pypi-publish@release/v1
122
+ with:
123
+ repository-url: https://test.pypi.org/legacy/
124
+ skip-existing: true
125
+ packages-dir: flat-dist
126
+
127
+ - name: Publish to PyPI
128
+ if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
129
+ uses: pypa/gh-action-pypi-publish@release/v1
130
+ with:
131
+ skip-existing: true
132
+ packages-dir: flat-dist
@@ -0,0 +1,194 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py,cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ .pybuilder/
76
+ target/
77
+
78
+ # Jupyter Notebook
79
+ .ipynb_checkpoints
80
+
81
+ # IPython
82
+ profile_default/
83
+ ipython_config.py
84
+
85
+ # pyenv
86
+ # For a library or package, you might want to ignore these files since the code is
87
+ # intended to run in multiple environments; otherwise, check them in:
88
+ # .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ #Pipfile.lock
96
+
97
+ # UV
98
+ # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
99
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
100
+ # commonly ignored for libraries.
101
+ #uv.lock
102
+
103
+ # poetry
104
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
105
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
106
+ # commonly ignored for libraries.
107
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
108
+ #poetry.lock
109
+
110
+ # pdm
111
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
112
+ #pdm.lock
113
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
114
+ # in version control.
115
+ # https://pdm.fming.dev/latest/usage/project/#working-with-version-control
116
+ .pdm.toml
117
+ .pdm-python
118
+ .pdm-build/
119
+
120
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
121
+ __pypackages__/
122
+
123
+ # Celery stuff
124
+ celerybeat-schedule
125
+ celerybeat.pid
126
+
127
+ # SageMath parsed files
128
+ *.sage.py
129
+
130
+ # Environments
131
+ .env
132
+ .venv
133
+ env/
134
+ venv/
135
+ ENV/
136
+ env.bak/
137
+ venv.bak/
138
+
139
+ # Spyder project settings
140
+ .spyderproject
141
+ .spyproject
142
+
143
+ # Rope project settings
144
+ .ropeproject
145
+
146
+ # mkdocs documentation
147
+ /site
148
+
149
+ # mypy
150
+ .mypy_cache/
151
+ .dmypy.json
152
+ dmypy.json
153
+
154
+ # Pyre type checker
155
+ .pyre/
156
+
157
+ # pytype static type analyzer
158
+ .pytype/
159
+
160
+ # Cython debug symbols
161
+ cython_debug/
162
+
163
+ # PyCharm
164
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
165
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
166
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
167
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
168
+ #.idea/
169
+
170
+ # Abstra
171
+ # Abstra is an AI-powered process automation framework.
172
+ # Ignore directories containing user credentials, local state, and settings.
173
+ # Learn more at https://abstra.io/docs
174
+ .abstra/
175
+
176
+ # Visual Studio Code
177
+ # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
178
+ # that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
179
+ # and can be added to the global gitignore or merged into this file. However, if you prefer,
180
+ # you could uncomment the following to ignore the enitre vscode folder
181
+ # .vscode/
182
+
183
+ # Ruff stuff:
184
+ .ruff_cache/
185
+
186
+ # PyPI configuration file
187
+ .pypirc
188
+
189
+ # Cursor
190
+ # Cursor is an AI-powered code editor. `.cursorignore` specifies files/directories to
191
+ # exclude from AI features like autocomplete and code analysis. Recommended for sensitive data
192
+ # refer to https://docs.cursor.com/context/ignore-files
193
+ .cursorignore
194
+ .cursorindexingignore
@@ -0,0 +1 @@
1
+ 3.9
@@ -0,0 +1,17 @@
1
+ {
2
+ // See https://go.microsoft.com/fwlink/?LinkId=827846 to learn about workspace recommendations.
3
+ // Extension identifier format: ${publisher}.${name}. Example: vscode.csharp
4
+ // List of extensions which should be recommended for users of this workspace.
5
+ //
6
+ // Vscode has a "Show Recommended Extensions" command to check whether these are installed.
7
+ "recommendations": [
8
+ "charliermarsh.ruff",
9
+ "davidanson.vscode-markdownlint",
10
+ "ms-python.vscode-pylance",
11
+ "ms-python.python",
12
+ "tamasfe.even-better-toml",
13
+ "samuelcolvin.jinjahtml",
14
+ ],
15
+ // List of extensions recommended by VS Code that should not be recommended for users of this workspace.
16
+ "unwantedRecommendations": []
17
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "python.analysis.autoFormatStrings": true,
3
+ "editor.formatOnSave": true,
4
+ "git.detectSubmodules": false,
5
+ "python.languageServer": "Pylance",
6
+ "[python]": {
7
+ "editor.codeActionsOnSave": {
8
+ "source.fixAll": "explicit"
9
+ },
10
+ "editor.formatOnSave": true,
11
+ "editor.defaultFormatter": "charliermarsh.ruff",
12
+ },
13
+ "[markdown]": {
14
+ "editor.formatOnSave": true,
15
+ "editor.formatOnPaste": true,
16
+ "editor.codeActionsOnSave": {
17
+ "source.fixAll.markdownlint": "explicit"
18
+ }
19
+ },
20
+ "markdownlint.config": {
21
+ "default": true,
22
+ "MD013": {
23
+ "code_blocks": false,
24
+ "line_length": 110,
25
+ "tables": false,
26
+ },
27
+ "MD024": false, // This one has a lot of false posititves.
28
+ },
29
+ "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python",
30
+ "ruff.interpreter": [
31
+ "${workspaceFolder}/.venv/bin/python"
32
+ ]
33
+ }
@@ -0,0 +1,100 @@
1
+ # Open Source License Attribution
2
+
3
+ Cosmos uses Open Source components. Below are the details of these open-source projects along with license information. We acknowledge and thank the contributors.
4
+
5
+ ## attrs - [MIT License](https://github.com/python-attrs/attrs/blob/main/LICENSE)
6
+
7
+ ```
8
+ MIT License
9
+
10
+ Copyright (c) 2015 Hynek Schlawack
11
+
12
+ Permission is hereby granted, free of charge, to any person obtaining a copy
13
+ of this software and associated documentation files (the "Software"), to deal
14
+ in the Software without restriction, including without limitation the rights
15
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16
+ copies of the Software, and to permit persons to whom the Software is
17
+ furnished to do so, subject to the following conditions:
18
+ ```
19
+
20
+ ## cattrs - [MIT License](https://github.com/python-attrs/cattrs/blob/main/LICENSE)
21
+
22
+ ```
23
+ MIT License
24
+
25
+ Copyright (c) 2017 Tin Tvrtković
26
+
27
+ Permission is hereby granted, free of charge, to any person obtaining a copy
28
+ of this software and associated documentation files (the "Software"), to deal
29
+ in the Software without restriction, including without limitation the rights
30
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
31
+ copies of the Software, and to permit persons to whom the Software is
32
+ furnished to do so, subject to the following conditions:
33
+ ```
34
+
35
+ ## Jinja2 - [BSD License](https://pypi.org/project/Jinja2/)
36
+
37
+ ```
38
+ BSD License
39
+
40
+ Copyright (c) 2009 by the Jinja Team
41
+
42
+ Redistribution and use in source and binary forms, with or without
43
+ modification, are permitted provided that the following conditions are met:
44
+ ```
45
+
46
+ ## loguru - [MIT License](https://github.com/Delgan/loguru/blob/master/LICENSE)
47
+
48
+ ```
49
+ MIT License
50
+
51
+ Copyright (c) 2017 Delgan
52
+
53
+ Permission is hereby granted, free of charge, to any person obtaining a copy
54
+ of this software and associated documentation files (the "Software"), to deal
55
+ in the Software without restriction, including without limitation the rights
56
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
57
+ copies of the Software, and to permit persons to whom the Software is
58
+ furnished to do so, subject to the following conditions:
59
+ ```
60
+
61
+ ## PuLP - [MIT License](https://pypi.org/project/PuLP/)
62
+
63
+ ```
64
+ MIT License
65
+
66
+ Copyright (c) 2003-2005 J.S. Roy
67
+ Copyright (c) Stuart A. Mitchell
68
+
69
+ Permission is hereby granted, free of charge, to any person obtaining a copy
70
+ of this software and associated documentation files (the "Software"), to deal
71
+ in the Software without restriction, including without limitation the rights
72
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
73
+ copies of the Software, and to permit persons to whom the Software is
74
+ furnished to do so, subject to the following conditions:
75
+ ```
76
+
77
+ ## ray - [Apache License 2.0](https://github.com/ray-project/ray/blob/master/LICENSE)
78
+
79
+ ```
80
+ Apache License
81
+ Version 2.0, January 2004
82
+ http://www.apache.org/licenses/
83
+
84
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
85
+ ```
86
+
87
+ ## tabulate - [MIT License](https://github.com/astanin/python-tabulate/blob/master/LICENSE)
88
+
89
+ ```
90
+ MIT License
91
+
92
+ Copyright (c) 2011-2013 Sergey Astanin
93
+
94
+ Permission is hereby granted, free of charge, to any person obtaining a copy
95
+ of this software and associated documentation files (the "Software"), to deal
96
+ in the Software without restriction, including without limitation the rights
97
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
98
+ copies of the Software, and to permit persons to whom the Software is
99
+ furnished to do so, subject to the following conditions:
100
+ ```
@@ -0,0 +1,34 @@
1
+ # Changelog
2
+
3
+
4
+ ## Latest
5
+
6
+ ## [0.1.2]
7
+
8
+ ### Released
9
+ - 2025-08-19
10
+
11
+ ### Added
12
+ - Add workflow to publish packages to PyPI.
13
+
14
+ ### Fixed
15
+ - Fixed bug on queue-size stats when back-pressure kicking in.
16
+ - Fixed a possible hang when having a fan-in stage with large stage_batch_size.
17
+
18
+ ## [0.1.1]
19
+
20
+ ### Released
21
+ - 2025-08-14
22
+
23
+ ### Added
24
+ - Add `over_provision_factor` to `StageSpec` to influence stage worker allocation by autoscaler.
25
+ - Allow `StageSpec.num_workers_per_node` to be `float` for greater flexibility.
26
+ - Add support to respect `CUDA_VISIBLE_DEVICES` if environment variable `XENNA_RESPECT_CUDA_VISIBLE_DEVICES` is set.
27
+
28
+ ## [0.1.0]
29
+
30
+ ### Released
31
+ - 2025-06-11
32
+
33
+ ### Added
34
+ - Initial version
@@ -0,0 +1,57 @@
1
+ # How to Contribute
2
+
3
+ We'd love to receive your patches and contributions. Please keep your PRs as draft until such time that you
4
+ would like us to review them.
5
+
6
+ ## Code Reviews
7
+
8
+ All submissions, including submissions by project members, require review. We use GitHub pull requests for
9
+ this purpose. Consult [GitHub Help](https://help.github.com/articles/about-pull-requests/) for more
10
+ information on using pull requests.
11
+
12
+ ## Signing Your Work
13
+
14
+ * We require that all contributors "sign-off" on their commits. This certifies that the contribution is
15
+ your original work, or you have rights to submit it under the same license, or a compatible license.
16
+
17
+ * Any contribution which contains commits that are not Signed-Off will not be accepted.
18
+
19
+ * To sign off on a commit you simply use the `--signoff` (or `-s`) option when committing your changes:
20
+
21
+ ```bash
22
+ git commit -s -m "Add cool feature."
23
+ ```
24
+
25
+ This will append the following to your commit message:
26
+
27
+ ```txt
28
+ Signed-off-by: Your Name <your@email.com>
29
+ ```
30
+
31
+ * Full text of the DCO:
32
+
33
+ ```txt
34
+ Developer Certificate of Origin
35
+ Version 1.1
36
+
37
+ Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
38
+ 1 Letterman Drive
39
+ Suite D4700
40
+ San Francisco, CA, 94129
41
+
42
+ Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
43
+ ```
44
+
45
+ ```txt
46
+ Developer's Certificate of Origin 1.1
47
+
48
+ By making a contribution to this project, I certify that:
49
+
50
+ (a) The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or
51
+
52
+ (b) The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as indicated in the file; or
53
+
54
+ (c) The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it.
55
+
56
+ (d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved.
57
+ ```