name: ai_stack services: cli-proxy-api: image: eceasy/cli-proxy-api:latest container_name: cli-proxy-api pull_policy: always ports: - '0.0.0.0:8317:8317' - '0.0.0.0:8085:8085' - '0.0.0.0:1455:1455' - '0.0.0.0:54545:54545' - '0.0.0.0:51121:51121' - '0.0.0.0:11451: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: - '18003:4000' environment: - GEMINI_API_KEY=${GEMINI_API_KEY} - 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 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: - '18004: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=棋洋 - 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} # --- 以下是新增的网页搜索相关环境变量 --- - ENABLE_WEB_SEARCH=true - WEB_SEARCH_ENGINE=ddgs - WHISPER_WEB_SEARCH_RESULT_COUNT=5 - WEB_SEARCH_TRUSTED_PROXY=true # ------------------------------------ volumes: - open-webui:/app/backend/data depends_on: - litellm - cli-proxy-api - jupyter restart: unless-stopped volumes: open-webui: jupyter-work: open-terminal: