services: openwebui: image: ghcr.io/open-webui/open-webui:main container_name: openwebui networks: - webui ports: - "3000:8080" volumes: - ./data:/app/backend/data healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3000/health"] interval: 60s timeout: 10s retries: 3 environment: WEBUI_NAME: Engineering Assistant WEBUI_AUTH: False WEBUI_URL: "http://localhost:3000/" ENABLE_PERSISTENT_CONFIG: True # OpenAI Config ENABLE_OPENAI_API: True OPENAI_API_KEY: ${OPENAI_API_KEY} AUDIO_STT_ENGINE: openai AUDIO_STT_OPENAI_API_KEY: ${OPENAI_API_KEY} AUDIO_TTS_OPENAI_API_KEY: ${OPENAI_API_KEY} ENABLE_IMAGE_GENERATION: True IMAGE_GENERATION_ENGINE: openai IMAGE_GENERATION_MODEL: dall-e-3 IMAGE_SIZE: 1792x1024 IMAGES_OPENAI_API_KEY: ${OPENAI_API_KEY} # Jupyter API config ENABLE_CODE_INTERPRETER: True ENABLE_CODE_EXECUTION: True CODE_EXECUTION_ENGINE: jupyter CODE_EXECUTION_JUPYTER_URL: http://jupyter:8888 CODE_EXECUTION_JUPYTER_AUTH: token CODE_EXECUTION_JUPYTER_AUTH_TOKEN: ${JUPYTER_TOKEN} CODE_EXECUTION_JUPYTER_TIMEOUT: 300 CODE_INTERPRETER_ENGINE: jupyter CODE_INTERPRETER_JUPYTER_URL: http://jupyter:8888 CODE_INTERPRETER_JUPYTER_AUTH: token CODE_INTERPRETER_AUTH_TOKEN: ${JUPYTER_TOKEN} CODE_INTERPRETER_TIMEOUT: 300 # Search API config ENABLE_RAG_WEB_SEARCH: True RAG_WEB_SEARCH_ENGINE: searxng RAG_WEB_SEARCH_RESULT_COUNT: 3 RAG_WEB_SEARCH_CONCURRENT_REQUESTS: 10 SEARXNG_QUERY_URL: http://searxng:8080/search?q= # Redis caching config REDIS_URL: redis://valkey:6379/0 ENABLE_WEBSOCKET_SUPPORT: True WEBSOCKET_MANAGER: redis WEBSOCKET_REDIS_URL: redis://valkey:6379/1 deploy: resources: reservations: devices: - driver: nvidia capabilities: [gpu] depends_on: jupyter: condition: service_healthy searxng: condition: service_healthy valkey: condition: service_healthy blender: condition: service_healthy jupyter: image: quay.io/jupyter/datascience-notebook container_name: jupyter volumes: - jupyter:/home/jovyan/work networks: - webui command: start-notebook.sh --ip=0.0.0.0 environment: JUPYTER_LAB_ENABLE: yes JUPYTER_TOKEN: ${JUPYTER_TOKEN} searxng: image: docker.io/searxng/searxng:latest container_name: searxng volumes: - searxng:/etc/searxng:rw - ./searxng/limiter.toml:/usr/local/searxng/searx/limiter.toml - ./searxng/settings.yml:/usr/local/searxng/searx/settings.yml - ./searxng/uwsgi.ini:/usr/local/searxng/searx/uwsgi.ini networks: - webui environment: SEARXNG_HOSTNAME: searxng:8080/ BASE_URL: http://searxng:8080/ INSTANCE_NAME: eng_assistant_test_searxng restart: unless-stopped cap_drop: - ALL cap_add: - CHOWN - SETGID - SETUID - DAC_OVERRIDE logging: driver: "json-file" options: max-size: "1m" max-file: "1" valkey: image: docker.io/valkey/valkey:8.0.1-alpine container_name: valkey volumes: - valkey:/data command: "valkey-server --save 30 1" healthcheck: test: ["CMD", "valkey-cli", "ping"] interval: 1s timeout: 3s retries: 5 start_period: 5s restart: unless-stopped cap_drop: - ALL cap_add: - SETGID - SETUID - DAC_OVERRIDE networks: - webui blender: image: ghcr.io/cian-h/simple_blender_server:main container_name: blender healthcheck: test: ["CMD", "curl", "-f", "http://localhost:1212/health"] interval: 30s timeout: 10s retries: 3 networks: - webui restart: unless-stopped networks: webui: volumes: searxng: open-webui: jupyter: valkey: blender: