From 6bff2d3e2e7884338c7bc7727ef5ef21af74c365 Mon Sep 17 00:00:00 2001 From: saravanakumardb1 Date: Mon, 6 Apr 2026 11:15:36 -0700 Subject: [PATCH] chore(devops): add LLM env vars to .env.example, docker-compose, docker-prep --- backend/.env.example | 10 +++++ docker-compose.yml | 8 ++++ scripts/docker-prep.sh | 91 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 109 insertions(+) create mode 100755 scripts/docker-prep.sh diff --git a/backend/.env.example b/backend/.env.example index fe02a59..4e8c186 100644 --- a/backend/.env.example +++ b/backend/.env.example @@ -14,6 +14,16 @@ PLATFORM_SERVICE_URL=http://localhost:4003 EXTRACTION_SERVICE_URL=http://localhost:4005 MCP_SERVER_URL=http://localhost:4007 +# LLM (@bytelyst/llm) +LLM_PROVIDER=mock +OPENAI_API_KEY= +OPENAI_BASE_URL= +AZURE_OPENAI_ENDPOINT= +AZURE_OPENAI_API_KEY= +LLM_DEFAULT_MODEL=gpt-4o-mini +LLM_VISION_MODEL=gpt-4o +LLM_EMBEDDING_MODEL=text-embedding-3-small + # Field-level encryption FIELD_ENCRYPT_KEY_PROVIDER=memory FIELD_ENCRYPT_KEY= diff --git a/docker-compose.yml b/docker-compose.yml index 9d9de28..95feb3d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -24,6 +24,14 @@ services: - FEATURE_FLAGS_ENABLED=${FEATURE_FLAGS_ENABLED:-false} - FIELD_ENCRYPT_ENABLED=${FIELD_ENCRYPT_ENABLED:-false} - FIELD_ENCRYPT_KEY_PROVIDER=${FIELD_ENCRYPT_KEY_PROVIDER:-memory} + - LLM_PROVIDER=${LLM_PROVIDER:-mock} + - OPENAI_API_KEY=${OPENAI_API_KEY:-} + - OPENAI_BASE_URL=${OPENAI_BASE_URL:-} + - AZURE_OPENAI_ENDPOINT=${AZURE_OPENAI_ENDPOINT:-} + - AZURE_OPENAI_API_KEY=${AZURE_OPENAI_API_KEY:-} + - LLM_DEFAULT_MODEL=${LLM_DEFAULT_MODEL:-gpt-4o-mini} + - LLM_VISION_MODEL=${LLM_VISION_MODEL:-gpt-4o} + - LLM_EMBEDDING_MODEL=${LLM_EMBEDDING_MODEL:-text-embedding-3-small} restart: unless-stopped healthcheck: test: ["CMD", "wget", "--spider", "-q", "http://localhost:4016/health"] diff --git a/scripts/docker-prep.sh b/scripts/docker-prep.sh new file mode 100755 index 0000000..623594b --- /dev/null +++ b/scripts/docker-prep.sh @@ -0,0 +1,91 @@ +#!/usr/bin/env bash +# Pack @bytelyst/* tarballs from the sibling common-plat repo for +# self-contained Docker builds that don't need the Gitea npm registry. +# +# Usage: +# ./scripts/docker-prep.sh # pack tarballs + rewrite package.json +# ./scripts/docker-prep.sh --restore # undo rewrite + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" +COMMON_PLAT="${REPO_DIR}/../learning_ai_common_plat" + +TARBALL_DIR="${REPO_DIR}/.docker-deps" + +# ── Restore mode ─────────────────────────────────────────────────── +if [[ "${1:-}" == "--restore" ]]; then + echo "Restoring original package.json files..." + for bak in $(find "$REPO_DIR" -name "package.json.bak" -not -path "*/node_modules/*"); do + mv "$bak" "${bak%.bak}" + echo " Restored ${bak%.bak}" + done + rm -rf "$TARBALL_DIR" + echo "Done." + exit 0 +fi + +# ── Pack mode ────────────────────────────────────────────────────── +echo "=== docker-prep: packing @bytelyst/* tarballs ===" + +rm -rf "$TARBALL_DIR" +mkdir -p "$TARBALL_DIR" + +# Build all packages first +echo "Building @bytelyst/* packages..." +(cd "$COMMON_PLAT" && pnpm build) + +# Pack each package and build a mapping of name → tarball filename +declare -A TARBALL_MAP +for pkg_dir in "$COMMON_PLAT"/packages/*/; do + pkg_name=$(node -p "require('${pkg_dir}package.json').name" 2>/dev/null || true) + if [[ -z "$pkg_name" ]]; then continue; fi + + echo " Packing $pkg_name..." + tarball=$(cd "$pkg_dir" && pnpm pack --pack-destination "$TARBALL_DIR" 2>/dev/null | tail -1) + filename=$(basename "$tarball") + TARBALL_MAP["$pkg_name"]="$filename" + echo " -> $filename" +done + +# ── Rewrite package.json files ───────────────────────────────────── +echo "" +echo "Rewriting package.json @bytelyst/* refs to .docker-deps/ tarballs..." + +rewrite_package_json() { + local pkg_file="$1" + local rel_prefix="$2" # relative path from package.json dir to repo root + + if [[ ! -f "$pkg_file" ]]; then return; fi + + # Backup + cp "$pkg_file" "${pkg_file}.bak" + + local tmp="${pkg_file}.tmp" + cp "$pkg_file" "$tmp" + + for pkg_name in "${!TARBALL_MAP[@]}"; do + local tarball="${TARBALL_MAP[$pkg_name]}" + # Replace "^0.1.0" (or any semver) with "file:../.docker-deps/" + sed -i '' "s|\"${pkg_name}\": \"[^\"]*\"|\"${pkg_name}\": \"file:${rel_prefix}.docker-deps/${tarball}\"|g" "$tmp" + done + + mv "$tmp" "$pkg_file" + echo " Rewrote $pkg_file" +} + +# Backend package.json +rewrite_package_json "${REPO_DIR}/backend/package.json" "../" + +# Web package.json +rewrite_package_json "${REPO_DIR}/web/package.json" "../" + +echo "" +echo "Done. Tarballs in $TARBALL_DIR" +echo "" +echo "To build Docker images:" +echo " docker compose build" +echo "" +echo "To restore after build:" +echo " ./scripts/docker-prep.sh --restore"