RocketChat/Rocket.Chat · warning

AI search status unavailable

Error message

AI search status unavailable

What it means

The ai-search REST endpoint calls AISearch.status() (license module check + AI_Intelligent_Search_* settings + pipeline/provider config) before deciding whether to run intelligent search. When that status call itself rejects, the handler logs this warning and substitutes a status object with every intelligent-search flag false: the request still succeeds but is served as plain, non-intelligent search with an empty/degraded intelligent section.

Source

Thrown at apps/meteor/server/api/v1/ai-search.ts:258

		response: {
			200: aiSearchResponseSchema,
			400: validateBadRequestErrorResponse,
			401: validateUnauthorizedErrorResponse,
		},
	},
	async function action() {
		const query = this.queryParams.query.trim();
		const requestedIntelligentCount = this.queryParams.intelligentCount ?? AI_SEARCH_PAGE_SIZE;
		const intelligentLimit = Math.min(Math.max(Math.floor(requestedIntelligentCount), 1), MAX_INTELLIGENT_SEARCH_RESULTS);
		const rid = this.queryParams.rid || undefined;
		const rids = parseCommaList(this.queryParams.rids);
		const roomNames = parseCommaList(this.queryParams.roomNames);
		const fromUsername = this.queryParams.fromUsername || undefined;
		const fromUsernames = parseCommaList(this.queryParams.fromUsernames);
		const startDate = parseQueryDate(this.queryParams.startDate);
		const endDate = parseQueryDate(this.queryParams.endDate);
		const aiSearchStatus = await AISearch.status().catch((error) => {
			this.logger.warn({ msg: 'AI search status unavailable', err: error });

			return {
				hasIntelligentSearchLicense: false,
				intelligentSearchEnabled: false,
				intelligentSearchConfigured: false,
				answerGenerationConfigured: false,
			};
		});
		let intelligentResults: AISearchResult[] = [];
		if (
			aiSearchStatus.hasIntelligentSearchLicense &&
			aiSearchStatus.intelligentSearchEnabled &&
			aiSearchStatus.intelligentSearchConfigured
		) {
			try {
				intelligentResults = await AISearch.search({
					query,
					userId: this.userId,

View on GitHub (pinned to b2c16d5842)

Solutions

  1. Inspect the err object in the log entry to see which subsystem (license vs settings) rejected
  2. Verify the workspace license is active and includes the AI/intelligent-search module
  3. Verify AI search settings are complete and the search backend is reachable from the app server
  4. Retry the request once startup/license state settles — the endpoint degrades gracefully, it does not return an error status
Defensive patterns

Strategy: fallback

Validate before calling

// client-side: check status before relying on intelligent results
const res = await fetch('/api/v1/ai-search.search?...');
const { intelligent, meta } = (await res.json()).data;
if (!meta.intelligentSearchEnabled || intelligent.length === 0) {
	// degraded mode: fall back to ranking of the normal results
}

Try / catch

const aiSearchStatus = await AISearch.status().catch((error) => {
	logger.warn({ msg: 'AI search status unavailable', err: error });
	return { hasIntelligentSearchLicense: false, intelligentSearchEnabled: false, intelligentSearchConfigured: false, answerGenerationConfigured: false };
});

Prevention

When it happens

Trigger: License.hasModule(AI_LICENSE_MODULE) rejecting because the licensing service/bridge is unavailable; the settings service throwing while reading AI_Intelligent_Search_Enabled or provider settings; transient internal errors while composing pipeline configuration during startup or license reload.

Common situations: Hitting the search endpoint while the license is being renewed or the licensing backend is unreachable; workspaces where AI settings are half-configured; calls racing server startup before services initialize.

Related errors


AI-assisted analysis of RocketChat/Rocket.Chat@b2c16d5842 (2026-08-18). Data as JSON: /api/errors/08bf6b306dd287bd. Report an issue: GitHub.