llmbroker 0.0.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.
- llmbroker-0.0.2/.coveragerc +17 -0
- llmbroker-0.0.2/.github/workflows/ci.yml +132 -0
- llmbroker-0.0.2/.github/workflows/docs.yml +65 -0
- llmbroker-0.0.2/.github/workflows/pip_publish.yml +91 -0
- llmbroker-0.0.2/.github/workflows/static.yml +34 -0
- llmbroker-0.0.2/.gitignore +14 -0
- llmbroker-0.0.2/.pre-commit-config.yaml +74 -0
- llmbroker-0.0.2/LICENSE +20 -0
- llmbroker-0.0.2/PKG-INFO +80 -0
- llmbroker-0.0.2/README.md +44 -0
- llmbroker-0.0.2/activate.sh +61 -0
- llmbroker-0.0.2/build.sh +21 -0
- llmbroker-0.0.2/docs/common/images/about.jpg +0 -0
- llmbroker-0.0.2/docs/common/reference.md +4 -0
- llmbroker-0.0.2/docs/includes/install_pipx_macos.sh +2 -0
- llmbroker-0.0.2/docs/mkdocs.yml +45 -0
- llmbroker-0.0.2/docs/src/en/index.md +16 -0
- llmbroker-0.0.2/docs/src/en/installation.md +11 -0
- llmbroker-0.0.2/docs/src/ru/index.md +11 -0
- llmbroker-0.0.2/docs/src/ru/installation.md +11 -0
- llmbroker-0.0.2/invoke.yml +5 -0
- llmbroker-0.0.2/pyproject.toml +60 -0
- llmbroker-0.0.2/pytest.ini +2 -0
- llmbroker-0.0.2/scripts/__init__.py +0 -0
- llmbroker-0.0.2/scripts/verup.sh +93 -0
- llmbroker-0.0.2/scripts/verup_action.sh +88 -0
- llmbroker-0.0.2/src/llmbroker/__about__.py +1 -0
- llmbroker-0.0.2/src/llmbroker/__init__.py +8 -0
- llmbroker-0.0.2/src/llmbroker/main.py +33 -0
- llmbroker-0.0.2/tasks.py +122 -0
- llmbroker-0.0.2/tests/test_llmbroker.py +14 -0
- llmbroker-0.0.2/uv.lock +889 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
|
|
2
|
+
# This workflow will install Python dependencies, run tests and lint with a variety of Python versions
|
|
3
|
+
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
|
|
4
|
+
#
|
|
5
|
+
name: CI
|
|
6
|
+
|
|
7
|
+
env:
|
|
8
|
+
PRIMARY_PYTHON_VERSION: '3.13'
|
|
9
|
+
PRIMARY_PLATFORM: 'ubuntu-latest'
|
|
10
|
+
PYTEST_CMD: >-
|
|
11
|
+
python -m pytest
|
|
12
|
+
--junitxml=pytest.xml
|
|
13
|
+
--cov-report=term-missing:skip-covered
|
|
14
|
+
--cov=src
|
|
15
|
+
tests/
|
|
16
|
+
|
|
17
|
+
on:
|
|
18
|
+
push:
|
|
19
|
+
branches: [ master, main ]
|
|
20
|
+
pull_request:
|
|
21
|
+
branches: [ master, main ]
|
|
22
|
+
|
|
23
|
+
permissions:
|
|
24
|
+
pull-requests: write
|
|
25
|
+
contents: write
|
|
26
|
+
|
|
27
|
+
jobs:
|
|
28
|
+
# Test compatibility with the matrix of Python versions and platforms
|
|
29
|
+
matrix-build:
|
|
30
|
+
strategy:
|
|
31
|
+
matrix:
|
|
32
|
+
python-version: [3.12, 3.13]
|
|
33
|
+
platform: [ubuntu-latest, macos-latest, windows-latest]
|
|
34
|
+
runs-on: ${{ matrix.platform }}
|
|
35
|
+
|
|
36
|
+
steps:
|
|
37
|
+
- uses: actions/checkout@v4
|
|
38
|
+
|
|
39
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
40
|
+
uses: actions/setup-python@v5
|
|
41
|
+
with:
|
|
42
|
+
python-version: ${{ matrix.python-version }}
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
- name: Install uv environment
|
|
46
|
+
uses: andgineer/uv-venv@v3
|
|
47
|
+
|
|
48
|
+
- name: Install dependencies
|
|
49
|
+
run: uv sync --frozen
|
|
50
|
+
|
|
51
|
+
- name: Test with pytest
|
|
52
|
+
run: ${{ env.PYTEST_CMD }}
|
|
53
|
+
|
|
54
|
+
# Build with publishing Allure report, coverage report
|
|
55
|
+
primary-build:
|
|
56
|
+
runs-on: ubuntu-latest
|
|
57
|
+
concurrency:
|
|
58
|
+
group: github-pages
|
|
59
|
+
cancel-in-progress: false
|
|
60
|
+
|
|
61
|
+
steps:
|
|
62
|
+
- uses: actions/checkout@v4
|
|
63
|
+
|
|
64
|
+
- name: Set up Python ${{ env.PRIMARY_PYTHON_VERSION }}
|
|
65
|
+
uses: actions/setup-python@v5
|
|
66
|
+
with:
|
|
67
|
+
python-version: ${{ env.PRIMARY_PYTHON_VERSION }}
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
- name: Install uv environment
|
|
71
|
+
uses: andgineer/uv-venv@v3
|
|
72
|
+
|
|
73
|
+
- name: Install dependencies
|
|
74
|
+
run: uv sync --frozen
|
|
75
|
+
|
|
76
|
+
- name: Test with pytest and Allure report
|
|
77
|
+
run: "${{ env.PYTEST_CMD }} --alluredir=./allure-results"
|
|
78
|
+
|
|
79
|
+
- name: Load Allure test report history
|
|
80
|
+
uses: actions/checkout@v4
|
|
81
|
+
if: always()
|
|
82
|
+
continue-on-error: true
|
|
83
|
+
with:
|
|
84
|
+
ref: gh-pages
|
|
85
|
+
path: gh-pages-dir
|
|
86
|
+
|
|
87
|
+
- name: Generate Allure test report
|
|
88
|
+
uses: andgineer/allure-report@v3.6
|
|
89
|
+
id: allure-report
|
|
90
|
+
if: always()
|
|
91
|
+
with:
|
|
92
|
+
allure-results: allure-results
|
|
93
|
+
website: gh-pages-dir
|
|
94
|
+
reports-site-path: builds/tests
|
|
95
|
+
|
|
96
|
+
- name: Publish Allure test report
|
|
97
|
+
uses: peaceiris/actions-gh-pages@v3
|
|
98
|
+
if: ${{ always() && (steps.allure-report.outcome == 'success') }}
|
|
99
|
+
with:
|
|
100
|
+
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
101
|
+
publish_branch: gh-pages
|
|
102
|
+
publish_dir: ${{ steps.allure-report.outputs.reports-site }}
|
|
103
|
+
destination_dir: ${{ steps.allure-report.outputs.reports-site-path }}
|
|
104
|
+
|
|
105
|
+
- name: Coverage comment
|
|
106
|
+
id: coverage_comment
|
|
107
|
+
if: always()
|
|
108
|
+
uses: py-cov-action/python-coverage-comment-action@v3
|
|
109
|
+
with:
|
|
110
|
+
GITHUB_TOKEN: ${{ github.token }}
|
|
111
|
+
MINIMUM_GREEN: 85
|
|
112
|
+
MINIMUM_ORANGE: 70
|
|
113
|
+
|
|
114
|
+
- name: Store Pull Request comment to be posted
|
|
115
|
+
uses: actions/upload-artifact@v4
|
|
116
|
+
if: steps.coverage_comment.outputs.COMMENT_FILE_WRITTEN == 'true'
|
|
117
|
+
with:
|
|
118
|
+
name: python-coverage-comment-action
|
|
119
|
+
path: python-coverage-comment-action.txt
|
|
120
|
+
|
|
121
|
+
- name: Upload coverage data to coveralls.io
|
|
122
|
+
if: always()
|
|
123
|
+
continue-on-error: true
|
|
124
|
+
uses: coverallsapp/github-action@v2
|
|
125
|
+
|
|
126
|
+
- name: Upload Coverage to Codecov
|
|
127
|
+
if: always()
|
|
128
|
+
continue-on-error: true
|
|
129
|
+
uses: codecov/codecov-action@v4.0.1
|
|
130
|
+
with:
|
|
131
|
+
fail_ci_if_error: true
|
|
132
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
|
|
2
|
+
# build docs from docstrings and markdown-file in folder docs
|
|
3
|
+
# publish them as github pages
|
|
4
|
+
#
|
|
5
|
+
#note for myself
|
|
6
|
+
#
|
|
7
|
+
# Do not forget to set git branch `gh-pages` as source for github pages.
|
|
8
|
+
# This branch auto-updated by `mkdocs gh-deploy`
|
|
9
|
+
#
|
|
10
|
+
name: docs
|
|
11
|
+
on:
|
|
12
|
+
push:
|
|
13
|
+
branches:
|
|
14
|
+
- main
|
|
15
|
+
- master
|
|
16
|
+
|
|
17
|
+
permissions:
|
|
18
|
+
contents: write
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
deploy:
|
|
22
|
+
env:
|
|
23
|
+
PRIMARY_PYTHON_VERSION: '3.13'
|
|
24
|
+
runs-on: ubuntu-latest
|
|
25
|
+
concurrency:
|
|
26
|
+
group: github-pages
|
|
27
|
+
cancel-in-progress: false
|
|
28
|
+
steps:
|
|
29
|
+
- uses: actions/checkout@v4
|
|
30
|
+
|
|
31
|
+
- name: Checkout gh-pages to backup Allure test reports
|
|
32
|
+
uses: actions/checkout@v4
|
|
33
|
+
with:
|
|
34
|
+
ref: gh-pages
|
|
35
|
+
path: gh-pages
|
|
36
|
+
continue-on-error: true
|
|
37
|
+
|
|
38
|
+
- uses: actions/setup-python@v5
|
|
39
|
+
with:
|
|
40
|
+
python-version: ${{ env.PRIMARY_PYTHON_VERSION }}
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
- name: Install uv environment
|
|
44
|
+
uses: andgineer/uv-venv@v3
|
|
45
|
+
|
|
46
|
+
- name: Install dependencies
|
|
47
|
+
run: |
|
|
48
|
+
uv sync --frozen
|
|
49
|
+
uv pip install ghp-import
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
- name: Build documentation
|
|
53
|
+
run: inv build-docs
|
|
54
|
+
|
|
55
|
+
- name: Deploy to GitHub Pages
|
|
56
|
+
run: |
|
|
57
|
+
ghp-import --no-jekyll --push --force build/docs/site
|
|
58
|
+
|
|
59
|
+
- name: Restore Allure test reports folder
|
|
60
|
+
uses: peaceiris/actions-gh-pages@v3
|
|
61
|
+
with:
|
|
62
|
+
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
63
|
+
publish_branch: gh-pages
|
|
64
|
+
publish_dir: gh-pages/builds
|
|
65
|
+
destination_dir: builds
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
|
|
2
|
+
# This workflows will upload a Python Package using build system from pyproject.toml - when version
|
|
3
|
+
# tag is pushed and CI workflow is successful.
|
|
4
|
+
#
|
|
5
|
+
# To push the tag use `inv ver-release/feature/bag`.
|
|
6
|
+
#
|
|
7
|
+
# Put you pypi credentials (PYPI_USERNAME, PYPI_PASSWORD) into the github repository secrets
|
|
8
|
+
|
|
9
|
+
name: Upload Python Package
|
|
10
|
+
|
|
11
|
+
on:
|
|
12
|
+
workflow_run:
|
|
13
|
+
workflows: ["CI"]
|
|
14
|
+
types: [completed]
|
|
15
|
+
branches:
|
|
16
|
+
- master
|
|
17
|
+
- main
|
|
18
|
+
|
|
19
|
+
permissions:
|
|
20
|
+
contents: write
|
|
21
|
+
|
|
22
|
+
jobs:
|
|
23
|
+
check_tag:
|
|
24
|
+
runs-on: ubuntu-latest
|
|
25
|
+
outputs:
|
|
26
|
+
has_tag: ${{ steps.check_tag.outputs.has_tag }}
|
|
27
|
+
version_tag: ${{ steps.check_tag.outputs.version_tag }}
|
|
28
|
+
steps:
|
|
29
|
+
- uses: actions/checkout@v4
|
|
30
|
+
with:
|
|
31
|
+
fetch-depth: 0
|
|
32
|
+
|
|
33
|
+
- name: Check for version tag
|
|
34
|
+
id: check_tag
|
|
35
|
+
run: |
|
|
36
|
+
# Only accept semver tags like v1.2.3
|
|
37
|
+
TAG=$(git tag --points-at HEAD | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' || true)
|
|
38
|
+
if [ -n "$TAG" ]; then
|
|
39
|
+
echo "has_tag=true" >> $GITHUB_OUTPUT
|
|
40
|
+
# Strip leading 'v' for use in the workflow
|
|
41
|
+
echo "version_tag=${TAG#v}" >> $GITHUB_OUTPUT
|
|
42
|
+
else
|
|
43
|
+
echo "has_tag=false" >> $GITHUB_OUTPUT
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
publish:
|
|
47
|
+
needs: check_tag
|
|
48
|
+
# Skip entire job unless a valid semver tag was found
|
|
49
|
+
if: needs.check_tag.outputs.has_tag == 'true'
|
|
50
|
+
env:
|
|
51
|
+
RELEASE_VERSION: ${{ needs.check_tag.outputs.version_tag }}
|
|
52
|
+
PRIMARY_PYTHON_VERSION: '3.13'
|
|
53
|
+
runs-on: ubuntu-latest
|
|
54
|
+
|
|
55
|
+
steps:
|
|
56
|
+
- uses: actions/checkout@v4
|
|
57
|
+
with:
|
|
58
|
+
fetch-depth: 0
|
|
59
|
+
|
|
60
|
+
- name: Set up Python
|
|
61
|
+
uses: actions/setup-python@v5
|
|
62
|
+
with:
|
|
63
|
+
python-version: ${{ env.PRIMARY_PYTHON_VERSION }}
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
- name: Install uv environment
|
|
67
|
+
uses: andgineer/uv-venv@v3
|
|
68
|
+
|
|
69
|
+
- name: Install dependencies
|
|
70
|
+
run: uv sync --frozen
|
|
71
|
+
|
|
72
|
+
- name: Build package
|
|
73
|
+
run: uv build
|
|
74
|
+
|
|
75
|
+
- name: Publish to PyPI
|
|
76
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
77
|
+
with:
|
|
78
|
+
user: ${{ secrets.PYPI_USERNAME }}
|
|
79
|
+
password: ${{ secrets.PYPI_PASSWORD }}
|
|
80
|
+
packages-dir: dist
|
|
81
|
+
|
|
82
|
+
- name: Create Release
|
|
83
|
+
id: create_release
|
|
84
|
+
uses: softprops/action-gh-release@v2
|
|
85
|
+
with:
|
|
86
|
+
name: Release ${{ env.RELEASE_VERSION }}
|
|
87
|
+
tag_name: ${{ env.RELEASE_VERSION }}
|
|
88
|
+
|
|
89
|
+
body: https://pypi.org/project/llmbroker/${{ env.RELEASE_VERSION }}/
|
|
90
|
+
draft: false
|
|
91
|
+
prerelease: false
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
|
|
2
|
+
# build docs from docstrings and markdown-file in folder docs
|
|
3
|
+
# publish them as github pages
|
|
4
|
+
#
|
|
5
|
+
#note for myself
|
|
6
|
+
#
|
|
7
|
+
# Do not forget to set git branch `gh-pages` as source for github pages.
|
|
8
|
+
# This branch auto-updated by `mkdocs gh-deploy`
|
|
9
|
+
#
|
|
10
|
+
name: static source code checks
|
|
11
|
+
on:
|
|
12
|
+
push:
|
|
13
|
+
branches: [ master, main ]
|
|
14
|
+
pull_request:
|
|
15
|
+
branches: [ master, main ]
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
static:
|
|
19
|
+
env:
|
|
20
|
+
PRIMARY_PYTHON_VERSION: '3.13'
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
steps:
|
|
23
|
+
- uses: actions/checkout@v4
|
|
24
|
+
- uses: actions/setup-python@v5
|
|
25
|
+
with:
|
|
26
|
+
python-version: ${{ env.PRIMARY_PYTHON_VERSION }}
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
- name: Install uv environment
|
|
30
|
+
uses: andgineer/uv-venv@v3
|
|
31
|
+
|
|
32
|
+
- name: Install dependencies
|
|
33
|
+
run: uv sync --frozen
|
|
34
|
+
- run: pre-commit run --verbose --all-files
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
exclude: |
|
|
2
|
+
(?x)(
|
|
3
|
+
.venv/|
|
|
4
|
+
tasks.py|
|
|
5
|
+
resources/
|
|
6
|
+
)
|
|
7
|
+
repos:
|
|
8
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
9
|
+
rev: v6.0.0
|
|
10
|
+
hooks:
|
|
11
|
+
- id: check-yaml
|
|
12
|
+
- id: end-of-file-fixer
|
|
13
|
+
exclude_types: [ python ]
|
|
14
|
+
- id: trailing-whitespace
|
|
15
|
+
exclude_types: [ python ]
|
|
16
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
17
|
+
rev: v0.15.13
|
|
18
|
+
hooks:
|
|
19
|
+
- id: ruff
|
|
20
|
+
exclude: ^tests/
|
|
21
|
+
args: [
|
|
22
|
+
--fix,
|
|
23
|
+
--line-length=100,
|
|
24
|
+
--select=PL, # All Pylint rules
|
|
25
|
+
--select=A001, # Shadowing Python builtins
|
|
26
|
+
--select=ARG, # Unused function arguments
|
|
27
|
+
--select=B, # Bugbear rules (B002,B006,etc)
|
|
28
|
+
--select=BLE, # Blind except
|
|
29
|
+
--select=C, # Complexity
|
|
30
|
+
--select=COM, # Comma placement
|
|
31
|
+
--select=E, # pycodestyle errors
|
|
32
|
+
--select=F, # Pyflakes
|
|
33
|
+
--select=G, # Logging format
|
|
34
|
+
--select=I, # Import ordering
|
|
35
|
+
--select=ISC, # Implicit string concatenation
|
|
36
|
+
--select=N, # Naming
|
|
37
|
+
--select=PIE, # Misc rules
|
|
38
|
+
--select=Q, # Quotes
|
|
39
|
+
--select=RET, # Return statement
|
|
40
|
+
--select=S, # Security
|
|
41
|
+
--select=SIM, # Code simplification
|
|
42
|
+
--select=SLF, # Private member access
|
|
43
|
+
--select=TID, # Tidy imports
|
|
44
|
+
--select=TRY, # Exception handling
|
|
45
|
+
--select=UP, # Upgrade syntax
|
|
46
|
+
--select=W, # Warnings
|
|
47
|
+
'--ignore=B019,S101,G004,TRY003,TRY300,TRY301,TRY400' # Ignore docstring and `assert` detection
|
|
48
|
+
]
|
|
49
|
+
- id: ruff
|
|
50
|
+
name: ruff-format-tests
|
|
51
|
+
files: ^tests/
|
|
52
|
+
args: [
|
|
53
|
+
--fix-only,
|
|
54
|
+
--line-length=100
|
|
55
|
+
]
|
|
56
|
+
- id: ruff-format
|
|
57
|
+
args: [
|
|
58
|
+
--line-length=100
|
|
59
|
+
]
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
- repo: https://github.com/facebook/pyrefly-pre-commit
|
|
64
|
+
rev: 1.0.0
|
|
65
|
+
hooks:
|
|
66
|
+
- id: pyrefly-check
|
|
67
|
+
name: pyrefly check
|
|
68
|
+
language: system
|
|
69
|
+
args: [
|
|
70
|
+
# "--ignore=missing-import",
|
|
71
|
+
# "--ignore=missing-source-for-stubs",
|
|
72
|
+
"--project-excludes=tests",
|
|
73
|
+
"--python-interpreter-path=.venv/bin/python"
|
|
74
|
+
]
|
llmbroker-0.0.2/LICENSE
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Copyright (c) 2026 Andrey Sorokin (andrey@sorokin.engineer)
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
4
|
+
this software and associated documentation files (the “Software”), to deal in
|
|
5
|
+
the Software without restriction, including without limitation the rights to use,
|
|
6
|
+
copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
|
7
|
+
Software, and to permit persons to whom the Software is furnished to do so,
|
|
8
|
+
subject to the following conditions:
|
|
9
|
+
|
|
10
|
+
The above copyright notice and this permission notice shall be included in all
|
|
11
|
+
copies or substantial portions of the Software.
|
|
12
|
+
|
|
13
|
+
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND,
|
|
14
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
15
|
+
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
16
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
17
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
18
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
19
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
20
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
llmbroker-0.0.2/PKG-INFO
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: llmbroker
|
|
3
|
+
Version: 0.0.2
|
|
4
|
+
Project-URL: Homepage, https://andgineer.github.io/llmbroker/
|
|
5
|
+
Project-URL: Documentation, https://andgineer.github.io/llmbroker/
|
|
6
|
+
Author-email: Andrey Sorokin <andrey@sorokin.engineer>
|
|
7
|
+
License: Copyright (c) 2026 Andrey Sorokin (andrey@sorokin.engineer)
|
|
8
|
+
|
|
9
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
10
|
+
this software and associated documentation files (the “Software”), to deal in
|
|
11
|
+
the Software without restriction, including without limitation the rights to use,
|
|
12
|
+
copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
|
13
|
+
Software, and to permit persons to whom the Software is furnished to do so,
|
|
14
|
+
subject to the following conditions:
|
|
15
|
+
|
|
16
|
+
The above copyright notice and this permission notice shall be included in all
|
|
17
|
+
copies or substantial portions of the Software.
|
|
18
|
+
|
|
19
|
+
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND,
|
|
20
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
21
|
+
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
22
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
23
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
24
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
25
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
26
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
|
27
|
+
License-File: LICENSE
|
|
28
|
+
Keywords: one,two
|
|
29
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
30
|
+
Classifier: Operating System :: OS Independent
|
|
31
|
+
Classifier: Programming Language :: Python :: 3
|
|
32
|
+
Requires-Python: >=3.12
|
|
33
|
+
Requires-Dist: click>=8.2.0
|
|
34
|
+
Requires-Dist: rich-click>=1.8.8
|
|
35
|
+
Description-Content-Type: text/markdown
|
|
36
|
+
|
|
37
|
+
[](https://github.com/andgineer/llmbroker/actions)
|
|
38
|
+
[](https://htmlpreview.github.io/?https://github.com/andgineer/llmbroker/blob/python-coverage-comment-action-data/htmlcov/index.html)
|
|
39
|
+
# llmbroker
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
# Documentation
|
|
44
|
+
|
|
45
|
+
[llmbroker](https://andgineer.github.io/llmbroker/)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
# Developers
|
|
50
|
+
|
|
51
|
+
Do not forget to run `. ./activate.sh`.
|
|
52
|
+
|
|
53
|
+
For work it need [uv](https://github.com/astral-sh/uv) installed.
|
|
54
|
+
|
|
55
|
+
Use [pre-commit](https://pre-commit.com/#install) hooks for code quality:
|
|
56
|
+
|
|
57
|
+
pre-commit install
|
|
58
|
+
|
|
59
|
+
## Allure test report
|
|
60
|
+
|
|
61
|
+
* [Allure report](https://andgineer.github.io/llmbroker/builds/tests/)
|
|
62
|
+
|
|
63
|
+
# Scripts
|
|
64
|
+
Install [invoke](https://docs.pyinvoke.org/en/stable/) preferably with [uv tool](https://docs.astral.sh/uv/):
|
|
65
|
+
|
|
66
|
+
uv tool install invoke
|
|
67
|
+
|
|
68
|
+
For a list of available scripts run:
|
|
69
|
+
|
|
70
|
+
invoke --list
|
|
71
|
+
|
|
72
|
+
For more information about a script run:
|
|
73
|
+
|
|
74
|
+
invoke <script> --help
|
|
75
|
+
|
|
76
|
+
## Coverage report
|
|
77
|
+
* [Codecov](https://app.codecov.io/gh/andgineer/llmbroker/tree/main/src%2Fllmbroker)
|
|
78
|
+
* [Coveralls](https://coveralls.io/github/andgineer/llmbroker)
|
|
79
|
+
|
|
80
|
+
> Created with cookiecutter using [template](https://github.com/andgineer/cookiecutter-python-package)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
[](https://github.com/andgineer/llmbroker/actions)
|
|
2
|
+
[](https://htmlpreview.github.io/?https://github.com/andgineer/llmbroker/blob/python-coverage-comment-action-data/htmlcov/index.html)
|
|
3
|
+
# llmbroker
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
# Documentation
|
|
8
|
+
|
|
9
|
+
[llmbroker](https://andgineer.github.io/llmbroker/)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
# Developers
|
|
14
|
+
|
|
15
|
+
Do not forget to run `. ./activate.sh`.
|
|
16
|
+
|
|
17
|
+
For work it need [uv](https://github.com/astral-sh/uv) installed.
|
|
18
|
+
|
|
19
|
+
Use [pre-commit](https://pre-commit.com/#install) hooks for code quality:
|
|
20
|
+
|
|
21
|
+
pre-commit install
|
|
22
|
+
|
|
23
|
+
## Allure test report
|
|
24
|
+
|
|
25
|
+
* [Allure report](https://andgineer.github.io/llmbroker/builds/tests/)
|
|
26
|
+
|
|
27
|
+
# Scripts
|
|
28
|
+
Install [invoke](https://docs.pyinvoke.org/en/stable/) preferably with [uv tool](https://docs.astral.sh/uv/):
|
|
29
|
+
|
|
30
|
+
uv tool install invoke
|
|
31
|
+
|
|
32
|
+
For a list of available scripts run:
|
|
33
|
+
|
|
34
|
+
invoke --list
|
|
35
|
+
|
|
36
|
+
For more information about a script run:
|
|
37
|
+
|
|
38
|
+
invoke <script> --help
|
|
39
|
+
|
|
40
|
+
## Coverage report
|
|
41
|
+
* [Codecov](https://app.codecov.io/gh/andgineer/llmbroker/tree/main/src%2Fllmbroker)
|
|
42
|
+
* [Coveralls](https://coveralls.io/github/andgineer/llmbroker)
|
|
43
|
+
|
|
44
|
+
> Created with cookiecutter using [template](https://github.com/andgineer/cookiecutter-python-package)
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# "Set-ups or/and activates development environment"
|
|
4
|
+
#
|
|
5
|
+
|
|
6
|
+
VENV_FOLDER=".venv"
|
|
7
|
+
|
|
8
|
+
PRIMARY_PYTHON_VERSION="3.13" # sync with .github/workflows/docs.yml&static.yml
|
|
9
|
+
|
|
10
|
+
RED='\033[1;31m'
|
|
11
|
+
GREEN='\033[1;32m'
|
|
12
|
+
CYAN='\033[1;36m'
|
|
13
|
+
NC='\033[0m' # No Color
|
|
14
|
+
|
|
15
|
+
if ! (return 0 2>/dev/null) ; then
|
|
16
|
+
# If return is used in the top-level scope of a non-sourced script,
|
|
17
|
+
# an error message is emitted, and the exit code is set to 1
|
|
18
|
+
echo
|
|
19
|
+
echo -e $RED"This script should be sourced like"$NC
|
|
20
|
+
echo " . ./activate.sh"
|
|
21
|
+
echo
|
|
22
|
+
exit 1
|
|
23
|
+
fi
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
if [[ ! -d ${VENV_FOLDER} ]] ; then
|
|
27
|
+
unset CONDA_PREFIX # if conda is installed, it will mess with the virtual env
|
|
28
|
+
|
|
29
|
+
echo -e $CYAN"Creating virtual environment for python in ${VENV_FOLDER}"$NC
|
|
30
|
+
START_TIME=$(date +%s)
|
|
31
|
+
|
|
32
|
+
# Check if the required Python version is installed
|
|
33
|
+
if ! command -v python${PRIMARY_PYTHON_VERSION} &> /dev/null; then
|
|
34
|
+
echo -e $RED"Error: Python ${PRIMARY_PYTHON_VERSION} is not installed."$NC
|
|
35
|
+
echo -e $YELLOW"Please install Python ${PRIMARY_PYTHON_VERSION} before proceeding."$NC
|
|
36
|
+
echo -e $YELLOW"You can download it from https://www.python.org/downloads/"$NC
|
|
37
|
+
return 1
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
if command -v uv &> /dev/null; then
|
|
41
|
+
if uv venv ${VENV_FOLDER} --python=python${PRIMARY_PYTHON_VERSION}; then
|
|
42
|
+
|
|
43
|
+
. ${VENV_FOLDER}/bin/activate
|
|
44
|
+
uv sync --frozen
|
|
45
|
+
END_TIME=$(date +%s)
|
|
46
|
+
echo "Environment created in $((END_TIME - $START_TIME)) seconds"
|
|
47
|
+
else
|
|
48
|
+
echo -e $RED"Error creating virtual environment. Please check the output above for more details."$NC
|
|
49
|
+
return 1
|
|
50
|
+
fi
|
|
51
|
+
else
|
|
52
|
+
|
|
53
|
+
echo -e $RED"Error: Astral's UV is not installed."$NC
|
|
54
|
+
echo -e $YELLOW"Please install UV from https://github.com/astral-sh/uv before proceeding."$NC
|
|
55
|
+
|
|
56
|
+
return 1
|
|
57
|
+
fi
|
|
58
|
+
else
|
|
59
|
+
echo -e $CYAN"Activating virtual environment ..."$NC
|
|
60
|
+
. ${VENV_FOLDER}/bin/activate
|
|
61
|
+
fi
|
llmbroker-0.0.2/build.sh
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#! /usr/bin/env bash
|
|
2
|
+
# Builds dev version of the container(s)
|
|
3
|
+
# Pass all args to docker compose
|
|
4
|
+
#
|
|
5
|
+
# Examples:
|
|
6
|
+
# build.sh --no-cache
|
|
7
|
+
|
|
8
|
+
cleanup() {
|
|
9
|
+
# Function to clean up the .setup-scripts folder
|
|
10
|
+
rm -rf .setup-scripts
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
# Trap signals and execute the cleanup function
|
|
14
|
+
trap cleanup EXIT INT TERM ERR
|
|
15
|
+
cp -r ../../docker-scripts .setup-scripts
|
|
16
|
+
./compose.sh \
|
|
17
|
+
build \
|
|
18
|
+
"$@"
|
|
19
|
+
|
|
20
|
+
# Cleanup the .setup-scripts folder (redundant, but ensures cleanup)
|
|
21
|
+
cleanup
|
|
Binary file
|