From d5a33f251635be6a15d499d0a9b04b8b624132ed Mon Sep 17 00:00:00 2001 From: SubhadityaMukherjee Date: Fri, 18 Oct 2024 15:27:40 +0200 Subject: [PATCH] fixed docker finally --- .dockerignore | 35 ++++- Dockerfile | 86 ++++++++---- README.Docker.md | 22 +++ backend/Dockerfile | 18 --- compose.yaml | 53 +++++++ docker-compose-old.yml | 78 ----------- docker-compose.yml | 17 --- requirements.txt | 309 +++++++++++++++++++++++++++++++++++++++++ 8 files changed, 475 insertions(+), 143 deletions(-) create mode 100644 README.Docker.md delete mode 100644 backend/Dockerfile create mode 100644 compose.yaml delete mode 100644 docker-compose-old.yml delete mode 100644 docker-compose.yml create mode 100644 requirements.txt diff --git a/.dockerignore b/.dockerignore index 6b8710a..03a268b 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1 +1,34 @@ -.git +# Include any files or directories that you don't want to be copied to your +# container here (e.g., local build artifacts, temporary files, etc.). +# +# For more help, visit the .dockerignore file reference guide at +# https://docs.docker.com/go/build-context-dockerignore/ + +**/.DS_Store +**/__pycache__ +**/.venv +**/.classpath +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/bin +**/charts +**/docker-compose* +**/compose.y*ml +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md diff --git a/Dockerfile b/Dockerfile index b35b913..e6baad4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,41 +1,69 @@ -# Dockerfile +# syntax=docker/dockerfile:1 -# Use a base image with Python -FROM python:3.10.14 +# Comments are provided throughout this file to help you get started. +# If you need more help, visit the Dockerfile reference guide at +# https://docs.docker.com/go/dockerfile-reference/ -# Set environment variables -ENV PYTHONDONTWRITEBYTECODE=1 -ENV PYTHONUNBUFFERED=1 +# Want to help us make this template better? Share your feedback here: https://forms.gle/ybq9Krt8jtBL3iCk7 -# Set the working directory -WORKDIR /app +ARG PYTHON_VERSION=3.10.14 +FROM python:${PYTHON_VERSION} as base -# Install system dependencies -RUN apt-get update && \ - apt-get install -y jq && \ - apt-get clean +# Prevents Python from writing pyc files. +ENV PYTHONDONTWRITEBYTECODE=1 -# Copy the Poetry lock files and install Poetry -COPY pyproject.toml poetry.lock ./ -RUN pip install poetry && poetry config virtualenvs.create false && poetry install --no-dev -# Install ollama -RUN curl -fsSL https://ollama.com/install.sh | sh +# Keeps Python from buffering stdout and stderr to avoid situations where +# the application crashes without emitting any logs due to buffering. +ENV PYTHONUNBUFFERED=1 -RUN ollama serve& -# RUN while [ "$(ollama list | grep 'NAME')" == "" ]; do sleep 1 done -# RUN until ollama list | grep -q 'NAME'; do sleep 1; done -# RUN timeout 120 bash -c 'until ollama list | grep -q "NAME"; do sleep 1; done' -RUN ollama serve & sleep 5 && ollama run llama3 +WORKDIR /app +# Create a non-privileged user that the app will run under. +# See https://docs.docker.com/go/dockerfile-user-best-practices/ +# ARG UID=10001 +# RUN adduser \ +# --disabled-password \ +# --gecos "" \ +# --home "/nonexistent" \ +# --shell "/sbin/nologin" \ +# --no-create-home \ +# --uid "${UID}" \ +# appuser +# Download dependencies as a separate step to take advantage of Docker's caching. +# Leverage a cache mount to /root/.cache/pip to speed up subsequent builds. +# Leverage a bind mount to requirements.txt to avoid having to copy them into +# into this layer. +RUN --mount=type=cache,target=/root/.cache/pip \ + --mount=type=bind,source=requirements.txt,target=requirements.txt \ + python -m pip install -r requirements.txt -# RUN ollama pull llama3 +# Switch to the non-privileged user to run the application. +# USER appuser -# Copy the application code -COPY . . +# Copy the source code into the container. +COPY ./data ./data +COPY ./backend ./backend +COPY ./documentation_bot ./documentation_bot +COPY ./frontend ./frontend +COPY ./structured_query ./structured_query +COPY ./ollama ./ollama +COPY ./llm_service ./llm_service +COPY ./start_docker_local.sh ./start_docker_local.sh +COPY ./start_local.sh ./start_local.sh +COPY ./start_training.sh ./start_training.sh +COPY ./stop_docker.sh ./stop_docker.sh -# Expose the necessary ports -EXPOSE 8000 8081 8083 8050 11434 8501 +RUN curl -fsSL https://ollama.com/install.sh | sh +RUN ollama serve & sleep 5 && ollama run llama3 +# Expose the port that the application listens on. +EXPOSE 8000 +EXPOSE 8081 +EXPOSE 8083 +EXPOSE 8501 +EXPOSE 11434 -# Start the application -CMD ["bash", "start_docker_local.sh"] +# Run the application. +# CMD uvicorn 'backend.backend:app' --host=0.0.0.0 --port=8000 +# CMD [ "ls" ] +CMD [ "./start_docker_local.sh" ] diff --git a/README.Docker.md b/README.Docker.md new file mode 100644 index 0000000..6dae561 --- /dev/null +++ b/README.Docker.md @@ -0,0 +1,22 @@ +### Building and running your application + +When you're ready, start your application by running: +`docker compose up --build`. + +Your application will be available at http://localhost:8000. + +### Deploying your application to the cloud + +First, build your image, e.g.: `docker build -t myapp .`. +If your cloud uses a different CPU architecture than your development +machine (e.g., you are on a Mac M1 and your cloud provider is amd64), +you'll want to build the image for that platform, e.g.: +`docker build --platform=linux/amd64 -t myapp .`. + +Then, push it to your registry, e.g. `docker push myregistry.com/myapp`. + +Consult Docker's [getting started](https://docs.docker.com/go/get-started-sharing/) +docs for more detail on building and pushing. + +### References +* [Docker's Python guide](https://docs.docker.com/language/python/) \ No newline at end of file diff --git a/backend/Dockerfile b/backend/Dockerfile deleted file mode 100644 index e3a9cfd..0000000 --- a/backend/Dockerfile +++ /dev/null @@ -1,18 +0,0 @@ -FROM python:3.10.14 -RUN mkdir /fastapi -COPY ./backend /fastapi -WORKDIR /fastapi - -RUN pip install -r requirements.txt - -#COPY . /fastapi -# COPY modules /fastapi -# COPY *.py /fastapi -# COPY *.json /fastapi -# COPY *.html /fastapi - -# RUN ollama pull qwen2:1.5b - -EXPOSE 8000 - -ENTRYPOINT ["uvicorn", "backend:app", "--host", "0.0.0.0", "--port", "8000"] \ No newline at end of file diff --git a/compose.yaml b/compose.yaml new file mode 100644 index 0000000..61f8fa8 --- /dev/null +++ b/compose.yaml @@ -0,0 +1,53 @@ +# Comments are provided throughout this file to help you get started. +# If you need more help, visit the Docker Compose reference guide at +# https://docs.docker.com/go/compose-spec-reference/ + +# Here the instructions define your application as a service called "server". +# This service is built from the Dockerfile in the current directory. +# You can add other services your application may depend on here, such as a +# database or a cache. For examples, see the Awesome Compose repository: +# https://github.com/docker/awesome-compose +services: + server: + build: + context: . + ports: + - 8000:8000 + - 8081:8081 + - 8083:8083 + - 8501:8501 + - 11434:11434 + +# The commented out section below is an example of how to define a PostgreSQL +# database that your application can use. `depends_on` tells Docker Compose to +# start the database before your application. The `db-data` volume persists the +# database data between container restarts. The `db-password` secret is used +# to set the database password. You must create `db/password.txt` and add +# a password of your choosing to it before running `docker compose up`. +# depends_on: +# db: +# condition: service_healthy +# db: +# image: postgres +# restart: always +# user: postgres +# secrets: +# - db-password +# volumes: +# - db-data:/var/lib/postgresql/data +# environment: +# - POSTGRES_DB=example +# - POSTGRES_PASSWORD_FILE=/run/secrets/db-password +# expose: +# - 5432 +# healthcheck: +# test: [ "CMD", "pg_isready" ] +# interval: 10s +# timeout: 5s +# retries: 5 +# volumes: +# db-data: +# secrets: +# db-password: +# file: db/password.txt + diff --git a/docker-compose-old.yml b/docker-compose-old.yml deleted file mode 100644 index c6a137e..0000000 --- a/docker-compose-old.yml +++ /dev/null @@ -1,78 +0,0 @@ -services: - ollama: - image: ollama/ollama:latest - ports: - - 11434:11434 - networks: - - deploy_network - container_name: ollama - volumes: - - ./ollama/get_ollama.sh:/get_ollama.sh - # - ./data/:/data - entrypoint: ["/bin/bash", "/get_ollama.sh", "&&", "ollama", "run", "llama3"] - - - fastapi: - build: - context: . - dockerfile: backend/Dockerfile - ports: - - 8000:8000 - networks: - - deploy_network - depends_on: - - ollama - container_name: fastapi - volumes: - - ./data/:/data - - llmservice: - build: structured_query - ports: - - 8081:8081 - networks: - - deploy_network - depends_on: - - ollama - container_name: llmservice - volumes: - - ./data/:/data - - documentation_bot: - build: documentation_bot - ports: - - 8083:8083 - networks: - - deploy_network - depends_on: - - fastapi - - ollama - container_name: documentation_query - volumes: - - ./data/:/data - deploy: - resources: - limits: - memory: "8g" - restart_policy: - condition: on-failure - delay: 50s - - streamlit: - build: - context: . - dockerfile: frontend/Dockerfile - depends_on: - - fastapi - - ollama - ports: - - 8501:8501 - networks: - - deploy_network - container_name: streamlit - volumes: - - ./data/:/data - -networks: - deploy_network: - driver: bridge diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index f8e413d..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,17 +0,0 @@ -services: - app: - build: . - volumes: - - .:/app # Mount the current directory to the container - ports: - - "8000:8000" - - "8081:8081" - - "8083:8083" - environment: - - PYTHONUNBUFFERED=1 - networks: - - mynetwork - -networks: - mynetwork: - driver: bridge diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..0699cac --- /dev/null +++ b/requirements.txt @@ -0,0 +1,309 @@ +aiofiles==23.2.1 ; python_version >= "3.10" and python_version < "4.0" +aiohappyeyeballs==2.4.0 ; python_version >= "3.10" and python_version < "4.0" +aiohttp==3.10.5 ; python_version >= "3.10" and python_version < "4.0" +aiosignal==1.3.1 ; python_version >= "3.10" and python_version < "4.0" +altair==5.4.0 ; python_version >= "3.10" and python_version < "4.0" +annotated-types==0.7.0 ; python_version >= "3.10" and python_version < "4.0" +anyio==4.4.0 ; python_version >= "3.10" and python_version < "4.0" +appnope==0.1.4 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Darwin" +argon2-cffi-bindings==21.2.0 ; python_version >= "3.10" and python_version < "4.0" +argon2-cffi==23.1.0 ; python_version >= "3.10" and python_version < "4.0" +asgiref==3.8.1 ; python_version >= "3.10" and python_version < "4.0" +asttokens==2.4.1 ; python_version >= "3.10" and python_version < "4.0" +async-timeout==4.0.3 ; python_version >= "3.10" and python_version < "3.11" +attrs==24.2.0 ; python_version >= "3.10" and python_version < "4.0" +babel==2.16.0 ; python_version >= "3.10" and python_version < "4.0" +backoff==2.2.1 ; python_version >= "3.10" and python_version < "4.0" +bcrypt==4.2.0 ; python_version >= "3.10" and python_version < "4.0" +beautifulsoup4==4.12.3 ; python_version >= "3.10" and python_version < "4.0" +bleach==6.1.0 ; python_version >= "3.10" and python_version < "4.0" +blinker==1.8.2 ; python_version >= "3.10" and python_version < "4.0" +bounded-pool-executor==0.0.3 ; python_version >= "3.10" and python_version < "4.0" +bracex==2.5 ; python_version >= "3.10" and python_version < "4.0" +brotli==1.1.0 ; python_version >= "3.10" and python_version < "4.0" +build==1.2.1 ; python_version >= "3.10" and python_version < "4.0" +cachecontrol[filecache]==0.14.0 ; python_version >= "3.10" and python_version < "4.0" +cachetools==5.5.0 ; python_version >= "3.10" and python_version < "4.0" +certifi==2024.7.4 ; python_version >= "3.10" and python_version < "4.0" +cffi==1.17.0 ; python_version >= "3.10" and python_version < "4.0" +charset-normalizer==3.3.2 ; python_version >= "3.10" and python_version < "4.0" +chroma-hnswlib==0.7.3 ; python_version >= "3.10" and python_version < "4.0" +chromadb==0.5.0 ; python_version >= "3.10" and python_version < "4.0" +cleo==2.1.0 ; python_version >= "3.10" and python_version < "4.0" +click==8.1.7 ; python_version >= "3.10" and python_version < "4.0" +colorama==0.4.6 ; python_version >= "3.10" and python_version < "4.0" +coloredlogs==15.0.1 ; python_version >= "3.10" and python_version < "4.0" +comm==0.2.2 ; python_version >= "3.10" and python_version < "4.0" +configargparse==1.7 ; python_version >= "3.10" and python_version < "4.0" +crashtest==0.4.1 ; python_version >= "3.10" and python_version < "4.0" +cryptography==43.0.0 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "linux" +dataclasses-json==0.6.7 ; python_version >= "3.10" and python_version < "4.0" +debtcollector==3.0.0 ; python_version >= "3.10" and python_version < "4.0" +debugpy==1.8.5 ; python_version >= "3.10" and python_version < "4.0" +decorator==5.1.1 ; python_version >= "3.10" and python_version < "4.0" +defusedxml==0.7.1 ; python_version >= "3.10" and python_version < "4.0" +deprecated==1.2.14 ; python_version >= "3.10" and python_version < "4.0" +diskcache==5.6.3 ; python_version >= "3.10" and python_version < "4.0" +distlib==0.3.8 ; python_version >= "3.10" and python_version < "4.0" +distro==1.9.0 ; python_version >= "3.10" and python_version < "4.0" +dnspython==2.6.1 ; python_version >= "3.10" and python_version < "4.0" +dulwich==0.21.7 ; python_version >= "3.10" and python_version < "4.0" +elastic-transport==8.15.0 ; python_version >= "3.10" and python_version < "4.0" +elasticsearch[vectorstore-mmr]==8.15.0 ; python_version >= "3.10" and python_version < "4.0" +email-validator==2.2.0 ; python_version >= "3.10" and python_version < "4.0" +exceptiongroup==1.2.2 ; python_version >= "3.10" and python_version < "3.11" +executing==2.0.1 ; python_version >= "3.10" and python_version < "4.0" +fastapi-cli==0.0.5 ; python_version >= "3.10" and python_version < "4.0" +fastapi==0.111.0 ; python_version >= "3.10" and python_version < "4.0" +fasteners==0.19 ; python_version >= "3.10" and python_version < "4.0" +fastjsonschema==2.20.0 ; python_version >= "3.10" and python_version < "4.0" +filelock==3.15.4 ; python_version >= "3.10" and python_version < "4.0" +flashrank==0.2.5 ; python_version >= "3.10" and python_version < "4.0" +flask-cors==4.0.1 ; python_version >= "3.10" and python_version < "4.0" +flask-login==0.6.3 ; python_version >= "3.10" and python_version < "4.0" +flask==3.0.3 ; python_version >= "3.10" and python_version < "4.0" +flatbuffers==24.3.25 ; python_version >= "3.10" and python_version < "4.0" +frozenlist==1.4.1 ; python_version >= "3.10" and python_version < "4.0" +fsspec==2024.6.1 ; python_version >= "3.10" and python_version < "4.0" +gevent==24.2.1 ; python_version >= "3.10" and python_version < "4.0" +geventhttpclient==2.3.1 ; python_version >= "3.10" and python_version < "4.0" +ghp-import==2.1.0 ; python_version >= "3.10" and python_version < "4.0" +gitdb==4.0.11 ; python_version >= "3.10" and python_version < "4.0" +gitpython==3.1.43 ; python_version >= "3.10" and python_version < "4.0" +google-auth==2.34.0 ; python_version >= "3.10" and python_version < "4.0" +googleapis-common-protos==1.56.4 ; python_version >= "3.10" and python_version < "4.0" +greenlet==3.0.3 ; (platform_machine == "aarch64" or platform_machine == "ppc64le" or platform_machine == "x86_64" or platform_machine == "amd64" or platform_machine == "AMD64" or platform_machine == "win32" or platform_machine == "WIN32") and python_version < "3.13" and python_version >= "3.10" or platform_python_implementation == "CPython" and python_version >= "3.10" and python_version < "4.0" +griffe==1.2.0 ; python_version >= "3.10" and python_version < "4.0" +grpcio==1.66.0 ; python_version >= "3.10" and python_version < "4.0" +h11==0.14.0 ; python_version >= "3.10" and python_version < "4.0" +httpcore==1.0.5 ; python_version >= "3.10" and python_version < "4.0" +httptools==0.6.1 ; python_version >= "3.10" and python_version < "4.0" +httpx==0.27.0 ; python_version >= "3.10" and python_version < "4.0" +huggingface-hub==0.24.6 ; python_version >= "3.10" and python_version < "4.0" +humanfriendly==10.0 ; python_version >= "3.10" and python_version < "4.0" +idna==3.8 ; python_version >= "3.10" and python_version < "4.0" +importlib-metadata==8.0.0 ; python_version >= "3.10" and python_version < "4.0" +importlib-resources==6.4.4 ; python_version >= "3.10" and python_version < "4.0" +installer==0.7.0 ; python_version >= "3.10" and python_version < "4.0" +intel-openmp==2021.4.0 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Windows" +ipykernel==6.29.5 ; python_version >= "3.10" and python_version < "4.0" +ipython==8.26.0 ; python_version >= "3.10" and python_version < "4.0" +iso8601==2.1.0 ; python_version >= "3.10" and python_version < "4.0" +itsdangerous==2.2.0 ; python_version >= "3.10" and python_version < "4.0" +jaraco-classes==3.4.0 ; python_version >= "3.10" and python_version < "4.0" +jedi==0.19.1 ; python_version >= "3.10" and python_version < "4.0" +jeepney==0.8.0 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "linux" +jinja2==3.1.4 ; python_version >= "3.10" and python_version < "4.0" +jiter==0.5.0 ; python_version >= "3.10" and python_version < "4.0" +joblib==1.4.2 ; python_version >= "3.10" and python_version < "4.0" +jsonpatch==1.33 ; python_version >= "3.10" and python_version < "4.0" +jsonpointer==3.0.0 ; python_version >= "3.10" and python_version < "4.0" +jsonschema-specifications==2023.12.1 ; python_version >= "3.10" and python_version < "4.0" +jsonschema==4.23.0 ; python_version >= "3.10" and python_version < "4.0" +jupyter-client==8.6.2 ; python_version >= "3.10" and python_version < "4.0" +jupyter-core==5.7.2 ; python_version >= "3.10" and python_version < "4.0" +jupyterlab-pygments==0.3.0 ; python_version >= "3.10" and python_version < "4.0" +jupytext==1.16.4 ; python_version >= "3.10" and python_version < "4.0" +keyring==24.3.1 ; python_version >= "3.10" and python_version < "4.0" +kubernetes==30.1.0 ; python_version >= "3.10" and python_version < "4.0" +langchain-community==0.2.0 ; python_version >= "3.10" and python_version < "4.0" +langchain-core==0.2.35 ; python_version >= "3.10" and python_version < "4.0" +langchain-elasticsearch==0.2.2 ; python_version >= "3.10" and python_version < "4.0" +langchain-ollama==0.1.1 ; python_version >= "3.10" and python_version < "4.0" +langchain-openai==0.1.7 ; python_version >= "3.10" and python_version < "4.0" +langchain-text-splitters==0.2.0 ; python_version >= "3.10" and python_version < "4.0" +langchain==0.2.0 ; python_version >= "3.10" and python_version < "4.0" +langchainhub==0.1.20 ; python_version >= "3.10" and python_version < "4.0" +langsmith==0.1.104 ; python_version >= "3.10" and python_version < "4.0" +liac-arff==2.5.0 ; python_version >= "3.10" and python_version < "4.0" +llama-cpp-python==0.2.67 ; python_version >= "3.10" and python_version < "4.0" +locust==2.29.0 ; python_version >= "3.10" and python_version < "4.0" +markdown-it-py==3.0.0 ; python_version >= "3.10" and python_version < "4.0" +markdown==3.7 ; python_version >= "3.10" and python_version < "4.0" +markupsafe==2.1.5 ; python_version >= "3.10" and python_version < "4.0" +marshmallow==3.22.0 ; python_version >= "3.10" and python_version < "4.0" +matplotlib-inline==0.1.7 ; python_version >= "3.10" and python_version < "4.0" +mdit-py-plugins==0.4.1 ; python_version >= "3.10" and python_version < "4.0" +mdurl==0.1.2 ; python_version >= "3.10" and python_version < "4.0" +mergedeep==1.3.4 ; python_version >= "3.10" and python_version < "4.0" +minio==7.2.8 ; python_version >= "3.10" and python_version < "4.0" +mistune==3.0.2 ; python_version >= "3.10" and python_version < "4.0" +mkdocs-autorefs==1.0.1 ; python_version >= "3.10" and python_version < "4.0" +mkdocs-awesome-pages-plugin==2.9.2 ; python_version >= "3.10" and python_version < "4.0" +mkdocs-get-deps==0.2.0 ; python_version >= "3.10" and python_version < "4.0" +mkdocs-jupyter==0.24.7 ; python_version >= "3.10" and python_version < "4.0" +mkdocs-material-extensions==1.3.1 ; python_version >= "3.10" and python_version < "4.0" +mkdocs-material==9.5.20 ; python_version >= "3.10" and python_version < "4.0" +mkdocs-redirects==1.2.1 ; python_version >= "3.10" and python_version < "4.0" +mkdocs==1.6.0 ; python_version >= "3.10" and python_version < "4.0" +mkdocstrings-python==1.10.4 ; python_version >= "3.10" and python_version < "4.0" +mkdocstrings==0.25.1 ; python_version >= "3.10" and python_version < "4.0" +mkl==2021.4.0 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Windows" +mknotebooks==0.8.0 ; python_version >= "3.10" and python_version < "4.0" +mmh3==4.1.0 ; python_version >= "3.10" and python_version < "4.0" +monotonic==1.6 ; python_version >= "3.10" and python_version < "4.0" +more-itertools==10.4.0 ; python_version >= "3.10" and python_version < "4.0" +mpmath==1.3.0 ; python_version >= "3.10" and python_version < "4.0" +msgpack==1.0.8 ; python_version >= "3.10" and python_version < "4.0" +multidict==6.0.5 ; python_version >= "3.10" and python_version < "4.0" +mypy-extensions==1.0.0 ; python_version >= "3.10" and python_version < "4.0" +narwhals==1.5.5 ; python_version >= "3.10" and python_version < "4.0" +natsort==8.4.0 ; python_version >= "3.10" and python_version < "4.0" +nbclient==0.10.0 ; python_version >= "3.10" and python_version < "4.0" +nbconvert==7.16.4 ; python_version >= "3.10" and python_version < "4.0" +nbformat==5.10.4 ; python_version >= "3.10" and python_version < "4.0" +nest-asyncio==1.6.0 ; python_version >= "3.10" and python_version < "4.0" +netaddr==1.3.0 ; python_version >= "3.10" and python_version < "4.0" +netifaces==0.11.0 ; python_version >= "3.10" and python_version < "4.0" +networkx==3.3 ; python_version >= "3.10" and python_version < "4.0" +numpy==1.26.4 ; python_version >= "3.10" and python_version < "4.0" +nvidia-cublas-cu12==12.1.3.1 ; platform_system == "Linux" and platform_machine == "x86_64" and python_version >= "3.10" and python_version < "4.0" +nvidia-cuda-cupti-cu12==12.1.105 ; platform_system == "Linux" and platform_machine == "x86_64" and python_version >= "3.10" and python_version < "4.0" +nvidia-cuda-nvrtc-cu12==12.1.105 ; platform_system == "Linux" and platform_machine == "x86_64" and python_version >= "3.10" and python_version < "4.0" +nvidia-cuda-runtime-cu12==12.1.105 ; platform_system == "Linux" and platform_machine == "x86_64" and python_version >= "3.10" and python_version < "4.0" +nvidia-cudnn-cu12==8.9.2.26 ; platform_system == "Linux" and platform_machine == "x86_64" and python_version >= "3.10" and python_version < "4.0" +nvidia-cufft-cu12==11.0.2.54 ; platform_system == "Linux" and platform_machine == "x86_64" and python_version >= "3.10" and python_version < "4.0" +nvidia-curand-cu12==10.3.2.106 ; platform_system == "Linux" and platform_machine == "x86_64" and python_version >= "3.10" and python_version < "4.0" +nvidia-cusolver-cu12==11.4.5.107 ; platform_system == "Linux" and platform_machine == "x86_64" and python_version >= "3.10" and python_version < "4.0" +nvidia-cusparse-cu12==12.1.0.106 ; platform_system == "Linux" and platform_machine == "x86_64" and python_version >= "3.10" and python_version < "4.0" +nvidia-nccl-cu12==2.20.5 ; platform_system == "Linux" and platform_machine == "x86_64" and python_version >= "3.10" and python_version < "4.0" +nvidia-nvjitlink-cu12==12.6.20 ; platform_system == "Linux" and platform_machine == "x86_64" and python_version >= "3.10" and python_version < "4.0" +nvidia-nvtx-cu12==12.1.105 ; platform_system == "Linux" and platform_machine == "x86_64" and python_version >= "3.10" and python_version < "4.0" +oauthlib==3.2.2 ; python_version >= "3.10" and python_version < "4.0" +ollama==0.3.1 ; python_version >= "3.10" and python_version < "4.0" +onnxruntime==1.19.0 ; python_version >= "3.10" and python_version < "4.0" +openai==1.42.0 ; python_version >= "3.10" and python_version < "4.0" +openml==0.14.1 ; python_version >= "3.10" and python_version < "4.0" +opentelemetry-api==1.26.0 ; python_version >= "3.10" and python_version < "4.0" +opentelemetry-exporter-otlp-proto-common==1.26.0 ; python_version >= "3.10" and python_version < "4.0" +opentelemetry-exporter-otlp-proto-grpc==1.26.0 ; python_version >= "3.10" and python_version < "4.0" +opentelemetry-instrumentation-asgi==0.47b0 ; python_version >= "3.10" and python_version < "4.0" +opentelemetry-instrumentation-fastapi==0.47b0 ; python_version >= "3.10" and python_version < "4.0" +opentelemetry-instrumentation==0.47b0 ; python_version >= "3.10" and python_version < "4.0" +opentelemetry-proto==1.26.0 ; python_version >= "3.10" and python_version < "4.0" +opentelemetry-sdk==1.26.0 ; python_version >= "3.10" and python_version < "4.0" +opentelemetry-semantic-conventions==0.47b0 ; python_version >= "3.10" and python_version < "4.0" +opentelemetry-util-http==0.47b0 ; python_version >= "3.10" and python_version < "4.0" +orjson==3.10.7 ; python_version >= "3.10" and python_version < "4.0" +oslo-concurrency==6.0.0 ; python_version >= "3.10" and python_version < "4.0" +oslo-config==9.6.0 ; python_version >= "3.10" and python_version < "4.0" +oslo-i18n==6.4.0 ; python_version >= "3.10" and python_version < "4.0" +oslo-utils==7.3.0 ; python_version >= "3.10" and python_version < "4.0" +overrides==7.7.0 ; python_version >= "3.10" and python_version < "4.0" +packaging==24.1 ; python_version >= "3.10" and python_version < "4.0" +paginate==0.5.7 ; python_version >= "3.10" and python_version < "4.0" +pandas==2.2.2 ; python_version >= "3.10" and python_version < "4.0" +pandocfilters==1.5.1 ; python_version >= "3.10" and python_version < "4.0" +parso==0.8.4 ; python_version >= "3.10" and python_version < "4.0" +pathspec==0.12.1 ; python_version >= "3.10" and python_version < "4.0" +pbr==6.0.0 ; python_version >= "3.10" and python_version < "4.0" +pexpect==4.9.0 ; python_version >= "3.10" and python_version < "4.0" +pillow==10.4.0 ; python_version >= "3.10" and python_version < "4.0" +pkginfo==1.11.1 ; python_version >= "3.10" and python_version < "4.0" +platformdirs==4.2.2 ; python_version >= "3.10" and python_version < "4.0" +poetry-core==1.9.0 ; python_version >= "3.10" and python_version < "4.0" +poetry-plugin-export==1.8.0 ; python_version >= "3.10" and python_version < "4.0" +poetry==1.8.3 ; python_version >= "3.10" and python_version < "4.0" +posthog==3.5.2 ; python_version >= "3.10" and python_version < "4.0" +pqdm==0.2.0 ; python_version >= "3.10" and python_version < "4.0" +prompt-toolkit==3.0.47 ; python_version >= "3.10" and python_version < "4.0" +protobuf==3.20.0 ; python_version >= "3.10" and python_version < "4.0" +psutil==6.0.0 ; python_version >= "3.10" and python_version < "4.0" +ptyprocess==0.7.0 ; python_version >= "3.10" and python_version < "4.0" +pure-eval==0.2.3 ; python_version >= "3.10" and python_version < "4.0" +pyarrow==17.0.0 ; python_version >= "3.10" and python_version < "4.0" +pyasn1-modules==0.4.0 ; python_version >= "3.10" and python_version < "4.0" +pyasn1==0.6.0 ; python_version >= "3.10" and python_version < "4.0" +pycparser==2.22 ; python_version >= "3.10" and python_version < "4.0" +pycryptodome==3.20.0 ; python_version >= "3.10" and python_version < "4.0" +pydantic-core==2.20.1 ; python_version >= "3.10" and python_version < "4.0" +pydantic==2.8.2 ; python_version >= "3.10" and python_version < "4.0" +pydeck==0.9.1 ; python_version >= "3.10" and python_version < "4.0" +pygments==2.17.2 ; python_version >= "3.10" and python_version < "4.0" +pymdown-extensions==10.9 ; python_version >= "3.10" and python_version < "4.0" +pyparsing==3.1.4 ; python_version >= "3.10" and python_version < "4.0" +pypika==0.48.9 ; python_version >= "3.10" and python_version < "4.0" +pyproject-hooks==1.1.0 ; python_version >= "3.10" and python_version < "4.0" +pyreadline3==3.4.1 ; sys_platform == "win32" and python_version >= "3.10" and python_version < "4.0" +python-dateutil==2.9.0.post0 ; python_version >= "3.10" and python_version < "4.0" +python-dotenv==1.0.1 ; python_version >= "3.10" and python_version < "4.0" +python-multipart==0.0.9 ; python_version >= "3.10" and python_version < "4.0" +pytz==2024.1 ; python_version >= "3.10" and python_version < "4.0" +pywin32-ctypes==0.2.3 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "win32" +pywin32==306 ; python_version >= "3.10" and python_version < "4.0" and (platform_system == "Windows" or sys_platform == "win32") and (platform_system == "Windows" or platform_python_implementation != "PyPy") +pyyaml-env-tag==0.1 ; python_version >= "3.10" and python_version < "4.0" +pyyaml==6.0.2 ; python_version >= "3.10" and python_version < "4.0" +pyzmq==26.2.0 ; python_version >= "3.10" and python_version < "4.0" +rapidfuzz==3.9.6 ; python_version >= "3.10" and python_version < "4.0" +referencing==0.35.1 ; python_version >= "3.10" and python_version < "4.0" +regex==2024.7.24 ; python_version >= "3.10" and python_version < "4.0" +requests-oauthlib==2.0.0 ; python_version >= "3.10" and python_version < "4.0" +requests-toolbelt==1.0.0 ; python_version >= "3.10" and python_version < "4.0" +requests==2.32.3 ; python_version >= "3.10" and python_version < "4.0" +rfc3986==2.0.0 ; python_version >= "3.10" and python_version < "4.0" +rich==13.7.1 ; python_version >= "3.10" and python_version < "4.0" +rpds-py==0.20.0 ; python_version >= "3.10" and python_version < "4.0" +rsa==4.9 ; python_version >= "3.10" and python_version < "4" +safetensors==0.4.4 ; python_version >= "3.10" and python_version < "4.0" +scikit-learn==1.5.1 ; python_version >= "3.10" and python_version < "4.0" +scipy==1.14.1 ; python_version >= "3.10" and python_version < "4.0" +secretstorage==3.3.3 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "linux" +sentence-transformers==2.7.0 ; python_version >= "3.10" and python_version < "4.0" +setuptools==73.0.1 ; python_version >= "3.10" and python_version < "4.0" +shellingham==1.5.4 ; python_version >= "3.10" and python_version < "4.0" +simsimd==5.0.1 ; python_version >= "3.10" and python_version < "4.0" +six==1.16.0 ; python_version >= "3.10" and python_version < "4.0" +smmap==5.0.1 ; python_version >= "3.10" and python_version < "4.0" +sniffio==1.3.1 ; python_version >= "3.10" and python_version < "4.0" +soupsieve==2.6 ; python_version >= "3.10" and python_version < "4.0" +sqlalchemy==2.0.32 ; python_version >= "3.10" and python_version < "4.0" +stack-data==0.6.3 ; python_version >= "3.10" and python_version < "4.0" +starlette==0.37.2 ; python_version >= "3.10" and python_version < "4.0" +stevedore==5.3.0 ; python_version >= "3.10" and python_version < "4.0" +streamlit-feedback==0.1.3 ; python_version >= "3.10" and python_version < "4.0" +streamlit==1.36.0 ; python_version >= "3.10" and python_version < "4.0" +sympy==1.13.2 ; python_version >= "3.10" and python_version < "4.0" +tbb==2021.13.1 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Windows" +tenacity==8.3.0 ; python_version >= "3.10" and python_version < "4.0" +threadpoolctl==3.5.0 ; python_version >= "3.10" and python_version < "4.0" +tiktoken==0.7.0 ; python_version >= "3.10" and python_version < "4.0" +tinycss2==1.3.0 ; python_version >= "3.10" and python_version < "4.0" +tokenizers==0.19.1 ; python_version >= "3.10" and python_version < "4.0" +toml==0.10.2 ; python_version >= "3.10" and python_version < "4.0" +tomli==2.0.1 ; python_version >= "3.10" and python_version < "3.11" +tomlkit==0.13.2 ; python_version >= "3.10" and python_version < "4.0" +torch==2.3.0 ; python_version >= "3.10" and python_version < "4.0" +tornado==6.4.1 ; python_version >= "3.10" and python_version < "4.0" +tqdm==4.66.4 ; python_version >= "3.10" and python_version < "4.0" +traitlets==5.14.3 ; python_version >= "3.10" and python_version < "4.0" +transformers==4.44.2 ; python_version >= "3.10" and python_version < "4.0" +triton==2.3.0 ; platform_system == "Linux" and platform_machine == "x86_64" and python_version < "3.12" and python_version >= "3.10" +trove-classifiers==2024.7.2 ; python_version >= "3.10" and python_version < "4.0" +typer==0.12.5 ; python_version >= "3.10" and python_version < "4.0" +types-requests==2.31.0.6 ; python_version >= "3.10" and python_version < "4.0" +types-urllib3==1.26.25.14 ; python_version >= "3.10" and python_version < "4.0" +typing-extensions==4.12.2 ; python_version >= "3.10" and python_version < "4.0" +typing-inspect==0.9.0 ; python_version >= "3.10" and python_version < "4.0" +tzdata==2024.1 ; python_version >= "3.10" and python_version < "4.0" +ujson==5.10.0 ; python_version >= "3.10" and python_version < "4.0" +urllib3==1.26.19 ; python_version >= "3.10" and python_version < "4.0" +uvicorn==0.29.0 ; python_version >= "3.10" and python_version < "4.0" +uvicorn[standard]==0.29.0 ; python_version >= "3.10" and python_version < "4.0" +uvloop==0.20.0 ; (sys_platform != "win32" and sys_platform != "cygwin") and platform_python_implementation != "PyPy" and python_version >= "3.10" and python_version < "4.0" +virtualenv==20.26.3 ; python_version >= "3.10" and python_version < "4.0" +watchdog==4.0.2 ; python_version >= "3.10" and python_version < "4.0" +watchfiles==0.23.0 ; python_version >= "3.10" and python_version < "4.0" +wcmatch==9.0 ; python_version >= "3.10" and python_version < "4.0" +wcwidth==0.2.13 ; python_version >= "3.10" and python_version < "4.0" +webencodings==0.5.1 ; python_version >= "3.10" and python_version < "4.0" +websocket-client==1.8.0 ; python_version >= "3.10" and python_version < "4.0" +websockets==13.0 ; python_version >= "3.10" and python_version < "4.0" +werkzeug==3.0.4 ; python_version >= "3.10" and python_version < "4.0" +wrapt==1.16.0 ; python_version >= "3.10" and python_version < "4.0" +xattr==1.1.0 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "darwin" +xmltodict==0.13.0 ; python_version >= "3.10" and python_version < "4.0" +yarl==1.9.4 ; python_version >= "3.10" and python_version < "4.0" +zipp==3.20.0 ; python_version >= "3.10" and python_version < "4.0" +zope-event==5.0 ; python_version >= "3.10" and python_version < "4.0" +zope-interface==7.0.1 ; python_version >= "3.10" and python_version < "4.0" +lark==1.2.2 \ No newline at end of file