Skip to content

Commit

Permalink
feat(gateway,agents-api): Use docker compose profile for multi-tenant…
Browse files Browse the repository at this point in the history
… mode

Signed-off-by: Diwank Tomer <[email protected]>
  • Loading branch information
Diwank Tomer committed Aug 28, 2024
1 parent 617ad83 commit e1ff4d8
Show file tree
Hide file tree
Showing 6 changed files with 54 additions and 46 deletions.
2 changes: 0 additions & 2 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,7 @@ EMBEDDING_SERVICE_BASE=http://text-embeddings-inference-<gpu|cpu> # Use the 'gp
# Agents API
# ---------

# AGENTS_API_MULTI_TENANT_MODE=false
# AGENTS_API_HOSTNAME=localhost
# AGENTS_API_PREFIX=""
# AGENTS_API_KEY_HEADER_NAME=Authorization
# AGENTS_API_URL=http://agents-api:8080
# TRUNCATE_EMBED_TEXT=true
Expand Down
12 changes: 7 additions & 5 deletions agents-api/agents_api/dependencies/developer_id.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,17 @@
from fastapi import Header

from ..common.protocol.developers import Developer
from ..env import skip_check_developer_headers
from ..env import multi_tenant_mode
from ..models.developer.get_developer import get_developer, verify_developer
from .exceptions import InvalidHeaderFormat


async def get_developer_id(
x_developer_id: Annotated[UUID | None, Header(include_in_schema=False)] = None,
) -> UUID:
if skip_check_developer_headers:
return x_developer_id or UUID("00000000-0000-0000-0000-000000000000")
if not multi_tenant_mode:
assert not x_developer_id, "X-Developer-Id header not allowed in multi-tenant mode"
return UUID("00000000-0000-0000-0000-000000000000")

if not x_developer_id:
raise InvalidHeaderFormat("X-Developer-Id header required")
Expand All @@ -32,8 +33,9 @@ async def get_developer_id(
async def get_developer_data(
x_developer_id: Annotated[UUID | None, Header(include_in_schema=False)] = None,
) -> Developer:
if skip_check_developer_headers:
x_developer_id = x_developer_id or UUID("00000000-0000-0000-0000-000000000000")
if not multi_tenant_mode:
assert not x_developer_id, "X-Developer-Id header not allowed in multi-tenant mode"
return get_developer(developer_id=UUID("00000000-0000-0000-0000-000000000000"))

if not x_developer_id:
raise InvalidHeaderFormat("X-Developer-Id header required")
Expand Down
5 changes: 0 additions & 5 deletions agents-api/agents_api/env.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,6 @@
print(f"Generated API key since not set in the environment: {api_key}")

api_key_header_name: str = env.str("AGENTS_API_KEY_HEADER_NAME", default="X-Auth-Key")
skip_check_developer_headers: bool = env.bool(
"SKIP_CHECK_DEVELOPER_HEADERS", default=multi_tenant_mode
)


# Litellm API
# -----------
Expand Down Expand Up @@ -80,7 +76,6 @@
environment: Dict[str, Any] = dict(
debug=debug,
multi_tenant_mode=multi_tenant_mode,
skip_check_developer_headers=skip_check_developer_headers,
cozo_host=cozo_host,
cozo_auth=cozo_auth,
sentry_dsn=sentry_dsn,
Expand Down
67 changes: 40 additions & 27 deletions agents-api/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,10 @@ x--text-embeddings-inference: &text-embeddings-inference
- ~/.cache/huggingface/hub:/data

# Shared environment variables
x-shared-environment: &shared-environment
x--shared-environment: &shared-environment
AGENTS_API_KEY: ${AGENTS_API_KEY}
AGENTS_API_KEY_HEADER_NAME: ${AGENTS_API_KEY_HEADER_NAME:-Authorization}
AGENTS_API_HOSTNAME: ${AGENTS_API_HOSTNAME:-localhost}
AGENTS_API_PREFIX: ${AGENTS_API_PREFIX:-}
AGENTS_API_URL: ${AGENTS_API_URL:-http://agents-api:8080}
COZO_AUTH_TOKEN: ${COZO_AUTH_TOKEN}
COZO_HOST: ${COZO_HOST:-http://memory-store:9070}
Expand All @@ -26,7 +25,6 @@ x-shared-environment: &shared-environment
EMBEDDING_SERVICE_BASE: ${EMBEDDING_SERVICE_BASE:-http://text-embeddings-inference}
LITELLM_MASTER_KEY: ${LITELLM_MASTER_KEY}
LITELLM_URL: ${LITELLM_URL:-http://litellm:4000}
SKIP_CHECK_DEVELOPER_HEADERS: ${SKIP_CHECK_DEVELOPER_HEADERS:-True}
SUMMARIZATION_MODEL_NAME: ${SUMMARIZATION_MODEL_NAME:-gpt-4-turbo}
TEMPORAL_ENDPOINT: ${TEMPORAL_ENDPOINT:-temporal:7233}
TEMPORAL_NAMESPACE: ${TEMPORAL_NAMESPACE:-default}
Expand All @@ -35,34 +33,49 @@ x-shared-environment: &shared-environment
TRUNCATE_EMBED_TEXT: ${TRUNCATE_EMBED_TEXT:-True}
WORKER_URL: ${WORKER_URL:-temporal:7233}

x--base-agents-api: &base-agents-api
image: julepai/agents-api:${TAG}
depends_on:
memory-store:
condition: service_started
worker:
condition: service_started
environment:
<<: *shared-environment
build:
context: .
dockerfile: Dockerfile
ports:
- "8080:8080"

develop:
watch:
- action: sync+restart
path: ./agents_api
target: /app/agents_api
ignore:
- ./**/*.pyc
- action: rebuild
path: poetry.lock
- action: rebuild
path: Dockerfile


services:
agents-api:
image: julepai/agents-api:${TAG}
container_name: agents-api
depends_on:
memory-store:
condition: service_started
worker:
condition: service_started
<<: *base-agents-api
profiles:
- '' # Acts as a default profile. See: https://stackoverflow.com/questions/75758174/how-to-make-profile-default-for-docker-compose
- single-tenant

agents-api-multi-tenant:
<<: *base-agents-api
profiles:
- multi-tenant
environment:
<<: *shared-environment
build:
context: .
dockerfile: Dockerfile
ports:
- "8080:8080"

develop:
watch:
- action: sync+restart
path: ./agents_api
target: /app/agents_api
ignore:
- ./**/*.pyc
- action: rebuild
path: poetry.lock
- action: rebuild
path: Dockerfile
AGENTS_API_MULTI_TENANT_MODE: true
AGENTS_API_PREFIX: "/api"

worker:
image: julepai/worker:${TAG}
Expand Down
11 changes: 5 additions & 6 deletions gateway/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,21 @@ services:
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}
- AGENTS_API_URL=${AGENTS_API_URL:-http://agents-api:8080}
- AGENTS_API_URL=${AGENTS_API_URL:-http://agents-api-multi-tenant:8080}
- AGENTS_API_KEY=${AGENTS_API_KEY}
- AGENTS_API_KEY_HEADER_NAME=${AGENTS_API_KEY_HEADER_NAME:-Authorization}
- TRAEFIK_LOG_LEVEL=${TRAEFIK_LOG_LEVEL:-INFO}
container_name: gateway
profiles:
- multi-tenant
depends_on:
agents-api:
agents-api-multi-tenant:
condition: service_started
build:
context: .
dockerfile: Dockerfile
ports:
- 443:443
# - 443:443
- 80:80

command:
Expand Down
3 changes: 2 additions & 1 deletion scheduler/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ name: julep-scheduler
services:
temporal:
depends_on:
- temporal-db
temporal-db:
condition: service_started
environment:
- DB=postgres12
- DB_PORT=5432
Expand Down

0 comments on commit e1ff4d8

Please sign in to comment.