# Function configurations — dict per category (not lists). # AI functions reference a model from models.*.yaml. # Archive functions specify a type and optional config dict. # Keys within each category serve as plugin_id; must be unique across all categories. # Override individual functions in functions.user.yaml. functions: # ── Boundary detection: image → {boundaries: [...], confidence: 0.x} # ai_shelf_boundaries / ai_book_boundaries stored as {functionId: [fractions]} per entity. boundary_detectors: shelves: # key = plugin_id = target; runs on cabinet images model: vl_detect_shelves max_image_px: 1600 auto_queue: false rate_limit_seconds: 0 timeout: 30 books: # key = plugin_id = target; runs on shelf images model: vl_detect_books max_image_px: 1600 auto_queue: false rate_limit_seconds: 0 timeout: 30 # ── Text recognition: spine image → {raw_text, title, author, year, publisher, other} text_recognizers: recognize: model: vl_recognize max_image_px: 1600 auto_queue: true rate_limit_seconds: 0 timeout: 30 # ── Book identification: raw_text → {title, author, year, isbn, publisher, confidence} book_identifiers: identify: model: ai_identify confidence_threshold: 0.8 auto_queue: false rate_limit_seconds: 0 timeout: 30 # ── Archive searchers: query → [{source, title, author, year, isbn, publisher}, ...] archive_searchers: openlibrary: name: "OpenLibrary" type: openlibrary auto_queue: true rate_limit_seconds: 5 timeout: 8 rsl: name: "РГБ" type: rsl auto_queue: true rate_limit_seconds: 5 timeout: 8 rusneb: name: "НЭБ" type: rusneb auto_queue: true rate_limit_seconds: 5 timeout: 8 alib_web: name: "Alib (web)" type: alib_web auto_queue: false rate_limit_seconds: 5 timeout: 8 nlr: name: "НЛР" type: sru_catalog auto_queue: false rate_limit_seconds: 5 timeout: 8 config: url: "http://www.nlr.ru/search/query" query_prefix: "title=" shpl: # Endpoint currently returns HTTP 404; retained for future re-enablement. name: "ШПИЛ" type: shpl auto_queue: false rate_limit_seconds: 5 timeout: 8