This commit is contained in:
Philipinho
2025-10-16 22:27:55 +01:00
parent b5b31cc48c
commit 9530a8b65c
12 changed files with 115 additions and 162 deletions

View File

@ -10,6 +10,10 @@ export class EnvironmentService {
return this.configService.get<string>('NODE_ENV', 'development');
}
isDevelopment(): boolean {
return this.getNodeEnv() === 'development';
}
getAppUrl(): string {
const rawUrl =
this.configService.get<string>('APP_URL') ||
@ -237,23 +241,20 @@ export class EnvironmentService {
}
getAiDriver(): string {
return this.configService.get<string>('AI_DRIVER', 'openai');
return this.configService.get<string>('AI_DRIVER');
}
getAiEmbeddingModel(): string {
return this.configService.get<string>(
'AI_EMBEDDING_MODEL',
'text-embedding-3-small',
);
return this.configService.get<string>('AI_EMBEDDING_MODEL');
}
getAiCompletionModel(): string {
return this.configService.get<string>('AI_COMPLETION_MODEL', 'gpt-4o-mini');
return this.configService.get<string>('AI_COMPLETION_MODEL');
}
getAiEmbeddingDimension(): number {
return parseInt(
this.configService.get<string>('AI_EMBEDDING_DIMENSION', '1536'),
this.configService.get<string>('AI_EMBEDDING_DIMENSION'),
10,
);
}
@ -266,8 +267,8 @@ export class EnvironmentService {
return this.configService.get<string>('OPENAI_API_URL');
}
getGoogleAiApiKey(): string {
return this.configService.get<string>('GOOGLE_AI_API_KEY');
getGeminiApiKey(): string {
return this.configService.get<string>('GEMINI_API_KEY');
}
getOllamaApiUrl(): string {
@ -276,27 +277,4 @@ export class EnvironmentService {
'http://localhost:11434',
);
}
getAwsAccessKeyId(): string {
return this.configService.get<string>('AWS_ACCESS_KEY_ID');
}
getAwsSecretAccessKey(): string {
return this.configService.get<string>('AWS_SECRET_ACCESS_KEY');
}
getAwsBedrockRegion(): string {
return this.configService.get<string>('AWS_BEDROCK_REGION');
}
isAIEnabled(): string {
return this.configService.get<string>('ENABLE_AI');
}
isAISearchEnabled(): boolean {
const config = this.configService
.get<string>('AI_SEARCH', 'false')
.toLowerCase();
return config === 'true';
}
}

View File

@ -93,6 +93,7 @@ export class EnvironmentVariables {
@IsOptional()
@ValidateIf((obj) => obj.SEARCH_DRIVER === 'typesense')
@IsNotEmpty()
@IsString()
TYPESENSE_API_KEY: string;
@ -101,6 +102,53 @@ export class EnvironmentVariables {
@IsISO6391()
@IsString()
TYPESENSE_LOCALE: string;
@IsOptional()
@ValidateIf((obj) => obj.AI_DRIVER)
@IsIn(['openai', 'gemini', 'ollama'])
@IsString()
AI_DRIVER: string;
@IsOptional()
@ValidateIf((obj) => obj.AI_DRIVER)
@IsString()
@IsNotEmpty()
AI_EMBEDDING_MODEL: string;
@IsOptional()
@ValidateIf((obj) => obj.AI_EMBEDDING_DIMENSION)
@IsIn(['768', '1024', '1536'])
@IsString()
AI_EMBEDDING_DIMENSION: string;
@IsOptional()
@ValidateIf((obj) => obj.AI_DRIVER)
@IsString()
@IsNotEmpty()
AI_COMPLETION_MODEL: string;
@IsOptional()
@ValidateIf((obj) => obj.AI_DRIVER && obj.AI_DRIVER === 'openai')
@IsString()
@IsNotEmpty()
OPENAI_API_KEY: string;
@IsOptional()
@ValidateIf((obj) => obj.AI_DRIVER && obj.OPENAI_API_URL && obj.AI_DRIVER === 'openai')
@IsUrl({ protocols: ['http', 'https'], require_tld: false })
OPENAI_API_URL: string;
@IsOptional()
@ValidateIf((obj) => obj.AI_DRIVER && obj.AI_DRIVER === 'gemini')
@IsString()
@IsNotEmpty()
GEMINI_API_KEY: string;
@IsOptional()
@ValidateIf((obj) => obj.AI_DRIVER && obj.AI_DRIVER === 'ollama')
@IsUrl({ protocols: ['http', 'https'], require_tld: false })
OLLAMA_API_URL: string;
}
export function validate(config: Record<string, any>) {

View File

@ -53,6 +53,7 @@ export enum QueueJob {
WORKSPACE_CREATED = 'workspace-created',
WORKSPACE_SPACE_UPDATED = 'workspace-updated',
WORKSPACE_DELETED = 'workspace-deleted',
WORKSPACE_DELETE_EMBEDDINGS = 'workspace-delete-embeddings',
GENERATE_PAGE_EMBEDDINGS = 'generate-page-embeddings',
DELETE_PAGE_EMBEDDINGS = 'delete-page-embeddings',