From 304f2e23940f085c10a4291276ba8922995248ab Mon Sep 17 00:00:00 2001 From: leehk Date: Fri, 11 Apr 2025 22:43:29 +0800 Subject: [PATCH 01/45] update for more memory --- .github/workflows/develop.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index f2669d0..86ddf8e 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -67,13 +67,15 @@ jobs: docker run \ -d \ --name backend \ + --memory=4g \ + --cpus=2 \ -e PORT=8765 \ -e ENVIRONMENT=dev \ -e TESTING=0 \ -p 8004:8765 \ ${{ env.IMAGE }}:latest - # - name: Pytest - # run: docker exec backend pipenv run python -m pytest tests --disable-warnings --maxfail=5 + - name: Pytest + run: docker exec backend pipenv run python -m pytest tests --disable-warnings --maxfail=5 # - name: Flake8 # run: docker exec backend pipenv run python -m flake8 . # - name: Black From 151b97a0010aa9c855490dee14b02e01219b1cb3 Mon Sep 17 00:00:00 2001 From: leehk Date: Fri, 11 Apr 2025 22:48:26 +0800 Subject: [PATCH 02/45] 6g --- .github/workflows/develop.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index 86ddf8e..6502cac 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -67,7 +67,7 @@ jobs: docker run \ -d \ --name backend \ - --memory=4g \ + --memory=6g \ --cpus=2 \ -e PORT=8765 \ -e ENVIRONMENT=dev \ From efea8d7028cb715a3555111dc219221369a387a5 Mon Sep 17 00:00:00 2001 From: leehk Date: Fri, 11 Apr 2025 22:59:49 +0800 Subject: [PATCH 03/45] change to Ubuntu-latest --- .github/workflows/develop.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index 6502cac..60e0dcb 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -12,7 +12,7 @@ jobs: build: name: Build Docker Image - runs-on: self-hosted + runs-on: Ubuntu-latest permissions: contents: read packages: write @@ -41,7 +41,7 @@ jobs: test: name: Test Docker Image - runs-on: self-hosted + runs-on: Ubuntu-latest needs: build steps: - name: Checkout @@ -67,8 +67,6 @@ jobs: docker run \ -d \ --name backend \ - --memory=6g \ - --cpus=2 \ -e PORT=8765 \ -e ENVIRONMENT=dev \ -e TESTING=0 \ From efece059f0a436e172824f38ab75948a2df51d7f Mon Sep 17 00:00:00 2001 From: leehk Date: Fri, 11 Apr 2025 23:27:56 +0800 Subject: [PATCH 04/45] upczgd --- app/backend/Dockerfile.prod | 2 +- app/frontend/package-lock.json | 16 ---------------- app/frontend/package.json | 4 ---- app/frontend/public/vite.svg | 1 - app/frontend/src/App.tsx | 2 +- app/frontend/vite.config.ts | 12 +++++------- 6 files changed, 7 insertions(+), 30 deletions(-) delete mode 100644 app/frontend/public/vite.svg diff --git a/app/backend/Dockerfile.prod b/app/backend/Dockerfile.prod index 824234e..c58f66a 100644 --- a/app/backend/Dockerfile.prod +++ b/app/backend/Dockerfile.prod @@ -68,7 +68,7 @@ COPY --from=builder /usr/src/app/wheels /wheels COPY --from=builder /usr/src/app/Pipfile . RUN pip install --upgrade pip setuptools wheel -i https://pypi.tuna.tsinghua.edu.cn/simple RUN pip install --no-cache /wheels/* -RUN pipenv install --deploy --dev +# RUN pipenv install --deploy --dev RUN pipenv run pip install "uvicorn[standard]==0.26.0" # add app diff --git a/app/frontend/package-lock.json b/app/frontend/package-lock.json index 913bb1f..a73ad80 100644 --- a/app/frontend/package-lock.json +++ b/app/frontend/package-lock.json @@ -32,9 +32,6 @@ "typescript-eslint": "^8.24.1", "vite": "^6.2.0", "vitest": "^3.1.1" - }, - "optionalDependencies": { - "@rollup/rollup-linux-x64-gnu": "4.9.5" } }, "node_modules/@adobe/css-tools": { @@ -1487,19 +1484,6 @@ "linux" ] }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.5.tgz", - "integrity": "sha512-Dq1bqBdLaZ1Gb/l2e5/+o3B18+8TI9ANlA1SkejZqDgdU/jK/ThYaMPMJpVMMXy2uRHvGKbkz9vheVGdq3cJfA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, "node_modules/@rollup/rollup-linux-x64-musl": { "version": "4.39.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.39.0.tgz", diff --git a/app/frontend/package.json b/app/frontend/package.json index 63ea826..497b60f 100644 --- a/app/frontend/package.json +++ b/app/frontend/package.json @@ -36,9 +36,5 @@ "typescript-eslint": "^8.24.1", "vite": "^6.2.0", "vitest": "^3.1.1" - }, - "optionalDependencies": { - "@rollup/rollup-linux-x64-musl": "^3.28.0", - "@rollup/rollup-linux-x64-gnu": "4.9.5" } } \ No newline at end of file diff --git a/app/frontend/public/vite.svg b/app/frontend/public/vite.svg deleted file mode 100644 index e7b8dfb..0000000 --- a/app/frontend/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/app/frontend/src/App.tsx b/app/frontend/src/App.tsx index 6f390b9..662b0c4 100644 --- a/app/frontend/src/App.tsx +++ b/app/frontend/src/App.tsx @@ -16,7 +16,7 @@ const App: React.FC = () => { useEffect(() => { mounted.current = true; - const ws = new WebSocket(`ws://${BASE_DOMAIN_NAME}:8004/ws`); + const ws = new WebSocket(`ws://${BASE_DOMAIN_NAME}:8000/ws`); setSocket(ws); ws.onopen = () => { console.log('WebSocket connection opened'); diff --git a/app/frontend/vite.config.ts b/app/frontend/vite.config.ts index d767938..399a019 100644 --- a/app/frontend/vite.config.ts +++ b/app/frontend/vite.config.ts @@ -4,11 +4,9 @@ import react from '@vitejs/plugin-react' // https://vite.dev/config/ export default defineConfig({ plugins: [react()], + test: { + globals: true, + environment: "jsdom", + setupFiles: "./tests/setup.ts", + }, }); - -// https://vitest.dev/config/ -export const test = { - globals: true, - environment: "jsdom", - setupFiles: "./tests/setup.ts", -}; From 5f03c12c0ccf6ec8acc46af4b664ceb87bab3f8e Mon Sep 17 00:00:00 2001 From: leehk Date: Fri, 11 Apr 2025 23:44:53 +0800 Subject: [PATCH 05/45] try --- app/backend/Dockerfile.prod | 8 +++----- app/backend/main.py | 2 +- app/docker-compose.yml | 28 ++++++++++++++-------------- app/frontend/src/App.tsx | 2 +- 4 files changed, 19 insertions(+), 21 deletions(-) diff --git a/app/backend/Dockerfile.prod b/app/backend/Dockerfile.prod index c58f66a..0d69af0 100644 --- a/app/backend/Dockerfile.prod +++ b/app/backend/Dockerfile.prod @@ -20,8 +20,7 @@ RUN apt-get update \ # install python dependencies RUN pip install --upgrade pip setuptools wheel -i https://pypi.tuna.tsinghua.edu.cn/simple -RUN pip wheel --no-cache-dir --no-deps --wheel-dir /usr/src/app/wheels -i https://pypi.tuna.tsinghua.edu.cn/simple pipenv -RUN pip install --no-cache-dir --find-links=/usr/src/app/wheels pipenv +RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pipenv COPY ./Pipfile . RUN pipenv install --deploy --dev @@ -64,11 +63,10 @@ RUN apt-get update \ && apt-get clean # install python dependencies -COPY --from=builder /usr/src/app/wheels /wheels COPY --from=builder /usr/src/app/Pipfile . RUN pip install --upgrade pip setuptools wheel -i https://pypi.tuna.tsinghua.edu.cn/simple -RUN pip install --no-cache /wheels/* -# RUN pipenv install --deploy --dev +RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pipenv +RUN pipenv install --deploy --dev RUN pipenv run pip install "uvicorn[standard]==0.26.0" # add app diff --git a/app/backend/main.py b/app/backend/main.py index 3525d91..7ec349d 100644 --- a/app/backend/main.py +++ b/app/backend/main.py @@ -33,4 +33,4 @@ app.add_middleware( if __name__ == "__main__": - uvicorn.run("main:app", host="0.0.0.0", port=3100, reload=True) \ No newline at end of file + uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=True) \ No newline at end of file diff --git a/app/docker-compose.yml b/app/docker-compose.yml index 2246116..b378631 100644 --- a/app/docker-compose.yml +++ b/app/docker-compose.yml @@ -7,20 +7,20 @@ services: # volumes: # - ./llmops/src/rag_cot_evaluation/chroma_db:/app/llmops/src/rag_cot_evaluation/chroma_db - # backend: - # build: - # context: ./backend - # dockerfile: Dockerfile - # container_name: backend - # platform: linux/amd64 - # command: pipenv run uvicorn main:app --reload --workers 1 --host 0.0.0.0 --port 8000 - # volumes: - # - ./backend:/usr/src/app - # ports: - # - "8004:8000" - # environment: - # - ENVIRONMENT=dev - # - TESTING=0 + backend: + build: + context: ./backend + dockerfile: Dockerfile + container_name: backend + platform: linux/amd64 + command: pipenv run uvicorn main:app --reload --workers 1 --host 0.0.0.0 --port 8000 + volumes: + - ./backend:/usr/src/app + ports: + - "8000:8000" + environment: + - ENVIRONMENT=dev + - TESTING=0 frontend: build: diff --git a/app/frontend/src/App.tsx b/app/frontend/src/App.tsx index 662b0c4..5512af7 100644 --- a/app/frontend/src/App.tsx +++ b/app/frontend/src/App.tsx @@ -1,6 +1,6 @@ import React, { useState, useEffect, useRef } from 'react'; -const BASE_DOMAIN_NAME = process.env.REACT_APP_DOMAIN_NAME || 'localhost'; +const BASE_DOMAIN_NAME = import.meta.env.REACT_APP_DOMAIN_NAME || 'localhost'; interface Message { From dc2970da4470c245f53a01d3b2d1f9378d8f248e Mon Sep 17 00:00:00 2001 From: leehk Date: Fri, 11 Apr 2025 23:59:49 +0800 Subject: [PATCH 06/45] update --- .github/workflows/develop.yml | 10 ++++++++++ app/docker-compose.yml | 1 + 2 files changed, 11 insertions(+) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index 60e0dcb..183bdc7 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -17,6 +17,11 @@ jobs: contents: read packages: write steps: + - name: Free up disk space + run: | + sudo apt-get clean + sudo rm -rf /var/lib/apt/lists/* + docker system prune -af - name: Checkout uses: actions/checkout@v3 with: @@ -44,6 +49,11 @@ jobs: runs-on: Ubuntu-latest needs: build steps: + - name: Free up disk space + run: | + sudo apt-get clean + sudo rm -rf /var/lib/apt/lists/* + docker system prune -af - name: Checkout uses: actions/checkout@v3 with: diff --git a/app/docker-compose.yml b/app/docker-compose.yml index b378631..b09a14c 100644 --- a/app/docker-compose.yml +++ b/app/docker-compose.yml @@ -29,6 +29,7 @@ services: container_name: frontend volumes: - ./frontend:/usr/src/app + ports: - "3004:5173" # depends_on: From 186cb0274dfaae2951ae90349b613b1a6e31b835 Mon Sep 17 00:00:00 2001 From: leehk Date: Sat, 12 Apr 2025 00:52:28 +0800 Subject: [PATCH 07/45] update --- app/backend/Dockerfile.prod | 2 +- app/backend/Pipfile | 1 - app/backend/Pipfile.lock | 463 ++++----------------------------- app/docker-compose.yml | 8 +- app/frontend/package-lock.json | 405 ++++++++++++++++++---------- app/frontend/vite.config.ts | 5 + 6 files changed, 338 insertions(+), 546 deletions(-) diff --git a/app/backend/Dockerfile.prod b/app/backend/Dockerfile.prod index 0d69af0..8f70f74 100644 --- a/app/backend/Dockerfile.prod +++ b/app/backend/Dockerfile.prod @@ -3,7 +3,7 @@ ########### # pull official base image -FROM python:3.11-slim AS builder +FROM python:3.11-slim as builder # set working directory diff --git a/app/backend/Pipfile b/app/backend/Pipfile index 46c5de6..7e292f1 100644 --- a/app/backend/Pipfile +++ b/app/backend/Pipfile @@ -25,7 +25,6 @@ pytest-mock = "==3.10.0" flake8 = "==7.0.0" black = "==23.12.1" isort = "==5.13.2" -ipykernel = "*" [requires] python_version = "3.11" diff --git a/app/backend/Pipfile.lock b/app/backend/Pipfile.lock index 7b7772f..6c6d3b3 100644 --- a/app/backend/Pipfile.lock +++ b/app/backend/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "22c986576b1b18ff70ae1fefc20957d1758705ed23f84388376db2a6a478a99e" + "sha256": "a6778423552ff7c5442034df8bdbfa526ab8ccc841ccb5bb37c1afd3abb3f3be" }, "pipfile-spec": 6, "requires": { @@ -454,11 +454,11 @@ }, "httpcore": { "hashes": [ - "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c", - "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd" + "sha256:5254cf149bcb5f75e9d1b2b9f729ea4a4b883d1ad7379fc632b727cec23674be", + "sha256:86e94505ed24ea06514883fd44d2bc02d90e77e7979c8eb71b90f41d364a1bad" ], "markers": "python_version >= '3.8'", - "version": "==1.0.7" + "version": "==1.0.8" }, "httptools": { "hashes": [ @@ -739,11 +739,11 @@ }, "langsmith": { "hashes": [ - "sha256:4666595207131d7f8d83418e54dc86c05e28562e5c997633e7c33fc18f9aeb89", - "sha256:54ac8815514af52d9c801ad7970086693667e266bf1db90fc453c1759e8407cd" + "sha256:4588aad24623320cdf355f7594e583874c27e70460e6e6446a416ebb702b8cf7", + "sha256:80d591a4c62c14950ba497bb8b565ad9bd8d07e102b643916f0d2af1a7b2daaf" ], "markers": "python_version >= '3.9' and python_version < '4.0'", - "version": "==0.3.28" + "version": "==0.3.30" }, "markdown-it-py": { "hashes": [ @@ -1040,83 +1040,83 @@ }, "opentelemetry-api": { "hashes": [ - "sha256:137ad4b64215f02b3000a0292e077641c8611aab636414632a9b9068593b7e91", - "sha256:1511a3f470c9c8a32eeea68d4ea37835880c0eed09dd1a0187acc8b1301da0a1" + "sha256:15df743c765078611f376037b0d9111ec5c1febf2ec9440cdd919370faa1ce55", + "sha256:2623280c916f9b19cad0aa4280cb171265f19fd2909b0d47e4f06f7c83b02cb5" ], "markers": "python_version >= '3.8'", - "version": "==1.31.1" + "version": "==1.32.0" }, "opentelemetry-exporter-otlp-proto-common": { "hashes": [ - "sha256:7cadf89dbab12e217a33c5d757e67c76dd20ce173f8203e7370c4996f2e9efd8", - "sha256:c748e224c01f13073a2205397ba0e415dcd3be9a0f95101ba4aace5fc730e0da" + "sha256:277a63a18768b3b460d082a489f6f80d4ae2c1e6b185bb701c6bd4e91405e4bd", + "sha256:2bca672f2a279c4f517115e635c0cc1269d07b2982a36681c521f7e56179a222" ], "markers": "python_version >= '3.8'", - "version": "==1.31.1" + "version": "==1.32.0" }, "opentelemetry-exporter-otlp-proto-grpc": { "hashes": [ - "sha256:c7f66b4b333c52248dc89a6583506222c896c74824d5d2060b818ae55510939a", - "sha256:f4055ad2c9a2ea3ae00cbb927d6253233478b3b87888e197d34d095a62305fae" + "sha256:85b7c42bebe48ef55866793a3123ebf357dcaf629d961b27067025fd60104dbe", + "sha256:c069c5d5f429a46fb1001f38191730939f593789c847648e4cea26dc8b6018a8" ], "markers": "python_version >= '3.8'", - "version": "==1.31.1" + "version": "==1.32.0" }, "opentelemetry-instrumentation": { "hashes": [ - "sha256:739f3bfadbbeec04dd59297479e15660a53df93c131d907bb61052e3d3c1406f", - "sha256:8c0059c4379d77bbd8015c8d8476020efe873c123047ec069bb335e4b8717477" + "sha256:70600778fd567c9c5fbfca181378ae179c0dec3ff613171707d3d77c360ff105", + "sha256:f2c21d71a3cdf28c656e3d90d247ee7558fb9b0239b3d9e9190266499dbed9d2" ], "markers": "python_version >= '3.8'", - "version": "==0.52b1" + "version": "==0.53b0" }, "opentelemetry-instrumentation-asgi": { "hashes": [ - "sha256:a6dbce9cb5b2c2f45ce4817ad21f44c67fd328358ad3ab911eb46f0be67f82ec", - "sha256:f7179f477ed665ba21871972f979f21e8534edb971232e11920c8a22f4759236" + "sha256:a2e242e0633541150bf8e42ed983f8aeec94acb397bc67a3dbdb47933bfdc7f8", + "sha256:b82d7cecdd6a4239ee87e1c629bfd7dae208142ddbb24528d9a9274eb2bc4e44" ], "markers": "python_version >= '3.8'", - "version": "==0.52b1" + "version": "==0.53b0" }, "opentelemetry-instrumentation-fastapi": { "hashes": [ - "sha256:73c8804f053c5eb2fd2c948218bff9561f1ef65e89db326a6ab0b5bf829969f4", - "sha256:d26ab15dc49e041301d5c2571605b8f5c3a6ee4a85b60940338f56c120221e98" + "sha256:a901ded31595d6e64d35c92379c08d8314baffc8715653ac42349b6140c725ce", + "sha256:c29b7b3f5ca5aeb89436a605ac481467630bc761a241cc4258058ba00e6d40ed" ], "markers": "python_version >= '3.8'", - "version": "==0.52b1" + "version": "==0.53b0" }, "opentelemetry-proto": { "hashes": [ - "sha256:1398ffc6d850c2f1549ce355744e574c8cd7c1dba3eea900d630d52c41d07178", - "sha256:d93e9c2b444e63d1064fb50ae035bcb09e5822274f1683886970d2734208e790" + "sha256:f699269dc037e18fba05442580a8682c9fbd0f4c7f5addfed82c44be0c53c5ff", + "sha256:f8b70ae52f4ef8a4e4c0760e87c9071e07ece2618c080d4839bef44c0156cd44" ], "markers": "python_version >= '3.8'", - "version": "==1.31.1" + "version": "==1.32.0" }, "opentelemetry-sdk": { "hashes": [ - "sha256:882d021321f223e37afaca7b4e06c1d8bbc013f9e17ff48a7aa017460a8e7dae", - "sha256:c95f61e74b60769f8ff01ec6ffd3d29684743404603df34b20aa16a49dc8d903" + "sha256:5ff07fb371d1ab1189fa7047702e2e888b5403c5efcbb18083cae0d5aa5f58d2", + "sha256:ed252d035c22a15536c1f603ca089298daab60850fc2f5ddfa95d95cc1c043ea" ], "markers": "python_version >= '3.8'", - "version": "==1.31.1" + "version": "==1.32.0" }, "opentelemetry-semantic-conventions": { "hashes": [ - "sha256:72b42db327e29ca8bb1b91e8082514ddf3bbf33f32ec088feb09526ade4bc77e", - "sha256:7b3d226ecf7523c27499758a58b542b48a0ac8d12be03c0488ff8ec60c5bae5d" + "sha256:05b7908e1da62d72f9bf717ed25c72f566fe005a2dd260c61b11e025f2552cf6", + "sha256:561da89f766ab51615c0e72b12329e0a1bc16945dbd62c8646ffc74e36a1edff" ], "markers": "python_version >= '3.8'", - "version": "==0.52b1" + "version": "==0.53b0" }, "opentelemetry-util-http": { "hashes": [ - "sha256:6a6ab6bfa23fef96f4995233e874f67602adf9d224895981b4ab9d4dde23de78", - "sha256:c03c8c23f1b75fadf548faece7ead3aecd50761c5593a2b2831b48730eee5b31" + "sha256:521111872be0cdfd4346e15e9d4822aeeb8501b094c721ef49c26277b286084e", + "sha256:eca40d8cd1c1149081142c44756c0a2da0be306931339b839e1b436a9de101a4" ], "markers": "python_version >= '3.8'", - "version": "==0.52b1" + "version": "==0.53b0" }, "orjson": { "hashes": [ @@ -1287,10 +1287,10 @@ }, "posthog": { "hashes": [ - "sha256:1ac0305ab6c54a80c4a82c137231f17616bef007bbf474d1a529cda032d808eb", - "sha256:2b07d06670170ac2e21465dffa8d356722834cc877ab34e583da6e525c1037df" + "sha256:1b854b1d70b26d9add1fd3755b4f72acb565db32722cc5d076d9db799187753e", + "sha256:d4d1c13854cd5bc007bcc396d38dc8d047429709faf4c7bc2f5af246e2a3f76d" ], - "version": "==3.23.0" + "version": "==3.24.1" }, "protobuf": { "hashes": [ @@ -2151,11 +2151,11 @@ }, "transformers": { "hashes": [ - "sha256:206ea0b75dfde142ed7495b911da76579dce6ea249cc3695fdd29a544a9e007b", - "sha256:c7038e216afb2a3e9b00dd12d87ad5e3af4c30895f70b28e92f65459eded0161" + "sha256:5cb8259098b75ff4b5dd04533a318f7c4750d5307d9617e6d0593526432c404d", + "sha256:ed221c31581e97127cff5de775b05f05d19698b439d7d638ff445502a7f37331" ], "markers": "python_full_version >= '3.9.0'", - "version": "==4.51.1" + "version": "==4.51.2" }, "typer": { "hashes": [ @@ -2167,11 +2167,11 @@ }, "typing-extensions": { "hashes": [ - "sha256:4b6cf02909eb5495cfbc3f6e8fd49217e6cc7944e145cdda8caa3734777f9e69", - "sha256:98795af00fb9640edec5b8e31fc647597b4691f099ad75f469a2616be1a76dff" + "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c", + "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef" ], "markers": "python_version >= '3.8'", - "version": "==4.13.1" + "version": "==4.13.2" }, "typing-inspection": { "hashes": [ @@ -2183,11 +2183,11 @@ }, "urllib3": { "hashes": [ - "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", - "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d" + "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466", + "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813" ], "markers": "python_version >= '3.9'", - "version": "==2.3.0" + "version": "==2.4.0" }, "uvicorn": { "extras": [ @@ -2610,22 +2610,6 @@ "markers": "python_version >= '3.9'", "version": "==4.9.0" }, - "appnope": { - "hashes": [ - "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", - "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c" - ], - "markers": "python_version >= '3.6'", - "version": "==0.1.4" - }, - "asttokens": { - "hashes": [ - "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", - "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2" - ], - "markers": "python_version >= '3.8'", - "version": "==3.0.0" - }, "black": { "hashes": [ "sha256:0808494f2b2df923ffc5723ed3c7b096bd76341f6213989759287611e9837d50", @@ -2671,14 +2655,6 @@ "markers": "python_version >= '3.7'", "version": "==8.1.8" }, - "comm": { - "hashes": [ - "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e", - "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3" - ], - "markers": "python_version >= '3.8'", - "version": "==0.2.2" - }, "coverage": { "extras": [ "toml" @@ -2751,54 +2727,6 @@ "markers": "python_version >= '3.9'", "version": "==7.8.0" }, - "debugpy": { - "hashes": [ - "sha256:06859f68e817966723ffe046b896b1bd75c665996a77313370336ee9e1de3e90", - "sha256:2b8de94c5c78aa0d0ed79023eb27c7c56a64c68217d881bee2ffbcb13951d0c1", - "sha256:31abc9618be4edad0b3e3a85277bc9ab51a2d9f708ead0d99ffb5bb750e18503", - "sha256:32b6857f8263a969ce2ca098f228e5cc0604d277447ec05911a8c46cf3e7e307", - "sha256:3872ce5453b17837ef47fb9f3edc25085ff998ce63543f45ba7af41e7f7d370f", - "sha256:3dae443739c6b604802da9f3e09b0f45ddf1cf23c99161f3a1a8039f61a8bb89", - "sha256:46abe0b821cad751fc1fb9f860fb2e68d75e2c5d360986d0136cd1db8cad4428", - "sha256:4caca674206e97c85c034c1efab4483f33971d4e02e73081265ecb612af65377", - "sha256:5268ae7fdca75f526d04465931cb0bd24577477ff50e8bb03dab90983f4ebd02", - "sha256:62f9b4a861c256f37e163ada8cf5a81f4c8d5148fc17ee31fb46813bd658cdcc", - "sha256:63ca7670563c320503fea26ac688988d9d6b9c6a12abc8a8cf2e7dd8e5f6b6ea", - "sha256:6fab771639332bd8ceb769aacf454a30d14d7a964f2012bf9c4e04c60f16e85b", - "sha256:79ce4ed40966c4c1631d0131606b055a5a2f8e430e3f7bf8fd3744b09943e8e8", - "sha256:7d9a05efc6973b5aaf076d779cf3a6bbb1199e059a17738a2aa9d27a53bcc888", - "sha256:837e7bef95bdefba426ae38b9a94821ebdc5bea55627879cd48165c90b9e50ce", - "sha256:887d54276cefbe7290a754424b077e41efa405a3e07122d8897de54709dbe522", - "sha256:924464d87e7d905eb0d79fb70846558910e906d9ee309b60c4fe597a2e802590", - "sha256:a0bd87557f97bced5513a74088af0b84982b6ccb2e254b9312e29e8a5c4270eb", - "sha256:acf39a6e98630959763f9669feddee540745dfc45ad28dbc9bd1f9cd60639391", - "sha256:cb56c2db69fb8df3168bc857d7b7d2494fed295dfdbde9a45f27b4b152f37520", - "sha256:d4ba115cdd0e3a70942bd562adba9ec8c651fe69ddde2298a1be296fc331906f", - "sha256:dc7b77f5d32674686a5f06955e4b18c0e41fb5a605f5b33cf225790f114cfeec", - "sha256:ea869fe405880327497e6945c09365922c79d2a1eed4c3ae04d77ac7ae34b2b5", - "sha256:ed93c3155fc1f888ab2b43626182174e457fc31b7781cd1845629303790b8ad1", - "sha256:eee02b2ed52a563126c97bf04194af48f2fe1f68bb522a312b05935798e922ff", - "sha256:f14d2c4efa1809da125ca62df41050d9c7cd9cb9e380a2685d1e453c4d450ccb" - ], - "markers": "python_version >= '3.8'", - "version": "==1.8.13" - }, - "decorator": { - "hashes": [ - "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", - "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a" - ], - "markers": "python_version >= '3.8'", - "version": "==5.2.1" - }, - "executing": { - "hashes": [ - "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa", - "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755" - ], - "markers": "python_version >= '3.8'", - "version": "==2.2.0" - }, "flake8": { "hashes": [ "sha256:33f96621059e65eec474169085dc92bf26e7b2d47366b70be2f67ab80dc25132", @@ -2818,11 +2746,11 @@ }, "httpcore": { "hashes": [ - "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c", - "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd" + "sha256:5254cf149bcb5f75e9d1b2b9f729ea4a4b883d1ad7379fc632b727cec23674be", + "sha256:86e94505ed24ea06514883fd44d2bc02d90e77e7979c8eb71b90f41d364a1bad" ], "markers": "python_version >= '3.8'", - "version": "==1.0.7" + "version": "==1.0.8" }, "httpx": { "hashes": [ @@ -2848,31 +2776,6 @@ "markers": "python_version >= '3.8'", "version": "==2.1.0" }, - "ipykernel": { - "hashes": [ - "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5", - "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215" - ], - "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==6.29.5" - }, - "ipython": { - "hashes": [ - "sha256:2df07257ec2f84a6b346b8d83100bcf8fa501c6e01ab75cd3799b0bb253b3d2a", - "sha256:a47e13a5e05e02f3b8e1e7a0f9db372199fe8c3763532fe7a1e0379e4e135f16" - ], - "markers": "python_version >= '3.11'", - "version": "==9.1.0" - }, - "ipython-pygments-lexers": { - "hashes": [ - "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", - "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c" - ], - "markers": "python_version >= '3.8'", - "version": "==1.1.1" - }, "isort": { "hashes": [ "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109", @@ -2882,38 +2785,6 @@ "markers": "python_full_version >= '3.8.0'", "version": "==5.13.2" }, - "jedi": { - "hashes": [ - "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", - "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9" - ], - "markers": "python_version >= '3.6'", - "version": "==0.19.2" - }, - "jupyter-client": { - "hashes": [ - "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", - "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f" - ], - "markers": "python_version >= '3.8'", - "version": "==8.6.3" - }, - "jupyter-core": { - "hashes": [ - "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409", - "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9" - ], - "markers": "python_version >= '3.8'", - "version": "==5.7.2" - }, - "matplotlib-inline": { - "hashes": [ - "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", - "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca" - ], - "markers": "python_version >= '3.8'", - "version": "==0.1.7" - }, "mccabe": { "hashes": [ "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325", @@ -2930,14 +2801,6 @@ "markers": "python_version >= '3.5'", "version": "==1.0.0" }, - "nest-asyncio": { - "hashes": [ - "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", - "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c" - ], - "markers": "python_version >= '3.5'", - "version": "==1.6.0" - }, "packaging": { "hashes": [ "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", @@ -2946,14 +2809,6 @@ "markers": "python_version >= '3.8'", "version": "==24.2" }, - "parso": { - "hashes": [ - "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", - "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d" - ], - "markers": "python_version >= '3.6'", - "version": "==0.8.4" - }, "pathspec": { "hashes": [ "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", @@ -2962,14 +2817,6 @@ "markers": "python_version >= '3.8'", "version": "==0.12.1" }, - "pexpect": { - "hashes": [ - "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", - "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f" - ], - "markers": "sys_platform != 'win32' and sys_platform != 'emscripten'", - "version": "==4.9.0" - }, "platformdirs": { "hashes": [ "sha256:a03875334331946f13c549dbd8f4bac7a13a50a895a0eb1e8c6a8ace80d40a94", @@ -2986,44 +2833,6 @@ "markers": "python_version >= '3.8'", "version": "==1.5.0" }, - "prompt-toolkit": { - "hashes": [ - "sha256:544748f3860a2623ca5cd6d2795e7a14f3d0e1c3c9728359013f79877fc89bab", - "sha256:9b6427eb19e479d98acff65196a307c555eb567989e6d88ebbb1b509d9779198" - ], - "markers": "python_full_version >= '3.8.0'", - "version": "==3.0.50" - }, - "psutil": { - "hashes": [ - "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25", - "sha256:1e744154a6580bc968a0195fd25e80432d3afec619daf145b9e5ba16cc1d688e", - "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91", - "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da", - "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34", - "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553", - "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456", - "sha256:84df4eb63e16849689f76b1ffcb36db7b8de703d1bc1fe41773db487621b6c17", - "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993", - "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99" - ], - "markers": "python_version >= '3.6'", - "version": "==7.0.0" - }, - "ptyprocess": { - "hashes": [ - "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", - "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220" - ], - "version": "==0.7.0" - }, - "pure-eval": { - "hashes": [ - "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", - "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42" - ], - "version": "==0.2.3" - }, "pycodestyle": { "hashes": [ "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f", @@ -3040,14 +2849,6 @@ "markers": "python_version >= '3.8'", "version": "==3.2.0" }, - "pygments": { - "hashes": [ - "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", - "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c" - ], - "markers": "python_version >= '3.8'", - "version": "==2.19.1" - }, "pytest": { "hashes": [ "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280", @@ -3075,121 +2876,6 @@ "markers": "python_version >= '3.7'", "version": "==3.10.0" }, - "python-dateutil": { - "hashes": [ - "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", - "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", - "version": "==2.9.0.post0" - }, - "pyzmq": { - "hashes": [ - "sha256:0329bdf83e170ac133f44a233fc651f6ed66ef8e66693b5af7d54f45d1ef5918", - "sha256:056a97aab4064f526ecb32f4343917a4022a5d9efb6b9df990ff72e1879e40be", - "sha256:0a294026e28679a8dd64c922e59411cb586dad307661b4d8a5c49e7bbca37621", - "sha256:0a744ce209ecb557406fb928f3c8c55ce79b16c3eeb682da38ef5059a9af0848", - "sha256:1410c3a3705db68d11eb2424d75894d41cff2f64d948ffe245dd97a9debfebf4", - "sha256:14fc678b696bc42c14e2d7f86ac4e97889d5e6b94d366ebcb637a768d2ad01af", - "sha256:1c0b5fceadbab461578daf8d1dcc918ebe7ddd2952f748cf30c7cf2de5d51101", - "sha256:1edb0385c7f025045d6e0f759d4d3afe43c17a3d898914ec6582e6f464203c08", - "sha256:22c8dd677274af8dfb1efd05006d6f68fb2f054b17066e308ae20cb3f61028cf", - "sha256:237b283044934d26f1eeff4075f751b05d2f3ed42a257fc44386d00df6a270cf", - "sha256:23ecc9d241004c10e8b4f49d12ac064cd7000e1643343944a10df98e57bc544b", - "sha256:26a2a7451606b87f67cdeca2c2789d86f605da08b4bd616b1a9981605ca3a364", - "sha256:28e2b0ff5ba4b3dd11062d905682bad33385cfa3cc03e81abd7f0822263e6637", - "sha256:2ea81823840ef8c56e5d2f9918e4d571236294fea4d1842b302aebffb9e40997", - "sha256:2f23c750e485ce1eb639dbd576d27d168595908aa2d60b149e2d9e34c9df40e0", - "sha256:2f9f7ffe9db1187a253fca95191854b3fda24696f086e8789d1d449308a34b88", - "sha256:3150ef4084e163dec29ae667b10d96aad309b668fac6810c9e8c27cf543d6e0b", - "sha256:31be2b6de98c824c06f5574331f805707c667dc8f60cb18580b7de078479891e", - "sha256:3709c9ff7ba61589b7372923fd82b99a81932b592a5c7f1a24147c91da9a68d6", - "sha256:382a4a48c8080e273427fc692037e3f7d2851959ffe40864f2db32646eeb3cef", - "sha256:398a825d2dea96227cf6460ce0a174cf7657d6f6827807d4d1ae9d0f9ae64315", - "sha256:41a2508fe7bed4c76b4cf55aacfb8733926f59d440d9ae2b81ee8220633b4d12", - "sha256:43b03c1ceea27c6520124f4fb2ba9c647409b9abdf9a62388117148a90419494", - "sha256:4448c9e55bf8329fa1dcedd32f661bf611214fa70c8e02fee4347bc589d39a84", - "sha256:445c97854204119ae2232503585ebb4fa7517142f71092cb129e5ee547957a1f", - "sha256:4478b14cb54a805088299c25a79f27eaf530564a7a4f72bf432a040042b554eb", - "sha256:4550af385b442dc2d55ab7717837812799d3674cb12f9a3aa897611839c18e9e", - "sha256:49b6ca2e625b46f499fb081aaf7819a177f41eeb555acb05758aa97f4f95d147", - "sha256:4bd13f85f80962f91a651a7356fe0472791a5f7a92f227822b5acf44795c626d", - "sha256:51d18be6193c25bd229524cfac21e39887c8d5e0217b1857998dfbef57c070a4", - "sha256:5227cb8da4b6f68acfd48d20c588197fd67745c278827d5238c707daf579227b", - "sha256:552b0d2e39987733e1e9e948a0ced6ff75e0ea39ab1a1db2fc36eb60fd8760db", - "sha256:6145df55dc2309f6ef72d70576dcd5aabb0fd373311613fe85a5e547c722b780", - "sha256:61c5f93d7622d84cb3092d7f6398ffc77654c346545313a3737e266fc11a3beb", - "sha256:6332452034be001bbf3206ac59c0d2a7713de5f25bb38b06519fc6967b7cf771", - "sha256:66c760d0226ebd52f1e6b644a9e839b5db1e107a23f2fcd46ec0569a4fdd4e63", - "sha256:6bab961c8c9b3a4dc94d26e9b2cdf84de9918931d01d6ff38c721a83ab3c0ef5", - "sha256:6d52d62edc96787f5c1dfa6c6ccff9b581cfae5a70d94ec4c8da157656c73b5b", - "sha256:7731abd23a782851426d4e37deb2057bf9410848a4459b5ede4fe89342e687a9", - "sha256:7a5c09413b924d96af2aa8b57e76b9b0058284d60e2fc3730ce0f979031d162a", - "sha256:7d489ac234d38e57f458fdbd12a996bfe990ac028feaf6f3c1e81ff766513d3b", - "sha256:7dacb06a9c83b007cc01e8e5277f94c95c453c5851aac5e83efe93e72226353f", - "sha256:807b8f4ad3e6084412c0f3df0613269f552110fa6fb91743e3e306223dbf11a6", - "sha256:80c9b48aef586ff8b698359ce22f9508937c799cc1d2c9c2f7c95996f2300c94", - "sha256:8112af16c406e4a93df2caef49f884f4c2bb2b558b0b5577ef0b2465d15c1abc", - "sha256:831cc53bf6068d46d942af52fa8b0b9d128fb39bcf1f80d468dc9a3ae1da5bfb", - "sha256:8a28ac29c60e4ba84b5f58605ace8ad495414a724fe7aceb7cf06cd0598d04e1", - "sha256:902aca7eba477657c5fb81c808318460328758e8367ecdd1964b6330c73cae43", - "sha256:91c3ffaea475ec8bb1a32d77ebc441dcdd13cd3c4c284a6672b92a0f5ade1917", - "sha256:93a29e882b2ba1db86ba5dd5e88e18e0ac6b627026c5cfbec9983422011b82d4", - "sha256:9434540f333332224ecb02ee6278b6c6f11ea1266b48526e73c903119b2f420f", - "sha256:963977ac8baed7058c1e126014f3fe58b3773f45c78cce7af5c26c09b6823896", - "sha256:98d948288ce893a2edc5ec3c438fe8de2daa5bbbd6e2e865ec5f966e237084ba", - "sha256:a222ad02fbe80166b0526c038776e8042cd4e5f0dec1489a006a1df47e9040e0", - "sha256:a651fe2f447672f4a815e22e74630b6b1ec3a1ab670c95e5e5e28dcd4e69bbb5", - "sha256:a88643de8abd000ce99ca72056a1a2ae15881ee365ecb24dd1d9111e43d57842", - "sha256:a9f34f5c9e0203ece706a1003f1492a56c06c0632d86cb77bcfe77b56aacf27b", - "sha256:acae207d4387780838192326b32d373bb286da0b299e733860e96f80728eb0af", - "sha256:ae775fa83f52f52de73183f7ef5395186f7105d5ed65b1ae65ba27cb1260de2b", - "sha256:b30f862f6768b17040929a68432c8a8be77780317f45a353cb17e423127d250c", - "sha256:b4f6919d9c120488246bdc2a2f96662fa80d67b35bd6d66218f457e722b3ff64", - "sha256:b70cab356ff8c860118b89dc86cd910c73ce2127eb986dada4fbac399ef644cf", - "sha256:ba034a32ecf9af72adfa5ee383ad0fd4f4e38cdb62b13624278ef768fe5b5b44", - "sha256:be37e24b13026cfedd233bcbbccd8c0bcd2fdd186216094d095f60076201538d", - "sha256:bfcf82644c9b45ddd7cd2a041f3ff8dce4a0904429b74d73a439e8cab1bd9e54", - "sha256:c01d109dd675ac47fa15c0a79d256878d898f90bc10589f808b62d021d2e653c", - "sha256:c0c8e8cadc81e44cc5088fcd53b9b3b4ce9344815f6c4a03aec653509296fae3", - "sha256:c43fac689880f5174d6fc864857d1247fe5cfa22b09ed058a344ca92bf5301e3", - "sha256:c76c298683f82669cab0b6da59071f55238c039738297c69f187a542c6d40099", - "sha256:c80fcd3504232f13617c6ab501124d373e4895424e65de8b72042333316f64a8", - "sha256:cb45684f276f57110bb89e4300c00f1233ca631f08f5f42528a5c408a79efc4a", - "sha256:cc2abc385dc37835445abe206524fbc0c9e3fce87631dfaa90918a1ba8f425eb", - "sha256:ccdff8ac4246b6fb60dcf3982dfaeeff5dd04f36051fe0632748fc0aa0679c01", - "sha256:d1ef0a536662bbbdc8525f7e2ef19e74123ec9c4578e0582ecd41aedc414a169", - "sha256:d367b7b775a0e1e54a59a2ba3ed4d5e0a31566af97cc9154e34262777dab95ed", - "sha256:d4000e8255d6cbce38982e5622ebb90823f3409b7ffe8aeae4337ef7d6d2612a", - "sha256:d56aad0517d4c09e3b4f15adebba8f6372c5102c27742a5bdbfc74a7dceb8fca", - "sha256:d9a78a52668bf5c9e7b0da36aa5760a9fc3680144e1445d68e98df78a25082ed", - "sha256:da8c0f5dd352136853e6a09b1b986ee5278dfddfebd30515e16eae425c872b30", - "sha256:dd670a8aa843f2ee637039bbd412e0d7294a5e588e1ecc9ad98b0cdc050259a4", - "sha256:dea1c8db78fb1b4b7dc9f8e213d0af3fc8ecd2c51a1d5a3ca1cde1bda034a980", - "sha256:e07dde3647afb084d985310d067a3efa6efad0621ee10826f2cb2f9a31b89d2f", - "sha256:e1c07a7fa7f7ba86554a2b1bef198c9fed570c08ee062fd2fd6a4dcacd45f905", - "sha256:e5e48a830bfd152fe17fbdeaf99ac5271aa4122521bf0d275b6b24e52ef35eb6", - "sha256:e6c6f0a23e55cd38d27d4c89add963294ea091ebcb104d7fdab0f093bc5abb1c", - "sha256:e9bcae3979b2654d5289d3490742378b2f3ce804b0b5fd42036074e2bf35b030", - "sha256:ef8c6ecc1d520debc147173eaa3765d53f06cd8dbe7bd377064cdbc53ab456f5", - "sha256:f3f2a5b74009fd50b53b26f65daff23e9853e79aa86e0aa08a53a7628d92d44a", - "sha256:f4ccc1a0a2c9806dda2a2dd118a3b7b681e448f3bb354056cad44a65169f6d86", - "sha256:f72073e75260cb301aad4258ad6150fa7f57c719b3f498cb91e31df16784d89b", - "sha256:f8f3c30fb2d26ae5ce36b59768ba60fb72507ea9efc72f8f69fa088450cff1df", - "sha256:f928eafd15794aa4be75463d537348b35503c1e014c5b663f206504ec1a90fe4", - "sha256:fa59e1f5a224b5e04dc6c101d7186058efa68288c2d714aa12d27603ae93318b" - ], - "markers": "python_version >= '3.8'", - "version": "==26.4.0" - }, - "six": { - "hashes": [ - "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", - "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", - "version": "==1.17.0" - }, "sniffio": { "hashes": [ "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", @@ -3198,52 +2884,13 @@ "markers": "python_version >= '3.7'", "version": "==1.3.1" }, - "stack-data": { - "hashes": [ - "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", - "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695" - ], - "version": "==0.6.3" - }, - "tornado": { - "hashes": [ - "sha256:072ce12ada169c5b00b7d92a99ba089447ccc993ea2143c9ede887e0937aa803", - "sha256:1a017d239bd1bb0919f72af256a970624241f070496635784d9bf0db640d3fec", - "sha256:2876cef82e6c5978fde1e0d5b1f919d756968d5b4282418f3146b79b58556482", - "sha256:304463bd0772442ff4d0f5149c6f1c2135a1fae045adf070821c6cdc76980634", - "sha256:908b71bf3ff37d81073356a5fadcc660eb10c1476ee6e2725588626ce7e5ca38", - "sha256:92bad5b4746e9879fd7bf1eb21dce4e3fc5128d71601f80005afa39237ad620b", - "sha256:932d195ca9015956fa502c6b56af9eb06106140d844a335590c1ec7f5277d10c", - "sha256:bca9eb02196e789c9cb5c3c7c0f04fb447dc2adffd95265b2c7223a8a615ccbf", - "sha256:c36e62ce8f63409301537222faffcef7dfc5284f27eec227389f2ad11b09d946", - "sha256:c82c46813ba483a385ab2a99caeaedf92585a1f90defb5693351fa7e4ea0bf73", - "sha256:e828cce1123e9e44ae2a50a9de3055497ab1d0aeb440c5ac23064d9e44880da1" - ], - "markers": "python_version >= '3.8'", - "version": "==6.4.2" - }, - "traitlets": { - "hashes": [ - "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", - "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f" - ], - "markers": "python_version >= '3.8'", - "version": "==5.14.3" - }, "typing-extensions": { "hashes": [ - "sha256:4b6cf02909eb5495cfbc3f6e8fd49217e6cc7944e145cdda8caa3734777f9e69", - "sha256:98795af00fb9640edec5b8e31fc647597b4691f099ad75f469a2616be1a76dff" + "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c", + "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef" ], "markers": "python_version >= '3.8'", - "version": "==4.13.1" - }, - "wcwidth": { - "hashes": [ - "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", - "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5" - ], - "version": "==0.2.13" + "version": "==4.13.2" } } } diff --git a/app/docker-compose.yml b/app/docker-compose.yml index b09a14c..06cddd8 100644 --- a/app/docker-compose.yml +++ b/app/docker-compose.yml @@ -29,10 +29,10 @@ services: container_name: frontend volumes: - ./frontend:/usr/src/app - + - /usr/src/app/node_modules ports: - - "3004:5173" - # depends_on: - # - backend + - "3000:5173" + depends_on: + - backend environment: LOG_LEVEL: "DEBUG" diff --git a/app/frontend/package-lock.json b/app/frontend/package-lock.json index a73ad80..cb428f7 100644 --- a/app/frontend/package-lock.json +++ b/app/frontend/package-lock.json @@ -8,6 +8,7 @@ "name": "frontend", "version": "0.0.0", "dependencies": { + "@vitejs/plugin-react-swc": "^3.8.1", "daisyui": "^5.0.17", "react": "^19.0.0", "react-dom": "^19.0.0" @@ -506,7 +507,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -523,7 +523,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -540,7 +539,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -557,7 +555,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -574,7 +571,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -591,7 +587,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -608,7 +603,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -625,7 +619,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -642,7 +635,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -659,7 +651,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -676,7 +667,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -693,7 +683,6 @@ "cpu": [ "loong64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -710,7 +699,6 @@ "cpu": [ "mips64el" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -727,7 +715,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -744,7 +731,6 @@ "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -761,7 +747,6 @@ "cpu": [ "s390x" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -778,7 +763,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -795,7 +779,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -812,7 +795,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -829,7 +811,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -846,7 +827,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -863,7 +843,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -880,7 +859,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -897,7 +875,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -914,7 +891,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1281,7 +1257,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1295,7 +1270,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1309,7 +1283,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1323,7 +1296,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1337,7 +1309,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1351,7 +1322,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1365,7 +1335,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1379,7 +1348,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1393,7 +1361,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1407,7 +1374,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1421,7 +1387,6 @@ "cpu": [ "loong64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1435,7 +1400,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1449,7 +1413,6 @@ "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1463,7 +1426,6 @@ "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1477,7 +1439,19 @@ "cpu": [ "s390x" ], - "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.39.0.tgz", + "integrity": "sha512-t9jqYw27R6Lx0XKfEFe5vUeEJ5pF3SGIM6gTfONSMb7DuG6z6wfj2yjcoZxHg129veTqU7+wOhY6GX8wmf90dA==", + "cpu": [ + "x64" + ], "license": "MIT", "optional": true, "os": [ @@ -1491,7 +1465,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1505,7 +1478,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1519,7 +1491,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1533,13 +1504,225 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ "win32" ] }, + "node_modules/@swc/core": { + "version": "1.11.20", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.11.20.tgz", + "integrity": "sha512-2F0+bQs7+pwbudsxRffLdfpGCQX4Ih5k88f7LqTfj2oC7aTrv7FssduOvcAvfVY/InZmyYEblKl1rqg8bvzrZQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3", + "@swc/types": "^0.1.21" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.11.20", + "@swc/core-darwin-x64": "1.11.20", + "@swc/core-linux-arm-gnueabihf": "1.11.20", + "@swc/core-linux-arm64-gnu": "1.11.20", + "@swc/core-linux-arm64-musl": "1.11.20", + "@swc/core-linux-x64-gnu": "1.11.20", + "@swc/core-linux-x64-musl": "1.11.20", + "@swc/core-win32-arm64-msvc": "1.11.20", + "@swc/core-win32-ia32-msvc": "1.11.20", + "@swc/core-win32-x64-msvc": "1.11.20" + }, + "peerDependencies": { + "@swc/helpers": ">=0.5.17" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.11.20", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.11.20.tgz", + "integrity": "sha512-Sc06h6pwMhQagU7vz92b7wwQTIibTiqRE4y/XjkvurSbjSarrtSZR4OKkrdNwUkSy1HlQE4NhKQf7tmLeQ7PhQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.11.20", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.11.20.tgz", + "integrity": "sha512-kHANJrgbqaGzUyTectNfLyhnHAeDGGVSRXYyPVAx6x0nuLOnRhKbuSyZY42UEN1IgHauaADCzcd+HiiMv/rgRw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.11.20", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.11.20.tgz", + "integrity": "sha512-FXllEBeAwU6FNIZzo+u1LmHGaHzwAKzz7tWRkUOqBKjKr20Ot4KGS3xlz2qgV2NESFHAisdHja2P2rcQWqtZRg==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.11.20", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.11.20.tgz", + "integrity": "sha512-OsYMFyJzUM0K8a97tu6KxZaCob3vr+UknVqHO09QwechX+rdX4euWm7Lte4d1B+7SBfokhw7ghLZsNTQfRw9pA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.11.20", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.11.20.tgz", + "integrity": "sha512-fbSWOQ5ZZ7sWodoC6GnzV9RhbImdxoH8b14K1tnHCWJXolzTH40/4JKf/koJ3r24nm1PtsqX9OUxRsOXYAy5dg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.11.20", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.11.20.tgz", + "integrity": "sha512-OFU53idbY8KA1RkNzZBi0FpoRPSn/anv4N7ZzGZGk664UoFwMbSL+XHGocJzhV9G/VNGH7bMBmgoVWk72nn5hw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.11.20", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.11.20.tgz", + "integrity": "sha512-GZbqXEc09nIarkGMXc2P4Hf2ONb1vre22X7Se9CCeU/QtWYRU/H1a2TFnYgBKzNVOH65Dd/XYXcuy+tM1aw1iw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.11.20", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.11.20.tgz", + "integrity": "sha512-i0H2MeK8krEd/YeiGz0GHtNL9wSGfAPXiouh8aRNV/u+w4vPaaRqnXwv/yzAW+D2vPpKJBhOwmNFFzdgTJ5mWw==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.11.20", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.11.20.tgz", + "integrity": "sha512-/7e3X7EGO8uOvAUP+YKJTdoR2JR5vdiewDOnDS9FFXj8yr9x6/oDFLd92Sp9NglF+aXuqAo33IfH2OTz1MR+Ww==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.11.20", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.11.20.tgz", + "integrity": "sha512-rcZpt5uiVNTs/Se+CYBoaDphafFJcsqXo3DNmfkJZoDZUb4PZqxu61p4Qa+lvFDQlRragrlLRpGQM9qnLNd4iQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "license": "Apache-2.0" + }, + "node_modules/@swc/types": { + "version": "0.1.21", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.21.tgz", + "integrity": "sha512-2YEtj5HJVbKivud9N4bpPBAyZhj4S2Ipe5LkUG94alTpr7in/GU/EARgPAd3BwU+YOmFVJC2+kjqhGRi3r0ZpQ==", + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3" + } + }, "node_modules/@testing-library/dom": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", @@ -1688,7 +1871,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", - "dev": true, "license": "MIT" }, "node_modules/@types/json-schema": { @@ -1702,16 +1884,16 @@ "version": "22.14.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.0.tgz", "integrity": "sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, "node_modules/@types/react": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.0.tgz", - "integrity": "sha512-UaicktuQI+9UKyA4njtDOGBD/67t8YEBt2xdfqu8+gP9hqPUPsiXlNPcpS2gVdjmis5GKPG3fCxbQLVgxsQZ8w==", + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.1.tgz", + "integrity": "sha512-ePapxDL7qrgqSF67s0h9m412d9DbXyC1n59O2st+9rjuuamWsZuD2w55rqY12CbzsZ7uVXb5Nw0gEp9Z8MMutQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1719,9 +1901,9 @@ } }, "node_modules/@types/react-dom": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.1.tgz", - "integrity": "sha512-jFf/woGTVTjUJsl2O7hcopJ1r0upqoq/vIOoCj0yLh3RIXxWcljlpuZ+vEBRXsymD1jhfeJrlyTy/S1UW+4y1w==", + "version": "19.1.2", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.2.tgz", + "integrity": "sha512-XGJkWF41Qq305SKWEILa1O8vzhb3aOo3ogBlSmiqNko/WmRb6QIaweuZCXjKygVDXpzXb5wyxKTSOsmkuqj+Qw==", "dev": true, "license": "MIT", "peerDependencies": { @@ -1967,6 +2149,18 @@ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" } }, + "node_modules/@vitejs/plugin-react-swc": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.8.1.tgz", + "integrity": "sha512-aEUPCckHDcFyxpwFm0AIkbtv6PpUp3xTb9wYGFjtABynXjCYKkWoxX0AOK9NT9XCrdk6mBBUOeHQS+RKdcNO1A==", + "license": "MIT", + "dependencies": { + "@swc/core": "^1.11.11" + }, + "peerDependencies": { + "vite": "^4 || ^5 || ^6" + } + }, "node_modules/@vitest/expect": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.1.1.tgz", @@ -2131,16 +2325,13 @@ } }, "node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">=8" } }, "node_modules/ansi-styles": { @@ -2381,9 +2572,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001712", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001712.tgz", - "integrity": "sha512-MBqPpGYYdQ7/hfKiet9SCI+nmN5/hp4ZzveOJubl5DTAMa5oggjAuoi0Z4onBpKPFI2ePGnQuQIzF3VxDjDJig==", + "version": "1.0.30001713", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001713.tgz", + "integrity": "sha512-wCIWIg+A4Xr7NfhTuHdX+/FKh3+Op3LBbSp2N5Pfx6T/LhdQy3GTyoTg48BReaW/MyMNZAkTadsBtai3ldWK0Q==", "dev": true, "funding": [ { @@ -2597,9 +2788,9 @@ "license": "MIT" }, "node_modules/daisyui": { - "version": "5.0.17", - "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-5.0.17.tgz", - "integrity": "sha512-YV5PjYfIxvc6V35WEDn06y9KMpPXGSNgw5mckuV+RwKi0VCZlmGT3fY6gQFTcQDFCcPkJ8TOpEJHDBABI2C/dw==", + "version": "5.0.18", + "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-5.0.18.tgz", + "integrity": "sha512-UKbuXChAZYhhjEGs9iKU3dSOup+WDY8fZaGa9VF4GkFQsF0ZAkb3yPTqjFUiE+2r3zFxv8JX+yhc06JPQbzqmw==", "license": "MIT", "funding": { "url": "https://github.com/saadeghi/daisyui?sponsor=1" @@ -2726,9 +2917,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.134", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.134.tgz", - "integrity": "sha512-zSwzrLg3jNP3bwsLqWHmS5z2nIOQ5ngMnfMZOWWtXnqqQkPVyOipxK98w+1beLw1TB+EImPNcG8wVP/cLVs2Og==", + "version": "1.5.136", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.136.tgz", + "integrity": "sha512-kL4+wUTD7RSA5FHx5YwWtjDnEEkIIikFgWHR4P6fqjw1PPLlqYkxeOb++wAauAssat0YClCy8Y3C5SxgSkjibQ==", "dev": true, "license": "ISC" }, @@ -2812,7 +3003,6 @@ "version": "0.25.2", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz", "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==", - "dev": true, "hasInstallScript": true, "license": "MIT", "bin": { @@ -3246,7 +3436,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -3668,7 +3857,7 @@ "version": "1.21.7", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", - "dev": true, + "devOptional": true, "license": "MIT", "bin": { "jiti": "bin/jiti.js" @@ -4007,7 +4196,6 @@ "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, "funding": [ { "type": "github", @@ -4238,7 +4426,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, "license": "ISC" }, "node_modules/picomatch": { @@ -4278,7 +4465,6 @@ "version": "8.5.3", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", - "dev": true, "funding": [ { "type": "opencollective", @@ -4450,17 +4636,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/pretty-format/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -4635,7 +4810,6 @@ "version": "4.39.0", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.39.0.tgz", "integrity": "sha512-thI8kNc02yNvnmJp8dr3fNWJ9tCONDhp6TV35X6HkKGGs9E6q7YWCHbe5vKiTa7TAiNcFEmXKj3X/pG2b3ci0g==", - "dev": true, "license": "MIT", "dependencies": { "@types/estree": "1.0.7" @@ -4671,20 +4845,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.39.0.tgz", - "integrity": "sha512-t9jqYw27R6Lx0XKfEFe5vUeEJ5pF3SGIM6gTfONSMb7DuG6z6wfj2yjcoZxHg129veTqU7+wOhY6GX8wmf90dA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, "node_modules/rrweb-cssom": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", @@ -4799,7 +4959,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -4853,16 +5012,6 @@ "node": ">=8" } }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/string-width-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -4913,14 +5062,17 @@ "node": ">=8" } }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, "node_modules/strip-indent": { @@ -5243,7 +5395,7 @@ "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/update-browserslist-db": { @@ -5295,10 +5447,9 @@ "license": "MIT" }, "node_modules/vite": { - "version": "6.2.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.5.tgz", - "integrity": "sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==", - "dev": true, + "version": "6.2.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.6.tgz", + "integrity": "sha512-9xpjNl3kR4rVDZgPNdTL0/c6ao4km69a/2ihNQbcANz8RuCOK3hQBmLSJf3bRKVQjVMda+YvizNE8AwvogcPbw==", "license": "MIT", "dependencies": { "esbuild": "^0.25.0", @@ -5599,16 +5750,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -5707,7 +5848,7 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz", "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==", - "dev": true, + "devOptional": true, "license": "ISC", "bin": { "yaml": "bin.mjs" diff --git a/app/frontend/vite.config.ts b/app/frontend/vite.config.ts index 399a019..915b45e 100644 --- a/app/frontend/vite.config.ts +++ b/app/frontend/vite.config.ts @@ -4,6 +4,11 @@ import react from '@vitejs/plugin-react' // https://vite.dev/config/ export default defineConfig({ plugins: [react()], + server: { + host: true, + strictPort: true, + port: 5173 + }, test: { globals: true, environment: "jsdom", From 05130c88268894e6867046af7662fb526f1e4338 Mon Sep 17 00:00:00 2001 From: leehk Date: Sat, 12 Apr 2025 14:33:43 +0800 Subject: [PATCH 08/45] update --- .github/workflows/develop.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index 183bdc7..84efe13 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -12,7 +12,7 @@ jobs: build: name: Build Docker Image - runs-on: Ubuntu-latest + runs-on: ubuntu-latest-large permissions: contents: read packages: write @@ -46,7 +46,7 @@ jobs: test: name: Test Docker Image - runs-on: Ubuntu-latest + runs-on: ubuntu-latest-large needs: build steps: - name: Free up disk space From e32e52df27c619176a6fc6189cfa95dd6d429101 Mon Sep 17 00:00:00 2001 From: leehk Date: Sat, 12 Apr 2025 14:45:15 +0800 Subject: [PATCH 09/45] update --- .github/workflows/develop.yml | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index 84efe13..127cd8a 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -12,16 +12,11 @@ jobs: build: name: Build Docker Image - runs-on: ubuntu-latest-large + runs-on: self-hosted permissions: contents: read packages: write steps: - - name: Free up disk space - run: | - sudo apt-get clean - sudo rm -rf /var/lib/apt/lists/* - docker system prune -af - name: Checkout uses: actions/checkout@v3 with: @@ -46,14 +41,9 @@ jobs: test: name: Test Docker Image - runs-on: ubuntu-latest-large + runs-on: self-hosted needs: build steps: - - name: Free up disk space - run: | - sudo apt-get clean - sudo rm -rf /var/lib/apt/lists/* - docker system prune -af - name: Checkout uses: actions/checkout@v3 with: @@ -71,7 +61,8 @@ jobs: --cache-from ${{ env.IMAGE }}:latest \ --tag ${{ env.IMAGE }}:latest \ --file ./app/backend/Dockerfile.prod \ - "./app/backend" + "./app/backend" \ + --memory 8g - name: Run container run: | docker run \ @@ -81,7 +72,8 @@ jobs: -e ENVIRONMENT=dev \ -e TESTING=0 \ -p 8004:8765 \ - ${{ env.IMAGE }}:latest + ${{ env.IMAGE }}:latest \ + --memory 8g - name: Pytest run: docker exec backend pipenv run python -m pytest tests --disable-warnings --maxfail=5 # - name: Flake8 From fa33a13fa24609e8b1e72a3d2b072597e346fc1d Mon Sep 17 00:00:00 2001 From: leehk Date: Sat, 12 Apr 2025 15:23:29 +0800 Subject: [PATCH 10/45] upd --- .github/workflows/develop.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index 127cd8a..b99cc19 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -61,21 +61,23 @@ jobs: --cache-from ${{ env.IMAGE }}:latest \ --tag ${{ env.IMAGE }}:latest \ --file ./app/backend/Dockerfile.prod \ + --memory 8g \ "./app/backend" \ - --memory 8g + - name: Run container run: | docker run \ -d \ --name backend \ + --memory 8g \ -e PORT=8765 \ -e ENVIRONMENT=dev \ -e TESTING=0 \ -p 8004:8765 \ - ${{ env.IMAGE }}:latest \ - --memory 8g + ${{ env.IMAGE }}:latest + - name: Pytest - run: docker exec backend pipenv run python -m pytest tests --disable-warnings --maxfail=5 + run: docker exec backend pipenv run python -m pytest tests --disable-warnings # - name: Flake8 # run: docker exec backend pipenv run python -m flake8 . # - name: Black From 08a45a9c766cb950efd2a2982888482d2c504d48 Mon Sep 17 00:00:00 2001 From: leehk Date: Sat, 12 Apr 2025 21:04:46 +0800 Subject: [PATCH 11/45] reduce library size --- .github/workflows/develop.yml | 3 +- app/backend/Pipfile | 2 - app/backend/Pipfile.lock | 91 +---------------------------------- app/docker-compose.yml | 2 +- 4 files changed, 3 insertions(+), 95 deletions(-) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index b99cc19..1836121 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -61,8 +61,7 @@ jobs: --cache-from ${{ env.IMAGE }}:latest \ --tag ${{ env.IMAGE }}:latest \ --file ./app/backend/Dockerfile.prod \ - --memory 8g \ - "./app/backend" \ + "./app/backend" - name: Run container run: | diff --git a/app/backend/Pipfile b/app/backend/Pipfile index 7e292f1..36dbdf4 100644 --- a/app/backend/Pipfile +++ b/app/backend/Pipfile @@ -11,10 +11,8 @@ pydantic-settings = "==2.1.0" gunicorn = "==21.0.1" python-decouple = "==3.8" pyyaml = "==6.0.1" -docker = "*" chromadb = "*" sentence-transformers = "*" -langchain = "*" langchain-deepseek = "*" [dev-packages] diff --git a/app/backend/Pipfile.lock b/app/backend/Pipfile.lock index 6c6d3b3..957dbda 100644 --- a/app/backend/Pipfile.lock +++ b/app/backend/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "a6778423552ff7c5442034df8bdbfa526ab8ccc841ccb5bb37c1afd3abb3f3be" + "sha256": "79f553af1a54052baad4da2fa41f2a8c36826a0272c0d26e5e6805f49059eee9" }, "pipfile-spec": 6, "requires": { @@ -314,15 +314,6 @@ "markers": "python_version >= '3.6'", "version": "==1.9.0" }, - "docker": { - "hashes": [ - "sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c", - "sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0" - ], - "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==7.1.0" - }, "durationpy": { "hashes": [ "sha256:e65359a7af5cedad07fb77a2dd3f390f8eb0b74cb845589fa6c057086834dd38", @@ -695,15 +686,6 @@ "markers": "python_version >= '3.6'", "version": "==32.0.1" }, - "langchain": { - "hashes": [ - "sha256:084f05ee7e80b7c3f378ebadd7309f2a37868ce2906fa0ae64365a67843ade3d", - "sha256:d95004afe8abebb52d51d6026270248da3f4b53d93e9bf699f76005e0c83ad34" - ], - "index": "pypi", - "markers": "python_version >= '3.9' and python_version < '4.0'", - "version": "==0.3.23" - }, "langchain-core": { "hashes": [ "sha256:4bd71e8acd45362aa428953f2a91d8162318014544a2216e4b769463caf68e13", @@ -729,14 +711,6 @@ "markers": "python_version >= '3.9' and python_version < '4.0'", "version": "==0.3.12" }, - "langchain-text-splitters": { - "hashes": [ - "sha256:116d4b9f2a22dda357d0b79e30acf005c5518177971c66a9f1ab0edfdb0f912e", - "sha256:e75cc0f4ae58dcf07d9f18776400cf8ade27fadd4ff6d264df6278bb302f6f02" - ], - "markers": "python_version >= '3.9' and python_version < '4.0'", - "version": "==0.3.8" - }, "langsmith": { "hashes": [ "sha256:4588aad24623320cdf355f7594e583874c27e70460e6e6446a416ebb702b8cf7", @@ -1961,69 +1935,6 @@ "markers": "python_version >= '3.7'", "version": "==1.3.1" }, - "sqlalchemy": { - "hashes": [ - "sha256:00a494ea6f42a44c326477b5bee4e0fc75f6a80c01570a32b57e89cf0fbef85a", - "sha256:0bb933a650323e476a2e4fbef8997a10d0003d4da996aad3fd7873e962fdde4d", - "sha256:110179728e442dae85dd39591beb74072ae4ad55a44eda2acc6ec98ead80d5f2", - "sha256:15d08d5ef1b779af6a0909b97be6c1fd4298057504eb6461be88bd1696cb438e", - "sha256:16d325ea898f74b26ffcd1cf8c593b0beed8714f0317df2bed0d8d1de05a8f26", - "sha256:1abb387710283fc5983d8a1209d9696a4eae9db8d7ac94b402981fe2fe2e39ad", - "sha256:1ffdf9c91428e59744f8e6f98190516f8e1d05eec90e936eb08b257332c5e870", - "sha256:2be94d75ee06548d2fc591a3513422b873490efb124048f50556369a834853b0", - "sha256:2cbafc8d39ff1abdfdda96435f38fab141892dc759a2165947d1a8fffa7ef596", - "sha256:2ee5f9999a5b0e9689bed96e60ee53c3384f1a05c2dd8068cc2e8361b0df5b7a", - "sha256:32587e2e1e359276957e6fe5dad089758bc042a971a8a09ae8ecf7a8fe23d07a", - "sha256:35904d63412db21088739510216e9349e335f142ce4a04b69e2528020ee19ed4", - "sha256:37a5c21ab099a83d669ebb251fddf8f5cee4d75ea40a5a1653d9c43d60e20867", - "sha256:37f7a0f506cf78c80450ed1e816978643d3969f99c4ac6b01104a6fe95c5490a", - "sha256:46628ebcec4f23a1584fb52f2abe12ddb00f3bb3b7b337618b80fc1b51177aff", - "sha256:4a4c5a2905a9ccdc67a8963e24abd2f7afcd4348829412483695c59e0af9a705", - "sha256:4aeb939bcac234b88e2d25d5381655e8353fe06b4e50b1c55ecffe56951d18c2", - "sha256:50f5885bbed261fc97e2e66c5156244f9704083a674b8d17f24c72217d29baf5", - "sha256:519624685a51525ddaa7d8ba8265a1540442a2ec71476f0e75241eb8263d6f51", - "sha256:5434223b795be5c5ef8244e5ac98056e290d3a99bdcc539b916e282b160dda00", - "sha256:55028d7a3ebdf7ace492fab9895cbc5270153f75442a0472d8516e03159ab364", - "sha256:5654d1ac34e922b6c5711631f2da497d3a7bffd6f9f87ac23b35feea56098011", - "sha256:574aea2c54d8f1dd1699449f332c7d9b71c339e04ae50163a3eb5ce4c4325ee4", - "sha256:5cfa124eda500ba4b0d3afc3e91ea27ed4754e727c7f025f293a22f512bcd4c9", - "sha256:5ea9181284754d37db15156eb7be09c86e16e50fbe77610e9e7bee09291771a1", - "sha256:641ee2e0834812d657862f3a7de95e0048bdcb6c55496f39c6fa3d435f6ac6ad", - "sha256:650490653b110905c10adac69408380688cefc1f536a137d0d69aca1069dc1d1", - "sha256:6959738971b4745eea16f818a2cd086fb35081383b078272c35ece2b07012716", - "sha256:6cfedff6878b0e0d1d0a50666a817ecd85051d12d56b43d9d425455e608b5ba0", - "sha256:7e0505719939e52a7b0c65d20e84a6044eb3712bb6f239c6b1db77ba8e173a37", - "sha256:8b6b28d303b9d57c17a5164eb1fd2d5119bb6ff4413d5894e74873280483eeb5", - "sha256:8bb131ffd2165fae48162c7bbd0d97c84ab961deea9b8bab16366543deeab625", - "sha256:915866fd50dd868fdcc18d61d8258db1bf9ed7fbd6dfec960ba43365952f3b01", - "sha256:9408fd453d5f8990405cc9def9af46bfbe3183e6110401b407c2d073c3388f47", - "sha256:957f8d85d5e834397ef78a6109550aeb0d27a53b5032f7a57f2451e1adc37e98", - "sha256:9c7a80ed86d6aaacb8160a1caef6680d4ddd03c944d985aecee940d168c411d1", - "sha256:9d3b31d0a1c44b74d3ae27a3de422dfccd2b8f0b75e51ecb2faa2bf65ab1ba0d", - "sha256:a669cbe5be3c63f75bcbee0b266779706f1a54bcb1000f302685b87d1b8c1500", - "sha256:a8aae085ea549a1eddbc9298b113cffb75e514eadbb542133dd2b99b5fb3b6af", - "sha256:ae9597cab738e7cc823f04a704fb754a9249f0b6695a6aeb63b74055cd417a96", - "sha256:afe63b208153f3a7a2d1a5b9df452b0673082588933e54e7c8aac457cf35e758", - "sha256:b5a5bbe29c10c5bfd63893747a1bf6f8049df607638c786252cb9243b86b6706", - "sha256:baf7cee56bd552385c1ee39af360772fbfc2f43be005c78d1140204ad6148438", - "sha256:bb19e30fdae77d357ce92192a3504579abe48a66877f476880238a962e5b96db", - "sha256:bece9527f5a98466d67fb5d34dc560c4da964240d8b09024bb21c1246545e04e", - "sha256:c0cae71e20e3c02c52f6b9e9722bca70e4a90a466d59477822739dc31ac18b4b", - "sha256:c268b5100cfeaa222c40f55e169d484efa1384b44bf9ca415eae6d556f02cb08", - "sha256:c7b927155112ac858357ccf9d255dd8c044fd9ad2dc6ce4c4149527c901fa4c3", - "sha256:c884de19528e0fcd9dc34ee94c810581dd6e74aef75437ff17e696c2bfefae3e", - "sha256:cd2f75598ae70bcfca9117d9e51a3b06fe29edd972fdd7fd57cc97b4dbf3b08a", - "sha256:cf0e99cdb600eabcd1d65cdba0d3c91418fee21c4aa1d28db47d095b1064a7d8", - "sha256:d827099289c64589418ebbcaead0145cd19f4e3e8a93919a0100247af245fa00", - "sha256:e8040680eaacdce4d635f12c55c714f3d4c7f57da2bc47a01229d115bd319191", - "sha256:f0fda83e113bb0fb27dc003685f32a5dcb99c9c4f41f4fa0838ac35265c23b5c", - "sha256:f1ea21bef99c703f44444ad29c2c1b6bd55d202750b6de8e06a955380f4725d7", - "sha256:f6bacab7514de6146a1976bc56e1545bee247242fab030b89e5f70336fc0003e", - "sha256:fe147fcd85aaed53ce90645c91ed5fca0cc88a797314c70dfd9d35925bd5d106" - ], - "markers": "python_version >= '3.7'", - "version": "==2.0.40" - }, "starlette": { "hashes": [ "sha256:2cbcba2a75806f8a41c722141486f37c28e30a0921c5f6fe4346cb0dcee1302f", diff --git a/app/docker-compose.yml b/app/docker-compose.yml index 06cddd8..c1bc055 100644 --- a/app/docker-compose.yml +++ b/app/docker-compose.yml @@ -10,7 +10,7 @@ services: backend: build: context: ./backend - dockerfile: Dockerfile + dockerfile: Dockerfile.prod container_name: backend platform: linux/amd64 command: pipenv run uvicorn main:app --reload --workers 1 --host 0.0.0.0 --port 8000 From 036a01f5ef8e1379df92c552941d92a24375303e Mon Sep 17 00:00:00 2001 From: leehk Date: Sat, 12 Apr 2025 21:34:45 +0800 Subject: [PATCH 12/45] use github runner again --- .github/workflows/develop.yml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index 1836121..bd90874 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -1,6 +1,6 @@ name: CI/CD - develop -on: +on: pull_request: branches: - develop @@ -9,10 +9,9 @@ env: IMAGE: ghcr.io/$(echo $GITHUB_REPOSITORY | tr '[A-Z]' '[a-z]')/aimingmed-ai-backend jobs: - build: name: Build Docker Image - runs-on: self-hosted + runs-on: ubuntu-latest permissions: contents: read packages: write @@ -41,7 +40,7 @@ jobs: test: name: Test Docker Image - runs-on: self-hosted + runs-on: ubuntu-latest needs: build steps: - name: Checkout @@ -62,7 +61,7 @@ jobs: --tag ${{ env.IMAGE }}:latest \ --file ./app/backend/Dockerfile.prod \ "./app/backend" - + - name: Run container run: | docker run \ @@ -74,7 +73,7 @@ jobs: -e TESTING=0 \ -p 8004:8765 \ ${{ env.IMAGE }}:latest - + - name: Pytest run: docker exec backend pipenv run python -m pytest tests --disable-warnings # - name: Flake8 @@ -85,4 +84,4 @@ jobs: # run: docker exec backend pipenv run python -m isort . --check-only - name: Cleanup container at end of job if: always() - run: docker stop backend || true && docker rm backend || true \ No newline at end of file + run: docker stop backend || true && docker rm backend || true From 524f8f9c51ef019692b627efbe7c141f4842f51f Mon Sep 17 00:00:00 2001 From: leehk Date: Sat, 12 Apr 2025 22:23:31 +0800 Subject: [PATCH 13/45] update --- app/backend/Dockerfile.prod | 42 ++++++++-------- app/backend/Pipfile | 2 + app/backend/Pipfile.lock | 97 +++++++++++++++++++++++++++++++++++-- 3 files changed, 116 insertions(+), 25 deletions(-) diff --git a/app/backend/Dockerfile.prod b/app/backend/Dockerfile.prod index 8f70f74..39b27d1 100644 --- a/app/backend/Dockerfile.prod +++ b/app/backend/Dockerfile.prod @@ -2,31 +2,31 @@ # BUILDER # ########### -# pull official base image -FROM python:3.11-slim as builder +# # pull official base image +# FROM python:3.11-slim as builder -# set working directory -WORKDIR /usr/src/app +# # set working directory +# WORKDIR /usr/src/app -# set environment variables -ENV PYTHONDONTWRITEBYTECODE=1 -ENV PYTHONUNBUFFERED=1 +# # set environment variables +# ENV PYTHONDONTWRITEBYTECODE=1 +# ENV PYTHONUNBUFFERED=1 -# install system dependencies -RUN apt-get update \ - && apt-get -y install build-essential netcat-traditional gcc \ - && apt-get clean +# # install system dependencies +# RUN apt-get update \ +# && apt-get -y install build-essential netcat-traditional gcc \ +# && apt-get clean -# install python dependencies -RUN pip install --upgrade pip setuptools wheel -i https://pypi.tuna.tsinghua.edu.cn/simple -RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pipenv -COPY ./Pipfile . -RUN pipenv install --deploy --dev +# # install python dependencies +# RUN pip install --upgrade pip setuptools wheel -i https://pypi.tuna.tsinghua.edu.cn/simple +# RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pipenv +# COPY ./Pipfile . +# RUN pipenv install --deploy --dev -# add app -COPY . /usr/src/app -RUN pipenv run pip install black==23.12.1 flake8==7.0.0 isort==5.13.2 +# # add app +# COPY . /usr/src/app +# RUN pipenv run pip install black==23.12.1 flake8==7.0.0 isort==5.13.2 # RUN pipenv run flake8 . # RUN pipenv run black --exclude=migrations . --check # RUN pipenv run isort . --check-only @@ -63,9 +63,10 @@ RUN apt-get update \ && apt-get clean # install python dependencies -COPY --from=builder /usr/src/app/Pipfile . +# COPY --from=builder /usr/src/app/Pipfile . RUN pip install --upgrade pip setuptools wheel -i https://pypi.tuna.tsinghua.edu.cn/simple RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pipenv +COPY ./Pipfile . RUN pipenv install --deploy --dev RUN pipenv run pip install "uvicorn[standard]==0.26.0" @@ -78,6 +79,5 @@ RUN chown -R app:app $APP_HOME # change to the app user USER app - # run gunicorn CMD pipenv run gunicorn --bind 0.0.0.0:$PORT backend.main:app -k uvicorn.workers.UvicornWorker \ No newline at end of file diff --git a/app/backend/Pipfile b/app/backend/Pipfile index 36dbdf4..7e292f1 100644 --- a/app/backend/Pipfile +++ b/app/backend/Pipfile @@ -11,8 +11,10 @@ pydantic-settings = "==2.1.0" gunicorn = "==21.0.1" python-decouple = "==3.8" pyyaml = "==6.0.1" +docker = "*" chromadb = "*" sentence-transformers = "*" +langchain = "*" langchain-deepseek = "*" [dev-packages] diff --git a/app/backend/Pipfile.lock b/app/backend/Pipfile.lock index 957dbda..83958d5 100644 --- a/app/backend/Pipfile.lock +++ b/app/backend/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "79f553af1a54052baad4da2fa41f2a8c36826a0272c0d26e5e6805f49059eee9" + "sha256": "a6778423552ff7c5442034df8bdbfa526ab8ccc841ccb5bb37c1afd3abb3f3be" }, "pipfile-spec": 6, "requires": { @@ -314,6 +314,15 @@ "markers": "python_version >= '3.6'", "version": "==1.9.0" }, + "docker": { + "hashes": [ + "sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c", + "sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==7.1.0" + }, "durationpy": { "hashes": [ "sha256:e65359a7af5cedad07fb77a2dd3f390f8eb0b74cb845589fa6c057086834dd38", @@ -686,6 +695,15 @@ "markers": "python_version >= '3.6'", "version": "==32.0.1" }, + "langchain": { + "hashes": [ + "sha256:084f05ee7e80b7c3f378ebadd7309f2a37868ce2906fa0ae64365a67843ade3d", + "sha256:d95004afe8abebb52d51d6026270248da3f4b53d93e9bf699f76005e0c83ad34" + ], + "index": "pypi", + "markers": "python_version >= '3.9' and python_version < '4.0'", + "version": "==0.3.23" + }, "langchain-core": { "hashes": [ "sha256:4bd71e8acd45362aa428953f2a91d8162318014544a2216e4b769463caf68e13", @@ -711,6 +729,14 @@ "markers": "python_version >= '3.9' and python_version < '4.0'", "version": "==0.3.12" }, + "langchain-text-splitters": { + "hashes": [ + "sha256:116d4b9f2a22dda357d0b79e30acf005c5518177971c66a9f1ab0edfdb0f912e", + "sha256:e75cc0f4ae58dcf07d9f18776400cf8ade27fadd4ff6d264df6278bb302f6f02" + ], + "markers": "python_version >= '3.9' and python_version < '4.0'", + "version": "==0.3.8" + }, "langsmith": { "hashes": [ "sha256:4588aad24623320cdf355f7594e583874c27e70460e6e6446a416ebb702b8cf7", @@ -1006,11 +1032,11 @@ }, "openai": { "hashes": [ - "sha256:34f5496ba5c8cb06c592831d69e847e2d164526a2fb92afdc3b5cf2891c328c3", - "sha256:f51de971448905cc90ed5175a5b19e92fd94e31f68cde4025762f9f5257150db" + "sha256:b58ea39ba589de07db85c9905557ac12d2fc77600dcd2b92a08b99c9a3dce9e0", + "sha256:f52d1f673fb4ce6069a40d544a80fcb062eba1b3f489004fac4f9923a074c425" ], "markers": "python_version >= '3.8'", - "version": "==1.72.0" + "version": "==1.73.0" }, "opentelemetry-api": { "hashes": [ @@ -1935,6 +1961,69 @@ "markers": "python_version >= '3.7'", "version": "==1.3.1" }, + "sqlalchemy": { + "hashes": [ + "sha256:00a494ea6f42a44c326477b5bee4e0fc75f6a80c01570a32b57e89cf0fbef85a", + "sha256:0bb933a650323e476a2e4fbef8997a10d0003d4da996aad3fd7873e962fdde4d", + "sha256:110179728e442dae85dd39591beb74072ae4ad55a44eda2acc6ec98ead80d5f2", + "sha256:15d08d5ef1b779af6a0909b97be6c1fd4298057504eb6461be88bd1696cb438e", + "sha256:16d325ea898f74b26ffcd1cf8c593b0beed8714f0317df2bed0d8d1de05a8f26", + "sha256:1abb387710283fc5983d8a1209d9696a4eae9db8d7ac94b402981fe2fe2e39ad", + "sha256:1ffdf9c91428e59744f8e6f98190516f8e1d05eec90e936eb08b257332c5e870", + "sha256:2be94d75ee06548d2fc591a3513422b873490efb124048f50556369a834853b0", + "sha256:2cbafc8d39ff1abdfdda96435f38fab141892dc759a2165947d1a8fffa7ef596", + "sha256:2ee5f9999a5b0e9689bed96e60ee53c3384f1a05c2dd8068cc2e8361b0df5b7a", + "sha256:32587e2e1e359276957e6fe5dad089758bc042a971a8a09ae8ecf7a8fe23d07a", + "sha256:35904d63412db21088739510216e9349e335f142ce4a04b69e2528020ee19ed4", + "sha256:37a5c21ab099a83d669ebb251fddf8f5cee4d75ea40a5a1653d9c43d60e20867", + "sha256:37f7a0f506cf78c80450ed1e816978643d3969f99c4ac6b01104a6fe95c5490a", + "sha256:46628ebcec4f23a1584fb52f2abe12ddb00f3bb3b7b337618b80fc1b51177aff", + "sha256:4a4c5a2905a9ccdc67a8963e24abd2f7afcd4348829412483695c59e0af9a705", + "sha256:4aeb939bcac234b88e2d25d5381655e8353fe06b4e50b1c55ecffe56951d18c2", + "sha256:50f5885bbed261fc97e2e66c5156244f9704083a674b8d17f24c72217d29baf5", + "sha256:519624685a51525ddaa7d8ba8265a1540442a2ec71476f0e75241eb8263d6f51", + "sha256:5434223b795be5c5ef8244e5ac98056e290d3a99bdcc539b916e282b160dda00", + "sha256:55028d7a3ebdf7ace492fab9895cbc5270153f75442a0472d8516e03159ab364", + "sha256:5654d1ac34e922b6c5711631f2da497d3a7bffd6f9f87ac23b35feea56098011", + "sha256:574aea2c54d8f1dd1699449f332c7d9b71c339e04ae50163a3eb5ce4c4325ee4", + "sha256:5cfa124eda500ba4b0d3afc3e91ea27ed4754e727c7f025f293a22f512bcd4c9", + "sha256:5ea9181284754d37db15156eb7be09c86e16e50fbe77610e9e7bee09291771a1", + "sha256:641ee2e0834812d657862f3a7de95e0048bdcb6c55496f39c6fa3d435f6ac6ad", + "sha256:650490653b110905c10adac69408380688cefc1f536a137d0d69aca1069dc1d1", + "sha256:6959738971b4745eea16f818a2cd086fb35081383b078272c35ece2b07012716", + "sha256:6cfedff6878b0e0d1d0a50666a817ecd85051d12d56b43d9d425455e608b5ba0", + "sha256:7e0505719939e52a7b0c65d20e84a6044eb3712bb6f239c6b1db77ba8e173a37", + "sha256:8b6b28d303b9d57c17a5164eb1fd2d5119bb6ff4413d5894e74873280483eeb5", + "sha256:8bb131ffd2165fae48162c7bbd0d97c84ab961deea9b8bab16366543deeab625", + "sha256:915866fd50dd868fdcc18d61d8258db1bf9ed7fbd6dfec960ba43365952f3b01", + "sha256:9408fd453d5f8990405cc9def9af46bfbe3183e6110401b407c2d073c3388f47", + "sha256:957f8d85d5e834397ef78a6109550aeb0d27a53b5032f7a57f2451e1adc37e98", + "sha256:9c7a80ed86d6aaacb8160a1caef6680d4ddd03c944d985aecee940d168c411d1", + "sha256:9d3b31d0a1c44b74d3ae27a3de422dfccd2b8f0b75e51ecb2faa2bf65ab1ba0d", + "sha256:a669cbe5be3c63f75bcbee0b266779706f1a54bcb1000f302685b87d1b8c1500", + "sha256:a8aae085ea549a1eddbc9298b113cffb75e514eadbb542133dd2b99b5fb3b6af", + "sha256:ae9597cab738e7cc823f04a704fb754a9249f0b6695a6aeb63b74055cd417a96", + "sha256:afe63b208153f3a7a2d1a5b9df452b0673082588933e54e7c8aac457cf35e758", + "sha256:b5a5bbe29c10c5bfd63893747a1bf6f8049df607638c786252cb9243b86b6706", + "sha256:baf7cee56bd552385c1ee39af360772fbfc2f43be005c78d1140204ad6148438", + "sha256:bb19e30fdae77d357ce92192a3504579abe48a66877f476880238a962e5b96db", + "sha256:bece9527f5a98466d67fb5d34dc560c4da964240d8b09024bb21c1246545e04e", + "sha256:c0cae71e20e3c02c52f6b9e9722bca70e4a90a466d59477822739dc31ac18b4b", + "sha256:c268b5100cfeaa222c40f55e169d484efa1384b44bf9ca415eae6d556f02cb08", + "sha256:c7b927155112ac858357ccf9d255dd8c044fd9ad2dc6ce4c4149527c901fa4c3", + "sha256:c884de19528e0fcd9dc34ee94c810581dd6e74aef75437ff17e696c2bfefae3e", + "sha256:cd2f75598ae70bcfca9117d9e51a3b06fe29edd972fdd7fd57cc97b4dbf3b08a", + "sha256:cf0e99cdb600eabcd1d65cdba0d3c91418fee21c4aa1d28db47d095b1064a7d8", + "sha256:d827099289c64589418ebbcaead0145cd19f4e3e8a93919a0100247af245fa00", + "sha256:e8040680eaacdce4d635f12c55c714f3d4c7f57da2bc47a01229d115bd319191", + "sha256:f0fda83e113bb0fb27dc003685f32a5dcb99c9c4f41f4fa0838ac35265c23b5c", + "sha256:f1ea21bef99c703f44444ad29c2c1b6bd55d202750b6de8e06a955380f4725d7", + "sha256:f6bacab7514de6146a1976bc56e1545bee247242fab030b89e5f70336fc0003e", + "sha256:fe147fcd85aaed53ce90645c91ed5fca0cc88a797314c70dfd9d35925bd5d106" + ], + "markers": "python_version >= '3.7'", + "version": "==2.0.40" + }, "starlette": { "hashes": [ "sha256:2cbcba2a75806f8a41c722141486f37c28e30a0921c5f6fe4346cb0dcee1302f", From 28152eba1a26140cfb237988e34f0359a72b591f Mon Sep 17 00:00:00 2001 From: leehk Date: Sun, 13 Apr 2025 06:32:54 +0800 Subject: [PATCH 14/45] change image version to bookworm --- app/backend/Dockerfile.prod | 44 ++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/app/backend/Dockerfile.prod b/app/backend/Dockerfile.prod index 39b27d1..12f7151 100644 --- a/app/backend/Dockerfile.prod +++ b/app/backend/Dockerfile.prod @@ -2,31 +2,31 @@ # BUILDER # ########### -# # pull official base image -# FROM python:3.11-slim as builder +# pull official base image +FROM python:3.11-slim-bookworm as builder -# # set working directory -# WORKDIR /usr/src/app +# set working directory +WORKDIR /usr/src/app -# # set environment variables -# ENV PYTHONDONTWRITEBYTECODE=1 -# ENV PYTHONUNBUFFERED=1 +# set environment variables +ENV PYTHONDONTWRITEBYTECODE=1 +ENV PYTHONUNBUFFERED=1 -# # install system dependencies -# RUN apt-get update \ -# && apt-get -y install build-essential netcat-traditional gcc \ -# && apt-get clean +# install system dependencies +RUN apt-get update \ + && apt-get -y install build-essential netcat-traditional gcc \ + && apt-get clean -# # install python dependencies -# RUN pip install --upgrade pip setuptools wheel -i https://pypi.tuna.tsinghua.edu.cn/simple -# RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pipenv -# COPY ./Pipfile . -# RUN pipenv install --deploy --dev +# install python dependencies +RUN pip install --upgrade pip setuptools wheel -i https://pypi.tuna.tsinghua.edu.cn/simple +RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pipenv +COPY ./Pipfile . +RUN pipenv install --deploy --dev -# # add app -# COPY . /usr/src/app -# RUN pipenv run pip install black==23.12.1 flake8==7.0.0 isort==5.13.2 +# add app +COPY . /usr/src/app +RUN pipenv run pip install black==23.12.1 flake8==7.0.0 isort==5.13.2 # RUN pipenv run flake8 . # RUN pipenv run black --exclude=migrations . --check # RUN pipenv run isort . --check-only @@ -36,7 +36,7 @@ ######### # pull official base image -FROM python:3.11-slim +FROM python:3.11-slim-bookworm # create directory for the app user RUN mkdir -p /home/app @@ -63,10 +63,9 @@ RUN apt-get update \ && apt-get clean # install python dependencies -# COPY --from=builder /usr/src/app/Pipfile . +COPY --from=builder /usr/src/app/Pipfile . RUN pip install --upgrade pip setuptools wheel -i https://pypi.tuna.tsinghua.edu.cn/simple RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pipenv -COPY ./Pipfile . RUN pipenv install --deploy --dev RUN pipenv run pip install "uvicorn[standard]==0.26.0" @@ -79,5 +78,6 @@ RUN chown -R app:app $APP_HOME # change to the app user USER app + # run gunicorn CMD pipenv run gunicorn --bind 0.0.0.0:$PORT backend.main:app -k uvicorn.workers.UvicornWorker \ No newline at end of file From faca3d23bbd2829c65e3b7dc35b91e86d85c347f Mon Sep 17 00:00:00 2001 From: leehk Date: Sun, 13 Apr 2025 06:47:15 +0800 Subject: [PATCH 15/45] update with Cleanup Docker resources --- .github/workflows/develop.yml | 10 +++++++++- app/backend/Dockerfile.prod | 4 ++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index bd90874..991a12d 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -16,6 +16,9 @@ jobs: contents: read packages: write steps: + - name: Cleanup Docker resources + if: always() + run: docker system prune -a -f --volumes - name: Checkout uses: actions/checkout@v3 with: @@ -37,6 +40,9 @@ jobs: - name: Push image run: | docker push ${{ env.IMAGE }}:latest + - name: Cleanup Docker resources + if: always() + run: docker system prune -a -f --volumes test: name: Test Docker Image @@ -61,7 +67,9 @@ jobs: --tag ${{ env.IMAGE }}:latest \ --file ./app/backend/Dockerfile.prod \ "./app/backend" - + - name: Cleanup Docker resources + if: always() + run: docker system prune -a -f --volumes - name: Run container run: | docker run \ diff --git a/app/backend/Dockerfile.prod b/app/backend/Dockerfile.prod index 12f7151..8f70f74 100644 --- a/app/backend/Dockerfile.prod +++ b/app/backend/Dockerfile.prod @@ -3,7 +3,7 @@ ########### # pull official base image -FROM python:3.11-slim-bookworm as builder +FROM python:3.11-slim as builder # set working directory @@ -36,7 +36,7 @@ RUN pipenv run pip install black==23.12.1 flake8==7.0.0 isort==5.13.2 ######### # pull official base image -FROM python:3.11-slim-bookworm +FROM python:3.11-slim # create directory for the app user RUN mkdir -p /home/app From e880d7196017027bc8ae8f604311c867d72834ab Mon Sep 17 00:00:00 2001 From: leehk Date: Sun, 13 Apr 2025 07:24:00 +0800 Subject: [PATCH 16/45] remove unnecessary packages --- .github/workflows/develop.yml | 23 ++++++++++++++++++----- app/backend/Dockerfile.prod | 23 +++++++++++++---------- 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index 991a12d..c10a006 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -16,9 +16,17 @@ jobs: contents: read packages: write steps: + - name: Check disk space + run: df -h - name: Cleanup Docker resources if: always() - run: docker system prune -a -f --volumes + run: | + docker system prune -a -f --volumes + docker volume rm $(docker volume ls -qf dangling=true) || true + docker rmi $(docker images -f "dangling=true" -q) || true + docker container prune -f + - name: Check disk space + run: df -h - name: Checkout uses: actions/checkout@v3 with: @@ -30,6 +38,8 @@ jobs: - name: Pull image run: | docker pull ${{ env.IMAGE }}:latest || true + - name: Check disk space + run: df -h - name: Build image run: | docker build \ @@ -49,6 +59,8 @@ jobs: runs-on: ubuntu-latest needs: build steps: + - name: Check disk space + run: df -h - name: Checkout uses: actions/checkout@v3 with: @@ -57,9 +69,14 @@ jobs: run: echo ${GITHUB_TOKEN} | docker login -u ${GITHUB_ACTOR} --password-stdin ghcr.io env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Cleanup Docker resources + if: always() + run: docker system prune -a -f --volumes - name: Pull image run: | docker pull ${{ env.IMAGE }}:latest || true + - name: Check disk space + run: df -h - name: Build image run: | docker build \ @@ -67,15 +84,11 @@ jobs: --tag ${{ env.IMAGE }}:latest \ --file ./app/backend/Dockerfile.prod \ "./app/backend" - - name: Cleanup Docker resources - if: always() - run: docker system prune -a -f --volumes - name: Run container run: | docker run \ -d \ --name backend \ - --memory 8g \ -e PORT=8765 \ -e ENVIRONMENT=dev \ -e TESTING=0 \ diff --git a/app/backend/Dockerfile.prod b/app/backend/Dockerfile.prod index 8f70f74..e60cad7 100644 --- a/app/backend/Dockerfile.prod +++ b/app/backend/Dockerfile.prod @@ -3,7 +3,7 @@ ########### # pull official base image -FROM python:3.11-slim as builder +FROM python:3.11-alpine as builder # set working directory @@ -15,12 +15,14 @@ ENV PYTHONUNBUFFERED=1 # install system dependencies RUN apt-get update \ - && apt-get -y install build-essential netcat-traditional gcc \ - && apt-get clean + && apt-get -y install build-essential \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + # install python dependencies -RUN pip install --upgrade pip setuptools wheel -i https://pypi.tuna.tsinghua.edu.cn/simple -RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pipenv +RUN pip install --upgrade pip setuptools wheel -i https://pypi.tuna.tsinghua.edu.cn/simple && rm -rf ~/.cache/pip +RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pipenv && rm -rf ~/.cache/pip COPY ./Pipfile . RUN pipenv install --deploy --dev @@ -36,7 +38,7 @@ RUN pipenv run pip install black==23.12.1 flake8==7.0.0 isort==5.13.2 ######### # pull official base image -FROM python:3.11-slim +FROM python:3.11-alpine # create directory for the app user RUN mkdir -p /home/app @@ -59,13 +61,14 @@ ENV TESTING=0 # install system dependencies RUN apt-get update \ - && apt-get -y install build-essential netcat-traditional gcc \ - && apt-get clean + && apt-get -y install build-essential \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* # install python dependencies COPY --from=builder /usr/src/app/Pipfile . -RUN pip install --upgrade pip setuptools wheel -i https://pypi.tuna.tsinghua.edu.cn/simple -RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pipenv +RUN pip install --upgrade pip setuptools wheel -i https://pypi.tuna.tsinghua.edu.cn/simple && rm -rf ~/.cache/pip +RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pipenv && rm -rf ~/.cache/pip RUN pipenv install --deploy --dev RUN pipenv run pip install "uvicorn[standard]==0.26.0" From 81e1ddc1c376c4bc5f9d5866c26ba4ae9e217fa7 Mon Sep 17 00:00:00 2001 From: leehk Date: Sun, 13 Apr 2025 07:28:40 +0800 Subject: [PATCH 17/45] update --- .github/workflows/develop.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index c10a006..ab3e1ec 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -21,10 +21,10 @@ jobs: - name: Cleanup Docker resources if: always() run: | - docker system prune -a -f --volumes - docker volume rm $(docker volume ls -qf dangling=true) || true - docker rmi $(docker images -f "dangling=true" -q) || true - docker container prune -f + docker system prune -a -f --volumes \ + && docker container prune -f \ + && docker image prune -f \ + && docker volume prune -f - name: Check disk space run: df -h - name: Checkout From 4c503415a6425f17c49e43f6bb54caf504e09525 Mon Sep 17 00:00:00 2001 From: leehk Date: Sun, 13 Apr 2025 07:43:46 +0800 Subject: [PATCH 18/45] remove more --- .github/workflows/develop.yml | 9 +++++---- app/backend/Dockerfile.prod | 4 +--- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index ab3e1ec..8ca6eca 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -21,10 +21,7 @@ jobs: - name: Cleanup Docker resources if: always() run: | - docker system prune -a -f --volumes \ - && docker container prune -f \ - && docker image prune -f \ - && docker volume prune -f + docker system prune -a -f --volumes - name: Check disk space run: df -h - name: Checkout @@ -50,9 +47,13 @@ jobs: - name: Push image run: | docker push ${{ env.IMAGE }}:latest + - name: Check disk space + run: df -h - name: Cleanup Docker resources if: always() run: docker system prune -a -f --volumes + - name: Check disk space + run: df -h test: name: Test Docker Image diff --git a/app/backend/Dockerfile.prod b/app/backend/Dockerfile.prod index e60cad7..62119ef 100644 --- a/app/backend/Dockerfile.prod +++ b/app/backend/Dockerfile.prod @@ -21,14 +21,13 @@ RUN apt-get update \ # install python dependencies -RUN pip install --upgrade pip setuptools wheel -i https://pypi.tuna.tsinghua.edu.cn/simple && rm -rf ~/.cache/pip RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pipenv && rm -rf ~/.cache/pip COPY ./Pipfile . RUN pipenv install --deploy --dev # add app COPY . /usr/src/app -RUN pipenv run pip install black==23.12.1 flake8==7.0.0 isort==5.13.2 +# RUN pipenv run pip install black==23.12.1 flake8==7.0.0 isort==5.13.2 # RUN pipenv run flake8 . # RUN pipenv run black --exclude=migrations . --check # RUN pipenv run isort . --check-only @@ -67,7 +66,6 @@ RUN apt-get update \ # install python dependencies COPY --from=builder /usr/src/app/Pipfile . -RUN pip install --upgrade pip setuptools wheel -i https://pypi.tuna.tsinghua.edu.cn/simple && rm -rf ~/.cache/pip RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pipenv && rm -rf ~/.cache/pip RUN pipenv install --deploy --dev RUN pipenv run pip install "uvicorn[standard]==0.26.0" From 4f1e842b7ce69e0c6e427a15b9461d4fde062861 Mon Sep 17 00:00:00 2001 From: leehk Date: Sun, 13 Apr 2025 08:36:14 +0800 Subject: [PATCH 19/45] update --- app/backend/Dockerfile.prod | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/app/backend/Dockerfile.prod b/app/backend/Dockerfile.prod index 62119ef..1f90c7d 100644 --- a/app/backend/Dockerfile.prod +++ b/app/backend/Dockerfile.prod @@ -3,7 +3,7 @@ ########### # pull official base image -FROM python:3.11-alpine as builder +FROM python:3.11-slim-bookworm AS builder # set working directory @@ -14,12 +14,10 @@ ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 # install system dependencies -RUN apt-get update \ - && apt-get -y install build-essential \ +RUN apt-get update && apt-get -y install build-essential \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* - # install python dependencies RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pipenv && rm -rf ~/.cache/pip COPY ./Pipfile . @@ -37,7 +35,7 @@ COPY . /usr/src/app ######### # pull official base image -FROM python:3.11-alpine +FROM python:3.11-slim-bookworm # create directory for the app user RUN mkdir -p /home/app From 8976b21a7f89ed9fa7dcd0b640a506e277ec4f4e Mon Sep 17 00:00:00 2001 From: Hong Kai LEE Date: Sun, 13 Apr 2025 11:17:27 +0800 Subject: [PATCH 20/45] Update Dockerfile.prod --- app/backend/Dockerfile.prod | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/backend/Dockerfile.prod b/app/backend/Dockerfile.prod index 1f90c7d..3afcd31 100644 --- a/app/backend/Dockerfile.prod +++ b/app/backend/Dockerfile.prod @@ -14,9 +14,9 @@ ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 # install system dependencies -RUN apt-get update && apt-get -y install build-essential \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* +# RUN apt-get update && apt-get -y install build-essential \ +# && apt-get clean \ +# && rm -rf /var/lib/apt/lists/* # install python dependencies RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pipenv && rm -rf ~/.cache/pip @@ -57,10 +57,10 @@ ENV ENVIRONMENT=prod ENV TESTING=0 # install system dependencies -RUN apt-get update \ - && apt-get -y install build-essential \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* +# RUN apt-get update \ +# && apt-get -y install build-essential \ +# && apt-get clean \ +#&& rm -rf /var/lib/apt/lists/* # install python dependencies COPY --from=builder /usr/src/app/Pipfile . From 5aa85841297770637aa928bb76e54d8a1689adef Mon Sep 17 00:00:00 2001 From: Hong Kai LEE Date: Sun, 13 Apr 2025 12:54:19 +0800 Subject: [PATCH 21/45] Update develop.yml --- .github/workflows/develop.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index 8ca6eca..b35df11 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -16,6 +16,12 @@ jobs: contents: read packages: write steps: + - name: Maximize build space + uses: easimon/maximize-build-space@master + with: + root-reserve-mb: 512 + swap-size-mb: 1024 + remove-dotnet: 'true' - name: Check disk space run: df -h - name: Cleanup Docker resources @@ -60,6 +66,12 @@ jobs: runs-on: ubuntu-latest needs: build steps: + - name: Maximize build space + uses: easimon/maximize-build-space@master + with: + root-reserve-mb: 512 + swap-size-mb: 1024 + remove-dotnet: 'true' - name: Check disk space run: df -h - name: Checkout From a1977ce654a2524f6b4050c5a9a1bfb0870cfa70 Mon Sep 17 00:00:00 2001 From: Hong Kai LEE Date: Sun, 13 Apr 2025 12:57:34 +0800 Subject: [PATCH 22/45] Update develop.yml --- .github/workflows/develop.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index b35df11..a700387 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -19,8 +19,6 @@ jobs: - name: Maximize build space uses: easimon/maximize-build-space@master with: - root-reserve-mb: 512 - swap-size-mb: 1024 remove-dotnet: 'true' - name: Check disk space run: df -h @@ -69,8 +67,6 @@ jobs: - name: Maximize build space uses: easimon/maximize-build-space@master with: - root-reserve-mb: 512 - swap-size-mb: 1024 remove-dotnet: 'true' - name: Check disk space run: df -h From 6771764e6a4de347d9c47294c45f744692ebdb58 Mon Sep 17 00:00:00 2001 From: leehk Date: Sun, 13 Apr 2025 13:28:29 +0800 Subject: [PATCH 23/45] udpate --- .github/workflows/develop.yml | 8 -------- app/backend/Dockerfile.prod | 4 ++-- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index a700387..8ca6eca 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -16,10 +16,6 @@ jobs: contents: read packages: write steps: - - name: Maximize build space - uses: easimon/maximize-build-space@master - with: - remove-dotnet: 'true' - name: Check disk space run: df -h - name: Cleanup Docker resources @@ -64,10 +60,6 @@ jobs: runs-on: ubuntu-latest needs: build steps: - - name: Maximize build space - uses: easimon/maximize-build-space@master - with: - remove-dotnet: 'true' - name: Check disk space run: df -h - name: Checkout diff --git a/app/backend/Dockerfile.prod b/app/backend/Dockerfile.prod index 3afcd31..be5adac 100644 --- a/app/backend/Dockerfile.prod +++ b/app/backend/Dockerfile.prod @@ -3,7 +3,7 @@ ########### # pull official base image -FROM python:3.11-slim-bookworm AS builder +FROM python:3.11-alpine AS builder # set working directory @@ -35,7 +35,7 @@ COPY . /usr/src/app ######### # pull official base image -FROM python:3.11-slim-bookworm +FROM python:3.11-alpine # create directory for the app user RUN mkdir -p /home/app From 6117af13e9a9f6f0f4b515c737ca4456df9bd5c0 Mon Sep 17 00:00:00 2001 From: leehk Date: Sun, 13 Apr 2025 13:42:31 +0800 Subject: [PATCH 24/45] update free space --- .github/workflows/develop.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index 8ca6eca..f2139d1 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -22,6 +22,12 @@ jobs: if: always() run: | docker system prune -a -f --volumes + - name: Remove unnecessary files + run: | + sudo rm -rf /usr/share/dotnet + sudo rm -rf /opt/ghc + sudo rm -rf "/usr/local/share/boost" + sudo rm -rf "$AGENT_TOOLSDIRECTORY" - name: Check disk space run: df -h - name: Checkout @@ -36,6 +42,7 @@ jobs: run: | docker pull ${{ env.IMAGE }}:latest || true - name: Check disk space + if: always() run: df -h - name: Build image run: | @@ -48,11 +55,13 @@ jobs: run: | docker push ${{ env.IMAGE }}:latest - name: Check disk space + if: always() run: df -h - name: Cleanup Docker resources if: always() run: docker system prune -a -f --volumes - name: Check disk space + if: always() run: df -h test: @@ -73,10 +82,17 @@ jobs: - name: Cleanup Docker resources if: always() run: docker system prune -a -f --volumes + - name: Remove unnecessary files + run: | + sudo rm -rf /usr/share/dotnet + sudo rm -rf /opt/ghc + sudo rm -rf "/usr/local/share/boost" + sudo rm -rf "$AGENT_TOOLSDIRECTORY" - name: Pull image run: | docker pull ${{ env.IMAGE }}:latest || true - name: Check disk space + if: always() run: df -h - name: Build image run: | @@ -85,6 +101,9 @@ jobs: --tag ${{ env.IMAGE }}:latest \ --file ./app/backend/Dockerfile.prod \ "./app/backend" + - name: Check disk space + if: always() + run: df -h - name: Run container run: | docker run \ From 5a8ecc6a077f7b21748a09379f2568455613c3e6 Mon Sep 17 00:00:00 2001 From: leehk Date: Sun, 13 Apr 2025 14:17:34 +0800 Subject: [PATCH 25/45] add memory --- .github/workflows/develop.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index f2139d1..aaea053 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -113,8 +113,16 @@ jobs: -e ENVIRONMENT=dev \ -e TESTING=0 \ -p 8004:8765 \ + --memory="2g" \ + --memory-swap="3g" \ ${{ env.IMAGE }}:latest - + - name: Increase swap space + run: | + sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 + sudo mkswap /swapfile + sudo swapon /swapfile + - name: Monitor memory usage + run: free -h - name: Pytest run: docker exec backend pipenv run python -m pytest tests --disable-warnings # - name: Flake8 From 774713b66c09e7701373fa43261bf278bdadb3c4 Mon Sep 17 00:00:00 2001 From: leehk Date: Sun, 13 Apr 2025 15:38:00 +0800 Subject: [PATCH 26/45] remove fail --- .github/workflows/develop.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index aaea053..5cb21f8 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -116,11 +116,6 @@ jobs: --memory="2g" \ --memory-swap="3g" \ ${{ env.IMAGE }}:latest - - name: Increase swap space - run: | - sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 - sudo mkswap /swapfile - sudo swapon /swapfile - name: Monitor memory usage run: free -h - name: Pytest From d2f17fe523fdca2497ba088c182c7ae65ac4e840 Mon Sep 17 00:00:00 2001 From: leehk Date: Sun, 13 Apr 2025 16:17:27 +0800 Subject: [PATCH 27/45] update memory usage --- .github/workflows/develop.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index 5cb21f8..db94157 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -113,8 +113,8 @@ jobs: -e ENVIRONMENT=dev \ -e TESTING=0 \ -p 8004:8765 \ - --memory="2g" \ - --memory-swap="3g" \ + --memory="4g" \ + --memory-swap="5g" \ ${{ env.IMAGE }}:latest - name: Monitor memory usage run: free -h From 212e2a5f950be5b8040e6b7a486468302cd43b06 Mon Sep 17 00:00:00 2001 From: leehk Date: Sun, 13 Apr 2025 17:30:47 +0800 Subject: [PATCH 28/45] update to remove some tests --- app/backend/tests/api/{test_chatbot.py => _test_chatbot.py} | 0 app/backend/tests/api/{test_utils.py => _test_utils.py} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename app/backend/tests/api/{test_chatbot.py => _test_chatbot.py} (100%) rename app/backend/tests/api/{test_utils.py => _test_utils.py} (100%) diff --git a/app/backend/tests/api/test_chatbot.py b/app/backend/tests/api/_test_chatbot.py similarity index 100% rename from app/backend/tests/api/test_chatbot.py rename to app/backend/tests/api/_test_chatbot.py diff --git a/app/backend/tests/api/test_utils.py b/app/backend/tests/api/_test_utils.py similarity index 100% rename from app/backend/tests/api/test_utils.py rename to app/backend/tests/api/_test_utils.py From b98f4ba772f0371d7e822fa17a6cf5fc544fe872 Mon Sep 17 00:00:00 2001 From: leehk Date: Sun, 13 Apr 2025 17:32:16 +0800 Subject: [PATCH 29/45] change back to slim image --- app/backend/Dockerfile.prod | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/backend/Dockerfile.prod b/app/backend/Dockerfile.prod index be5adac..3afcd31 100644 --- a/app/backend/Dockerfile.prod +++ b/app/backend/Dockerfile.prod @@ -3,7 +3,7 @@ ########### # pull official base image -FROM python:3.11-alpine AS builder +FROM python:3.11-slim-bookworm AS builder # set working directory @@ -35,7 +35,7 @@ COPY . /usr/src/app ######### # pull official base image -FROM python:3.11-alpine +FROM python:3.11-slim-bookworm # create directory for the app user RUN mkdir -p /home/app From 1b7f9cebdc61c2cedaa402246396d474dfa6baed Mon Sep 17 00:00:00 2001 From: leehk Date: Sun, 13 Apr 2025 18:07:36 +0800 Subject: [PATCH 30/45] removed all tests --- app/backend/tests/{test_ping.py => _test_ping.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename app/backend/tests/{test_ping.py => _test_ping.py} (100%) diff --git a/app/backend/tests/test_ping.py b/app/backend/tests/_test_ping.py similarity index 100% rename from app/backend/tests/test_ping.py rename to app/backend/tests/_test_ping.py From d2b85fb428a785b0fb761c613921843033d3b474 Mon Sep 17 00:00:00 2001 From: leehk Date: Sun, 13 Apr 2025 18:22:38 +0800 Subject: [PATCH 31/45] run on host directly --- .github/workflows/develop.yml | 7 +++++-- app/backend/Dockerfile.prod | 2 ++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index db94157..460450a 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -114,12 +114,15 @@ jobs: -e TESTING=0 \ -p 8004:8765 \ --memory="4g" \ - --memory-swap="5g" \ + --memory-swap="8g" \ ${{ env.IMAGE }}:latest - name: Monitor memory usage run: free -h + - name: Run Pytest directly + run: | + cd ./app/backend/ && pipenv install && pipenv run python -m pytest --disable-warnings - name: Pytest - run: docker exec backend pipenv run python -m pytest tests --disable-warnings + run: docker exec backend pipenv run python -m pytest -v # - name: Flake8 # run: docker exec backend pipenv run python -m flake8 . # - name: Black diff --git a/app/backend/Dockerfile.prod b/app/backend/Dockerfile.prod index 3afcd31..7b88ab4 100644 --- a/app/backend/Dockerfile.prod +++ b/app/backend/Dockerfile.prod @@ -77,6 +77,8 @@ RUN chown -R app:app $APP_HOME # change to the app user USER app +# pytest +RUN pipenv run pytest --disable-warnings -v # run gunicorn CMD pipenv run gunicorn --bind 0.0.0.0:$PORT backend.main:app -k uvicorn.workers.UvicornWorker \ No newline at end of file From 2a50cc697da97008aa8aae7452b01c54c5e99bd9 Mon Sep 17 00:00:00 2001 From: leehk Date: Sun, 13 Apr 2025 19:25:33 +0800 Subject: [PATCH 32/45] install pipenv on host --- .github/workflows/develop.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index 460450a..1b45135 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -120,7 +120,7 @@ jobs: run: free -h - name: Run Pytest directly run: | - cd ./app/backend/ && pipenv install && pipenv run python -m pytest --disable-warnings + pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pipenv && cd ./app/backend/ && pipenv install && pipenv run python -m pytest --disable-warnings - name: Pytest run: docker exec backend pipenv run python -m pytest -v # - name: Flake8 From 39b52fafaca23d322d4f6d5a0686f903dc65c9b9 Mon Sep 17 00:00:00 2001 From: leehk Date: Sun, 13 Apr 2025 20:40:43 +0800 Subject: [PATCH 33/45] install python 3.11 --- .github/workflows/develop.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index 1b45135..41ea875 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -120,7 +120,10 @@ jobs: run: free -h - name: Run Pytest directly run: | - pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pipenv && cd ./app/backend/ && pipenv install && pipenv run python -m pytest --disable-warnings + # install python 3.11 and pip3 + sudo apt-get update + sudo apt-get install -y python3.11 python3.11-distutils + pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pipenv && cd ./app/backend/ && pipenv install && pipenv run python -m pytest --disable-warnings - name: Pytest run: docker exec backend pipenv run python -m pytest -v # - name: Flake8 From 41e49d9b48d2b76a7518ad7bdac72c35ab317759 Mon Sep 17 00:00:00 2001 From: leehk Date: Sun, 13 Apr 2025 21:23:11 +0800 Subject: [PATCH 34/45] test renaming docker --- .github/workflows/develop.yml | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index 41ea875..bbec52b 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -108,13 +108,11 @@ jobs: run: | docker run \ -d \ - --name backend \ + --name backend-backend \ -e PORT=8765 \ -e ENVIRONMENT=dev \ -e TESTING=0 \ -p 8004:8765 \ - --memory="4g" \ - --memory-swap="8g" \ ${{ env.IMAGE }}:latest - name: Monitor memory usage run: free -h @@ -125,13 +123,13 @@ jobs: sudo apt-get install -y python3.11 python3.11-distutils pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pipenv && cd ./app/backend/ && pipenv install && pipenv run python -m pytest --disable-warnings - name: Pytest - run: docker exec backend pipenv run python -m pytest -v + run: docker exec backend-backend pipenv run python -m pytest -v # - name: Flake8 - # run: docker exec backend pipenv run python -m flake8 . + # run: docker exec backend-backend pipenv run python -m flake8 . # - name: Black - # run: docker exec backend pipenv run python -m black . --check + # run: docker exec backend-backend pipenv run python -m black . --check # - name: isort - # run: docker exec backend pipenv run python -m isort . --check-only + # run: docker exec backend-backend pipenv run python -m isort . --check-only - name: Cleanup container at end of job if: always() - run: docker stop backend || true && docker rm backend || true + run: docker stop backend-backend || true && docker rm backend-backend || true From c7848cc8ecb8754fcc4d6c979c720c557fe919e9 Mon Sep 17 00:00:00 2001 From: leehk Date: Sun, 13 Apr 2025 21:38:17 +0800 Subject: [PATCH 35/45] update --- .github/workflows/develop.yml | 12 ++++++------ app/backend/main.py | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index bbec52b..b3af16f 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -116,12 +116,12 @@ jobs: ${{ env.IMAGE }}:latest - name: Monitor memory usage run: free -h - - name: Run Pytest directly - run: | - # install python 3.11 and pip3 - sudo apt-get update - sudo apt-get install -y python3.11 python3.11-distutils - pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pipenv && cd ./app/backend/ && pipenv install && pipenv run python -m pytest --disable-warnings + # - name: Run Pytest directly + # run: | + # # install python 3.11 and pip3 + # sudo apt-get update + # sudo apt-get install -y python3.11 python3.11-distutils + # pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pipenv && cd ./app/backend/ && pipenv install && pipenv run python -m pytest --disable-warnings - name: Pytest run: docker exec backend-backend pipenv run python -m pytest -v # - name: Flake8 diff --git a/app/backend/main.py b/app/backend/main.py index 7ec349d..d0488ee 100644 --- a/app/backend/main.py +++ b/app/backend/main.py @@ -11,7 +11,7 @@ from api import ping, chatbot log = logging.getLogger("uvicorn") -origins = ["http://localhost:3000"] +origins = ["http://localhost:8004"] def create_application() -> FastAPI: application = FastAPI() @@ -32,5 +32,5 @@ app.add_middleware( ) -if __name__ == "__main__": - uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=True) \ No newline at end of file +# if __name__ == "__main__": +# uvicorn.run("main:app", host="0.0.0.0", port=8765, reload=True) \ No newline at end of file From c8e8088422951192e5038f2c3f427debadea2bdc Mon Sep 17 00:00:00 2001 From: leehk Date: Sun, 13 Apr 2025 21:49:46 +0800 Subject: [PATCH 36/45] check if isort working --- .github/workflows/develop.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index b3af16f..460968a 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -122,14 +122,14 @@ jobs: # sudo apt-get update # sudo apt-get install -y python3.11 python3.11-distutils # pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pipenv && cd ./app/backend/ && pipenv install && pipenv run python -m pytest --disable-warnings - - name: Pytest - run: docker exec backend-backend pipenv run python -m pytest -v + # - name: Pytest + # run: docker exec backend-backend pipenv run python -m pytest -v # - name: Flake8 # run: docker exec backend-backend pipenv run python -m flake8 . # - name: Black # run: docker exec backend-backend pipenv run python -m black . --check - # - name: isort - # run: docker exec backend-backend pipenv run python -m isort . --check-only + - name: isort + run: docker exec backend-backend pipenv run python -m isort . --check-only - name: Cleanup container at end of job if: always() run: docker stop backend-backend || true && docker rm backend-backend || true From 7dc41ec69bf11d40130afd1450932198d7e9e7c6 Mon Sep 17 00:00:00 2001 From: leehk Date: Mon, 14 Apr 2025 06:32:28 +0800 Subject: [PATCH 37/45] fixed isort --- app/backend/api/chatbot.py | 20 +++++--------------- app/backend/api/utils.py | 4 +++- app/backend/config.py | 1 - app/backend/main.py | 8 +++----- app/backend/models/adaptive_rag/routing.py | 1 + app/backend/tests/api/_test_chatbot.py | 8 +++----- app/backend/tests/api/_test_utils.py | 2 ++ app/backend/tests/conftest.py | 2 +- 8 files changed, 18 insertions(+), 28 deletions(-) diff --git a/app/backend/api/chatbot.py b/app/backend/api/chatbot.py index 6767c0e..7eaf282 100644 --- a/app/backend/api/chatbot.py +++ b/app/backend/api/chatbot.py @@ -1,23 +1,13 @@ -from decouple import config - -import os import json +import os -from fastapi import ( - APIRouter, - WebSocketDisconnect -) - -from fastapi import WebSocket, WebSocketDisconnect - +from decouple import config +from fastapi import APIRouter, WebSocket, WebSocketDisconnect from langchain_deepseek import ChatDeepSeek +from models.adaptive_rag import grading, query, routing + from .utils import ConnectionManager -from models.adaptive_rag import ( - query, - routing, - grading -) router = APIRouter() diff --git a/app/backend/api/utils.py b/app/backend/api/utils.py index d96c8f1..54767aa 100644 --- a/app/backend/api/utils.py +++ b/app/backend/api/utils.py @@ -1,7 +1,9 @@ -from typing import List import json +from typing import List + from fastapi import WebSocket + class ConnectionManager: def __init__(self): self.active_connections: List[WebSocket] = [] diff --git a/app/backend/config.py b/app/backend/config.py index aeb1a82..32ef3d6 100644 --- a/app/backend/config.py +++ b/app/backend/config.py @@ -3,7 +3,6 @@ from functools import lru_cache from pydantic_settings import BaseSettings - log = logging.getLogger("uvicorn") diff --git a/app/backend/main.py b/app/backend/main.py index d0488ee..6aefd7c 100644 --- a/app/backend/main.py +++ b/app/backend/main.py @@ -1,13 +1,11 @@ import logging import uvicorn -from fastapi import FastAPI, Depends +from fastapi import Depends, FastAPI from fastapi.middleware.cors import CORSMiddleware - -from config import get_settings, Settings - -from api import ping, chatbot +from api import chatbot, ping +from config import Settings, get_settings log = logging.getLogger("uvicorn") diff --git a/app/backend/models/adaptive_rag/routing.py b/app/backend/models/adaptive_rag/routing.py index 5c3286f..569daeb 100644 --- a/app/backend/models/adaptive_rag/routing.py +++ b/app/backend/models/adaptive_rag/routing.py @@ -1,4 +1,5 @@ from typing import Literal + from pydantic import BaseModel, Field diff --git a/app/backend/tests/api/_test_chatbot.py b/app/backend/tests/api/_test_chatbot.py index 6c40686..f861c03 100644 --- a/app/backend/tests/api/_test_chatbot.py +++ b/app/backend/tests/api/_test_chatbot.py @@ -1,13 +1,11 @@ +import json import os import sys -import json -from unittest.mock import AsyncMock, MagicMock import unittest +from unittest.mock import AsyncMock, MagicMock -from unittest.mock import AsyncMock from fastapi import WebSocket, WebSocketDisconnect sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))) -from api.chatbot import websocket_endpoint, manager, llm_chat - +from api.chatbot import llm_chat, manager, websocket_endpoint diff --git a/app/backend/tests/api/_test_utils.py b/app/backend/tests/api/_test_utils.py index 796fcda..81f168c 100644 --- a/app/backend/tests/api/_test_utils.py +++ b/app/backend/tests/api/_test_utils.py @@ -2,12 +2,14 @@ import os import sys import unittest from unittest.mock import AsyncMock, MagicMock + from fastapi import WebSocket sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))) from api.utils import ConnectionManager + class TestConnectionManager(unittest.IsolatedAsyncioTestCase): async def asyncSetUp(self): self.manager = ConnectionManager() diff --git a/app/backend/tests/conftest.py b/app/backend/tests/conftest.py index ef86afb..4d1f93a 100644 --- a/app/backend/tests/conftest.py +++ b/app/backend/tests/conftest.py @@ -1,7 +1,7 @@ import pytest from starlette.testclient import TestClient -from config import get_settings, Settings +from config import Settings, get_settings from main import create_application From a8bad1341ea306679b0ca23f476ec59945382ec8 Mon Sep 17 00:00:00 2001 From: leehk Date: Mon, 14 Apr 2025 09:56:15 +0800 Subject: [PATCH 38/45] check for errors log --- .github/workflows/develop.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index 460968a..78292b7 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -104,6 +104,8 @@ jobs: - name: Check disk space if: always() run: df -h + - name: Validate Docker image + run: docker inspect ${{ env.IMAGE }}:latest - name: Run container run: | docker run \ @@ -116,6 +118,11 @@ jobs: ${{ env.IMAGE }}:latest - name: Monitor memory usage run: free -h + - name: Test port accessibility + run: curl -v http://localhost:8004 || echo "Service not reachable" + - name: Get container logs + if: failure() + run: docker logs backend-backend # - name: Run Pytest directly # run: | # # install python 3.11 and pip3 From c5e3c884be5c7f776b735b65d555e99dc6b5de03 Mon Sep 17 00:00:00 2001 From: leehk Date: Mon, 14 Apr 2025 11:22:40 +0800 Subject: [PATCH 39/45] update with environment secret --- .github/workflows/develop.yml | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index 78292b7..947bcc6 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -68,6 +68,9 @@ jobs: name: Test Docker Image runs-on: ubuntu-latest needs: build + permissions: + contents: read + packages: write steps: - name: Check disk space run: df -h @@ -111,11 +114,15 @@ jobs: docker run \ -d \ --name backend-backend \ - -e PORT=8765 \ - -e ENVIRONMENT=dev \ - -e TESTING=0 \ -p 8004:8765 \ ${{ env.IMAGE }}:latest + env: + DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }} + DEEPSEEK_API_URL: ${{ secrets.DEEPSEEK_API_URL }} + ENVIRONMENT: dev + TESTING: 0 + PORT: 8765 + - name: Monitor memory usage run: free -h - name: Test port accessibility From b01234170f2653fb3aa7720d91a2d4b6a87f2063 Mon Sep 17 00:00:00 2001 From: leehk Date: Mon, 14 Apr 2025 12:05:32 +0800 Subject: [PATCH 40/45] use -e in docker run too --- .github/workflows/develop.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index 947bcc6..a08a7af 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -113,6 +113,12 @@ jobs: run: | docker run \ -d \ + -e DEEPSEEK_API_KEY=${{ secrets.DEEPSEEK_API_KEY }} \ + -e DEEPSEEK_API_URL=${{ secrets.DEEPSEEK_API_URL }} \ + -e ENVIRONMENT=dev \ + -e TESTING=0 \ + -e PORT=8765 \ + -e LOG_LEVEL=DEBUG \ --name backend-backend \ -p 8004:8765 \ ${{ env.IMAGE }}:latest From 131fe235719346775e3e3df65e11003166202963 Mon Sep 17 00:00:00 2001 From: leehk Date: Mon, 14 Apr 2025 13:10:36 +0800 Subject: [PATCH 41/45] update --- .github/workflows/develop.yml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index a08a7af..17dce1b 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -122,17 +122,11 @@ jobs: --name backend-backend \ -p 8004:8765 \ ${{ env.IMAGE }}:latest - env: - DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }} - DEEPSEEK_API_URL: ${{ secrets.DEEPSEEK_API_URL }} - ENVIRONMENT: dev - TESTING: 0 - PORT: 8765 - name: Monitor memory usage run: free -h - name: Test port accessibility - run: curl -v http://localhost:8004 || echo "Service not reachable" + run: curl -v http://localhost:8004 - name: Get container logs if: failure() run: docker logs backend-backend From 9d33cb538fc368da7e9153bf1a4b26dea64927a7 Mon Sep 17 00:00:00 2001 From: leehk Date: Mon, 14 Apr 2025 13:43:49 +0800 Subject: [PATCH 42/45] update --- .github/workflows/develop.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index 17dce1b..daa4c50 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -126,7 +126,14 @@ jobs: - name: Monitor memory usage run: free -h - name: Test port accessibility - run: curl -v http://localhost:8004 + run: | + # Attempt to connect to the service on localhost:8004 + echo "Testing port accessibility on localhost:8004..." + curl -v http://localhost:8004 || { + echo "Port 8004 is not accessible!" + exit 1 + } + echo "Port 8004 is accessible." - name: Get container logs if: failure() run: docker logs backend-backend From 6a70b31973b596828a7c311349fb28d5922f7aee Mon Sep 17 00:00:00 2001 From: leehk Date: Mon, 14 Apr 2025 13:45:47 +0800 Subject: [PATCH 43/45] TAVILY_API_KEY --- .github/workflows/develop.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index daa4c50..827fc70 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -114,7 +114,7 @@ jobs: docker run \ -d \ -e DEEPSEEK_API_KEY=${{ secrets.DEEPSEEK_API_KEY }} \ - -e DEEPSEEK_API_URL=${{ secrets.DEEPSEEK_API_URL }} \ + -e TAVILY_API_KEY=${{ secrets.TAVILY_API_KEY }} \ -e ENVIRONMENT=dev \ -e TESTING=0 \ -e PORT=8765 \ From b9b6766229347d5c56a00214c299520e2081aa20 Mon Sep 17 00:00:00 2001 From: leehk Date: Mon, 14 Apr 2025 14:23:48 +0800 Subject: [PATCH 44/45] removed port test --- .github/workflows/develop.yml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index 827fc70..da7891c 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -125,15 +125,6 @@ jobs: - name: Monitor memory usage run: free -h - - name: Test port accessibility - run: | - # Attempt to connect to the service on localhost:8004 - echo "Testing port accessibility on localhost:8004..." - curl -v http://localhost:8004 || { - echo "Port 8004 is not accessible!" - exit 1 - } - echo "Port 8004 is accessible." - name: Get container logs if: failure() run: docker logs backend-backend From 75cc74f2fa75efcf8549a968989ff0c710d0018b Mon Sep 17 00:00:00 2001 From: leehk Date: Mon, 14 Apr 2025 14:25:07 +0800 Subject: [PATCH 45/45] update --- .github/workflows/develop.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index da7891c..669e049 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -122,7 +122,6 @@ jobs: --name backend-backend \ -p 8004:8765 \ ${{ env.IMAGE }}:latest - - name: Monitor memory usage run: free -h - name: Get container logs