67 lines
2.2 KiB
TypeScript
67 lines
2.2 KiB
TypeScript
import { Global, Module } from '@nestjs/common';
|
|
import {
|
|
createMemory,
|
|
type Memory,
|
|
createMemoryAdapter,
|
|
createOperatorMemoryPlugin,
|
|
type MemoryAdapter,
|
|
type MemoryConfig,
|
|
type OperatorMemoryPlugin,
|
|
} from '@mosaicstack/memory';
|
|
import type { Db } from '@mosaicstack/db';
|
|
import type { StorageAdapter } from '@mosaicstack/storage';
|
|
import type { MosaicConfig } from '@mosaicstack/config';
|
|
import { MOSAIC_CONFIG } from '../config/config.module.js';
|
|
import { DB, STORAGE_ADAPTER } from '../database/database.module.js';
|
|
import { MEMORY } from './memory.tokens.js';
|
|
import { MemoryController } from './memory.controller.js';
|
|
import { EmbeddingService } from './embedding.service.js';
|
|
import { redactSensitiveContent } from '@mosaicstack/log';
|
|
|
|
export const OPERATOR_MEMORY_PLUGIN = 'OPERATOR_MEMORY_PLUGIN';
|
|
|
|
export const MEMORY_ADAPTER = 'MEMORY_ADAPTER';
|
|
|
|
function buildMemoryConfig(config: MosaicConfig, storageAdapter: StorageAdapter): MemoryConfig {
|
|
if (config.memory.type === 'keyword') {
|
|
return { type: 'keyword', storage: storageAdapter };
|
|
}
|
|
return { type: config.memory.type };
|
|
}
|
|
|
|
@Global()
|
|
@Module({
|
|
providers: [
|
|
{
|
|
provide: MEMORY,
|
|
useFactory: (db: Db): Memory => createMemory(db),
|
|
inject: [DB],
|
|
},
|
|
{
|
|
provide: MEMORY_ADAPTER,
|
|
useFactory: (config: MosaicConfig, storageAdapter: StorageAdapter): MemoryAdapter =>
|
|
createMemoryAdapter(buildMemoryConfig(config, storageAdapter)),
|
|
inject: [MOSAIC_CONFIG, STORAGE_ADAPTER],
|
|
},
|
|
{
|
|
provide: OPERATOR_MEMORY_PLUGIN,
|
|
useFactory: (adapter: MemoryAdapter): OperatorMemoryPlugin | null => {
|
|
const instanceId = process.env['MOSAIC_OPERATOR_MEMORY_INSTANCE_ID']?.trim();
|
|
const namespace = process.env['MOSAIC_OPERATOR_MEMORY_NAMESPACE']?.trim();
|
|
if (!instanceId || !namespace) return null;
|
|
return createOperatorMemoryPlugin({
|
|
adapter,
|
|
instanceId,
|
|
namespace,
|
|
redact: (content) => redactSensitiveContent(content).content,
|
|
});
|
|
},
|
|
inject: [MEMORY_ADAPTER],
|
|
},
|
|
EmbeddingService,
|
|
],
|
|
controllers: [MemoryController],
|
|
exports: [MEMORY, MEMORY_ADAPTER, OPERATOR_MEMORY_PLUGIN, EmbeddingService],
|
|
})
|
|
export class MemoryModule {}
|