codex-lb 0.1.2__tar.gz → 0.1.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {codex_lb-0.1.2 → codex_lb-0.1.3}/.github/release-please-config.json +1 -2
- codex_lb-0.1.3/.github/release-please-manifest.json +3 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/.github/workflows/release-please.yml +1 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/.github/workflows/release.yml +19 -7
- {codex_lb-0.1.2 → codex_lb-0.1.3}/CHANGELOG.md +7 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/PKG-INFO +3 -3
- {codex_lb-0.1.2 → codex_lb-0.1.3}/README.md +2 -2
- {codex_lb-0.1.2 → codex_lb-0.1.3}/pyproject.toml +1 -1
- codex_lb-0.1.2/.github/release-please-manifest.json +0 -3
- {codex_lb-0.1.2 → codex_lb-0.1.3}/.dockerignore +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/.env.example +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/.github/workflows/ci.yml +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/.gitignore +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/.pre-commit-config.yaml +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/AGENTS.md +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/Dockerfile +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/LICENSE +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/__init__.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/cli.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/__init__.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/auth/__init__.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/auth/models.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/auth/refresh.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/balancer/__init__.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/balancer/logic.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/balancer/types.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/clients/__init__.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/clients/http.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/clients/oauth.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/clients/proxy.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/clients/usage.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/config/__init__.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/config/settings.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/crypto.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/errors.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/openai/__init__.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/openai/models.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/openai/parsing.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/openai/requests.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/types.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/usage/__init__.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/usage/logs.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/usage/models.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/usage/pricing.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/usage/types.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/utils/__init__.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/utils/request_id.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/utils/retry.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/utils/sse.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/utils/time.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/db/__init__.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/db/models.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/db/session.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/dependencies.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/main.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/__init__.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/accounts/__init__.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/accounts/api.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/accounts/repository.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/accounts/schemas.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/accounts/service.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/health/__init__.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/health/api.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/oauth/__init__.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/oauth/api.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/oauth/schemas.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/oauth/service.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/oauth/templates/oauth_success.html +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/proxy/__init__.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/proxy/api.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/proxy/auth_manager.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/proxy/load_balancer.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/proxy/schemas.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/proxy/service.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/proxy/types.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/proxy/usage_updater.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/request_logs/__init__.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/request_logs/api.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/request_logs/repository.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/request_logs/schemas.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/request_logs/service.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/shared/__init__.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/shared/schemas.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/usage/__init__.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/usage/api.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/usage/repository.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/usage/schemas.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/usage/service.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/static/7.css +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/static/index.css +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/static/index.html +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/app/static/index.js +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/docker-compose.yml +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/docs/screenshots/accounts.jpeg +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/docs/screenshots/dashboard.jpeg +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/__init__.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/conftest.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/integration/test_accounts_api.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/integration/test_accounts_api_extended.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/integration/test_codex_usage_api.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/integration/test_db_models.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/integration/test_health_and_errors.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/integration/test_load_balancer_integration.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/integration/test_oauth_flow.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/integration/test_proxy_api_extended.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/integration/test_proxy_compact.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/integration/test_proxy_responses.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/integration/test_repositories.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/integration/test_request_logs_api.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/integration/test_request_logs_filters.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/integration/test_usage_api.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/integration/test_usage_summary.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/unit/test_auth.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/unit/test_auth_refresh.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/unit/test_load_balancer.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/unit/test_oauth_client.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/unit/test_pricing.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/unit/test_proxy_utils.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/unit/test_retry.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/unit/test_sse.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/unit/test_usage.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/unit/test_usage_client.py +0 -0
- {codex_lb-0.1.2 → codex_lb-0.1.3}/uv.lock +0 -0
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
name: Release
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
- "v*.*.*"
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
7
6
|
workflow_dispatch:
|
|
7
|
+
inputs:
|
|
8
|
+
tag:
|
|
9
|
+
description: "Release tag (e.g. v0.1.2)"
|
|
10
|
+
required: true
|
|
8
11
|
|
|
9
12
|
concurrency:
|
|
10
13
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
11
14
|
cancel-in-progress: true
|
|
12
15
|
|
|
16
|
+
env:
|
|
17
|
+
RELEASE_TAG: ${{ github.event.release.tag_name || inputs.tag }}
|
|
18
|
+
|
|
13
19
|
jobs:
|
|
14
20
|
build:
|
|
15
21
|
name: Build (sdist + wheel)
|
|
@@ -20,6 +26,7 @@ jobs:
|
|
|
20
26
|
uses: actions/checkout@v4
|
|
21
27
|
with:
|
|
22
28
|
fetch-depth: 0
|
|
29
|
+
ref: ${{ env.RELEASE_TAG }}
|
|
23
30
|
|
|
24
31
|
- name: Set up uv
|
|
25
32
|
uses: astral-sh/setup-uv@v5
|
|
@@ -40,8 +47,10 @@ jobs:
|
|
|
40
47
|
except Exception: # pragma: no cover
|
|
41
48
|
import tomli as tomllib
|
|
42
49
|
|
|
43
|
-
|
|
44
|
-
|
|
50
|
+
tag = os.environ.get("RELEASE_TAG", "")
|
|
51
|
+
if not tag:
|
|
52
|
+
print("Missing RELEASE_TAG")
|
|
53
|
+
sys.exit(1)
|
|
45
54
|
m = re.fullmatch(r"v(\d+\.\d+\.\d+)", tag)
|
|
46
55
|
if not m:
|
|
47
56
|
print(f"Invalid tag format: {tag!r}")
|
|
@@ -105,6 +114,8 @@ jobs:
|
|
|
105
114
|
steps:
|
|
106
115
|
- name: Checkout repository
|
|
107
116
|
uses: actions/checkout@v4
|
|
117
|
+
with:
|
|
118
|
+
ref: ${{ env.RELEASE_TAG }}
|
|
108
119
|
|
|
109
120
|
- name: Set up Docker Buildx
|
|
110
121
|
uses: docker/setup-buildx-action@v3
|
|
@@ -151,6 +162,7 @@ jobs:
|
|
|
151
162
|
uses: actions/checkout@v4
|
|
152
163
|
with:
|
|
153
164
|
fetch-depth: 0
|
|
165
|
+
ref: ${{ env.RELEASE_TAG }}
|
|
154
166
|
|
|
155
167
|
- name: Download dist artifacts
|
|
156
168
|
uses: actions/download-artifact@v4
|
|
@@ -163,7 +175,7 @@ jobs:
|
|
|
163
175
|
shell: bash
|
|
164
176
|
run: |
|
|
165
177
|
set -euo pipefail
|
|
166
|
-
TAG_NAME="${
|
|
178
|
+
TAG_NAME="${RELEASE_TAG}"
|
|
167
179
|
TAG_VERSION="${TAG_NAME#v}"
|
|
168
180
|
RELEASE_DATE="$(date -u +%Y-%m-%d)"
|
|
169
181
|
|
|
@@ -204,7 +216,7 @@ jobs:
|
|
|
204
216
|
echo
|
|
205
217
|
echo "### Artifacts"
|
|
206
218
|
if ls dist >/dev/null 2>&1; then
|
|
207
|
-
ls -1 dist | sed 's
|
|
219
|
+
ls -1 dist | sed 's|^|- dist/|'
|
|
208
220
|
else
|
|
209
221
|
echo "- dist/ (not available)"
|
|
210
222
|
fi
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.1.3](https://github.com/Soju06/codex-lb/compare/v0.1.2...v0.1.3) (2026-01-12)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Documentation
|
|
7
|
+
|
|
8
|
+
* use absolute image URLs for PyPI ([5fa65a5](https://github.com/Soju06/codex-lb/commit/5fa65a572980f356738f49be3adf2c62fdc38466))
|
|
9
|
+
|
|
3
10
|
## [0.1.2](https://github.com/Soju06/codex-lb/compare/v0.1.1...v0.1.2) (2026-01-12)
|
|
4
11
|
|
|
5
12
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codex-lb
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.3
|
|
4
4
|
Summary: Codex load balancer and proxy for ChatGPT accounts with usage dashboard
|
|
5
5
|
Author-email: Soju06 <qlskssk@gmail.com>
|
|
6
6
|
Maintainer-email: Soju06 <qlskssk@gmail.com>
|
|
@@ -56,7 +56,7 @@ Description-Content-Type: text/markdown
|
|
|
56
56
|
Load balancer for ChatGPT accounts. Pool multiple accounts, track usage, view everything in a dashboard.
|
|
57
57
|
|
|
58
58
|
<p align="center">
|
|
59
|
-
<img src="docs/screenshots/dashboard.jpeg" alt="Codex Load Balancer dashboard" width="100%">
|
|
59
|
+
<img src="https://raw.githubusercontent.com/Soju06/codex-lb/main/docs/screenshots/dashboard.jpeg" alt="Codex Load Balancer dashboard" width="100%">
|
|
60
60
|
</p>
|
|
61
61
|
|
|
62
62
|
## Quick Start
|
|
@@ -80,7 +80,7 @@ Open [localhost:2455](http://localhost:2455) → Add account → Done.
|
|
|
80
80
|
|
|
81
81
|
## Accounts view
|
|
82
82
|
|
|
83
|
-

|
|
83
|
+

|
|
84
84
|
|
|
85
85
|
## Codex CLI & Extension Setup
|
|
86
86
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Load balancer for ChatGPT accounts. Pool multiple accounts, track usage, view everything in a dashboard.
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
6
|
-
<img src="docs/screenshots/dashboard.jpeg" alt="Codex Load Balancer dashboard" width="100%">
|
|
6
|
+
<img src="https://raw.githubusercontent.com/Soju06/codex-lb/main/docs/screenshots/dashboard.jpeg" alt="Codex Load Balancer dashboard" width="100%">
|
|
7
7
|
</p>
|
|
8
8
|
|
|
9
9
|
## Quick Start
|
|
@@ -27,7 +27,7 @@ Open [localhost:2455](http://localhost:2455) → Add account → Done.
|
|
|
27
27
|
|
|
28
28
|
## Accounts view
|
|
29
29
|
|
|
30
|
-

|
|
30
|
+

|
|
31
31
|
|
|
32
32
|
## Codex CLI & Extension Setup
|
|
33
33
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|