The WORKSPACE_CREATE_EMBEDDINGS / WORKSPACE_DELETE_EMBEDDINGS jobs were
enqueued (on AI Search enable/disable) but had no AI_QUEUE handler, so
existing pages were never indexed ("Indexed 0 of N pages") and disabling
never purged embeddings.
- EmbeddingProcessor: handle WORKSPACE_CREATE_EMBEDDINGS (bulk reindex all
live pages) and WORKSPACE_DELETE_EMBEDDINGS (purge workspace embeddings)
- EmbeddingIndexerService: add reindexWorkspace() (skips when embeddings
unconfigured; per-page error isolation) and removeWorkspace()
- PageRepo.getIdsByWorkspace(), PageEmbeddingRepo.deleteByWorkspace()
- AiSettingsService.reindex() + admin-only POST /workspace/ai-settings/reindex
- Frontend: "Reindex now" button, service call and mutation
- Stable per-workspace jobId with remove-before-add so a stale job can't
block future reindexes; cancel the delayed purge on enable/reindex so it
can't wipe freshly-built embeddings
26 lines
909 B
TypeScript
26 lines
909 B
TypeScript
import { Module } from '@nestjs/common';
|
|
import { BullModule } from '@nestjs/bullmq';
|
|
import { CryptoModule } from '../crypto/crypto.module';
|
|
import { QueueName } from '../queue/constants';
|
|
import { AiService } from './ai.service';
|
|
import { AiSettingsService } from './ai-settings.service';
|
|
import { AiSettingsController } from './ai-settings.controller';
|
|
|
|
/**
|
|
* LLM driver + provider-settings unit (§6.2/§6.4).
|
|
*
|
|
* CryptoModule supplies SecretBoxService for API-key encryption. WorkspaceRepo,
|
|
* AiProviderCredentialsRepo (DatabaseModule, global) and WorkspaceAbilityFactory
|
|
* (CaslModule, global) are resolved without explicit imports.
|
|
*/
|
|
@Module({
|
|
imports: [
|
|
CryptoModule,
|
|
BullModule.registerQueue({ name: QueueName.AI_QUEUE }),
|
|
],
|
|
controllers: [AiSettingsController],
|
|
providers: [AiService, AiSettingsService],
|
|
exports: [AiService, AiSettingsService],
|
|
})
|
|
export class AiModule {}
|