From ee6d34f22d2c7d2d375306effcd3c537fce6f783 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jainil=20Prajapati=20=F0=9F=AA=90?= <86187588+jaainil@users.noreply.github.com> Date: Mon, 25 Aug 2025 11:15:02 +0530 Subject: [PATCH] Add new LiteLLM template to the repository. (#303) * working * Refactor LiteLLM template to centralize environment variables and improve configuration structure * Refactor LiteLLM docker-compose and template to use volumes and simplify port configuration * Refactor LiteLLM blueprint to simplify environment configuration and improve service definitions * Refactor LiteLLM blueprint to centralize environment variables, enhance security with stronger defaults, and improve provider API key configuration * Format tags as arrays in meta.json for improved readability --- blueprints/litellm/docker-compose.yml | 53 ++++++++++++++++++++ blueprints/litellm/image.png | Bin 0 -> 13875 bytes blueprints/litellm/template.toml | 67 ++++++++++++++++++++++++++ meta.json | 19 ++++++++ 4 files changed, 139 insertions(+) create mode 100644 blueprints/litellm/docker-compose.yml create mode 100644 blueprints/litellm/image.png create mode 100644 blueprints/litellm/template.toml diff --git a/blueprints/litellm/docker-compose.yml b/blueprints/litellm/docker-compose.yml new file mode 100644 index 00000000..103d53be --- /dev/null +++ b/blueprints/litellm/docker-compose.yml @@ -0,0 +1,53 @@ +version: "3.8" + +services: + litellm: + image: ghcr.io/berriai/litellm:main-latest + restart: unless-stopped + depends_on: + litellm-db: + condition: service_healthy + environment: + DATABASE_URL: ${DATABASE_URL} + LITELLM_MASTER_KEY: ${LITELLM_MASTER_KEY} + UI_USERNAME: ${UI_USERNAME} + UI_PASSWORD: ${UI_PASSWORD} + STORE_MODEL_IN_DB: "True" + + # Provider Keys + OPENAI_API_KEY: ${OPENAI_API_KEY} + OPENAI_BASE_URL: ${OPENAI_BASE_URL} + COHERE_API_KEY: ${COHERE_API_KEY} + OR_SITE_URL: ${OR_SITE_URL} + OR_APP_NAME: ${OR_APP_NAME} + OR_API_KEY: ${OR_API_KEY} + AZURE_API_BASE: ${AZURE_API_BASE} + AZURE_API_VERSION: ${AZURE_API_VERSION} + AZURE_API_KEY: ${AZURE_API_KEY} + REPLICATE_API_KEY: ${REPLICATE_API_KEY} + REPLICATE_API_TOKEN: ${REPLICATE_API_TOKEN} + ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY} + INFISICAL_TOKEN: ${INFISICAL_TOKEN} + NOVITA_API_KEY: ${NOVITA_API_KEY} + INFINITY_API_KEY: ${INFINITY_API_KEY} + + expose: + - 4000 + + litellm-db: + image: postgres:16-alpine + restart: on-failure:5 + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"] + interval: 5s + timeout: 5s + retries: 5 + volumes: + - litellm-db:/var/lib/postgresql/data + environment: + POSTGRES_DB: ${POSTGRES_DB} + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + +volumes: + litellm-db: {} diff --git a/blueprints/litellm/image.png b/blueprints/litellm/image.png new file mode 100644 index 0000000000000000000000000000000000000000..d0a01f96bbaaa37a9b2d0cad58a5beda44a0b33c GIT binary patch literal 13875 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 literal 0 HcmV?d00001 diff --git a/blueprints/litellm/template.toml b/blueprints/litellm/template.toml new file mode 100644 index 00000000..1e21dc72 --- /dev/null +++ b/blueprints/litellm/template.toml @@ -0,0 +1,67 @@ +[variables] +main_domain = "${domain}" + +# Database +postgres_db = "litellm" +postgres_user = "litellm" +postgres_password = "${password:32}" + +# LiteLLM UI + Master Key +ui_username = "${username}" +ui_password = "${password:32}" +litellm_master_key = "${password:64}" + +# Provider API Keys (empty by default) +openai_api_key = "" +openai_base_url = "" +cohere_api_key = "" +or_site_url = "" +or_app_name = "LiteLLM Example app" +or_api_key = "" +azure_api_base = "" +azure_api_version = "" +azure_api_key = "" +replicate_api_key = "" +replicate_api_token = "" +anthropic_api_key = "" +infisical_token = "" +novita_api_key = "" +infinity_api_key = "" + +[config] +[[config.domains]] +serviceName = "litellm" +port = 4000 +host = "${main_domain}" + +[config.env] +# Database +DATABASE_URL = "postgresql://${postgres_user}:${postgres_password}@litellm-db:5432/${postgres_db}" +POSTGRES_DB = "${postgres_db}" +POSTGRES_USER = "${postgres_user}" +POSTGRES_PASSWORD = "${postgres_password}" + +# LiteLLM +UI_USERNAME = "${ui_username}" +UI_PASSWORD = "${ui_password}" +LITELLM_MASTER_KEY = "${litellm_master_key}" +STORE_MODEL_IN_DB = "True" + +# Providers +OPENAI_API_KEY = "${openai_api_key}" +OPENAI_BASE_URL = "${openai_base_url}" +COHERE_API_KEY = "${cohere_api_key}" +OR_SITE_URL = "${or_site_url}" +OR_APP_NAME = "${or_app_name}" +OR_API_KEY = "${or_api_key}" +AZURE_API_BASE = "${azure_api_base}" +AZURE_API_VERSION = "${azure_api_version}" +AZURE_API_KEY = "${azure_api_key}" +REPLICATE_API_KEY = "${replicate_api_key}" +REPLICATE_API_TOKEN = "${replicate_api_token}" +ANTHROPIC_API_KEY = "${anthropic_api_key}" +INFISICAL_TOKEN = "${infisical_token}" +NOVITA_API_KEY = "${novita_api_key}" +INFINITY_API_KEY = "${infinity_api_key}" + +[[config.mounts]] diff --git a/meta.json b/meta.json index ff86accf..18473f89 100644 --- a/meta.json +++ b/meta.json @@ -2548,6 +2548,25 @@ "mailing-list" ] }, + { + "id": "litellm", + "name": "LiteLLM", + "version": "main-stable", + "description": "LiteLLM is a lightweight OpenAI API-compatible proxy for managing multiple LLM providers with a single endpoint.", + "logo": "image.png", + "links": { + "github": "https://github.com/BerriAI/litellm", + "website": "https://docs.litellm.ai", + "docs": "https://docs.litellm.ai/docs/proxy/quick_start" + }, + "tags": [ + "ai", + "proxy", + "llm", + "openai-compatible", + "monitoring" + ] + }, { "id": "livekit", "name": "Livekit",