# This file is auto-generated by alef — DO NOT EDIT. # alef:hash:4e15143f4af1ae8bafbdb1506ef057da924484c66a19483966333558ad437e75 # To regenerate: alef generate # To verify freshness: alef verify --exit-code # Issues & docs: https://github.com/kreuzberg-dev/alef defmodule Kreuzberg.OcrQualityThresholds do @moduledoc """ Quality thresholds for OCR fallback decisions and pipeline quality gating. All fields default to the values that match the previous hardcoded behavior, so `OcrQualityThresholds::default()` preserves existing semantics exactly. """ @typedoc "Quality thresholds for OCR fallback decisions and pipeline quality gating." @type t :: %__MODULE__{ min_total_non_whitespace: non_neg_integer(), min_non_whitespace_per_page: float(), min_meaningful_word_len: non_neg_integer(), min_meaningful_words: non_neg_integer(), min_alnum_ratio: float(), min_garbage_chars: non_neg_integer(), max_fragmented_word_ratio: float(), critical_fragmented_word_ratio: float(), min_avg_word_length: float(), min_words_for_avg_length_check: non_neg_integer(), min_consecutive_repeat_ratio: float(), min_words_for_repeat_check: non_neg_integer(), substantive_min_chars: non_neg_integer(), non_text_min_chars: non_neg_integer(), alnum_ws_ratio_threshold: float(), pipeline_min_quality: float() } defstruct min_total_non_whitespace: 64, min_non_whitespace_per_page: 32, min_meaningful_word_len: 4, min_meaningful_words: 3, min_alnum_ratio: 0.3, min_garbage_chars: 5, max_fragmented_word_ratio: 0.6, critical_fragmented_word_ratio: 0.8, min_avg_word_length: 2, min_words_for_avg_length_check: 50, min_consecutive_repeat_ratio: 0.08, min_words_for_repeat_check: 50, substantive_min_chars: 100, non_text_min_chars: 20, alnum_ws_ratio_threshold: 0.4, pipeline_min_quality: 0.5 defimpl Jason.Encoder do @doc false def encode(value, opts) do value |> Map.from_struct() |> Enum.reject(fn {_k, v} -> v == nil end) |> Enum.into(%{}) |> Jason.Encoder.encode(opts) end end end