# Default values for danswer-stack.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.

imagePullSecrets: []
nameOverride: ""
fullnameOverride: ""

inferenceCapability:
  service:
    name: inference-model-server-service
    type: ClusterIP
    port: 9000
  pvc:
    name: inference-model-pvc
    accessModes:
      - ReadWriteOnce
    storage: 3Gi
  deployment:
    name: inference-model-server-deployment
    replicas: 1
    labels:
      - key: app
        value: inference-model-server
    image:
      repository: danswer/danswer-model-server
      tag: latest
      pullPolicy: IfNotPresent
    command: ["uvicorn", "model_server.main:app", "--host", "0.0.0.0", "--port", "9000"]
    port: 9000
    volumeMounts:
      - name: inference-model-storage
        mountPath: /root/.cache
    volumes:
      - name: inference-model-storage
        persistentVolumeClaim:
          claimName: inference-model-pvc
  podLabels:
    - key: app
      value: inference-model-server

indexCapability:
  service:
    type: ClusterIP
    port: 9000
    name: indexing-model-server-port
  deploymentLabels:
    app: indexing-model-server
  podLabels:
    app: indexing-model-server
  indexingOnly: "True"
  podAnnotations: {}
  volumeMounts:
    - name: indexing-model-storage
      mountPath: /root/.cache
  volumes:
    - name: indexing-model-storage
      persistentVolumeClaim:
        claimName: indexing-model-storage
  indexingModelPVC:
    name: indexing-model-storage
    accessMode: "ReadWriteOnce"
    storage: "3Gi"

config:
  envConfigMapName: env-configmap

serviceAccount:
  # Specifies whether a service account should be created
  create: false
  # Automatically mount a ServiceAccount's API credentials?
  automount: true
  # Annotations to add to the service account
  annotations: {}
  # The name of the service account to use.
  # If not set and create is true, a name is generated using the fullname template
  name: ""

postgresql:
  primary:
    persistence:
      size: 5Gi
  enabled: true
  auth:
    existingSecret: danswer-secrets
    secretKeys:
      adminPasswordKey: postgres_password #overwriting as postgres typically expects 'postgres-password'

nginx:
  containerPorts:
    http: 1024
  extraEnvVars:
    - name: DOMAIN
      value: localhost
  service:
    ports:
      http: 80
      danswer: 3000
    targetPort:
      http: http
      danswer: http

  existingServerBlockConfigmap: danswer-nginx-conf

webserver:
  replicaCount: 1
  image:
    repository: danswer/danswer-web-server
    pullPolicy: IfNotPresent
    # Overrides the image tag whose default is the chart appVersion.
    tag: ""
  deploymentLabels:
    app: web-server
  podAnnotations: {}
  podLabels:
    app: web-server
  podSecurityContext: {}
    # fsGroup: 2000

  securityContext: {}
    # capabilities:
    #   drop:
    #   - ALL
    # readOnlyRootFilesystem: true
    # runAsNonRoot: true
    # runAsUser: 1000

  service:
    type: ClusterIP
    port: 3000

  resources: {}
  # We usually recommend not to specify default resources and to leave this as a conscious
  # choice for the user. This also increases chances charts run on environments with little
  # resources, such as Minikube. If you do want to specify resources, uncomment the following
  # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
  # limits:
  #   cpu: 100m
  #   memory: 128Mi
  # requests:
  #   cpu: 100m
  #   memory: 128Mi

  autoscaling:
    enabled: false
    minReplicas: 1
    maxReplicas: 100
    targetCPUUtilizationPercentage: 80
    # targetMemoryUtilizationPercentage: 80

  # Additional volumes on the output Deployment definition.
  volumes: []
  # - name: foo
  #   secret:
  #     secretName: mysecret
  #     optional: false

  # Additional volumeMounts on the output Deployment definition.
  volumeMounts: []
  # - name: foo
  #   mountPath: "/etc/foo"
  #   readOnly: true

  nodeSelector: {}
  tolerations: []
  affinity: {}

api:
  replicaCount: 1
  image:
    repository: danswer/danswer-backend
    pullPolicy: IfNotPresent
    # Overrides the image tag whose default is the chart appVersion.
    tag: ""
  deploymentLabels:
    app: api-server
  podAnnotations: {}
  podLabels:
    scope: danswer-backend
    app: api-server

  podSecurityContext: {}
    # fsGroup: 2000

  securityContext: {}
    # capabilities:
    #   drop:
    #   - ALL
    # readOnlyRootFilesystem: true
    # runAsNonRoot: true
    # runAsUser: 1000

  service:
    type: ClusterIP
    port: 8080

  resources: {}
  # We usually recommend not to specify default resources and to leave this as a conscious
  # choice for the user. This also increases chances charts run on environments with little
  # resources, such as Minikube. If you do want to specify resources, uncomment the following
  # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
  #  requests:
  #    cpu: 1000m  # Requests 1 CPU core
  #    memory: 1Gi  # Requests 1 GiB of memory
  #  limits:
  #    cpu: 2000m  # Limits to 2 CPU cores
  #    memory: 2Gi  # Limits to 2 GiB of memory

  autoscaling:
    enabled: false
    minReplicas: 1
    maxReplicas: 100
    targetCPUUtilizationPercentage: 80
    # targetMemoryUtilizationPercentage: 80

  # Additional volumes on the output Deployment definition.
  volumes: []
  # - name: foo
  #   secret:
  #     secretName: mysecret
  #     optional: false

  # Additional volumeMounts on the output Deployment definition.
  volumeMounts: []
  # - name: foo
  #   mountPath: "/etc/foo"
  #   readOnly: true

  nodeSelector: {}
  tolerations: []


background:
  replicaCount: 1
  image:
    repository: danswer/danswer-backend
    pullPolicy: IfNotPresent
    # Overrides the image tag whose default is the chart appVersion.
    tag: latest
  podAnnotations: {}
  podLabels:
    scope: danswer-backend
    app: background
  deploymentLabels:
    app: background
  podSecurityContext: {}
    # fsGroup: 2000

  securityContext: {}
    # capabilities:
    #   drop:
    #   - ALL
    # readOnlyRootFilesystem: true
    # runAsNonRoot: true
    # runAsUser: 1000
  enableMiniChunk: "true"
  resources: {}
  # We usually recommend not to specify default resources and to leave this as a conscious
  # choice for the user. This also increases chances charts run on environments with little
  # resources, such as Minikube. If you do want to specify resources, uncomment the following
  # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
  #  requests:
  #    cpu: 1000m  # Requests 1 CPU core
  #    memory: 1Gi  # Requests 1 GiB of memory
  #  limits:
  #    cpu: 2000m  # Limits to 2 CPU cores
  #    memory: 2Gi  # Limits to 2 GiB of memory

  autoscaling:
    enabled: false
    minReplicas: 1
    maxReplicas: 100
    targetCPUUtilizationPercentage: 80
    # targetMemoryUtilizationPercentage: 80

  # Additional volumes on the output Deployment definition.
  volumes: []
  # - name: foo
  #   secret:
  #     secretName: mysecret
  #     optional: false

  # Additional volumeMounts on the output Deployment definition.
  volumeMounts: []
  # - name: foo
  #   mountPath: "/etc/foo"
  #   readOnly: true

  nodeSelector: {}
  tolerations: []

vespa:
  replicaCount: 1
  image:
    repository: vespa
    pullPolicy: IfNotPresent
    tag: "8.277.17"
  podAnnotations: {}
  podLabels:
    app: vespa
    app.kubernetes.io/instance: danswer
    app.kubernetes.io/name: vespa
  enabled: true

  podSecurityContext: {}
    # fsGroup: 2000

  securityContext:
    privileged: true
    runAsUser: 0
    # capabilities:
    #   drop:
    #   - ALL
    # readOnlyRootFilesystem: true
    # runAsNonRoot: true
    # runAsUser: 1000

  resources:
  # The Vespa Helm chart specifies default resources, which are quite modest. We override
  # them here to increase chances of the chart running successfully.
    requests:
      cpu: 1500m
      memory: 4000Mi
    limits:
      cpu: 1500m
      memory: 4000Mi

  nodeSelector: {}
  tolerations: []
  affinity: {}


#ingress:
#  enabled: false
#  className: ""
#  annotations: {}
#    # kubernetes.io/ingress.class: nginx
#    # kubernetes.io/tls-acme: "true"
#  hosts:
#    - host: chart-example.local
#      paths:
#        - path: /
#          pathType: ImplementationSpecific
#  tls: []
#  #  - secretName: chart-example-tls
#  #    hosts:
#  #      - chart-example.local

persistence:
  vespa:
    enabled: true
    existingClaim: ""
    storageClassName: ""
    accessModes:
      - ReadWriteOnce
    size: 5Gi

auth:
  # for storing smtp, oauth, slack, and other secrets
  # keys are lowercased version of env vars (e.g. SMTP_USER -> smtp_user)
  existingSecret: "" # danswer-secrets
  # optionally override the secret keys to reference in the secret
  secretKeys:
    postgres_password: "postgres_password"
    smtp_pass: ""
    oauth_client_id: ""
    oauth_client_secret: ""
    oauth_cookie_secret: ""
    gen_ai_api_key: ""
    danswer_bot_slack_app_token: ""
    danswer_bot_slack_bot_token: ""
  # will be overridden by the existingSecret if set
  secretName: "danswer-secrets"
  # set values as strings, they will be base64 encoded
  secrets:
    postgres_password: "postgres"
    smtp_pass: ""
    oauth_client_id: ""
    oauth_client_secret: ""
    oauth_cookie_secret: ""
    gen_ai_api_key: ""
    danswer_bot_slack_app_token: ""
    danswer_bot_slack_bot_token: ""

configMap:
  AUTH_TYPE: "disabled"  # Change this for production uses unless Danswer is only accessible behind VPN
  SESSION_EXPIRE_TIME_SECONDS: "86400"  # 1 Day Default
  VALID_EMAIL_DOMAINS: ""  # Can be something like danswer.ai, as an extra double-check
  SMTP_SERVER: "" # For sending verification emails, if unspecified then defaults to 'smtp.gmail.com'
  SMTP_PORT: "" # For sending verification emails, if unspecified then defaults to '587'
  SMTP_USER: ""  # 'your-email@company.com'
  # SMTP_PASS: ""  # 'your-gmail-password'
  EMAIL_FROM: ""  # 'your-email@company.com' SMTP_USER missing used instead
  # Gen AI Settings
  GEN_AI_MODEL_PROVIDER: ""
  GEN_AI_MODEL_VERSION: ""
  FAST_GEN_AI_MODEL_VERSION: ""
  # GEN_AI_API_KEY: ""
  GEN_AI_API_ENDPOINT: ""
  GEN_AI_API_VERSION: ""
  GEN_AI_LLM_PROVIDER_TYPE: ""
  GEN_AI_MAX_TOKENS: ""
  QA_TIMEOUT: "60"
  MAX_CHUNKS_FED_TO_CHAT: ""
  DISABLE_LLM_DOC_RELEVANCE: ""
  DISABLE_LLM_CHOOSE_SEARCH: ""
  DISABLE_LLM_QUERY_REPHRASE: ""
  # Query Options
  DOC_TIME_DECAY: ""
  HYBRID_ALPHA: ""
  EDIT_KEYWORD_QUERY: ""
  MULTILINGUAL_QUERY_EXPANSION: ""
  LANGUAGE_HINT: ""
  LANGUAGE_CHAT_NAMING_HINT: ""
  QA_PROMPT_OVERRIDE: ""
  # Internet Search Tool
  BING_API_KEY: ""
  # Don't change the NLP models unless you know what you're doing
  DOCUMENT_ENCODER_MODEL: ""
  NORMALIZE_EMBEDDINGS: ""
  ASYM_QUERY_PREFIX: ""
  ASYM_PASSAGE_PREFIX: ""
  DISABLE_RERANK_FOR_STREAMING: ""
  MODEL_SERVER_PORT: ""
  MIN_THREADS_ML_MODELS: ""
  # Indexing Configs
  NUM_INDEXING_WORKERS: ""
  DISABLE_INDEX_UPDATE_ON_SWAP: ""
  DASK_JOB_CLIENT_ENABLED: ""
  CONTINUE_ON_CONNECTOR_FAILURE: ""
  EXPERIMENTAL_CHECKPOINTING_ENABLED: ""
  CONFLUENCE_CONNECTOR_LABELS_TO_SKIP: ""
  JIRA_API_VERSION: ""
  GONG_CONNECTOR_START_TIME: ""
  NOTION_CONNECTOR_ENABLE_RECURSIVE_PAGE_LOOKUP: ""
  # DanswerBot SlackBot Configs
  # DANSWER_BOT_SLACK_APP_TOKEN: ""
  # DANSWER_BOT_SLACK_BOT_TOKEN: ""
  DANSWER_BOT_DISABLE_DOCS_ONLY_ANSWER: ""
  DANSWER_BOT_DISPLAY_ERROR_MSGS: ""
  DANSWER_BOT_RESPOND_EVERY_CHANNEL: ""
  DANSWER_BOT_DISABLE_COT: ""  # Currently unused
  NOTIFY_SLACKBOT_NO_ANSWER: ""
  # Logging
  # Optional Telemetry, please keep it on (nothing sensitive is collected)? <3
  # https://docs.danswer.dev/more/telemetry
  DISABLE_TELEMETRY: ""
  LOG_LEVEL: ""
  LOG_ALL_MODEL_INTERACTIONS: ""
  LOG_DANSWER_MODEL_INTERACTIONS: ""
  LOG_VESPA_TIMING_INFORMATION: ""
  # Shared or Non-backend Related
  WEB_DOMAIN: "http://localhost:3000"  # for web server and api server
  DOMAIN: "localhost"  # for nginx