All checks were successful
release-tag / release-image (push) Successful in 2m32s
160 lines
10 KiB
YAML
160 lines
10 KiB
YAML
services:
|
|
brain:
|
|
build: .
|
|
container_name: glpi-neural-brain
|
|
restart: unless-stopped
|
|
ports:
|
|
- "${BRAIN_PORT:-8090}:8090"
|
|
environment:
|
|
BRAIN_MODE: ${BRAIN_MODE:-brain}
|
|
BRAIN_LISTEN_ADDR: ":8090"
|
|
BRAIN_PUBLIC_URL: ${BRAIN_PUBLIC_URL:-}
|
|
BRAIN_DATA_DIR: /app/data
|
|
BRAIN_KNOWLEDGE_DIRS: /sources/knowledge
|
|
BRAIN_STAGING_DIRS: /sources/staging
|
|
BRAIN_AGENT_RUNS_FILES: /sources/agent-data/runs.jsonl
|
|
OLLAMA_URL: ${OLLAMA_URL:-http://host.docker.internal:11434}
|
|
OLLAMA_URLS: ${OLLAMA_URLS:-http://host.docker.internal:11434}
|
|
OLLAMA_NODE_NAMES: ${OLLAMA_NODE_NAMES:-local-gpu}
|
|
OLLAMA_NODE_WEIGHTS: ${OLLAMA_NODE_WEIGHTS:-1}
|
|
OLLAMA_ROUTING_MODE: ${OLLAMA_ROUTING_MODE:-least_inflight}
|
|
OLLAMA_NODE_MAX_INFLIGHT: ${OLLAMA_NODE_MAX_INFLIGHT:-1}
|
|
OLLAMA_NODE_HEALTH_INTERVAL: ${OLLAMA_NODE_HEALTH_INTERVAL:-15s}
|
|
OLLAMA_NODE_FAILURE_COOLDOWN: ${OLLAMA_NODE_FAILURE_COOLDOWN:-30s}
|
|
OLLAMA_NODE_REQUEST_TIMEOUT: ${OLLAMA_NODE_REQUEST_TIMEOUT:-8m}
|
|
OLLAMA_FAILOVER_ENABLED: ${OLLAMA_FAILOVER_ENABLED:-true}
|
|
OLLAMA_FAILOVER_ATTEMPTS: ${OLLAMA_FAILOVER_ATTEMPTS:-0}
|
|
OLLAMA_REQUIRE_SAME_MODEL_DIGEST: ${OLLAMA_REQUIRE_SAME_MODEL_DIGEST:-true}
|
|
OLLAMA_REQUIRE_EMBEDDING_MODEL: ${OLLAMA_REQUIRE_EMBEDDING_MODEL:-true}
|
|
OLLAMA_CHAT_MODEL: ${OLLAMA_CHAT_MODEL:-qwen3:8b}
|
|
OLLAMA_EMBEDDING_MODEL: ${OLLAMA_EMBEDDING_MODEL:-embeddinggemma}
|
|
BRAIN_AUTO_ENRICH: ${BRAIN_AUTO_ENRICH:-true}
|
|
BRAIN_SCAN_INTERVAL: ${BRAIN_SCAN_INTERVAL:-5m}
|
|
BRAIN_KNOWLEDGE_FULL_VERIFY_INTERVAL: ${BRAIN_KNOWLEDGE_FULL_VERIFY_INTERVAL:-6h}
|
|
BRAIN_PERSIST_INTERVAL: ${BRAIN_PERSIST_INTERVAL:-5m}
|
|
BRAIN_LEARNING_ENABLED: ${BRAIN_LEARNING_ENABLED:-true}
|
|
BRAIN_THINKING_ENABLED: ${BRAIN_THINKING_ENABLED:-true}
|
|
BRAIN_LEARNING_SOURCES: ${BRAIN_LEARNING_SOURCES:-}
|
|
BRAIN_DISPLAY_SOURCES: ${BRAIN_DISPLAY_SOURCES:-}
|
|
BRAIN_THINKING_SOURCES: ${BRAIN_THINKING_SOURCES:-}
|
|
BRAIN_DEFAULT_VIEW: ${BRAIN_DEFAULT_VIEW:-neural}
|
|
BRAIN_MAX_DISPLAY_NODES: ${BRAIN_MAX_DISPLAY_NODES:-0}
|
|
BRAIN_LOW_POWER_MODE: ${BRAIN_LOW_POWER_MODE:-false}
|
|
BRAIN_SPEED_MODE: ${BRAIN_SPEED_MODE:-false}
|
|
BRAIN_SPEED_CPU_TASKS: ${BRAIN_SPEED_CPU_TASKS:-}
|
|
BRAIN_SPEED_GPU_TASKS: ${BRAIN_SPEED_GPU_TASKS:-4}
|
|
BRAIN_ENRICH_INTERVAL: ${BRAIN_ENRICH_INTERVAL:-90s}
|
|
BRAIN_ENRICH_BATCH_SIZE: ${BRAIN_ENRICH_BATCH_SIZE:-3}
|
|
BRAIN_ENRICH_STEP_DELAY: ${BRAIN_ENRICH_STEP_DELAY:-3s}
|
|
BRAIN_ENRICH_ANCHORS: ${BRAIN_ENRICH_ANCHORS:-48}
|
|
BRAIN_PROCESSING_MODE: ${BRAIN_PROCESSING_MODE:-precise}
|
|
BRAIN_CLUSTER_HASH_BITS: ${BRAIN_CLUSTER_HASH_BITS:-24}
|
|
BRAIN_CLUSTER_HASH_TABLES: ${BRAIN_CLUSTER_HASH_TABLES:-2}
|
|
BRAIN_CLUSTER_CANDIDATES_PER_ANCHOR: ${BRAIN_CLUSTER_CANDIDATES_PER_ANCHOR:-96}
|
|
BRAIN_CLUSTER_ARTICLE_CANDIDATES: ${BRAIN_CLUSTER_ARTICLE_CANDIDATES:-192}
|
|
BRAIN_CLUSTER_REVIEW_EVIDENCE: ${BRAIN_CLUSTER_REVIEW_EVIDENCE:-8}
|
|
BRAIN_CLUSTER_REVIEW_CONTEXT_CHARS: ${BRAIN_CLUSTER_REVIEW_CONTEXT_CHARS:-8000}
|
|
BRAIN_CLUSTER_ARTICLE_BATCHING: ${BRAIN_CLUSTER_ARTICLE_BATCHING:-true}
|
|
BRAIN_SIMILARITY_THRESHOLD: ${BRAIN_SIMILARITY_THRESHOLD:-0.68}
|
|
BRAIN_RELATION_THRESHOLD: ${BRAIN_RELATION_THRESHOLD:-0.72}
|
|
BRAIN_VECTOR_GRAPH_ENABLED: ${BRAIN_VECTOR_GRAPH_ENABLED:-false}
|
|
BRAIN_VECTOR_GRAPH_NEIGHBORS: ${BRAIN_VECTOR_GRAPH_NEIGHBORS:-4}
|
|
BRAIN_VECTOR_GRAPH_CANDIDATES: ${BRAIN_VECTOR_GRAPH_CANDIDATES:-96}
|
|
BRAIN_VECTOR_GRAPH_MIN_SIMILARITY: ${BRAIN_VECTOR_GRAPH_MIN_SIMILARITY:-0.80}
|
|
BRAIN_VECTOR_GRAPH_MIN_AFFINITY: ${BRAIN_VECTOR_GRAPH_MIN_AFFINITY:-0.35}
|
|
BRAIN_VECTOR_GRAPH_ORPHAN_PASS: ${BRAIN_VECTOR_GRAPH_ORPHAN_PASS:-false}
|
|
BRAIN_VECTOR_GRAPH_ORPHAN_NEIGHBORS: ${BRAIN_VECTOR_GRAPH_ORPHAN_NEIGHBORS:-2}
|
|
BRAIN_VECTOR_GRAPH_ORPHAN_CANDIDATES: ${BRAIN_VECTOR_GRAPH_ORPHAN_CANDIDATES:-256}
|
|
BRAIN_VECTOR_GRAPH_ORPHAN_MIN_SIMILARITY: ${BRAIN_VECTOR_GRAPH_ORPHAN_MIN_SIMILARITY:-0.80}
|
|
BRAIN_VECTOR_GRAPH_ORPHAN_MIN_AFFINITY: ${BRAIN_VECTOR_GRAPH_ORPHAN_MIN_AFFINITY:-0.30}
|
|
BRAIN_VECTOR_GRAPH_AGENT_OFFLOAD: ${BRAIN_VECTOR_GRAPH_AGENT_OFFLOAD:-false}
|
|
BRAIN_VECTOR_GRAPH_AGENT_REQUIRED: ${BRAIN_VECTOR_GRAPH_AGENT_REQUIRED:-false}
|
|
BRAIN_VECTOR_GRAPH_AGENT_WAIT: ${BRAIN_VECTOR_GRAPH_AGENT_WAIT:-2m}
|
|
BRAIN_THINKING_VECTOR_GUIDED: ${BRAIN_THINKING_VECTOR_GUIDED:-true}
|
|
BRAIN_VECTOR_GRAPH_LAYOUT: ${BRAIN_VECTOR_GRAPH_LAYOUT:-false}
|
|
BRAIN_ARTICLE_SYNTHESIS_ENABLED: ${BRAIN_ARTICLE_SYNTHESIS_ENABLED:-true}
|
|
BRAIN_ARTICLE_LANGUAGE: ${BRAIN_ARTICLE_LANGUAGE:-de-DE}
|
|
BRAIN_ARTICLE_SYNTHESIS_MODEL: ${BRAIN_ARTICLE_SYNTHESIS_MODEL:-qwen3:8b}
|
|
BRAIN_ARTICLE_REVIEW_MODEL: ${BRAIN_ARTICLE_REVIEW_MODEL:-qwen3:8b}
|
|
BRAIN_ARTICLE_REVIEW_REPAIR_ROUNDS: ${BRAIN_ARTICLE_REVIEW_REPAIR_ROUNDS:-1}
|
|
BRAIN_ARTICLE_MIN_SOURCES: ${BRAIN_ARTICLE_MIN_SOURCES:-3}
|
|
BRAIN_ARTICLE_MAX_SOURCES: ${BRAIN_ARTICLE_MAX_SOURCES:-8}
|
|
BRAIN_ARTICLE_MIN_PRODUCTION_RATIO: ${BRAIN_ARTICLE_MIN_PRODUCTION_RATIO:-0.70}
|
|
BRAIN_ARTICLE_MAX_GENERATION_DEPTH: ${BRAIN_ARTICLE_MAX_GENERATION_DEPTH:-2}
|
|
BRAIN_ARTICLE_MIN_CONFIDENCE: ${BRAIN_ARTICLE_MIN_CONFIDENCE:-0.74}
|
|
BRAIN_ARTICLE_MIN_TEXT_CHARS: ${BRAIN_ARTICLE_MIN_TEXT_CHARS:-180}
|
|
BRAIN_ARTICLE_MIN_ANSWER_CHARS: ${BRAIN_ARTICLE_MIN_ANSWER_CHARS:-420}
|
|
BRAIN_ARTICLE_RESEARCH_STRATEGY: ${BRAIN_ARTICLE_RESEARCH_STRATEGY:-auto}
|
|
BRAIN_ARTICLE_ADAPTIVE_INITIAL_QUERIES: ${BRAIN_ARTICLE_ADAPTIVE_INITIAL_QUERIES:-2}
|
|
BRAIN_ARTICLE_ADAPTIVE_INITIAL_FETCH: ${BRAIN_ARTICLE_ADAPTIVE_INITIAL_FETCH:-3}
|
|
BRAIN_ARTICLE_MAX_RESEARCH_QUERIES: ${BRAIN_ARTICLE_MAX_RESEARCH_QUERIES:-6}
|
|
BRAIN_ARTICLE_RESEARCH_RESULTS: ${BRAIN_ARTICLE_RESEARCH_RESULTS:-12}
|
|
BRAIN_ARTICLE_RESEARCH_ROUNDS: ${BRAIN_ARTICLE_RESEARCH_ROUNDS:-3}
|
|
BRAIN_ARTICLE_RESEARCH_FETCH_RESULTS: ${BRAIN_ARTICLE_RESEARCH_FETCH_RESULTS:-6}
|
|
BRAIN_ARTICLE_RESEARCH_EXPLORATION_RESULTS: ${BRAIN_ARTICLE_RESEARCH_EXPLORATION_RESULTS:-3}
|
|
BRAIN_ARTICLE_RESEARCH_PREFETCH_MIN_RELEVANCE: ${BRAIN_ARTICLE_RESEARCH_PREFETCH_MIN_RELEVANCE:-0.25}
|
|
BRAIN_ARTICLE_RESEARCH_MIN_RELEVANCE: ${BRAIN_ARTICLE_RESEARCH_MIN_RELEVANCE:-0.55}
|
|
BRAIN_ARTICLE_RESEARCH_MIN_QUALITY: ${BRAIN_ARTICLE_RESEARCH_MIN_QUALITY:-0.35}
|
|
BRAIN_ARTICLE_RESEARCH_PAGE_MAX_BYTES: ${BRAIN_ARTICLE_RESEARCH_PAGE_MAX_BYTES:-2097152}
|
|
BRAIN_ARTICLE_RESEARCH_PAGE_MAX_CHARS: ${BRAIN_ARTICLE_RESEARCH_PAGE_MAX_CHARS:-14000}
|
|
BRAIN_ARTICLE_RESEARCH_FETCH_TIMEOUT: ${BRAIN_ARTICLE_RESEARCH_FETCH_TIMEOUT:-20s}
|
|
BRAIN_ARTICLE_RESEARCH_ALLOW_PRIVATE: ${BRAIN_ARTICLE_RESEARCH_ALLOW_PRIVATE:-false}
|
|
BRAIN_RESEARCH_OLLAMA_MAX_INFLIGHT: ${BRAIN_RESEARCH_OLLAMA_MAX_INFLIGHT:-2}
|
|
BRAIN_RESEARCH_OLLAMA_QUEUE_SIZE: ${BRAIN_RESEARCH_OLLAMA_QUEUE_SIZE:-64}
|
|
BRAIN_RESEARCH_DEDUPE_THRESHOLD: ${BRAIN_RESEARCH_DEDUPE_THRESHOLD:-0.92}
|
|
BRAIN_RESEARCH_DEDUPE_TTL: ${BRAIN_RESEARCH_DEDUPE_TTL:-45m}
|
|
BRAIN_TOP_K: ${BRAIN_TOP_K:-8}
|
|
BRAIN_MAX_CONTEXT_CHARS: ${BRAIN_MAX_CONTEXT_CHARS:-16000}
|
|
BRAIN_RESEARCH_ENABLED: ${BRAIN_RESEARCH_ENABLED:-false}
|
|
BRAIN_SOURCE_INBOX_ENABLED: ${BRAIN_SOURCE_INBOX_ENABLED:-true}
|
|
BRAIN_SOURCE_INBOX_INTERVAL: ${BRAIN_SOURCE_INBOX_INTERVAL:-30s}
|
|
BRAIN_SOURCE_INBOX_BATCH_SIZE: ${BRAIN_SOURCE_INBOX_BATCH_SIZE:-12}
|
|
BRAIN_SOURCE_INBOX_MIN_SIMILARITY: ${BRAIN_SOURCE_INBOX_MIN_SIMILARITY:-0.55}
|
|
BRAIN_SOURCE_INBOX_MIN_PRIORITY: ${BRAIN_SOURCE_INBOX_MIN_PRIORITY:-0.55}
|
|
BRAIN_SOURCE_INBOX_NOVELTY_FLOOR: ${BRAIN_SOURCE_INBOX_NOVELTY_FLOOR:-0.35}
|
|
BRAIN_SOURCE_INBOX_MIN_RESULTS: ${BRAIN_SOURCE_INBOX_MIN_RESULTS:-2}
|
|
BRAIN_SOURCE_INBOX_FRESH_MAX_AGE: ${BRAIN_SOURCE_INBOX_FRESH_MAX_AGE:-168h}
|
|
BRAIN_AUTONOMOUS_RESEARCH_ENABLED: ${BRAIN_AUTONOMOUS_RESEARCH_ENABLED:-false}
|
|
BRAIN_AUTONOMOUS_RESEARCH_IDLE_ONLY: ${BRAIN_AUTONOMOUS_RESEARCH_IDLE_ONLY:-true}
|
|
BRAIN_AUTONOMOUS_RESEARCH_INTERVAL: ${BRAIN_AUTONOMOUS_RESEARCH_INTERVAL:-30m}
|
|
BRAIN_AUTONOMOUS_RESEARCH_TASKS_PER_CYCLE: ${BRAIN_AUTONOMOUS_RESEARCH_TASKS_PER_CYCLE:-1}
|
|
BRAIN_AUTONOMOUS_RESEARCH_MAX_TASKS_PER_DAY: ${BRAIN_AUTONOMOUS_RESEARCH_MAX_TASKS_PER_DAY:-12}
|
|
BRAIN_AUTONOMOUS_RESEARCH_MAX_QUERIES_PER_TASK: ${BRAIN_AUTONOMOUS_RESEARCH_MAX_QUERIES_PER_TASK:-6}
|
|
BRAIN_AUTONOMOUS_RESEARCH_MAX_PAGES_PER_TASK: ${BRAIN_AUTONOMOUS_RESEARCH_MAX_PAGES_PER_TASK:-8}
|
|
BRAIN_AUTONOMOUS_RESEARCH_MAX_ROUNDS: ${BRAIN_AUTONOMOUS_RESEARCH_MAX_ROUNDS:-3}
|
|
BRAIN_AUTONOMOUS_RESEARCH_MIN_PRIORITY: ${BRAIN_AUTONOMOUS_RESEARCH_MIN_PRIORITY:-0.65}
|
|
BRAIN_AUTONOMOUS_RESEARCH_COOLDOWN: ${BRAIN_AUTONOMOUS_RESEARCH_COOLDOWN:-168h}
|
|
BRAIN_AUTONOMOUS_RESEARCH_LEASE: ${BRAIN_AUTONOMOUS_RESEARCH_LEASE:-45m}
|
|
BRAIN_AUTONOMOUS_RESEARCH_MAX_ATTEMPTS: ${BRAIN_AUTONOMOUS_RESEARCH_MAX_ATTEMPTS:-3}
|
|
BRAIN_AUTONOMOUS_RESEARCH_QUERY_TRIGGERS: ${BRAIN_AUTONOMOUS_RESEARCH_QUERY_TRIGGERS:-true}
|
|
BRAIN_AUTONOMOUS_RESEARCH_OPPORTUNITY_LIMIT: ${BRAIN_AUTONOMOUS_RESEARCH_OPPORTUNITY_LIMIT:-8}
|
|
# In Docker, localhost points to this Brain container. Use the SearXNG
|
|
# service name (for example http://searxng:8080) or host.docker.internal.
|
|
SEARXNG_URL: ${SEARXNG_URL:-}
|
|
BRAIN_API_KEY: ${BRAIN_API_KEY:-}
|
|
GLPI_KB_ENABLED: ${GLPI_KB_ENABLED:-false}
|
|
GLPI_URL: ${GLPI_URL:-}
|
|
GLPI_API_VERSION: ${GLPI_API_VERSION:-v2.3}
|
|
GLPI_CLIENT_ID: ${GLPI_CLIENT_ID:-}
|
|
GLPI_CLIENT_SECRET: ${GLPI_CLIENT_SECRET:-}
|
|
GLPI_USERNAME: ${GLPI_USERNAME:-}
|
|
GLPI_PASSWORD: ${GLPI_PASSWORD:-}
|
|
GLPI_ALLOW_INSECURE_HTTP: ${GLPI_ALLOW_INSECURE_HTTP:-false}
|
|
GLPI_TIMEOUT: ${GLPI_TIMEOUT:-20s}
|
|
GLPI_KB_PATH: ${GLPI_KB_PATH:-auto}
|
|
GLPI_KB_FILTER: ${GLPI_KB_FILTER:-}
|
|
GLPI_KB_LIMIT: ${GLPI_KB_LIMIT:-500}
|
|
GLPI_KB_SYNC_INTERVAL: ${GLPI_KB_SYNC_INTERVAL:-10m}
|
|
GLPI_KB_SOURCE: ${GLPI_KB_SOURCE:-GLPI Knowledge Base}
|
|
volumes:
|
|
- brain-data:/app/data
|
|
# Adjust the three host paths to your actual project directories.
|
|
- ../glpi-ai-agent/knowledge:/sources/knowledge:ro
|
|
- ../glpi-ai-knowledgebase/staging:/sources/staging:rw
|
|
- ../glpi-ai-agent/data:/sources/agent-data:ro
|
|
extra_hosts:
|
|
- "host.docker.internal:host-gateway"
|
|
|
|
volumes:
|
|
brain-data:
|