# Please don't modify this file as your changes might be overwritten with
# the next update.
#
# You can modify '$LOCAL_CONFDIR/rspamd.conf.local.override' to redefine
# parameters defined on the top level
#
# You can modify '$LOCAL_CONFDIR/rspamd.conf.local' to add
# parameters defined on the top level
#
# For specific modules or configuration you can also modify
# '$LOCAL_CONFDIR/local.d/file.conf' - to add your options or rewrite defaults
# '$LOCAL_CONFDIR/override.d/file.conf' - to override the defaults
#
# See https://rspamd.com/doc/tutorials/writing_rules.html for details

# Rspamd statistic setup
# Pre-built files could be loaded from:
# http://rspamd.com/rspamd_statistics/bayes.spam.sqlite
#  - and -
# http://rspamd.com/rspamd_statistics/bayes.ham.sqlite

classifier "bayes" {
  tokenizer {
    name = "osb";
  }
  cache {
    path = "${DBDIR}/learn_cache.sqlite";
  }
  min_tokens = 11;
  backend = "sqlite3";
  languages_enabled = true;
  min_learns = 200;

  statfile {
    symbol = "BAYES_HAM";
    path = "${DBDIR}/bayes.ham.sqlite";
    spam = false;
  }
  statfile {
    symbol = "BAYES_SPAM";
    path = "${DBDIR}/bayes.spam.sqlite";
    spam = true;
  }
  learn_condition =<<EOD
return function(task, is_spam, is_unlearn)
  local prob = task:get_mempool():get_variable('bayes_prob', 'double')

  if prob then
    local in_class = false
    local cl
    if is_spam then
      cl = 'spam'
      in_class = prob >= 0.95
    else
      cl = 'ham'
      in_class = prob <= 0.05
    end

    if in_class then
      return false,string.format('already in class %s; probability %.2f%%',
        cl, math.abs((prob - 0.5) * 200.0))
    end
  end

  return true
end
EOD

  .include(try=true; priority=1) "$LOCAL_CONFDIR/local.d/classifier-bayes.conf"
  .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/classifier-bayes.conf"
}

.include(try=true; priority=1) "$LOCAL_CONFDIR/local.d/statistic.conf"
.include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/statistic.conf"
