name: ai_stack services: cli-proxy-api: image: eceasy/cli-proxy-api:latest container_name: cli-proxy-api pull_policy: always ports: - '127.0.0.1:30010:8317' - '127.0.0.1:30011:8085' - '127.0.0.1:30012:1455' - '127.0.0.1:30013:54545' - '127.0.0.1:30014:51121' - '127.0.0.1:30015:11451' volumes: - ./cliproxyapi/config.yaml:/CLIProxyAPI/config.yaml:ro - ./cliproxyapi/auths:/root/.cli-proxy-api - ./cliproxyapi/logs:/CLIProxyAPI/logs restart: unless-stopped litellm: image: docker.litellm.ai/berriai/litellm:main-stable container_name: litellm ports: - '127.0.0.1:30001:4000' environment: - CLIPROXY_API_KEY=${CLIPROXY_API_KEY} volumes: - ./litellm:/app/litellm:ro env_file: - .env depends_on: - cli-proxy-api command: > --config /app/litellm/config.yaml --port 4000 restart: unless-stopped docling-serve: image: quay.io/docling-project/docling-serve:latest container_name: docling-serve pull_policy: always ports: - '127.0.0.1:30002:5001' environment: - DOCLING_SERVE_ENABLE_UI=true - DOCLING_SERVE_MAX_SYNC_WAIT=600 - DOCLING_SERVE_ENG_LOC_NUM_WORKERS=2 - UVICORN_WORKERS=1 - OMP_NUM_THREADS=4 - MKL_NUM_THREADS=4 volumes: - docling-data:/app/data restart: unless-stopped jupyter: image: quay.io/jupyter/datascience-notebook:latest container_name: ai-chat-jupyter environment: - JUPYTER_TOKEN=${JUPYTER_TOKEN} command: > start-notebook.py --ServerApp.token=${JUPYTER_TOKEN} --ServerApp.password= --ServerApp.allow_origin=* volumes: - jupyter-work:/home/jovyan/work restart: unless-stopped open-terminal: image: ghcr.io/open-webui/open-terminal:latest container_name: open-terminal user: '0:0' environment: - OPEN_TERMINAL_API_KEY=${OPEN_TERMINAL_API_KEY:?OPEN_TERMINAL_API_KEY is required} - OPEN_TERMINAL_MULTI_USER=true volumes: - open-terminal:/home restart: unless-stopped open-webui: image: ghcr.io/open-webui/open-webui:main container_name: open-webui pull_policy: always ports: - '127.0.0.1:30000:8080' environment: - OPENAI_API_BASE_URLS=http://litellm:4000/v1;http://cli-proxy-api:8317/v1 - OPENAI_API_KEYS=dummy;${CLIPROXY_API_KEY} - >- TERMINAL_SERVER_CONNECTIONS=[{"id":"open-terminal","url":"http://open-terminal:8000","key":"${OPEN_TERMINAL_API_KEY}","name":"Open Terminal","auth_type":"bearer","config":{"access_grants":[]}}] - WEBUI_AUTH=true - WEBUI_NAME=棋洋 - WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY} - OAUTH_ALLOWED_DOMAINS=${OAUTH_ALLOWED_DOMAINS} - DEFAULT_USER_ROLE=pending - ENABLE_CODE_INTERPRETER=false - ENABLE_CODE_EXECUTION=true - CODE_INTERPRETER_ENGINE=jupyter - CODE_INTERPRETER_JUPYTER_URL=http://jupyter:8888 - CODE_INTERPRETER_JUPYTER_AUTH=token - CODE_INTERPRETER_JUPYTER_AUTH_TOKEN=${JUPYTER_TOKEN} - CODE_INTERPRETER_JUPYTER_TIMEOUT=120 - ENABLE_IMAGE_GENERATION=true - ENABLE_IMAGE_PROMPT_GENERATION=true - IMAGE_GENERATION_ENGINE=openai - IMAGE_GENERATION_MODEL=gpt-image-2 - IMAGE_SIZE=1024x1024 - IMAGES_OPENAI_API_BASE_URL=http://cli-proxy-api:8317/v1 - IMAGES_OPENAI_API_KEY=${CLIPROXY_API_KEY} - ENABLE_IMAGE_EDIT=true - IMAGE_EDIT_ENGINE=openai - IMAGE_EDIT_MODEL=gpt-image-2 - IMAGE_EDIT_SIZE=1024x1024 - IMAGES_EDIT_OPENAI_API_BASE_URL=http://cli-proxy-api:8317/v1 - IMAGES_EDIT_OPENAI_API_KEY=${CLIPROXY_API_KEY} - STORAGE_PROVIDER=${STORAGE_PROVIDER} - S3_ACCESS_KEY_ID=${S3_ACCESS_KEY_ID} - S3_SECRET_ACCESS_KEY=${S3_SECRET_ACCESS_KEY} - S3_ENDPOINT_URL=${S3_ENDPOINT_URL} - S3_REGION_NAME=${S3_REGION_NAME} - S3_BUCKET_NAME=${S3_BUCKET_NAME} - S3_ADDRESSING_STYLE=${S3_ADDRESSING_STYLE} - VECTOR_DB=${VECTOR_DB} - PGVECTOR_DB_URL=${PGVECTOR_DB_URL} - CONTENT_EXTRACTION_ENGINE=docling - DOCLING_SERVER_URL=http://docling-serve:5001 - >- DOCLING_PARAMS={"do_ocr":true,"pdf_backend":"dlparse_v4","table_mode":"accurate"} # --- 以下是新增的网页搜索相关环境变量 --- - ENABLE_WEB_SEARCH=true - WEB_SEARCH_ENGINE=ddgs - WHISPER_WEB_SEARCH_RESULT_COUNT=5 - WEB_SEARCH_TRUSTED_PROXY=true # ------------------------------------ - DATABASE_URL=${DATABASE_URL} volumes: - open-webui:/app/backend/data depends_on: - litellm - cli-proxy-api - docling-serve - jupyter restart: unless-stopped volumes: open-webui: docling-data: jupyter-work: open-terminal: