diff --git a/.env.example b/.env.example index ce8220e01..c2dce63e7 100644 --- a/.env.example +++ b/.env.example @@ -1,54 +1,69 @@ -AGENTS_API_KEY=myauthkey -AGENTS_API_KEY_HEADER_NAME=Authorization -AGENTS_API_URL=http://agents-api:8080 -COZO_AUTH_TOKEN=myauthkey -COZO_HOST=http://memory-store:9070 -COZO_PORT=9070 -COZO_ROCKSDB_DIR=cozo.db -DTYPE=float16 -EMBEDDING_SERVICE_BASE=http://text-embeddings-inference -EMBEDDING_SERVICE_URL=${EMBEDDING_SERVICE_BASE}/embed -GATEWAY_PORT=80 -GPU_MEMORY_UTILIZATION=0.90 - -HF_TOKEN= -HUGGING_FACE_HUB_TOKEN= -JWT_SHARED_KEY= - -MAX_MODEL_LEN=8192 -MAX_NUM_SEQS=1 -MNT_DIR=/data - +# Security +# -------- +JWT_SHARED_KEY= +AGENTS_API_KEY= +COZO_AUTH_TOKEN= +TEMPORAL_POSTGRES_PASSWORD= +LITELLM_POSTGRES_PASSWORD= +LITELLM_MASTER_KEY= +LITELLM_REDIS_PASSWORD= SKIP_CHECK_DEVELOPER_HEADERS=true -SUMMARIZATION_TOKENS_THRESHOLD=2048 -TEMPERATURE_SCALING_FACTOR=0.9 -TEMPERATURE_SCALING_POWER=0.9 -TEMPORAL_ENDPOINT=temporal:7233 -TEMPORAL_NAMESPACE=default -TEMPORAL_WORKER_URL=temporal:7233 -TP_SIZE=1 -TRUNCATE_EMBED_TEXT=true -TRAEFIK_LOG_LEVEL=DEBUG -WORKER_URL=temporal:7233 - -AGENTS_API_DEBUG=false -OPENAI_API_KEY= -ANTHROPIC_API_KEY= -GROQ_API_KEY= -CLOUDFLARE_API_KEY= -CLOUDFLARE_ACCOUNT_ID= -NVIDIA_NIM_API_KEY= -GITHUB_API_KEY= -VOYAGE_API_KEY= -GOOGLE_APPLICATION_CREDENTIALS= - -LITELLM_URL=http://litellm:4000 -POSTGRES_DB=litellm -POSTGRES_USER=llmproxy -POSTGRES_PASSWORD= -LITELLM_DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@litellm-db:5432/${POSTGRES_DB} -LITELLM_MASTER_KEY= -LITELLM_REDIS_HOST=litellm-redis -LITELLM_REDIS_PORT=6379 -LITELLM_REDIS_PASSWORD= -REDIS_ARGS="--requirepass ${LITELLM_REDIS_PASSWORD}" \ No newline at end of file +EMBEDDING_SERVICE_BASE=http://text-embeddings-inference- # Use the 'gpu' profile to run on GPU + +# Memory Store +# ----------- + +# COZO_HOST=http://memory-store:9070 +# COZO_PORT=9070 +# COZO_ROCKSDB_DIR=cozo.db +# COZO_BACKUP_DIR=backup +# COZO_MNT_DIR=/data + +# Gateway +# ------ + +# GATEWAY_PORT=80 +# TRAEFIK_LOG_LEVEL=INFO + +# Agents API +# --------- + +# AGENTS_API_KEY_HEADER_NAME=Authorization +# AGENTS_API_URL=http://agents-api:8080 +# TRUNCATE_EMBED_TEXT=true +# WORKER_URL=temporal:7233 +# AGENTS_API_DEBUG=false +# EMBEDDING_MODEL_ID=Alibaba-NLP/gte-large-en-v1.5 +# NUM_GPUS=1 + +# Temporal +# -------- + +# TEMPORAL_ENDPOINT=temporal:7233 +# TEMPORAL_NAMESPACE=default +# TEMPORAL_WORKER_URL=temporal:7233 +# TEMPORAL_POSTGRES_DB=temporal +# TEMPORAL_POSTGRES_USER=temporal + +# LiteLLM +# ------- + +# LITELLM_URL=http://litellm:4000 +# LITELLM_POSTGRES_DB=litellm +# LITELLM_POSTGRES_USER=llmproxy +# LITELLM_REDIS_HOST=litellm-redis +# LITELLM_REDIS_PORT=6379 + +# LLM Providers +# -------------- + +# OPENAI_API_KEY= +# HUGGING_FACE_HUB_TOKEN= +# ANTHROPIC_API_KEY= +# GROQ_API_KEY= +# CLOUDFLARE_API_KEY= +# CLOUDFLARE_ACCOUNT_ID= +# NVIDIA_NIM_API_KEY= +# GITHUB_API_KEY= +# VOYAGE_API_KEY= +# GOOGLE_APPLICATION_CREDENTIALS=.keys/julep-vertexai-svc.json \ No newline at end of file diff --git a/agents-api/Dockerfile b/agents-api/Dockerfile index aa8359e5a..de5111250 100644 --- a/agents-api/Dockerfile +++ b/agents-api/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.10-slim +FROM python:3.11-slim ENV PYTHONUNBUFFERED True ENV POETRY_CACHE_DIR=/tmp/poetry_cache @@ -16,4 +16,4 @@ COPY . ./ RUN poetry install --no-dev -ENTRYPOINT ["python", "agents_api/web.py", "--host", "0.0.0.0", "--port", "8080"] +ENTRYPOINT ["python", "-m", "agents_api.web", "--host", "0.0.0.0", "--port", "8080"] diff --git a/agents-api/Dockerfile.temporal b/agents-api/Dockerfile.temporal deleted file mode 100644 index bd866d831..000000000 --- a/agents-api/Dockerfile.temporal +++ /dev/null @@ -1,4 +0,0 @@ -FROM temporalio/admin-tools:1.23.1 - -RUN mkdir -p /home/temporal -ENTRYPOINT ["temporal", "server", "start-dev", "--db-filename", "/home/temporal/temporal.db", "--ip", "0.0.0.0"] diff --git a/agents-api/Dockerfile.worker b/agents-api/Dockerfile.worker index 38fea8cec..fd3af39fd 100644 --- a/agents-api/Dockerfile.worker +++ b/agents-api/Dockerfile.worker @@ -1,4 +1,4 @@ -FROM python:3.10-slim +FROM python:3.11-slim ENV PYTHONUNBUFFERED True ENV POETRY_CACHE_DIR=/tmp/poetry_cache diff --git a/agents-api/docker-compose.yml b/agents-api/docker-compose.yml index 96334e1e8..c8a84e669 100644 --- a/agents-api/docker-compose.yml +++ b/agents-api/docker-compose.yml @@ -1,17 +1,49 @@ name: julep-agents-api -version: "3" + +# Base for embedding service +x--text-embeddings-inference: &text-embeddings-inference + container_name: text-embeddings-inference + environment: + - MODEL_ID=${EMBEDDING_MODEL_ID:-Alibaba-NLP/gte-large-en-v1.5} + + image: ghcr.io/huggingface/text-embeddings-inference:cpu-1.5 + ports: + - "8082:80" + volumes: + - ~/.cache/huggingface/hub:/data + +# Shared environment variables +x-shared-environment: &shared-environment + AGENTS_API_KEY: ${AGENTS_API_KEY} + LITELLM_MASTER_KEY: ${LITELLM_MASTER_KEY} + COZO_AUTH_TOKEN: ${COZO_AUTH_TOKEN} + SKIP_CHECK_DEVELOPER_HEADERS: ${SKIP_CHECK_DEVELOPER_HEADERS:-True} + AGENTS_API_KEY_HEADER_NAME: ${AGENTS_API_KEY_HEADER_NAME:-Authorization} + AGENTS_API_URL: ${AGENTS_API_URL:-http://agents-api:8080} + TRUNCATE_EMBED_TEXT: ${TRUNCATE_EMBED_TEXT:-False} + WORKER_URL: ${WORKER_URL:-temporal:7233} + DEBUG: ${AGENTS_API_DEBUG:-False} + EMBEDDING_SERVICE_BASE: ${EMBEDDING_SERVICE_BASE:-http://text-embeddings-inference} + EMBEDDING_MODEL_ID: ${EMBEDDING_MODEL_ID:-Alibaba-NLP/gte-large-en-v1.5} + LITELLM_URL: ${LITELLM_URL:-http://litellm:4000} + COZO_HOST: ${COZO_HOST:-http://memory-store:9070} + SUMMARIZATION_MODEL_NAME: ${SUMMARIZATION_MODEL_NAME:-gpt-4-turbo} + TEMPORAL_WORKER_URL: ${TEMPORAL_WORKER_URL:-temporal:7233} + TEMPORAL_NAMESPACE: ${TEMPORAL_NAMESPACE:-default} + TEMPORAL_ENDPOINT: ${TEMPORAL_ENDPOINT:-temporal:7233} + TEMPORAL_TASK_QUEUE: ${TEMPORAL_TASK_QUEUE:-julep-task-queue} services: agents-api: - image: julepai/agents-api:dev - env_file: "../.env" - + image: julepai/agents-api:${TAG:-dev} container_name: agents-api depends_on: memory-store: condition: service_started worker: condition: service_started + environment: + <<: *shared-environment build: context: . dockerfile: Dockerfile @@ -31,15 +63,13 @@ services: path: Dockerfile worker: - image: julepai/worker:dev - env_file: "../.env" - + image: julepai/worker:${TAG:-dev} + environment: + <<: *shared-environment build: context: . dockerfile: Dockerfile.worker depends_on: - text-embeddings-inference: - condition: service_started temporal: condition: service_started @@ -55,49 +85,32 @@ services: - action: rebuild path: Dockerfile.worker - text-embeddings-inference: - container_name: text-embeddings-inference + text-embeddings-inference-cpu: + <<: *text-embeddings-inference + profiles: + - '' # Acts as a default profile. See: https://stackoverflow.com/questions/75758174/how-to-make-profile-default-for-docker-compose + + text-embeddings-inference-gpu: + <<: *text-embeddings-inference + profiles: + - gpu + image: ghcr.io/huggingface/text-embeddings-inference:1.5 environment: - DTYPE=float16 - - MODEL_ID=Alibaba-NLP/gte-large-en-v1.5 + - MODEL_ID=${EMBEDDING_MODEL_ID:-Alibaba-NLP/gte-large-en-v1.5} + - NVIDIA_VISIBLE_DEVICES=all - image: ghcr.io/huggingface/text-embeddings-inference:1.5 - ports: - - "8082:80" - volumes: - - ~/.cache/huggingface/hub:/data shm_size: "2gb" deploy: resources: reservations: devices: - driver: nvidia - count: all + count: ${NUM_GPUS:-1} capabilities: [gpu] - - temporal: - image: julepai/temporal:dev - container_name: temporal - env_file: "../.env" - - build: - context: . - dockerfile: Dockerfile.temporal - ports: - - 7233:7233 - volumes: - - temporal_data:/home/temporal - - develop: - watch: - - action: rebuild - path: Dockerfile.temporal - cozo-migrate: - image: julepai/cozo-migrate:dev - env_file: "../.env" - + image: julepai/cozo-migrate:${TAG:-dev} container_name: cozo-migrate depends_on: memory-store: @@ -106,6 +119,9 @@ services: context: . dockerfile: Dockerfile.migration restart: "no" # Make sure to double quote this + environment: + - COZO_HOST=${COZO_HOST:-http://cozo:9070} + - COZO_AUTH_TOKEN=${COZO_AUTH_TOKEN:-myauthkey} develop: watch: diff --git a/agents-api/poetry.lock b/agents-api/poetry.lock index b703a0814..6862ea736 100644 --- a/agents-api/poetry.lock +++ b/agents-api/poetry.lock @@ -4579,4 +4579,4 @@ test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", [metadata] lock-version = "2.0" python-versions = ">=3.11,<3.12" -content-hash = "ce6fb9e63ff83a508ad9660217393b84e7174493f6b30f21f6a23fe9b4262fc8" +content-hash = "d838b92c29db6a823f88413256c0565f454e834782f245585aac63067423e610" diff --git a/agents-api/pyproject.toml b/agents-api/pyproject.toml index eceeba341..605b23cf2 100644 --- a/agents-api/pyproject.toml +++ b/agents-api/pyproject.toml @@ -18,7 +18,7 @@ openai = "^1.41.0" httpx = "^0.27.0" sentry-sdk = {extras = ["fastapi"], version = "^2.13.0"} temporalio = "^1.6.0" -pydantic = "^2.8.2" +pydantic = {extras = ["email"], version = "^2.8.2"} arrow = "^1.3.0" jinja2 = "^3.1.4" jinja2schema = "^0.1.4" diff --git a/deploy/.env.example b/deploy/.env.example deleted file mode 100644 index df26d975e..000000000 --- a/deploy/.env.example +++ /dev/null @@ -1,13 +0,0 @@ -AGENTS_API_KEY=myauthkey -AGENTS_API_KEY_HEADER_NAME=Authorization -AGENTS_API_URL=http://agents-api:8080 -COZO_AUTH_TOKEN=myauthkey -COZO_HOST=http://memory-store:9070 -EMBEDDING_SERVICE_URL=http://text-embeddings-inference/embed -SKIP_CHECK_DEVELOPER_HEADERS=true -TEMPORAL_ENDPOINT=temporal:7233 -TEMPORAL_NAMESPACE=default -TEMPORAL_WORKER_URL=temporal:7233 -TRUNCATE_EMBED_TEXT=true -WORKER_URL=temporal:7233 -OPENAI_API_KEY=your_openai_api_key \ No newline at end of file diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml deleted file mode 100644 index bc73431e3..000000000 --- a/deploy/docker-compose.yml +++ /dev/null @@ -1,106 +0,0 @@ -name: julep-api - -services: - memory-store: - image: julepai/memory-store:dev - platform: linux/x86_64 - environment: - - COZO_AUTH_TOKEN=${COZO_AUTH_TOKEN} - - COZO_PORT=9070 - - MNT_DIR=/data - container_name: julep-memory-store - volumes: - - cozo_data:/data - env_file: - - .env - ports: - - "9070:9070" - - agents-api: - image: julepai/agents-api:dev - platform: linux/x86_64 - container_name: julep-agents-api - depends_on: - memory-store: - condition: service_started - worker: - condition: service_started - ports: - - "8080:8080" - env_file: - - .env - - worker: - image: julepai/worker:dev - platform: linux/x86_64 - container_name: julep-worker - depends_on: - text-embeddings-inference: - condition: service_started - temporal: - condition: service_started - env_file: - - .env - - text-embeddings-inference: - container_name: julep-embeddings - environment: - - DTYPE=float16 - - MODEL_ID=BAAI/llm-embedder - - image: ghcr.io/huggingface/text-embeddings-inference:cpu-1.0 - platform: linux/x86_64 - ports: - - "8082:80" - shm_size: "2gb" - volumes: - - ~/.cache/huggingface/hub:/data - env_file: - - .env - - docs-text-embeddings-inference: - container_name: docs-text-embeddings-inference - environment: - - DTYPE=float16 - - MODEL_ID=BAAI/bge-m3 - image: ghcr.io/huggingface/text-embeddings-inference:cpu-1.0 - platform: linux/x86_64 - ports: - - "8083:80" - volumes: - - ~/.cache/huggingface/hub:/data - shm_size: "2gb" - env_file: - - .env - - temporal: - image: julepai/temporal:dev - platform: linux/x86_64 - container_name: julep-temporal - ports: - - 7233:7233 - build: - context: . - dockerfile: Dockerfile.temporal - volumes: - - temporal_data:/home/temporal - env_file: - - .env - - cozo-migrate: - environment: - - COZO_AUTH_TOKEN=${COZO_AUTH_TOKEN} - - COZO_HOST=http://memory-store:9070 - env_file: - - .env - image: julepai/cozo-migrate:dev - platform: linux/x86_64 - container_name: julep-cozo-migrate - depends_on: - memory-store: - condition: service_started - restart: "no" # Make sure to double quote this - -volumes: - temporal_data: - cozo_data: diff --git a/docker-compose.yml b/docker-compose.yml index 6845bb838..2348582c8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,10 +1,10 @@ name: julep -version: "3" include: - ./memory-store/docker-compose.yml - ./gateway/docker-compose.yml - ./agents-api/docker-compose.yml + - ./scheduler/docker-compose.yml - ./llm-proxy/docker-compose.yml # TODO: Enable after testing diff --git a/gateway/docker-compose.yml b/gateway/docker-compose.yml index 8a6fa85d6..ead857958 100644 --- a/gateway/docker-compose.yml +++ b/gateway/docker-compose.yml @@ -1,25 +1,18 @@ name: julep-gateway -version: "3" - -include: - - ../agents-api/docker-compose.yml services: gateway: - image: julepai/gateway:dev - env_file: "../.env" - + image: julepai/gateway:${TAG:-dev} environment: - GATEWAY_PORT=80 - JWT_SHARED_KEY=${JWT_SHARED_KEY} - - MODEL_API_URL=${MODEL_API_URL} - - MODEL_API_KEY=${MODEL_API_KEY} - - MODEL_API_KEY_HEADER_NAME=${MODEL_API_KEY_HEADER_NAME} + # - MODEL_API_URL=${MODEL_API_URL} + # - MODEL_API_KEY=${MODEL_API_KEY} + # - MODEL_API_KEY_HEADER_NAME=${MODEL_API_KEY_HEADER_NAME} - AGENTS_API_URL=${AGENTS_API_URL} - AGENTS_API_KEY=${AGENTS_API_KEY} - AGENTS_API_KEY_HEADER_NAME=${AGENTS_API_KEY_HEADER_NAME} - TRAEFIK_LOG_LEVEL=${TRAEFIK_LOG_LEVEL} - container_name: gateway depends_on: agents-api: diff --git a/gateway/entrypoint.sh b/gateway/entrypoint.sh index 514e34655..a87081d02 100755 --- a/gateway/entrypoint.sh +++ b/gateway/entrypoint.sh @@ -1,7 +1,8 @@ #!/bin/sh # Check the environment variables -for var_name in GATEWAY_PORT JWT_SHARED_KEY AGENTS_API_KEY MODEL_API_KEY MODEL_API_URL AGENTS_API_URL AGENTS_API_KEY_HEADER_NAME MODEL_API_KEY_HEADER_NAME +# REMOVED: MODEL_API_KEY MODEL_API_URL MODEL_API_KEY_HEADER_NAME +for var_name in GATEWAY_PORT JWT_SHARED_KEY AGENTS_API_KEY AGENTS_API_URL AGENTS_API_KEY_HEADER_NAME do if [ -z "`eval echo \\\$$var_name`" ]; then echo "Error: Environment variable '$var_name' is not set." diff --git a/gateway/traefik.yml.template b/gateway/traefik.yml.template index 9faa89063..0ee63c94a 100644 --- a/gateway/traefik.yml.template +++ b/gateway/traefik.yml.template @@ -18,24 +18,24 @@ log: http: routers: - model-serving: - entryPoints: - - web - rule: Path(`/v1{path:.*}`) - middlewares: - - model-serving-chain - - corsHeaders - service: service-model-serving - - model-serving-jwt: - entryPoints: - - web - rule: Path(`/jwt/v1{path:.*}`) - middlewares: - - model-serving-chain - - model-serving-strip-prefix-jwt - - corsHeaders - service: service-model-serving + # model-serving: + # entryPoints: + # - web + # rule: Path(`/v1{path:.*}`) + # middlewares: + # - model-serving-chain + # - corsHeaders + # service: service-model-serving + + # model-serving-jwt: + # entryPoints: + # - web + # rule: Path(`/jwt/v1{path:.*}`) + # middlewares: + # - model-serving-chain + # - model-serving-strip-prefix-jwt + # - corsHeaders + # service: service-model-serving agents-api: entryPoints: @@ -65,21 +65,21 @@ http: accessControlAllowOriginList: "*" addVaryHeader: true - model-serving-chain: - chain: - middlewares: - - my-jwt - - model-serving-add-headers + # model-serving-chain: + # chain: + # middlewares: + # - my-jwt + # - model-serving-add-headers agents-api-add-headers: headers: customrequestheaders: $AGENTS_API_KEY_HEADER_NAME: $AGENTS_API_KEY - model-serving-add-headers: - headers: - customrequestheaders: - $MODEL_API_KEY_HEADER_NAME: $MODEL_API_KEY + # model-serving-add-headers: + # headers: + # customrequestheaders: + # $MODEL_API_KEY_HEADER_NAME: $MODEL_API_KEY agents-api-chain: chain: @@ -87,11 +87,11 @@ http: - my-jwt - agents-api-add-headers - model-serving-strip-prefix-jwt: - stripprefix: - prefixes: - - /jwt - forceSlash: false + # model-serving-strip-prefix-jwt: + # stripprefix: + # prefixes: + # - /jwt + # forceSlash: false agents-api-strip-prefix-api: stripprefix: @@ -114,21 +114,19 @@ http: PayloadFields: - exp - iat - - email Required: true Keys: - $JWT_SHARED_KEY JwtHeaders: X-Developer-Id: sub - X-Developer-Email: email OpaHttpStatusField: allow_status_code services: - service-model-serving: - loadBalancer: - passHostHeader: false - servers: - - url: $MODEL_API_URL + # service-model-serving: + # loadBalancer: + # passHostHeader: false + # servers: + # - url: $MODEL_API_URL service-agents-api: loadBalancer: diff --git a/llm-proxy/docker-compose.yml b/llm-proxy/docker-compose.yml index f4cab6ebe..5b7f9d116 100644 --- a/llm-proxy/docker-compose.yml +++ b/llm-proxy/docker-compose.yml @@ -1,3 +1,5 @@ +name: julep-llm-proxy + services: litellm: image: ghcr.io/berriai/litellm:main-stable @@ -6,8 +8,24 @@ services: - .keys:/app/.keys ports: - "4000:4000" - env_file: - - ../.env + environment: + - LITELLM_MASTER_KEY=${LITELLM_MASTER_KEY} + - LITELLM_POSTGRES_DB=${LITELLM_POSTGRES_DB} + - LITELLM_POSTGRES_USER=${LITELLM_POSTGRES_USER} + - LITELLM_POSTGRES_PASSWORD=${LITELLM_POSTGRES_PASSWORD} + - LITELLM_REDIS_HOST=${LITELLM_REDIS_HOST} + - LITELLM_REDIS_PORT=${LITELLM_REDIS_PORT} + - LITELLM_REDIS_PASSWORD=${LITELLM_REDIS_PASSWORD} + - LITELLM_DATABASE_URL=postgresql://${LITELLM_POSTGRES_USER}:${LITELLM_POSTGRES_PASSWORD}@litellm-db:5432/${LITELLM_POSTGRES_DB} + - OPENAI_API_KEY=${OPENAI_API_KEY} + - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} + - GROQ_API_KEY=${GROQ_API_KEY} + - CLOUDFLARE_API_KEY=${CLOUDFLARE_API_KEY} + - CLOUDFLARE_ACCOUNT_ID=${CLOUDFLARE_ACCOUNT_ID} + - NVIDIA_NIM_API_KEY=${NVIDIA_NIM_API_KEY} + - GITHUB_API_KEY=${GITHUB_API_KEY} + - VOYAGE_API_KEY=${VOYAGE_API_KEY} + - GOOGLE_APPLICATION_CREDENTIALS=${GOOGLE_APPLICATION_CREDENTIALS} command: [ "--config", @@ -19,22 +37,23 @@ services: "--telemetry", "False" ] - depends_on: - litellm-db - litellm-redis litellm-db: - image: postgres + image: postgres:16 restart: always volumes: - litellm-db-data:/var/lib/postgresql/data ports: - - "5432:5432" - env_file: - - ../.env + - "15432:5432" + environment: + - POSTGRES_DB=${LITELLM_POSTGRES_DB} + - POSTGRES_USER=${LITELLM_POSTGRES_USER} + - POSTGRES_PASSWORD=${LITELLM_POSTGRES_PASSWORD} healthcheck: - test: [ "CMD-SHELL", "pg_isready -d litellm -U llmproxy" ] + test: [ "CMD-SHELL", "pg_isready -d ${LITELLM_POSTGRES_DB} -U ${LITELLM_POSTGRES_USER}" ] interval: 1s timeout: 5s retries: 10 @@ -42,12 +61,12 @@ services: litellm-redis: image: redis/redis-stack-server restart: always + environment: + REDIS_ARGS: --requirepass ${LITELLM_REDIS_PASSWORD} volumes: - litellm-redis-data:/data ports: - - "6379:6379" - env_file: - - ../.env + - "16379:6379" volumes: litellm-db-data: diff --git a/memory-store/Dockerfile b/memory-store/Dockerfile index e131116f8..9f77b660f 100644 --- a/memory-store/Dockerfile +++ b/memory-store/Dockerfile @@ -32,12 +32,14 @@ FROM debian:bookworm-slim # Install dependencies RUN \ apt-get update -yqq && \ - apt-get install -y liburing-dev curl ca-certificates tini nfs-common nfs-kernel-server procps netbase && \ + apt-get install -y \ + ca-certificates tini nfs-common nfs-kernel-server procps netbase \ + liburing-dev curl && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* # Set fallback mount directory -ENV MNT_DIR=/data APP_HOME=/app BACKUP_DIR=/backup +ENV COZO_MNT_DIR=/data COZO_BACKUP_DIR=/backup APP_HOME=/app WORKDIR $APP_HOME # Copy the cozo binary @@ -49,7 +51,7 @@ COPY ./backup.sh ./backup.sh # Ensure the script is executable RUN \ - mkdir -p $MNT_DIR $BACKUP_DIR && \ + mkdir -p $COZO_MNT_DIR $COZO_BACKUP_DIR && \ chmod +x $APP_HOME/bin/cozo && \ chmod +x $APP_HOME/run.sh diff --git a/memory-store/docker-compose.yml b/memory-store/docker-compose.yml index 14872fae1..8b50cacf3 100644 --- a/memory-store/docker-compose.yml +++ b/memory-store/docker-compose.yml @@ -1,18 +1,16 @@ name: julep-memory-store -version: "3" services: memory-store: - image: julepai/memory-store:dev - env_file: "../.env" + image: julepai/memory-store:${TAG:-dev} environment: - COZO_AUTH_TOKEN=${COZO_AUTH_TOKEN} - - COZO_PORT=${COZO_PORT} - - MNT_DIR=/data - - COZO_BACKUP_DIR=/backup - container_name: memory-store + - COZO_PORT=${COZO_PORT:-9070} + - COZO_MNT_DIR=${MNT_DIR:-/data} + - COZO_BACKUP_DIR=${COZO_BACKUP_DIR:-/backup} volumes: - cozo_data:/data + - cozo_backup:/backup build: context: . ports: @@ -33,4 +31,6 @@ services: - /var/run/docker.sock:/var/run/docker.sock:ro volumes: - cozo_data: \ No newline at end of file + cozo_data: + cozo_backup: + external: true \ No newline at end of file diff --git a/memory-store/run.sh b/memory-store/run.sh index 852350cda..838280452 100755 --- a/memory-store/run.sh +++ b/memory-store/run.sh @@ -3,17 +3,17 @@ set -eo pipefail # Create mount directory for service. -mkdir -p ${MNT_DIR:=/data} +mkdir -p ${COZO_MNT_DIR:=/data} # Create auth token if not exists. export COZO_AUTH_TOKEN=${COZO_AUTH_TOKEN:=`tr -dc A-Za-z0-9 $MNT_DIR/${COZO_ROCKSDB_DIR}.rocksdb.cozo_auth +echo $COZO_AUTH_TOKEN > $COZO_MNT_DIR/${COZO_ROCKSDB_DIR}.rocksdb.cozo_auth # Start server ${APP_HOME:=.}/bin/cozo server \ --engine rocksdb \ - --path $MNT_DIR/${COZO_ROCKSDB_DIR} \ + --path $COZO_MNT_DIR/${COZO_ROCKSDB_DIR} \ --bind 0.0.0.0 \ --port ${COZO_PORT:=9070} diff --git a/monitoring/docker-compose.yml b/monitoring/docker-compose.yml index 83736e68c..d13bd3bb6 100644 --- a/monitoring/docker-compose.yml +++ b/monitoring/docker-compose.yml @@ -1,20 +1,12 @@ name: julep-monitoring -version: "3" services: portainer: image: portainer/portainer-ce:latest container_name: portainer - env_file: - - path: .env - required: false - - path: ../.env - required: false - ports: - "9000:8000" - "9443:9443" - volumes: - portainer_data:/data - /var/run/docker.sock:/var/run/docker.sock @@ -22,11 +14,6 @@ services: prometheus: image: prom/prometheus container_name: prometheus - env_file: - - path: .env - required: false - - path: ../.env - required: false command: - "--config.file=/etc/prometheus/prometheus.yml" ports: @@ -39,11 +26,6 @@ services: grafana: image: grafana/grafana container_name: grafana - env_file: - - path: .env - required: false - - path: ../.env - required: false ports: - 3000:3000 restart: unless-stopped diff --git a/scheduler/docker-compose.yml b/scheduler/docker-compose.yml new file mode 100644 index 000000000..9d0dd5856 --- /dev/null +++ b/scheduler/docker-compose.yml @@ -0,0 +1,48 @@ +name: julep-scheduler + +services: + temporal: + depends_on: + - temporal-db + environment: + - DB=postgres12 + - DB_PORT=5432 + - DB_HOST=temporal-db + - POSTGRES_USER=${TEMPORAL_POSTGRES_USER} + - POSTGRES_PWD=${TEMPORAL_POSTGRES_PASSWORD} + - POSTGRES_SEEDS=temporal-db + - DYNAMIC_CONFIG_FILE_PATH=config/dynamicconfig/development-sql.yaml + image: temporalio/auto-setup:1.24 + ports: + - 7233:7233 + volumes: + - ./dynamicconfig:/etc/temporal/config/dynamicconfig + + temporal-admin-tools: + depends_on: + - temporal + environment: + - TEMPORAL_ADDRESS=temporal:7233 + - TEMPORAL_CLI_ADDRESS=temporal:7233 + image: temporalio/admin-tools:1.24 + stdin_open: true + tty: true + + temporal-db: + image: postgres:16 + environment: + - POSTGRES_DB=${TEMPORAL_POSTGRES_DB} + - POSTGRES_USER=${TEMPORAL_POSTGRES_USER} + - POSTGRES_PASSWORD=${TEMPORAL_POSTGRES_PASSWORD} + ports: + - 25432:5432 + volumes: + - temporal-db-data:/var/lib/postgresql/data + healthcheck: + test: [ "CMD-SHELL", "pg_isready -d ${TEMPORAL_POSTGRES_DB} -U ${TEMPORAL_POSTGRES_USER}" ] + interval: 1s + timeout: 5s + retries: 10 + +volumes: + temporal-db-data: diff --git a/scheduler/dynamicconfig/development-sql.yaml b/scheduler/dynamicconfig/development-sql.yaml new file mode 100644 index 000000000..8862dfad7 --- /dev/null +++ b/scheduler/dynamicconfig/development-sql.yaml @@ -0,0 +1,6 @@ +limit.maxIDLength: + - value: 255 + constraints: {} +system.forceSearchAttributesCacheRefreshOnRead: + - value: true # Dev setup only. Please don't turn this on in production. + constraints: {} diff --git a/sweep.yaml b/sweep.yaml deleted file mode 100644 index c19a99779..000000000 --- a/sweep.yaml +++ /dev/null @@ -1,8 +0,0 @@ -branch: dev -blocked_dirs: - - agents-api/notebooks/ - - docs/python-sdk-docs/julep/api/ - - docs/js-sdk-docs/ - - sdks/python/julep/api/ - - sdks/ts/src/api/ - - sdks/postman/