From 03eda61a61b4e772c6283164b180f5988c7461c6 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 10 Jan 2024 16:47:24 +0530 Subject: [PATCH 01/27] build(config.yml): change base image --- .circleci/config.yml | 49 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 40 insertions(+), 9 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 56f9a15fe3a..b9cabe0e060 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -40,6 +40,7 @@ jobs: pip install "httpx==0.24.1" pip install "anyio==3.7.1" pip install "asyncio==3.4.3" + pip install "PyGithub==1.59.1" - save_cache: paths: - ./venv @@ -83,6 +84,43 @@ jobs: - store_test_results: path: test-results + build_and_test: + docker: + - image: circleci/python + working_directory: ~/project + steps: + - checkout + - setup_remote_docker: + version: 20.10.6 + docker_layer_caching: true + - run: + name: Build Docker image + command: docker build -t my-app:latest -f Dockerfile.database . + - run: + name: Run Docker container + command: | + docker run -d \ + -p 4000:4000 \ + --name my-app \ + -v $(pwd)/proxy_server_config.yaml:/app/config.yaml \ + my-app:latest \ + --config /app/config.yaml + - run: + name: Install curl and dockerize + command: | + sudo apt-get update + sudo apt-get install -y curl + sudo wget https://github.com/jwilder/dockerize/releases/download/v0.6.1/dockerize-linux-amd64-v0.6.1.tar.gz + sudo tar -C /usr/local/bin -xzvf dockerize-linux-amd64-v0.6.1.tar.gz + sudo rm dockerize-linux-amd64-v0.6.1.tar.gz + - run: + name: Wait for app to be ready + command: dockerize -wait tcp://localhost:4000 -timeout 1m + - run: + name: Test the application + command: curl -s "http://localhost:4000/health/readiness" + + publish_to_pypi: docker: - image: cimg/python:3.8 @@ -158,16 +196,9 @@ workflows: version: 2 build_and_test: jobs: - - local_testing: + - build_and_test: filters: branches: only: - main - - /litellm_.*/ - - publish_to_pypi: - requires: - - local_testing - filters: - branches: - only: - - main \ No newline at end of file + - /litellm_.*/ \ No newline at end of file From 1b72819eb85d679759f53a0fc899e62f008e79a6 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 10 Jan 2024 16:50:50 +0530 Subject: [PATCH 02/27] build(dockerfile.database): modify --- Dockerfile.database | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Dockerfile.database b/Dockerfile.database index d826896d714..ed29b25e69d 100644 --- a/Dockerfile.database +++ b/Dockerfile.database @@ -11,8 +11,7 @@ WORKDIR /app # Install build dependencies RUN apt-get clean && apt-get update && \ - apt-get install -y gcc python3-dev && \ - rm -rf /var/lib/apt/lists/* + apt-get install -y gcc python3-dev RUN pip install --upgrade pip && \ pip install build From 655087a61abeef649544d65ff855ac28a2532956 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 10 Jan 2024 16:54:04 +0530 Subject: [PATCH 03/27] build(Dockerfile.database): remove post hook apt clean up actions (temporary) --- Dockerfile.database | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Dockerfile.database b/Dockerfile.database index ed29b25e69d..43db5be7d7c 100644 --- a/Dockerfile.database +++ b/Dockerfile.database @@ -9,10 +9,16 @@ FROM $LITELLM_BUILD_IMAGE as builder # Set the working directory to /app WORKDIR /app -# Install build dependencies +# Temporarily disable APT's post-invoke clean-up actions +RUN mv /etc/apt/apt.conf.d/docker-clean /tmp + +# Perform APT operations RUN apt-get clean && apt-get update && \ apt-get install -y gcc python3-dev +# If needed, re-enable APT's post-invoke actions by moving docker-clean back +# RUN mv /tmp/docker-clean /etc/apt/apt.conf.d/docker-clean + RUN pip install --upgrade pip && \ pip install build From 3cb9ea50c80927a90eca60205135379ac5e3f071 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 10 Jan 2024 16:56:02 +0530 Subject: [PATCH 04/27] build(config.yml): try different img base --- .circleci/config.yml | 7 ++++++- Dockerfile.database | 11 +++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index b9cabe0e060..75e890319d1 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -86,13 +86,18 @@ jobs: build_and_test: docker: - - image: circleci/python + - image: cimg/python:3.9 working_directory: ~/project steps: - checkout - setup_remote_docker: version: 20.10.6 docker_layer_caching: true + - run: + name: Install Docker CLI (In case it's not already installed) + command: | + sudo apt-get update + sudo apt-get install -y docker-ce docker-ce-cli containerd.io - run: name: Build Docker image command: docker build -t my-app:latest -f Dockerfile.database . diff --git a/Dockerfile.database b/Dockerfile.database index 43db5be7d7c..d826896d714 100644 --- a/Dockerfile.database +++ b/Dockerfile.database @@ -9,15 +9,10 @@ FROM $LITELLM_BUILD_IMAGE as builder # Set the working directory to /app WORKDIR /app -# Temporarily disable APT's post-invoke clean-up actions -RUN mv /etc/apt/apt.conf.d/docker-clean /tmp - -# Perform APT operations +# Install build dependencies RUN apt-get clean && apt-get update && \ - apt-get install -y gcc python3-dev - -# If needed, re-enable APT's post-invoke actions by moving docker-clean back -# RUN mv /tmp/docker-clean /etc/apt/apt.conf.d/docker-clean + apt-get install -y gcc python3-dev && \ + rm -rf /var/lib/apt/lists/* RUN pip install --upgrade pip && \ pip install build From 90d87c76027960b08f011cc4573477a7e9da13f6 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 10 Jan 2024 17:03:24 +0530 Subject: [PATCH 05/27] build(config.yml): switch base image --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 75e890319d1..30f5a3d9a0d 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -85,8 +85,8 @@ jobs: path: test-results build_and_test: - docker: - - image: cimg/python:3.9 + machine: + image: ubuntu-2204:2023.02.1 working_directory: ~/project steps: - checkout From bff5068e5d0ddedd1ea80e703cf64d73807abd7f Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 10 Jan 2024 17:04:33 +0530 Subject: [PATCH 06/27] build(config.yml): fix file --- .circleci/config.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 30f5a3d9a0d..f88d461c84d 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -85,8 +85,10 @@ jobs: path: test-results build_and_test: - machine: - image: ubuntu-2204:2023.02.1 + executors: + docker-machine: + docker: + - image: ubuntu-2204:2023.02.1 working_directory: ~/project steps: - checkout From 49b6c075571998badd0a889c2a3c89d534bb7642 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 10 Jan 2024 17:06:42 +0530 Subject: [PATCH 07/27] build(config.yml): file fix --- .circleci/config.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f88d461c84d..ecdd282b619 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -85,10 +85,8 @@ jobs: path: test-results build_and_test: - executors: - docker-machine: - docker: - - image: ubuntu-2204:2023.02.1 + docker: + - image: ubuntu-2204:2023.02.1 working_directory: ~/project steps: - checkout From 5b1601a70bf237115d6c96e9c8d9fe91e5f75c14 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 10 Jan 2024 17:09:51 +0530 Subject: [PATCH 08/27] build(config.yml): fixes --- .circleci/config.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index ecdd282b619..89b7a16605f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -85,14 +85,11 @@ jobs: path: test-results build_and_test: - docker: - - image: ubuntu-2204:2023.02.1 + machine: + image: ubuntu-2204:2023.10.1 working_directory: ~/project steps: - checkout - - setup_remote_docker: - version: 20.10.6 - docker_layer_caching: true - run: name: Install Docker CLI (In case it's not already installed) command: | From 8b1c21c1565291000252d04811461ede3ebda967 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 10 Jan 2024 17:17:32 +0530 Subject: [PATCH 09/27] build(config.yml): comment out dockerize --- .circleci/config.yml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 89b7a16605f..df955fb8e82 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -107,17 +107,17 @@ jobs: -v $(pwd)/proxy_server_config.yaml:/app/config.yaml \ my-app:latest \ --config /app/config.yaml - - run: - name: Install curl and dockerize - command: | - sudo apt-get update - sudo apt-get install -y curl - sudo wget https://github.com/jwilder/dockerize/releases/download/v0.6.1/dockerize-linux-amd64-v0.6.1.tar.gz - sudo tar -C /usr/local/bin -xzvf dockerize-linux-amd64-v0.6.1.tar.gz - sudo rm dockerize-linux-amd64-v0.6.1.tar.gz - - run: - name: Wait for app to be ready - command: dockerize -wait tcp://localhost:4000 -timeout 1m + # - run: + # name: Install curl and dockerize + # command: | + # sudo apt-get update + # sudo apt-get install -y curl + # sudo wget https://github.com/jwilder/dockerize/releases/download/v0.6.1/dockerize-linux-amd64-v0.6.1.tar.gz + # sudo tar -C /usr/local/bin -xzvf dockerize-linux-amd64-v0.6.1.tar.gz + # sudo rm dockerize-linux-amd64-v0.6.1.tar.gz + # - run: + # name: Wait for app to be ready + # command: dockerize -wait http://localhost:4000 -timeout 1m - run: name: Test the application command: curl -s "http://localhost:4000/health/readiness" From e3aff7fc92ee5dd8d7733ca6dd559043f7a5bb91 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 10 Jan 2024 17:20:48 +0530 Subject: [PATCH 10/27] build(config.yml): bring back dockerize --- .circleci/config.yml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index df955fb8e82..aed92d30318 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -107,17 +107,17 @@ jobs: -v $(pwd)/proxy_server_config.yaml:/app/config.yaml \ my-app:latest \ --config /app/config.yaml - # - run: - # name: Install curl and dockerize - # command: | - # sudo apt-get update - # sudo apt-get install -y curl - # sudo wget https://github.com/jwilder/dockerize/releases/download/v0.6.1/dockerize-linux-amd64-v0.6.1.tar.gz - # sudo tar -C /usr/local/bin -xzvf dockerize-linux-amd64-v0.6.1.tar.gz - # sudo rm dockerize-linux-amd64-v0.6.1.tar.gz - # - run: - # name: Wait for app to be ready - # command: dockerize -wait http://localhost:4000 -timeout 1m + - run: + name: Install curl and dockerize + command: | + sudo apt-get update + sudo apt-get install -y curl + sudo wget https://github.com/jwilder/dockerize/releases/download/v0.6.1/dockerize-linux-amd64-v0.6.1.tar.gz + sudo tar -C /usr/local/bin -xzvf dockerize-linux-amd64-v0.6.1.tar.gz + sudo rm dockerize-linux-amd64-v0.6.1.tar.gz + - run: + name: Wait for app to be ready + command: dockerize -wait http://localhost:4000 -timeout 1m - run: name: Test the application command: curl -s "http://localhost:4000/health/readiness" From 2302e01cc44e90351e9bc24310f0b08a0e08972b Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 10 Jan 2024 17:21:48 +0530 Subject: [PATCH 11/27] build(config.yml): remove mounting config logic (temporary) --- .circleci/config.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index aed92d30318..a0444db638a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -104,9 +104,7 @@ jobs: docker run -d \ -p 4000:4000 \ --name my-app \ - -v $(pwd)/proxy_server_config.yaml:/app/config.yaml \ - my-app:latest \ - --config /app/config.yaml + my-app:latest - run: name: Install curl and dockerize command: | From 4de9a1541d8b808b7d046f4015b2bd2181727216 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 10 Jan 2024 17:24:53 +0530 Subject: [PATCH 12/27] build(config.yml): see container logs --- .circleci/config.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index a0444db638a..d0cc4d33427 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -116,6 +116,9 @@ jobs: - run: name: Wait for app to be ready command: dockerize -wait http://localhost:4000 -timeout 1m + - run: + name: Display container logs + command: docker logs my-app - run: name: Test the application command: curl -s "http://localhost:4000/health/readiness" From 100fa97cc2e206d26ae3a33a5661185ea8071a6b Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 10 Jan 2024 17:27:45 +0530 Subject: [PATCH 13/27] build(config.yml): reorder steps --- .circleci/config.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index d0cc4d33427..4ff9ea42d22 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -113,12 +113,12 @@ jobs: sudo wget https://github.com/jwilder/dockerize/releases/download/v0.6.1/dockerize-linux-amd64-v0.6.1.tar.gz sudo tar -C /usr/local/bin -xzvf dockerize-linux-amd64-v0.6.1.tar.gz sudo rm dockerize-linux-amd64-v0.6.1.tar.gz - - run: - name: Wait for app to be ready - command: dockerize -wait http://localhost:4000 -timeout 1m - run: name: Display container logs command: docker logs my-app + - run: + name: Wait for app to be ready + command: dockerize -wait http://localhost:4000 -timeout 1m - run: name: Test the application command: curl -s "http://localhost:4000/health/readiness" From cf5e31a0b260f4c19f49c7954d6cfb36202b42df Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 10 Jan 2024 17:31:22 +0530 Subject: [PATCH 14/27] build(config.yml): pass database url to docker build --- .circleci/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 4ff9ea42d22..ea5b9ca32a7 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -103,6 +103,7 @@ jobs: command: | docker run -d \ -p 4000:4000 \ + -e DATABASE_URL=$PROXY_DOCKER_DB_URL \ --name my-app \ my-app:latest - run: From 133f6f51d7812d14e0b6362015211b98c3517e38 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 10 Jan 2024 17:35:51 +0530 Subject: [PATCH 15/27] build(config.yml): run logging in background --- .circleci/config.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index ea5b9ca32a7..615856fc266 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -115,8 +115,13 @@ jobs: sudo tar -C /usr/local/bin -xzvf dockerize-linux-amd64-v0.6.1.tar.gz sudo rm dockerize-linux-amd64-v0.6.1.tar.gz - run: - name: Display container logs - command: docker logs my-app + name: Start outputting logs + command: | + while true; do + docker logs my-app + sleep 10 + done + background: true - run: name: Wait for app to be ready command: dockerize -wait http://localhost:4000 -timeout 1m From 94259c944a22127f056524b16c209bd48ab45fd5 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 10 Jan 2024 17:41:46 +0530 Subject: [PATCH 16/27] build(dockerfile.database): fix dockerfile --- Dockerfile.database | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Dockerfile.database b/Dockerfile.database index d826896d714..cecbae10af9 100644 --- a/Dockerfile.database +++ b/Dockerfile.database @@ -53,8 +53,7 @@ RUN chmod +x entrypoint.sh EXPOSE 4000/tcp -# Set your entrypoint and command -ENTRYPOINT ["./entrypoint.sh"] - -# Specify arguments for the entrypoint script -CMD ["litellm", "--port", "4000"] +# # Set your entrypoint and command +# ENTRYPOINT ["./entrypoint.sh"] +ENTRYPOINT ["litellm"] +CMD ["--port", "4000"] From b06d7f0cb6576ba953e4118bc6312addeb342677 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 10 Jan 2024 18:03:57 +0530 Subject: [PATCH 17/27] build(config.yml): reintroduce mounting config.yaml --- .circleci/config.yml | 5 +++-- litellm/proxy/proxy_cli.py | 39 +++++++++++++++----------------------- litellm/proxy/utils.py | 11 ++++++----- 3 files changed, 24 insertions(+), 31 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 615856fc266..4510680a0d8 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -103,9 +103,10 @@ jobs: command: | docker run -d \ -p 4000:4000 \ - -e DATABASE_URL=$PROXY_DOCKER_DB_URL \ --name my-app \ - my-app:latest + -v $(pwd)/proxy_server_config.yaml:/app/config.yaml \ + my-app:latest \ + --config /app/config.yaml - run: name: Install curl and dockerize command: | diff --git a/litellm/proxy/proxy_cli.py b/litellm/proxy/proxy_cli.py index b154b21e1ba..0150cfe445a 100644 --- a/litellm/proxy/proxy_cli.py +++ b/litellm/proxy/proxy_cli.py @@ -5,7 +5,7 @@ import random from datetime import datetime import importlib from dotenv import load_dotenv -import operator + sys.path.append(os.getcwd()) @@ -32,29 +32,6 @@ def run_ollama_serve(): ) # noqa -def clone_subfolder(repo_url, subfolder, destination): - # Clone the full repo - repo_name = repo_url.split("/")[-1] - repo_master = os.path.join(destination, "repo_master") - subprocess.run(["git", "clone", repo_url, repo_master]) - - # Move into the subfolder - subfolder_path = os.path.join(repo_master, subfolder) - - # Copy subfolder to destination - for file_name in os.listdir(subfolder_path): - source = os.path.join(subfolder_path, file_name) - if os.path.isfile(source): - shutil.copy(source, destination) - else: - dest_path = os.path.join(destination, file_name) - shutil.copytree(source, dest_path) - - # Remove cloned repo folder - subprocess.run(["rm", "-rf", os.path.join(destination, "repo_master")]) - feature_telemetry(feature="create-proxy") - - def is_port_in_use(port): import socket @@ -371,6 +348,20 @@ def run_server( raise ImportError( "Uvicorn needs to be imported. Run - `pip install uvicorn`" ) + if os.getenv("DATABASE_URL", None) is not None: + # run prisma db push, before starting server + # Save the current working directory + original_dir = os.getcwd() + # set the working directory to where this script is + abspath = os.path.abspath(__file__) + dname = os.path.dirname(abspath) + os.chdir(dname) + try: + subprocess.run( + ["prisma", "db", "push", "--accept-data-loss"] + ) # this looks like a weird edge case when prisma just wont start on render. we need to have the --accept-data-loss + finally: + os.chdir(original_dir) if port == 8000 and is_port_in_use(port): port = random.randint(1024, 49152) uvicorn.run( diff --git a/litellm/proxy/utils.py b/litellm/proxy/utils.py index 798c02b6479..5b21a2d2bea 100644 --- a/litellm/proxy/utils.py +++ b/litellm/proxy/utils.py @@ -253,10 +253,11 @@ class PrismaClient: print_verbose( "LiteLLM: DATABASE_URL Set in config, trying to 'pip install prisma'" ) - ## init logging object + ## init logging object self.proxy_logging_obj = proxy_logging_obj - - if os.getenv("DATABASE_URL", None) is None: # setup hasn't taken place + try: + from prisma import Prisma # type: ignore + except: os.environ["DATABASE_URL"] = database_url # Save the current working directory original_dir = os.getcwd() @@ -272,8 +273,8 @@ class PrismaClient: ) # this looks like a weird edge case when prisma just wont start on render. we need to have the --accept-data-loss finally: os.chdir(original_dir) - # Now you can import the Prisma Client - from prisma import Prisma # type: ignore + # Now you can import the Prisma Client + from prisma import Prisma # type: ignore self.db = Prisma( http={ From 9f23cf58525efc83fb18979541e80820e2efe440 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 10 Jan 2024 18:13:34 +0530 Subject: [PATCH 18/27] build(config.yml): add keys to ci build --- .circleci/config.yml | 4 ++++ proxy_server_config.yaml | 14 +++++++------- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 4510680a0d8..086991d2cc0 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -103,6 +103,10 @@ jobs: command: | docker run -d \ -p 4000:4000 \ + -e DATABASE_URL=$PROXY_DOCKER_DB_URL \ + -e AZURE_API_KEY=$AZURE_FRANCE_API_KEY \ + -e AZURE_FRANCE_API_KEY=$AZURE_FRANCE_API_KEY \ + -e AZURE_EUROPE_API_KEY=$AZURE_EUROPE_API_KEY \ --name my-app \ -v $(pwd)/proxy_server_config.yaml:/app/config.yaml \ my-app:latest \ diff --git a/proxy_server_config.yaml b/proxy_server_config.yaml index b58f9aea1cf..34995ca9600 100644 --- a/proxy_server_config.yaml +++ b/proxy_server_config.yaml @@ -4,18 +4,18 @@ model_list: model: azure/chatgpt-v-2 api_base: https://openai-gpt-4-test-v-1.openai.azure.com/ api_version: "2023-05-15" - api_key: os.environ/AZURE_API_KEY1 # The `os.environ/` prefix tells litellm to read this from the env. See https://docs.litellm.ai/docs/simple_proxy#load-api-keys-from-vault + api_key: os.environ/AZURE_API_KEY # The `os.environ/` prefix tells litellm to read this from the env. See https://docs.litellm.ai/docs/simple_proxy#load-api-keys-from-vault - model_name: gpt-4 litellm_params: - model: azure/gpt-4 - api_key: os.environ/AZURE_API_KEY2 - api_base: https://openai-gpt-4-test-v-2.openai.azure.com/ + model: azure/gpt-turbo + api_key: os.environ/AZURE_FRANCE_API_KEY + api_base: https://openai-france-1234.openai.azure.com/ rpm: 100 - model_name: gpt-4 litellm_params: - model: azure/gpt-4 - api_key: - api_base: https://openai-gpt-4-test-v-2.openai.azure.com/ + model: azure/gpt-35-turbo + api_key: os.environ/AZURE_EUROPE_API_KEY + api_base: https://my-endpoint-europe-berri-992.openai.azure.com rpm: 10 litellm_settings: From 1becc7a4cf0713d426f9bffcdab8bb98c827e04e Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 10 Jan 2024 18:18:29 +0530 Subject: [PATCH 19/27] build(config.yml): specify port --- .circleci/config.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 086991d2cc0..59664fb8e8e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -110,7 +110,8 @@ jobs: --name my-app \ -v $(pwd)/proxy_server_config.yaml:/app/config.yaml \ my-app:latest \ - --config /app/config.yaml + --config /app/config.yaml \ + --port 4000 - run: name: Install curl and dockerize command: | From 21d951f279ad8aeaa93756ba68dde8197eb1c1a8 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 10 Jan 2024 19:23:42 +0530 Subject: [PATCH 20/27] build(config.yml): add /key/generate load test --- .circleci/config.yml | 22 +++++++++++++++++++--- proxy_server_config.yaml | 2 +- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 59664fb8e8e..451f45d5b96 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -131,10 +131,26 @@ jobs: - run: name: Wait for app to be ready command: dockerize -wait http://localhost:4000 -timeout 1m - - run: + - run: name: Test the application - command: curl -s "http://localhost:4000/health/readiness" - + command: | + status_codes=() + for i in {1..10}; do + status=$(curl --location --request 'POST' 'http://0.0.0.0:4000/key/generate' \ + --header 'Authorization: Bearer sk-1234' \ + --header 'Content-Type: application/json' \ + --data '{"models": ["azure-models"], "aliases": {"mistral-7b": "gpt-3.5-turbo"}, "duration": null}' \ + --silent --output /dev/null --write-out '%{http_code}\n') & + status_codes+=($status) + done + wait + for status in "${status_codes[@]}"; do + if [[ "$status" -ne 200 ]]; then + echo "A request did not return a 200 status code: $status" + exit 1 + fi + done + echo "All requests returned a 200 status code." publish_to_pypi: docker: diff --git a/proxy_server_config.yaml b/proxy_server_config.yaml index 34995ca9600..abe9998586f 100644 --- a/proxy_server_config.yaml +++ b/proxy_server_config.yaml @@ -23,7 +23,7 @@ litellm_settings: set_verbose: True general_settings: - # master_key: sk-1234 # [OPTIONAL] Only use this if you to require all calls to contain this key (Authorization: Bearer sk-1234) + master_key: sk-1234 # [OPTIONAL] Only use this if you to require all calls to contain this key (Authorization: Bearer sk-1234) # database_url: "postgresql://:@:/" # [OPTIONAL] use for token-based auth to proxy environment_variables: From 2a2856db3e1dde274b84a68da2acc528f8d66f2f Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 10 Jan 2024 19:24:21 +0530 Subject: [PATCH 21/27] build(config.yml): set num workers to 8 --- .circleci/config.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 451f45d5b96..cee4adf234c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -111,7 +111,8 @@ jobs: -v $(pwd)/proxy_server_config.yaml:/app/config.yaml \ my-app:latest \ --config /app/config.yaml \ - --port 4000 + --port 4000 \ + --num_workers 8 - run: name: Install curl and dockerize command: | From 4f87ba420051e7ab2beb42d408671a4de31435ca Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 10 Jan 2024 19:25:59 +0530 Subject: [PATCH 22/27] build(config.yml): fix spacing --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index cee4adf234c..ce5184a4a53 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -132,7 +132,7 @@ jobs: - run: name: Wait for app to be ready command: dockerize -wait http://localhost:4000 -timeout 1m - - run: + - run: name: Test the application command: | status_codes=() From 0e04e1fa568b48b22c7f2dc4b04dd6d4bd414658 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 10 Jan 2024 19:31:58 +0530 Subject: [PATCH 23/27] build(config.yml): output test results --- .circleci/config.yml | 47 +++++++++++++++++++++++++++++++++----------- 1 file changed, 36 insertions(+), 11 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index ce5184a4a53..3605e235b9b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -135,22 +135,47 @@ jobs: - run: name: Test the application command: | - status_codes=() + mkdir -p /tmp/responses for i in {1..10}; do - status=$(curl --location --request 'POST' 'http://0.0.0.0:4000/key/generate' \ - --header 'Authorization: Bearer sk-1234' \ - --header 'Content-Type: application/json' \ - --data '{"models": ["azure-models"], "aliases": {"mistral-7b": "gpt-3.5-turbo"}, "duration": null}' \ - --silent --output /dev/null --write-out '%{http_code}\n') & - status_codes+=($status) + status_file="/tmp/responses/status_${i}.txt" + response_file="/tmp/responses/response_${i}.json" + + (curl --location --request 'POST' 'http://0.0.0.0:4000/key/generate' \ + --header 'Authorization: Bearer sk-1234' \ + --header 'Content-Type: application/json' \ + --data '{"models": ["azure-models"], "aliases": {"mistral-7b": "gpt-3.5-turbo"}, "duration": null}' \ + --silent --output "${response_file}" --write-out '%{http_code}' > "${status_file}") & + + # Capture PIDs of background processes + pids[${i}]=$! done - wait - for status in "${status_codes[@]}"; do - if [[ "$status" -ne 200 ]]; then + + # Wait for all background processes to finish + for pid in ${pids[*]}; do + wait $pid + done + + # Check all responses and status codes + fail=false + for i in {1..10}; do + status=$(cat "/tmp/responses/status_${i}.txt") + response=$(cat "/tmp/responses/response_${i}.json") + + echo "Response ${i} (Status code: ${status}):" + cat "${response}" + echo # Newline for readability + + if [ "$status" -ne 200 ]; then echo "A request did not return a 200 status code: $status" - exit 1 + fail=true fi done + + # If any request did not return status code 200, fail the job + if [ "$fail" = true ]; then + exit 1 + fi + echo "All requests returned a 200 status code." publish_to_pypi: From 1d8dbe0696e9f0b3bbf07dbc2b357fb7609fead3 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 10 Jan 2024 19:36:07 +0530 Subject: [PATCH 24/27] build(config.yml): update build --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 3605e235b9b..4ec93fb7625 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -140,7 +140,7 @@ jobs: status_file="/tmp/responses/status_${i}.txt" response_file="/tmp/responses/response_${i}.json" - (curl --location --request 'POST' 'http://0.0.0.0:4000/key/generate' \ + (curl --location --request POST 'http://0.0.0.0:4000/key/generate' \ --header 'Authorization: Bearer sk-1234' \ --header 'Content-Type: application/json' \ --data '{"models": ["azure-models"], "aliases": {"mistral-7b": "gpt-3.5-turbo"}, "duration": null}' \ @@ -162,7 +162,7 @@ jobs: response=$(cat "/tmp/responses/response_${i}.json") echo "Response ${i} (Status code: ${status}):" - cat "${response}" + cat "${response_file}" echo # Newline for readability if [ "$status" -ne 200 ]; then From 81846ee563b65bac512a81cca935080d5671d914 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 10 Jan 2024 19:43:11 +0530 Subject: [PATCH 25/27] build(config.yml): test fixes --- .circleci/config.yml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 4ec93fb7625..ea412d5bc1e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -159,11 +159,14 @@ jobs: fail=false for i in {1..10}; do status=$(cat "/tmp/responses/status_${i}.txt") - response=$(cat "/tmp/responses/response_${i}.json") - + + # Here, we need to set the correct response file path for each iteration + response_file="/tmp/responses/response_${i}.json" # This was missing in the provided script + + response=$(cat "${response_file}") echo "Response ${i} (Status code: ${status}):" - cat "${response_file}" - echo # Newline for readability + echo "${response}" # Use echo here to print the contents + echo # Additional newline for readability if [ "$status" -ne 200 ]; then echo "A request did not return a 200 status code: $status" From 33916cb87cee31205bffd7501259f313605b5e83 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 10 Jan 2024 19:50:42 +0530 Subject: [PATCH 26/27] ci(config.yml): bring back local_testing and publish_to_pypi --- .circleci/config.yml | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index ea412d5bc1e..3ea6b7fca9a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -256,9 +256,23 @@ workflows: version: 2 build_and_test: jobs: + - local_testing: + filters: + branches: + only: + - main + - /litellm_.*/ - build_and_test: filters: branches: only: - main - - /litellm_.*/ \ No newline at end of file + - /litellm_.*/ + - publish_to_pypi: + requires: + - local_testing + - build_and_test + filters: + branches: + only: + - main \ No newline at end of file From 186e6aaff50d5ce5b0149ba89821881776e53482 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 10 Jan 2024 19:51:39 +0530 Subject: [PATCH 27/27] build(dockerfile.database): clean up --- Dockerfile.database | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile.database b/Dockerfile.database index cecbae10af9..5c0c4ad36dc 100644 --- a/Dockerfile.database +++ b/Dockerfile.database @@ -54,6 +54,6 @@ RUN chmod +x entrypoint.sh EXPOSE 4000/tcp # # Set your entrypoint and command -# ENTRYPOINT ["./entrypoint.sh"] + ENTRYPOINT ["litellm"] CMD ["--port", "4000"]