Configure in the web app
Open Settings > Archive configuration > Classification during or after setup and choose:- Local model for Ollama or another service on the trusted network
- Hosted model for a provider on the public internet
- Account subscription, with Provider: OpenAI ChatGPT (Codex) for an account with Codex access
Account subscription
Choose Account subscription, select OpenAI ChatGPT (Codex) under Provider, then Connect ChatGPT. Open the device-login link and enter the displayed code; approval happens on OpenAI’s site. Device login may need to be enabled in your ChatGPT security settings. After connecting, Suchi fetches the account’s model catalog and fills a dropdown, initially selecting the first returned model when the saved selection is unavailable. Your dropdown choice saves automatically and survives a page refresh. Changing this preference does not change the active model until you test and enable it. Choose a model, acknowledge document egress, and use Test connection before enabling the model. Login alone does not enable inference. The Account subscription panel is marked Experimental. Connection state appears in one account row; the model catalog, document-egress acknowledgement, and confidence slider remain visible below it. Test connection reports one inline verdict, while disabled states explain the missing connection or acknowledgement in place. This is an instance-wide AI credential: classification and authorized archive research consume the connected account’s subscription allowance. It does not change Suchi’s local/OIDC user sign-in. Suchi uses the Codex device-login and streaming Responses endpoints, matching the subscription protocol rather than API-key chat completions. No Codex executable is required. Use Refresh models to retry a failed catalog request or refresh the options. Catalog membership does not guarantee inference entitlement. Model access and limits depend on the account; a successful connection test verifies that request. Access and refresh tokens are encrypted in SQLite using.decrypt-key, never
returned to the browser, and refreshed on demand under a single lock. Pending
codes expire after 15 minutes, are bound to the initiating administrator, and
are lost on restart. Disconnect ChatGPT deletes Suchi’s saved credential and
stops the active subscription model. Manage upstream account permissions in
ChatGPT as well. Back up the data directory including its encryption key.
OpenAI ChatGPT (Codex) is the first registered subscription provider, identified
by openai_chatgpt. Suchi derives its fixed endpoint and authentication from the
adapter; an endpoint URL does not select subscription mode. Configure account
subscriptions in the browser; LLM_ENDPOINT_URL selects an endpoint model and
overrides the saved subscription configuration. LLM_API_KEY is not used for
subscription requests. Subscription inference sends
no tools and does not store Responses remotely. It uses prompt-based JSON output
followed by the same application validation as other providers. The backend does
not accept the chat-completions token-limit setting; requests are bounded by
Suchi’s timeout and response-size limit, and incomplete streams are rejected.
Local Ollama
The shipped Compose network mapshost.suchi.local to the host, so the default
works when Ollama listens on port 11434:
http://127.0.0.1:11434/v1. A local endpoint needs no key or egress
acknowledgement.
Equivalent environment fallback:
Hosted providers
Hosted models requireLLM_EGRESS_ACK=true or the matching web checkbox.
Gemini must use its OpenAI-compatible endpoint. Azure uses the deployment name
as the model. Set
LLM_API_KEY or mount a key file through
LLM_API_KEY_FILE for unattended startup.
Classification and Ask your documents request OpenAI-compatible
response_format: {"type":"json_object"} output before applying their own
schema validation. A provider or gateway that rejects this field is not
compatible with the configured model path. Claude requires an
OpenAI-compatible gateway; Suchi does not call Anthropic’s native Messages API.
Kimi, Qwen, Ollama, and similar providers work when their OpenAI-compatible
endpoint accepts JSON-object response mode.
Egress boundary
For hosted model assistance, Suchi sends:- extracted text from the current document
- bounded filing context and a small set of similar-document titles
- up to 100 most-used correspondent names and 100 most-used tag names from the active filing system, with per-name length limits
- the requested structured-output instructions
- for each matching ask automation, its numeric ID, question text, and closed answer list (never its action mapping, destination IDs, or fixed values)
archive_intelligence—bounded accepted detail values and quotes.
Only documents linked from the prior answer are checked and reused. Confidential
and Restricted text requires explicit consent for that conversation.
It does not send original PDF or image bytes, unrelated archive content,
ownership, ACLs, folder layouts, or backup information.
Loopback, private-network, link-local, .local, and .localhost hosts are
treated as local. Every other host requires acknowledgement and appears in the
redacted egress inventory and boundary logs.
Validation and confidence
Suchi accepts only validated JSON contracts. Text lengths, tag count, language shape, confidence ranges, JD code, extracted date count and calendar values, evidence quotes, automation-answer IDs/choices, and archive-research citations are bounded before persistence or rendering. A non-unknown automation answer
must include a normalized exact quote present in the text sent to the model and
the current document. Duplicate IDs, unknown IDs, unavailable destinations,
invented choices, and stale question definitions produce no mapped action.
Invalid provider output fails or is ignored according to its bounded field
without exposing raw output or document text in logs or API errors.
Before proposing correspondent or tag changes, Suchi reloads the current catalog
and reuses an existing ID for exact names/slugs and for one unambiguous narrow
match (a plural variant or a company name extended by at most two words).
Ambiguous matches remain new proposals rather than choosing an arbitrary entry.
The confidence threshold ranges from 0.50 to 0.95 in 0.05 steps and
defaults to 0.70.
With automatic mode on, eligible model metadata at or above the threshold can
apply without review. With it off, valid inferred changes go to Approvals even
at confidence 1.0. Below-threshold changes remain review suggestions. Scores are
model-reported signals, not calibrated probabilities of correctness.
An unset correspondent and Inbox-only filing remain eligibility checks. A model
may suggest or apply a title only while that title is automatically owned.
Renaming a document or accepting a title suggestion makes its title
human-owned and shows it as Title pinned; Unpin releases it without
changing the current text. Human edits, clears and language locks take precedence over in-flight
inference; automatic language changes do not create a human language lock.
Automation answers use their own model-reported confidence against the same
threshold and application mode. Answer actions are mapped before ordinary
classifier metadata in the final transaction; configured automation order wins
for single-value destinations, while tags combine. All question answers from a
request are discarded if the ordered matching question/action definitions
changed during the call. The ordinary classifier result remains independently
eligible. No question-specific request, retry, or answer-history row is created.
Local archive matching shares the same mode, with a default automatic threshold
of 0.90 and minimum review-suggestion score of 0.50. Explicit user-authored
rules remain independent.
Existing custom thresholds are preserved. An older review-only configuration
with a 0.90 review floor and no saved automatic threshold uses 0.95 for
automatic application, keeping its review floor valid.
Date extraction shares the request but requires exact target-document evidence
and evaluates each date’s own score against the model/date threshold, independently
of overall classification confidence. See Document dates.
Similar-document titles used as naming context are selected under the document
owner’s access, not an administrator’s archive-wide bypass. Their identities,
source snapshots and visibility are rechecked before results are stored and
again when a metadata suggestion is applied.
Automatic review-tag cleanup depends on a successful classification at or above
the threshold, not on whether the document has a descriptive title. Failed
requests, low-confidence results, and results that still include needs-review
retain the marker. Other tags are never removed by classification.
Suchi tracks ownership only when the classifier creates a new review-tag
assignment. Existing assignments retain their ownership; adding the same tag
manually, accepting a tag suggestion, or assigning it through a rule makes it
independent of the classifier. Renaming its name or slug also preserves existing
assignments. Tags from imports and older versions have no classifier ownership
and are not automatically cleared. They can be removed explicitly after review.
An authorized human metadata PATCH or bulk metadata/tag edit resolves a
classifier-owned needs-review assignment in the same write transaction.
Manual, imported, rule-owned and legacy review tags remain; explicitly adding
needs-review takes human ownership before cleanup rather than removing it.
Trash, restore and rescan alone do not count as review.
Test and live reload
Test connection sends fixed synthetic text without live automation questions and validates the response with the production parser. It returns latency and sanitized synthetic fields only. It does not save settings, send archive content, or reveal raw provider output. Saving local archive settings or the model’s enabled state, endpoint, model, key, timeout, acknowledgement or confidence threshold applies immediately. No Suchi restart is required. A provider-configuration change during a model call invalidates that result; the current application mode is checked again inside the writer before automatic changes. Saving settings never accepts pending suggestions. Other setting changes affect new ingests and explicit rescans; they never start an automatic archive-wide model backfill. Select older documents in Documents and use Rescan when they need processing again. Config-file and environment values take precedence over stored web settings on a field-by-field basis, following the documented configuration precedence. Unpinned fields still reload live. Prefer one management path per deployment so partial overrides remain easy to reason about.Pipeline versions and rescans
Each classification recordspipeline_version_llm. A code, output-schema, or
prompt revision can bump that version. Maintainers separately raise the tagged
LLM recommendation when existing successful results should receive a
stale-results proposal. Changing endpoint, model, key, timeout, or threshold
does not mark the archive stale.
Version 0 means classification never completed. Valid low-confidence results
receive the current version plus needs-review; they are completed results,
not failed or unprocessed documents. Automatic upgrade proposals exclude
version-zero documents, while an explicit selected or CLI rescan may include
them.
For version-driven command-line rescans:
Ask your documents and suggested details
Administrators havearchive_chat and archive_intelligence implicitly and may
grant either capability to members. Ask your documents performs bounded FTS5
matching, checks access to follow-up document IDs again, and validates the
structured answer and numbered-document contract. It has no model tools or write
actions. The document-number check verifies format and range, not whether every
claim is correct. A View is saved or Approvals/Calendar is opened only after a
separate user action.
The same classification call may suggest typed details. Dates are the first
registered type, stored in the generic document_intelligence ledger. Only
accepted dates reach Calendar, rich-query filters, or later answers: acceptance
may be automatic under the current mode and threshold, or explicitly reviewed.
Automatic acceptance records no human reviewer and does not enable ICS export.
See Ask your documents for the complete document-matching,
prompt, answer-link, saved-View, suggested-detail review, date-format, Calendar,
API, privacy, rate-limit, and maintainer contracts.
Current scope
The product provides fixed document classification, transient read-only document questions, Views made from exact document sets, suggested details tied to document text, and document-date Calendar/query workflows. It does not provide arbitrary model tools, custom code in the ingest pipeline, persistent chat, timed calendar events, or implicit rule learning from approvals.Troubleshooting
- Disabled: configure both Model service URL and model. Hosted models also need permission to send document text and usually an API key.
- 401 or 403: verify the provider key, Azure deployment, or service URL.
- 404: verify the model name against the provider’s current model list and confirm that the endpoint is its OpenAI-compatible base URL.
- Invalid result: use an instruction-tuned model that reliably returns one JSON object. Suchi intentionally rejects explanatory prose.
- Low confidence: use a stronger model, improve deterministic automations, or keep the conservative threshold and review suggestions in Approvals.
- No classification: inspect Classification and Approvals for a dead
post-classifyjob.