-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
116 lines (113 loc) · 5.32 KB
/
Copy pathdocker-compose.yml
File metadata and controls
116 lines (113 loc) · 5.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
networks:
frontend:
external: true
app:
driver: bridge
internal: false
services:
agent:
build:
context: .
target: ${ENV:-dev}
command: ["uv", "run", "--no-sync", "uvicorn", "search_agent.main:app", "--host", "0.0.0.0", "--port", "8001", "--reload"]
ports:
- "8001"
networks:
- app
- frontend
depends_on:
searxng:
condition: service_healthy
redis:
condition: service_healthy
healthcheck:
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8001/health')"]
interval: 15s
timeout: 5s
retries: 3
start_period: 10s
environment:
SEARCH_AGENT_LLM_BASE_URL: ${SEARCH_AGENT_LLM_BASE_URL:?}
SEARCH_AGENT_LLM_API_KEY: ${SEARCH_AGENT_LLM_API_KEY:?}
SEARCH_AGENT_LLM_MODEL: ${SEARCH_AGENT_LLM_MODEL:?}
SEARCH_AGENT_SEARCH_PROVIDER: ${SEARCH_AGENT_SEARCH_PROVIDER:-searxng}
SEARCH_AGENT_SEARXNG_URL: ${SEARCH_AGENT_SEARXNG_URL:-http://searxng:8080}
SEARCH_AGENT_STAAN_URL: ${SEARCH_AGENT_STAAN_URL:-https://api.staan.ai}
SEARCH_AGENT_STAAN_API_KEY: ${SEARCH_AGENT_STAAN_API_KEY:-}
SEARCH_AGENT_STAAN_MARKET: ${SEARCH_AGENT_STAAN_MARKET:-en-us}
SEARCH_AGENT_STAAN_TIMEOUT: ${SEARCH_AGENT_STAAN_TIMEOUT:-10}
SEARCH_AGENT_STAAN_ENRICHMENT: ${SEARCH_AGENT_STAAN_ENRICHMENT:-full_content}
SEARCH_AGENT_STAAN_MAX_SNIPPETS: ${SEARCH_AGENT_STAAN_MAX_SNIPPETS:-3}
SEARCH_AGENT_STAAN_MIN_SCORE: ${SEARCH_AGENT_STAAN_MIN_SCORE:-0.1}
SEARCH_AGENT_STAAN_CONTENT_MAX_CHARS: ${SEARCH_AGENT_STAAN_CONTENT_MAX_CHARS:-5000}
SEARCH_AGENT_STAAN_CONTENT_MAX_RESULTS: ${SEARCH_AGENT_STAAN_CONTENT_MAX_RESULTS:-5}
SEARCH_AGENT_STAAN_MAX_RESPONSE_BYTES: ${SEARCH_AGENT_STAAN_MAX_RESPONSE_BYTES:-10000000}
SEARCH_AGENT_DATETIME_TIMEZONE: ${SEARCH_AGENT_DATETIME_TIMEZONE:-UTC}
SEARCH_AGENT_DATETIME_FORMAT: ${SEARCH_AGENT_DATETIME_FORMAT:-%A, %B %-d, %Y, %H:%M %Z}
SEARCH_AGENT_MCP_ALLOWED_HOSTS: ${SEARCH_AGENT_MCP_ALLOWED_HOSTS:-["search-agent:8001","localhost:8001"]}
SEARCH_AGENT_SEARXNG_TIMEOUT: ${SEARCH_AGENT_SEARXNG_TIMEOUT:-15}
SEARCH_AGENT_SEARCH_PIPELINE_TIMEOUT: ${SEARCH_AGENT_SEARCH_PIPELINE_TIMEOUT:-90}
SEARCH_AGENT_LLM_TIMEOUT: ${SEARCH_AGENT_LLM_TIMEOUT:-60}
SEARCH_AGENT_SEARCH_QUERY_PLANNER_PROMPT: ${SEARCH_AGENT_SEARCH_QUERY_PLANNER_PROMPT:-}
SEARCH_AGENT_SEARCH_ANALYZE_SYNTHESIZE_PROMPT: ${SEARCH_AGENT_SEARCH_ANALYZE_SYNTHESIZE_PROMPT:-}
SEARCH_AGENT_SEARCH_SKIP_PLANNER_FOR_SIMPLE_QUERIES: ${SEARCH_AGENT_SEARCH_SKIP_PLANNER_FOR_SIMPLE_QUERIES:-true}
SEARCH_AGENT_SEARCH_MAX_QUERIES: ${SEARCH_AGENT_SEARCH_MAX_QUERIES:-3}
SEARCH_AGENT_SEARCH_MAX_RESULTS: ${SEARCH_AGENT_SEARCH_MAX_RESULTS:-15}
SEARCH_AGENT_SEARCH_SIMPLE_QUERY_MAX_WORDS: ${SEARCH_AGENT_SEARCH_SIMPLE_QUERY_MAX_WORDS:-15}
SEARCH_AGENT_SEARCH_SIMPLE_QUERY_MAX_QUESTIONS: ${SEARCH_AGENT_SEARCH_SIMPLE_QUERY_MAX_QUESTIONS:-1}
SEARCH_AGENT_SEARCH_FETCH_PAGE_CONTENT: ${SEARCH_AGENT_SEARCH_FETCH_PAGE_CONTENT:-false}
SEARCH_AGENT_SEARCH_FETCH_MAX_PAGES: ${SEARCH_AGENT_SEARCH_FETCH_MAX_PAGES:-5}
SEARCH_AGENT_SEARCH_FETCH_TIMEOUT: ${SEARCH_AGENT_SEARCH_FETCH_TIMEOUT:-10}
SEARCH_AGENT_SEARCH_FETCH_MAX_CHARS: ${SEARCH_AGENT_SEARCH_FETCH_MAX_CHARS:-5000}
SEARCH_AGENT_SEARCH_FETCH_MAX_BYTES: ${SEARCH_AGENT_SEARCH_FETCH_MAX_BYTES:-2000000}
SEARCH_AGENT_CACHE_BACKEND: ${SEARCH_AGENT_CACHE_BACKEND:-redis}
SEARCH_AGENT_CACHE_REDIS_URL: ${SEARCH_AGENT_CACHE_REDIS_URL:-redis://redis:6379/0}
SEARCH_AGENT_CACHE_FETCH_TTL: ${SEARCH_AGENT_CACHE_FETCH_TTL:-3600}
SEARCH_AGENT_CACHE_FETCH_NEGATIVE_TTL: ${SEARCH_AGENT_CACHE_FETCH_NEGATIVE_TTL:-300}
SEARCH_AGENT_CACHE_SEARXNG_TTL: ${SEARCH_AGENT_CACHE_SEARXNG_TTL:-300}
SEARCH_AGENT_CACHE_STAAN_TTL: ${SEARCH_AGENT_CACHE_STAAN_TTL:-300}
SEARCH_AGENT_CACHE_PLANNER_TTL: ${SEARCH_AGENT_CACHE_PLANNER_TTL:-21600}
SEARCH_AGENT_DEBUG: ${SEARCH_AGENT_DEBUG:-false}
volumes:
- ./src:/app/src
- ./tests:/app/tests
labels:
- "traefik.enable=true"
- "traefik.docker.network=frontend"
- "traefik.http.routers.${COMPOSE_PROJECT_NAME:?}.rule=Host(`${COMPOSE_DOMAIN:?}`)"
# HTTPS config - enable redirect from :80 to :443
- "traefik.http.routers.${COMPOSE_PROJECT_NAME:?}.middlewares=redirect-to-https"
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
searxng:
image: searxng/searxng:latest
networks:
- app
ports:
- '8080'
healthcheck:
test: ["CMD", "wget", "--quiet", "--spider", "http://localhost:8080/"]
interval: 15s
timeout: 5s
retries: 3
start_period: 10s
environment:
SEARXNG_SECRET: ${SEARXNG_SECRET:?must be set — SearXNG uses this to sign tokens}
SEARXNG_METHOD: ${SEARXNG_METHOD:-POST}
volumes:
- ./.docker/searxng/settings.yml:/etc/searxng/settings.yml
- ./.docker/data/searxng/:/var/cache/searxng/
redis:
image: redis:7-alpine
networks:
- app
ports:
- "6379"
command: ["redis-server", "--maxmemory", "256mb", "--maxmemory-policy", "allkeys-lru"]
volumes:
- ./.docker/data/redis/:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 15s
timeout: 3s
retries: 3
start_period: 5s