oxirs-chat 0.1.0

RAG chat API with LLM integration and natural language to SPARQL translation
Documentation
# OxiRS Chat - Docker Compose Configuration
version: '3.8'

services:
  oxirs-chat:
    build:
      context: ../..
      dockerfile: ai/oxirs-chat/Dockerfile
    container_name: oxirs-chat
    restart: unless-stopped
    ports:
      - "8080:8080"
    volumes:
      - ./data:/app/data
      - ./config:/app/config
      - ./datasets:/app/datasets:ro
    environment:
      - RUST_LOG=${RUST_LOG:-info}
      - OPENAI_API_KEY=${OPENAI_API_KEY:-}
      - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-}
      - COHERE_API_KEY=${COHERE_API_KEY:-}
      - GROQ_API_KEY=${GROQ_API_KEY:-}
      - MISTRAL_API_KEY=${MISTRAL_API_KEY:-}
      - PUBMED_API_KEY=${PUBMED_API_KEY:-}
    networks:
      - oxirs-network
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
      interval: 30s
      timeout: 3s
      retries: 3
      start_period: 10s
    deploy:
      resources:
        limits:
          cpus: '2.0'
          memory: 4G
        reservations:
          cpus: '1.0'
          memory: 2G

  # Redis for caching (optional but recommended)
  redis:
    image: redis:7-alpine
    container_name: oxirs-redis
    restart: unless-stopped
    ports:
      - "6379:6379"
    volumes:
      - redis-data:/data
    networks:
      - oxirs-network
    command: redis-server --appendonly yes
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 3s
      retries: 3

  # Prometheus for metrics (optional)
  prometheus:
    image: prom/prometheus:latest
    container_name: oxirs-prometheus
    restart: unless-stopped
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
      - prometheus-data:/prometheus
    networks:
      - oxirs-network
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'

  # Grafana for visualization (optional)
  grafana:
    image: grafana/grafana:latest
    container_name: oxirs-grafana
    restart: unless-stopped
    ports:
      - "3000:3000"
    volumes:
      - grafana-data:/var/lib/grafana
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD:-admin}
      - GF_USERS_ALLOW_SIGN_UP=false
    networks:
      - oxirs-network
    depends_on:
      - prometheus

networks:
  oxirs-network:
    driver: bridge

volumes:
  redis-data:
  prometheus-data:
  grafana-data: