Gemini Operations & Troubleshooting

The Gemini extension keeps durable local state for imports, uploads, Search indexing, deployments, conversations, and analytics. Back up the OrmLite database and AI Chat's AppDataPath together.

Worker recovery and index health

Search health reports total, indexed, pending, stale, failed and section counts, the provider, last successful index time, oldest pending work, and recent errors.

Use Rebuild index after changing extractors or database FTS configuration. A native provider name means FTS is active; a *-like name means initialization or querying fell back safely. SQL Server requires the optional Full-Text Search component. PostgreSQL, SQL Server and MySQL/MariaDB support native C# providers; llms-py intentionally supports SQLite only.

Deployment diagnostics

Run diagnostics is available on Search and Assistant deployments. Search checks publication, public File Store access, indexed/pending/failed content, allowed origins, and widget URL. Assistant also checks active Gemini documents and the resolved model. Warnings are deployable but deserve review; failures identify requirements that prevent the public widget from working.

Metadata filter capability probe

Gemini's File Search metadata filters follow AIP-160, but the exact operators and key casing a model accepts can change. The extension assumes full support and exposes a probe that verifies it against the live API rather than guessing:

# Cached result, or the assumed defaults when never probed
curl https://app.example.com/chat/ext/gemini/capabilities

# Run the probe (requires write access)
curl -X POST https://app.example.com/chat/ext/gemini/capabilities/probe

The probe creates a temporary File Store, uploads two fixture documents with known metadata, then issues one filtered retrieval per operator and checks which fixtures were actually cited:

Key Expression tested Enables
equality status="published" Baseline equality with a lowercase key.
keyCamel docType="guide" camelCase keys.
keyLower doctype="guide" All-lowercase keys.
keySnake doc_type="guide" snake_case keys used by this extension.
listHas versions:"v8" Versions, tags, and category subtree filters.
numeric sortkey > 1700000000 Staleness filters.
numericCamel sortKey > 1700000000 Numeric comparison on camelCase keys.
and status="published" AND versions:"v8" Combining facets.
or status="published" OR status="deprecated" Multi-select facets.
not NOT status="deprecated" Negative filters.

Each result records a verdict of ok, filter ignored, rejected or no match, or error. If the unfiltered baseline retrieval cannot cite both fixtures, the run reports probed: false with the reason and leaves every operator assumed working rather than disabling filters on a bad signal. The temporary store and fixtures are always deleted, and the result is cached until the next probe at:

App_Data/chat/user/default/gemini/capabilities.json

The probe model defaults to gemini-flash-latest and can be changed from the environment:

GEMINI_PROBE_MODEL=gemini-flash-latest

The probe consumes Gemini quota

It uploads two documents and issues at least one grounded request per operator, retrying up to 34 requests in total when results are inconclusive. Run it after a Gemini API change or when metadata filters behave unexpectedly - not on a schedule.

Operational guidance

Choose store boundaries deliberately

Use separate File Stores when knowledge must have a different owner, access policy, lifecycle, or deletion boundary. Use categories and metadata inside a store when the same team should manage the content but queries need narrower scopes.

Prefer curated sources over larger sources

Retrieval quality improves when navigation fragments, stale versions, duplicate pages, drafts, and boilerplate are excluded. Preview folder diffs, inspect crawl Markdown, set status and version metadata, and test filtered chats before exposing an Assistant publicly.

Make citations durable

Use canonical Source URL templates instead of local cache links. Preserve stable page paths across re-imports, and push metadata changes after correcting URLs so Gemini retrieves the updated values.

Recover from interrupted uploads

Pending documents remain queued in the local catalogue and resume after application startup. To inspect them, open Explorer at the destination category and sort by Uploading. Sort by Failed to review provider errors and retry individual documents.

The local Search queue is independent and follows the same durable desired/completed-hash model. Open Search to see index health, document, indexed, pending, stale, failed and section counts, last successful indexing time, oldest pending work, and recent failures. Use Rebuild index to regenerate every local section after changing extraction or database configuration. Each Search and Assistant deployment also provides Run diagnostics, which checks publication, public store access, indexed knowledge, origin restrictions, model selection, and its public widget endpoint.

Troubleshooting

The Gemini icon is missing

Confirm GOOGLE_API_KEY or GEMINI_API_KEY is available to the App, an IDbConnectionFactory is registered, and gemini is not listed in DisableExtensions. Restart the App after changing its environment. The extension logs which prerequisite is missing when it disables itself.

No Gemini model is available

Configure a Google provider chat model. The Gemini picker excludes other providers and incompatible model types.

A folder cannot be imported

Check the resolved folder shown by the picker. Non-admin users must remain beneath a trusted import root. The permission is checked again whenever a saved import runs.

Files were skipped

Open Skipped & failed in the preview. Common causes include unsupported binary formats during a folder scan, very short prose, include/exclude globs, Category root, or an explicit skip rule.

An upload failed or appears stuck

Sort Explorer by Failed or Uploading, hover the status for the provider message, and retry the document. Pending work resumes automatically after a server restart.

A metadata filter returns no results

Clear other chips and verify exact values in Coverage. Versions and tags are lists, and every active facet is combined with the category when creating the Gemini metadata filter.

Citations open cached files

Add or correct Source URL metadata, then push pending metadata changes to Gemini. Existing source cards can resolve locally, but future filtered retrieval uses the newly indexed metadata.

Explorer and Gemini disagree

Run Sync Store. Use its issue links to open the relevant store-wide filter, push intentional metadata changes, retry missing uploads, and prune duplicates when reported.

Search is using a *-like provider

The native full-text feature could not be initialized or a native query failed, so Search safely fell back to LIKE. Confirm the database supports its full-text feature and that the application user can create or use the required index. SQL Server additionally requires the optional Full-Text Search component. Restart the App or rebuild the index after correcting the database.

Open Search and inspect the pending and failed counts. Text, Markdown, HTML, and Razor content are locally indexed; PDF, Word, PowerPoint, and Excel require conversion to a text-based format for local Search. A Source URL affects where a result opens, not whether its content can match.

Storage and access

When authentication is enabled, write operations require a signed-in user. A deployment can also require a role such as Admin with GEMINI_WRITE_ROLE or gemini_write_role.

With RequireAuth = false, AI Chat uses the shared default user. See Data & Storage for AI Chat's complete storage layout. For provider-level API constraints, consult Google's File Search documentation.

Search content is stored in ChatSearchSection; provider-specific full-text indexes reference its title, heading, and content. Permanent Search deletion removes that deployment's analytics, while permanent File Store deletion cascades through all owned imports, documents, Search and Assistant state. See Overview & Setup for what Google charges for, and Data & Storage for AI Chat's complete storage layout.