@solidxai/core 0.1.10-beta.26 → 0.1.10-beta.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +15 -0
- package/CLAUDE.md +26 -0
- package/ai-interaction-cleanup.sql +53 -0
- package/dist/controllers/service.controller.d.ts +1 -5
- package/dist/controllers/service.controller.d.ts.map +1 -1
- package/dist/controllers/service.controller.js +6 -11
- package/dist/controllers/service.controller.js.map +1 -1
- package/dist/controllers/test.controller.d.ts +1 -6
- package/dist/controllers/test.controller.d.ts.map +1 -1
- package/dist/controllers/test.controller.js +2 -20
- package/dist/controllers/test.controller.js.map +1 -1
- package/dist/dtos/create-permission-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/create-permission-metadata.dto.js +2 -0
- package/dist/dtos/create-permission-metadata.dto.js.map +1 -1
- package/dist/dtos/create-role-metadata.dto.d.ts +2 -0
- package/dist/dtos/create-role-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/create-role-metadata.dto.js +13 -1
- package/dist/dtos/create-role-metadata.dto.js.map +1 -1
- package/dist/dtos/import-instructions.dto.d.ts +2 -0
- package/dist/dtos/import-instructions.dto.d.ts.map +1 -1
- package/dist/dtos/import-instructions.dto.js +15 -1
- package/dist/dtos/import-instructions.dto.js.map +1 -1
- package/dist/dtos/update-permission-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/update-permission-metadata.dto.js +3 -1
- package/dist/dtos/update-permission-metadata.dto.js.map +1 -1
- package/dist/dtos/update-role-metadata.dto.d.ts +2 -0
- package/dist/dtos/update-role-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/update-role-metadata.dto.js +13 -1
- package/dist/dtos/update-role-metadata.dto.js.map +1 -1
- package/dist/entities/action-metadata.entity.d.ts.map +1 -1
- package/dist/entities/action-metadata.entity.js +1 -0
- package/dist/entities/action-metadata.entity.js.map +1 -1
- package/dist/entities/agent-event.entity.d.ts.map +1 -1
- package/dist/entities/agent-event.entity.js +1 -0
- package/dist/entities/agent-event.entity.js.map +1 -1
- package/dist/entities/agent-session.entity.d.ts.map +1 -1
- package/dist/entities/agent-session.entity.js +1 -0
- package/dist/entities/agent-session.entity.js.map +1 -1
- package/dist/entities/chatter-message.entity.d.ts.map +1 -1
- package/dist/entities/chatter-message.entity.js +2 -0
- package/dist/entities/chatter-message.entity.js.map +1 -1
- package/dist/entities/email-template.entity.d.ts.map +1 -1
- package/dist/entities/email-template.entity.js +1 -0
- package/dist/entities/email-template.entity.js.map +1 -1
- package/dist/entities/field-metadata.entity.d.ts.map +1 -1
- package/dist/entities/field-metadata.entity.js +4 -0
- package/dist/entities/field-metadata.entity.js.map +1 -1
- package/dist/entities/list-of-values.entity.d.ts.map +1 -1
- package/dist/entities/list-of-values.entity.js +4 -0
- package/dist/entities/list-of-values.entity.js.map +1 -1
- package/dist/entities/locale.entity.d.ts.map +1 -1
- package/dist/entities/locale.entity.js +1 -0
- package/dist/entities/locale.entity.js.map +1 -1
- package/dist/entities/media.entity.d.ts.map +1 -1
- package/dist/entities/media.entity.js +1 -0
- package/dist/entities/media.entity.js.map +1 -1
- package/dist/entities/menu-item-metadata.entity.d.ts.map +1 -1
- package/dist/entities/menu-item-metadata.entity.js +2 -0
- package/dist/entities/menu-item-metadata.entity.js.map +1 -1
- package/dist/entities/model-metadata.entity.d.ts.map +1 -1
- package/dist/entities/model-metadata.entity.js +3 -0
- package/dist/entities/model-metadata.entity.js.map +1 -1
- package/dist/entities/module-metadata.entity.d.ts.map +1 -1
- package/dist/entities/module-metadata.entity.js +2 -0
- package/dist/entities/module-metadata.entity.js.map +1 -1
- package/dist/entities/permission-metadata.entity.d.ts.map +1 -1
- package/dist/entities/permission-metadata.entity.js.map +1 -1
- package/dist/entities/role-metadata.entity.d.ts +2 -0
- package/dist/entities/role-metadata.entity.d.ts.map +1 -1
- package/dist/entities/role-metadata.entity.js +10 -2
- package/dist/entities/role-metadata.entity.js.map +1 -1
- package/dist/entities/saved-filters.entity.d.ts.map +1 -1
- package/dist/entities/saved-filters.entity.js +3 -0
- package/dist/entities/saved-filters.entity.js.map +1 -1
- package/dist/entities/scheduled-job.entity.d.ts.map +1 -1
- package/dist/entities/scheduled-job.entity.js +2 -0
- package/dist/entities/scheduled-job.entity.js.map +1 -1
- package/dist/entities/security-rule.entity.d.ts.map +1 -1
- package/dist/entities/security-rule.entity.js +1 -0
- package/dist/entities/security-rule.entity.js.map +1 -1
- package/dist/entities/sms-template.entity.d.ts.map +1 -1
- package/dist/entities/sms-template.entity.js +2 -0
- package/dist/entities/sms-template.entity.js.map +1 -1
- package/dist/entities/user-activity-history.entity.d.ts.map +1 -1
- package/dist/entities/user-activity-history.entity.js +1 -0
- package/dist/entities/user-activity-history.entity.js.map +1 -1
- package/dist/entities/user.entity.d.ts.map +1 -1
- package/dist/entities/user.entity.js +2 -0
- package/dist/entities/user.entity.js.map +1 -1
- package/dist/entities/view-metadata.entity.d.ts.map +1 -1
- package/dist/entities/view-metadata.entity.js +2 -0
- package/dist/entities/view-metadata.entity.js.map +1 -1
- package/dist/helpers/module.helper.js +0 -5
- package/dist/helpers/module.helper.js.map +1 -1
- package/dist/index.d.ts +0 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -5
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +0 -8
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +317 -814
- package/dist/services/crud-helper.service.d.ts.map +1 -1
- package/dist/services/crud-helper.service.js +11 -3
- package/dist/services/crud-helper.service.js.map +1 -1
- package/dist/services/import-transaction.service.d.ts.map +1 -1
- package/dist/services/import-transaction.service.js +6 -0
- package/dist/services/import-transaction.service.js.map +1 -1
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +0 -29
- package/dist/solid-core.module.js.map +1 -1
- package/dist/subscribers/scheduled-job.subscriber.js +1 -1
- package/dist/subscribers/scheduled-job.subscriber.js.map +1 -1
- package/dist/subscribers/security-rule.subscriber.js +1 -1
- package/dist/subscribers/security-rule.subscriber.js.map +1 -1
- package/package.json +4 -4
- package/src/controllers/service.controller.ts +4 -7
- package/src/controllers/test.controller.ts +0 -9
- package/src/dtos/create-permission-metadata.dto.ts +3 -0
- package/src/dtos/create-role-metadata.dto.ts +11 -1
- package/src/dtos/import-instructions.dto.ts +11 -1
- package/src/dtos/update-permission-metadata.dto.ts +4 -1
- package/src/dtos/update-role-metadata.dto.ts +21 -1
- package/src/entities/action-metadata.entity.ts +1 -0
- package/src/entities/agent-event.entity.ts +1 -0
- package/src/entities/agent-session.entity.ts +1 -0
- package/src/entities/chatter-message.entity.ts +2 -0
- package/src/entities/email-template.entity.ts +1 -0
- package/src/entities/field-metadata.entity.ts +4 -1
- package/src/entities/list-of-values.entity.ts +5 -1
- package/src/entities/locale.entity.ts +1 -0
- package/src/entities/media.entity.ts +1 -0
- package/src/entities/menu-item-metadata.entity.ts +2 -0
- package/src/entities/model-metadata.entity.ts +3 -0
- package/src/entities/module-metadata.entity.ts +2 -0
- package/src/entities/permission-metadata.entity.ts +2 -2
- package/src/entities/role-metadata.entity.ts +11 -3
- package/src/entities/saved-filters.entity.ts +3 -0
- package/src/entities/scheduled-job.entity.ts +2 -0
- package/src/entities/security-rule.entity.ts +1 -0
- package/src/entities/sms-template.entity.ts +2 -0
- package/src/entities/user-activity-history.entity.ts +1 -0
- package/src/entities/user.entity.ts +2 -0
- package/src/entities/view-metadata.entity.ts +2 -0
- package/src/helpers/module.helper.ts +5 -5
- package/src/index.ts +0 -5
- package/src/interfaces.ts +0 -8
- package/src/seeders/seed-data/solid-core-metadata.json +317 -814
- package/src/services/1.js +6 -0
- package/src/services/crud-helper.service.ts +9 -3
- package/src/services/import-transaction.service.ts +11 -1
- package/src/solid-core.module.ts +0 -31
- package/src/subscribers/scheduled-job.subscriber.ts +1 -1
- package/src/subscribers/security-rule.subscriber.ts +1 -1
- package/dist/commands/ingest.command.d.ts +0 -16
- package/dist/commands/ingest.command.d.ts.map +0 -1
- package/dist/commands/ingest.command.js +0 -50
- package/dist/commands/ingest.command.js.map +0 -1
- package/dist/controllers/ai-interaction.controller.d.ts +0 -29
- package/dist/controllers/ai-interaction.controller.d.ts.map +0 -1
- package/dist/controllers/ai-interaction.controller.js +0 -218
- package/dist/controllers/ai-interaction.controller.js.map +0 -1
- package/dist/dtos/create-ai-interaction.dto.d.ts +0 -23
- package/dist/dtos/create-ai-interaction.dto.d.ts.map +0 -1
- package/dist/dtos/create-ai-interaction.dto.js +0 -149
- package/dist/dtos/create-ai-interaction.dto.js.map +0 -1
- package/dist/dtos/invoke-ai-prompt.dto.d.ts +0 -5
- package/dist/dtos/invoke-ai-prompt.dto.d.ts.map +0 -1
- package/dist/dtos/invoke-ai-prompt.dto.js +0 -30
- package/dist/dtos/invoke-ai-prompt.dto.js.map +0 -1
- package/dist/dtos/update-ai-interaction.dto.d.ts +0 -24
- package/dist/dtos/update-ai-interaction.dto.d.ts.map +0 -1
- package/dist/dtos/update-ai-interaction.dto.js +0 -150
- package/dist/dtos/update-ai-interaction.dto.js.map +0 -1
- package/dist/entities/ai-interaction.entity.d.ts +0 -24
- package/dist/entities/ai-interaction.entity.d.ts.map +0 -1
- package/dist/entities/ai-interaction.entity.js +0 -116
- package/dist/entities/ai-interaction.entity.js.map +0 -1
- package/dist/jobs/database/trigger-mcp-client-publisher-database.service.d.ts +0 -11
- package/dist/jobs/database/trigger-mcp-client-publisher-database.service.d.ts.map +0 -1
- package/dist/jobs/database/trigger-mcp-client-publisher-database.service.js +0 -39
- package/dist/jobs/database/trigger-mcp-client-publisher-database.service.js.map +0 -1
- package/dist/jobs/database/trigger-mcp-client-queue-options.d.ts +0 -8
- package/dist/jobs/database/trigger-mcp-client-queue-options.d.ts.map +0 -1
- package/dist/jobs/database/trigger-mcp-client-queue-options.js +0 -10
- package/dist/jobs/database/trigger-mcp-client-queue-options.js.map +0 -1
- package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts +0 -25
- package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts.map +0 -1
- package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js +0 -222
- package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js.map +0 -1
- package/dist/jobs/rabbitmq/trigger-mcp-client-publisher.service.d.ts +0 -11
- package/dist/jobs/rabbitmq/trigger-mcp-client-publisher.service.d.ts.map +0 -1
- package/dist/jobs/rabbitmq/trigger-mcp-client-publisher.service.js +0 -39
- package/dist/jobs/rabbitmq/trigger-mcp-client-publisher.service.js.map +0 -1
- package/dist/jobs/rabbitmq/trigger-mcp-client-queue-options.d.ts +0 -8
- package/dist/jobs/rabbitmq/trigger-mcp-client-queue-options.d.ts.map +0 -1
- package/dist/jobs/rabbitmq/trigger-mcp-client-queue-options.js +0 -10
- package/dist/jobs/rabbitmq/trigger-mcp-client-queue-options.js.map +0 -1
- package/dist/jobs/rabbitmq/trigger-mcp-client-subscriber.service.d.ts +0 -18
- package/dist/jobs/rabbitmq/trigger-mcp-client-subscriber.service.d.ts.map +0 -1
- package/dist/jobs/rabbitmq/trigger-mcp-client-subscriber.service.js +0 -103
- package/dist/jobs/rabbitmq/trigger-mcp-client-subscriber.service.js.map +0 -1
- package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.d.ts +0 -11
- package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.d.ts.map +0 -1
- package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.js +0 -39
- package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.js.map +0 -1
- package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.d.ts +0 -8
- package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.d.ts.map +0 -1
- package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.js +0 -10
- package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.js.map +0 -1
- package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.d.ts +0 -18
- package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.d.ts.map +0 -1
- package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.js +0 -103
- package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.js.map +0 -1
- package/dist/repository/ai-interaction.repository.d.ts +0 -12
- package/dist/repository/ai-interaction.repository.d.ts.map +0 -1
- package/dist/repository/ai-interaction.repository.js +0 -34
- package/dist/repository/ai-interaction.repository.js.map +0 -1
- package/dist/services/ai-interaction.service.d.ts +0 -23
- package/dist/services/ai-interaction.service.d.ts.map +0 -1
- package/dist/services/ai-interaction.service.js +0 -217
- package/dist/services/ai-interaction.service.js.map +0 -1
- package/dist/services/genai/ingest-metadata.service.d.ts +0 -38
- package/dist/services/genai/ingest-metadata.service.d.ts.map +0 -1
- package/dist/services/genai/ingest-metadata.service.js +0 -542
- package/dist/services/genai/ingest-metadata.service.js.map +0 -1
- package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.d.ts +0 -9
- package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.d.ts.map +0 -1
- package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.js +0 -39
- package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.js.map +0 -1
- package/dist/services/genai/r2r-helper.service.d.ts +0 -9
- package/dist/services/genai/r2r-helper.service.d.ts.map +0 -1
- package/dist/services/genai/r2r-helper.service.js +0 -40
- package/dist/services/genai/r2r-helper.service.js.map +0 -1
- package/dist-tests/api/authenticate.spec.js +0 -119
- package/dist-tests/api/authenticate.spec.js.map +0 -1
- package/dist-tests/api/crud-service.findOne.cityMaster.spec.js +0 -97
- package/dist-tests/api/crud-service.findOne.cityMaster.spec.js.map +0 -1
- package/dist-tests/api/ping.spec.js +0 -21
- package/dist-tests/api/ping.spec.js.map +0 -1
- package/dist-tests/helpers/auth.js +0 -41
- package/dist-tests/helpers/auth.js.map +0 -1
- package/dist-tests/helpers/env.js +0 -11
- package/dist-tests/helpers/env.js.map +0 -1
- package/docs/dashboards/AGENTIC_DASHBOARD_IMPLEMENTATION_PLAN.md +0 -438
- package/docs/dashboards/dashboard-curl-smoke-tests.txt +0 -146
- package/docs/dashboards/delete-legacy-dashboard-metadata.sql +0 -172
- package/docs/grouping-enhancements.md +0 -89
- package/docs/java-spring/README.md +0 -3
- package/docs/java-spring/solid-core-module-deep-dive-report.md +0 -1317
- package/docs/module-package-import-handoff.md +0 -691
- package/docs/seed-changes.md +0 -65
- package/docs/test-data-workflow.md +0 -200
- package/docs/type-declaration-import-issue.md +0 -24
- package/src/commands/ingest.command.ts +0 -36
- package/src/controllers/ai-interaction.controller.ts +0 -112
- package/src/dtos/create-ai-interaction.dto.ts +0 -89
- package/src/dtos/invoke-ai-prompt.dto.ts +0 -10
- package/src/dtos/update-ai-interaction.dto.ts +0 -93
- package/src/entities/ai-interaction.entity.ts +0 -71
- package/src/jobs/database/trigger-mcp-client-publisher-database.service.ts +0 -22
- package/src/jobs/database/trigger-mcp-client-queue-options.ts +0 -9
- package/src/jobs/database/trigger-mcp-client-subscriber-database.service.ts +0 -278
- package/src/jobs/rabbitmq/trigger-mcp-client-publisher.service.ts +0 -22
- package/src/jobs/rabbitmq/trigger-mcp-client-queue-options.ts +0 -9
- package/src/jobs/rabbitmq/trigger-mcp-client-subscriber.service.ts +0 -104
- package/src/jobs/redis/trigger-mcp-client-publisher-redis.service.ts +0 -23
- package/src/jobs/redis/trigger-mcp-client-queue-options-redis.ts +0 -9
- package/src/jobs/redis/trigger-mcp-client-subscriber-redis.service.ts +0 -98
- package/src/repository/ai-interaction.repository.ts +0 -17
- package/src/services/ai-interaction.service.ts +0 -239
- package/src/services/genai/ingest-metadata.service.ts +0 -798
- package/src/services/genai/mcp-handlers/mcp-handler-factory.service.ts +0 -33
- package/src/services/genai/r2r-helper.service.ts +0 -37
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { Injectable } from "@nestjs/common";
|
|
2
|
-
import { QueuesModuleOptions, TriggerMcpClientOptions } from "src/interfaces";
|
|
3
|
-
import { MqMessageQueueService } from "src/services/mq-message-queue.service";
|
|
4
|
-
import { MqMessageService } from "src/services/mq-message.service";
|
|
5
|
-
import { DatabasePublisher } from "src/services/queues/database-publisher.service";
|
|
6
|
-
import triggerMcpClientQueueOptions from "./trigger-mcp-client-queue-options";
|
|
7
|
-
|
|
8
|
-
@Injectable()
|
|
9
|
-
export class TriggerMcpClientPublisherDatabase extends DatabasePublisher<TriggerMcpClientOptions> {
|
|
10
|
-
constructor(
|
|
11
|
-
protected readonly mqMessageService: MqMessageService,
|
|
12
|
-
protected readonly mqMessageQueueService: MqMessageQueueService,
|
|
13
|
-
) {
|
|
14
|
-
super(mqMessageService, mqMessageQueueService);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
options(): QueuesModuleOptions {
|
|
18
|
-
return {
|
|
19
|
-
...triggerMcpClientQueueOptions
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
}
|
|
@@ -1,278 +0,0 @@
|
|
|
1
|
-
import { Injectable, Logger } from '@nestjs/common';
|
|
2
|
-
import { ModelMetadataService } from '../../services/model-metadata.service';
|
|
3
|
-
import { SolidRegistry } from 'src/helpers/solid-registry';
|
|
4
|
-
import { QueueMessage } from 'src/interfaces/mq';
|
|
5
|
-
import { AiInteractionService } from 'src/services/ai-interaction.service';
|
|
6
|
-
import { ModuleMetadataService } from 'src/services/module-metadata.service';
|
|
7
|
-
import { PollerService } from 'src/services/poller.service';
|
|
8
|
-
import { DatabaseSubscriber } from 'src/services/queues/database-subscriber.service';
|
|
9
|
-
import { McpResponse, QueuesModuleOptions, TriggerMcpClientOptions } from "../../interfaces";
|
|
10
|
-
import { MqMessageQueueService } from '../../services/mq-message-queue.service';
|
|
11
|
-
import { MqMessageService } from '../../services/mq-message.service';
|
|
12
|
-
import triggerMcpClientQueueOptions from "./trigger-mcp-client-queue-options";
|
|
13
|
-
|
|
14
|
-
@Injectable()
|
|
15
|
-
export class TriggerMcpClientSubscriberDatabase extends DatabaseSubscriber<TriggerMcpClientOptions> {
|
|
16
|
-
private readonly triggerMcpClientSubscriberLogger = new Logger(TriggerMcpClientSubscriberDatabase.name);
|
|
17
|
-
|
|
18
|
-
constructor(
|
|
19
|
-
readonly mqMessageService: MqMessageService,
|
|
20
|
-
readonly mqMessageQueueService: MqMessageQueueService,
|
|
21
|
-
readonly poller: PollerService,
|
|
22
|
-
readonly aiInteractionService: AiInteractionService,
|
|
23
|
-
readonly moduleMetadataService: ModuleMetadataService,
|
|
24
|
-
readonly modelMetadataService: ModelMetadataService,
|
|
25
|
-
private readonly solidRegistry: SolidRegistry
|
|
26
|
-
|
|
27
|
-
) {
|
|
28
|
-
super(mqMessageService, mqMessageQueueService, poller);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
options(): QueuesModuleOptions {
|
|
32
|
-
return {
|
|
33
|
-
...triggerMcpClientQueueOptions
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
cleanNestedResponse(aiResponse: McpResponse) {
|
|
38
|
-
let nestedResponse: any;
|
|
39
|
-
|
|
40
|
-
try {
|
|
41
|
-
let raw = aiResponse.response;
|
|
42
|
-
|
|
43
|
-
if (typeof raw === "string") {
|
|
44
|
-
raw = raw.trim();
|
|
45
|
-
try {
|
|
46
|
-
// Try to parse as JSON
|
|
47
|
-
nestedResponse = JSON.parse(raw);
|
|
48
|
-
} catch {
|
|
49
|
-
// Not JSON, just keep as string
|
|
50
|
-
nestedResponse = raw;
|
|
51
|
-
}
|
|
52
|
-
} else if (typeof raw === "object" && raw !== null) {
|
|
53
|
-
// Already JSON
|
|
54
|
-
nestedResponse = raw;
|
|
55
|
-
} else {
|
|
56
|
-
// Fallback
|
|
57
|
-
nestedResponse = String(raw);
|
|
58
|
-
}
|
|
59
|
-
} catch (err: any) {
|
|
60
|
-
this.triggerMcpClientSubscriberLogger.error("Error processing AI response:", err);
|
|
61
|
-
nestedResponse = `Error handling response: ${err?.message || String(err)}`;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
return nestedResponse;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
async subscribe(message: QueueMessage<TriggerMcpClientOptions>) {
|
|
68
|
-
this.triggerMcpClientSubscriberLogger.debug(`Received message: ${JSON.stringify(message)}`);
|
|
69
|
-
|
|
70
|
-
const codeGnerationOptions = message.payload;
|
|
71
|
-
|
|
72
|
-
const aiInteraction = await this.aiInteractionService.findOne(codeGnerationOptions.aiInteractionId, {
|
|
73
|
-
populate: ['user']
|
|
74
|
-
});
|
|
75
|
-
if (!aiInteraction) {
|
|
76
|
-
const m = `Unable to identified the aiInteraction entry that triggered this job... using id: ${codeGnerationOptions.aiInteractionId}`
|
|
77
|
-
this.triggerMcpClientSubscriberLogger.log(m);
|
|
78
|
-
throw new Error(m);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// The message contains the users prompt.
|
|
82
|
-
const prompt = aiInteraction.message;
|
|
83
|
-
|
|
84
|
-
// Use this to invoke our mcp client
|
|
85
|
-
// TODO: try / catch ...
|
|
86
|
-
// Handle the rejection gracefully...
|
|
87
|
-
|
|
88
|
-
// We create the aiInteraction entry first
|
|
89
|
-
const genAiInteraction = await this.aiInteractionService.create({
|
|
90
|
-
userId: aiInteraction.user.id,
|
|
91
|
-
threadId: aiInteraction.threadId,
|
|
92
|
-
parentInteractionId: aiInteraction.id,
|
|
93
|
-
role: 'gen-ai',
|
|
94
|
-
message: '...', // Updated in the tool
|
|
95
|
-
contentType: '', // Updated in the tool
|
|
96
|
-
errorMessage: '', // Updated after we receive the response
|
|
97
|
-
modelUsed: '', // Updated after we receive the response
|
|
98
|
-
responseTimeMs: 0, // Updated after we receive the response
|
|
99
|
-
metadata: '', // Updated in the tool
|
|
100
|
-
isApplied: false, // Updated after we receive the response
|
|
101
|
-
status: 'pending' // Updated after we receive the response
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
const existingComputationProviders = this.solidRegistry.getComputedFieldProviders();
|
|
105
|
-
|
|
106
|
-
const { records: existingModules } = await this.moduleMetadataService.findMany({
|
|
107
|
-
filters: {
|
|
108
|
-
name: { $ne: 'solid-core' }
|
|
109
|
-
},
|
|
110
|
-
fields: ['id', 'name', 'displayName', 'description'],
|
|
111
|
-
limit: 1000
|
|
112
|
-
});
|
|
113
|
-
const { records: existingModels } = await this.modelMetadataService.findMany({
|
|
114
|
-
filters: {
|
|
115
|
-
module: {
|
|
116
|
-
name: {
|
|
117
|
-
$ne: 'solid-core',
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
},
|
|
121
|
-
limit: 1000,
|
|
122
|
-
populate: ['module']
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
const existingControllerAndTheirMethods = this.solidRegistry.getControllers();
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
// Build markdown sections using template interpolation
|
|
130
|
-
const modulesSection = (existingModules ?? [])
|
|
131
|
-
.map(m => [
|
|
132
|
-
`### ${m.displayName}`,
|
|
133
|
-
`- name: ${m.name}`,
|
|
134
|
-
`- description: ${m.description ?? ""}`,
|
|
135
|
-
].join('\n'))
|
|
136
|
-
.join('\n\n');
|
|
137
|
-
|
|
138
|
-
const modelsSection = (existingModels ?? [])
|
|
139
|
-
.map(m => [
|
|
140
|
-
`### ${m.displayName}`,
|
|
141
|
-
`- singularName: ${m.singularName}`,
|
|
142
|
-
`- description: ${m.description ?? ""}`,
|
|
143
|
-
`- moduleName: ${m.module.name}`,
|
|
144
|
-
].join('\n'))
|
|
145
|
-
.join('\n\n');
|
|
146
|
-
|
|
147
|
-
const computationProvidersSection = (existingComputationProviders ?? [])
|
|
148
|
-
.map(m => [
|
|
149
|
-
`### ${m.instance.name()}`,
|
|
150
|
-
`- name: ${m.instance.name()}`,
|
|
151
|
-
`- description: ${m.instance.help() ?? ""}`,
|
|
152
|
-
].join('\n'))
|
|
153
|
-
.join('\n\n');
|
|
154
|
-
|
|
155
|
-
const controllersAndTheirMethods = (existingControllerAndTheirMethods ?? [])
|
|
156
|
-
.map(m => [
|
|
157
|
-
`### ${m.name}`,
|
|
158
|
-
`- methods: ${m.methods.length ? m.methods.map(m => `- ${m}`).join('\n') : '- No methods found'}`,
|
|
159
|
-
].join('\n'))
|
|
160
|
-
.join('\n\n');
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
const finalPrompt = `
|
|
165
|
-
# User Prompt:
|
|
166
|
-
${prompt}
|
|
167
|
-
|
|
168
|
-
# System Instructions:
|
|
169
|
-
- aiInteractionId: ${genAiInteraction.id}
|
|
170
|
-
- You will be invoking tools if needed, hence you will have to choose the applicable tools based on the tool context given to you.
|
|
171
|
-
- If a tool is invoked, you must return **exactly** the raw output from the tool, without any json envelopes, additional formatting, commentary, or text.
|
|
172
|
-
- Do not wrap the result in quotes, JSON, or markdown fences.
|
|
173
|
-
- Do not explain what the result means.
|
|
174
|
-
|
|
175
|
-
# LISTS FOR REFERENCE AND VALIDATIONS
|
|
176
|
-
|
|
177
|
-
## LIST OF EXISTING MODULES
|
|
178
|
-
Use the below list of modules to infer which module the user is referring to, .
|
|
179
|
-
|
|
180
|
-
${modulesSection}
|
|
181
|
-
|
|
182
|
-
## LIST OF EXISTING MODELS
|
|
183
|
-
Use the below list of models to infer which model the user is referring to.
|
|
184
|
-
You need to pull out the singularName for the model from the user prompt to match against the below list.
|
|
185
|
-
|
|
186
|
-
${modelsSection}
|
|
187
|
-
|
|
188
|
-
## LIST OF EXISTING COMPUTED FIELD PROVIDERS
|
|
189
|
-
Use the below list of computed field providers to infer which provider the user is referring to.
|
|
190
|
-
|
|
191
|
-
${computationProvidersSection}
|
|
192
|
-
`.trim();
|
|
193
|
-
|
|
194
|
-
// ## LIST OF EXISTING CONTROLLERS AND THEIR METHODS
|
|
195
|
-
// Use the below list of controllers and their methods to infer whether the api call being made to a particular controller exists or not.
|
|
196
|
-
|
|
197
|
-
// ${controllersAndTheirMethods}
|
|
198
|
-
|
|
199
|
-
const aiResponse = await this.aiInteractionService.runMcpPrompt(finalPrompt);
|
|
200
|
-
this.triggerMcpClientSubscriberLogger.log(`aiResponse: `);
|
|
201
|
-
this.triggerMcpClientSubscriberLogger.log(JSON.stringify(aiResponse));
|
|
202
|
-
|
|
203
|
-
if (!aiResponse.success) {
|
|
204
|
-
this.triggerMcpClientSubscriberLogger.log(`Gen ai has returned with a false status code`);
|
|
205
|
-
|
|
206
|
-
const errorsStr = aiResponse.errors?.join('\n ');
|
|
207
|
-
const errorTrace = aiResponse.error_trace?.join('\n');
|
|
208
|
-
|
|
209
|
-
// await this.aiInteractionService.create({
|
|
210
|
-
// userId: aiInteraction.user.id,
|
|
211
|
-
// threadId: aiInteraction.threadId,
|
|
212
|
-
// parentInteractionId: aiInteraction.id,
|
|
213
|
-
// role: 'gen-ai',
|
|
214
|
-
// message: '-',
|
|
215
|
-
// contentType: aiResponse.content_type,
|
|
216
|
-
// errorMessage: `${errorsStr}\n\n${errorTrace}`,
|
|
217
|
-
// modelUsed: aiResponse.model,
|
|
218
|
-
// responseTimeMs: aiResponse.duration_ms,
|
|
219
|
-
// metadata: JSON.stringify(aiResponse, null, 2),
|
|
220
|
-
// isApplied: aiInteraction.isApplied,
|
|
221
|
-
// status: aiResponse.success ? 'succeeded' : 'failed'
|
|
222
|
-
// });
|
|
223
|
-
|
|
224
|
-
// TODO: Update the previously created genAiInteraction record with the respective error fields and save to DB
|
|
225
|
-
await this.aiInteractionService.update(genAiInteraction.id, {
|
|
226
|
-
contentType: aiResponse.content_type,
|
|
227
|
-
errorMessage: `${errorsStr}\n\n${errorTrace}`,
|
|
228
|
-
modelUsed: aiResponse.model,
|
|
229
|
-
responseTimeMs: aiResponse.duration_ms,
|
|
230
|
-
isApplied: aiInteraction.isApplied,
|
|
231
|
-
status: aiResponse.success ? 'succeeded' : 'failed'
|
|
232
|
-
}, [], true);
|
|
233
|
-
|
|
234
|
-
// update the job entry with failure... raising an error will lead the job to be marked as failed...
|
|
235
|
-
throw new Error(errorsStr);
|
|
236
|
-
}
|
|
237
|
-
else {
|
|
238
|
-
let nestedResponse = this.cleanNestedResponse(aiResponse);
|
|
239
|
-
|
|
240
|
-
// TODO: Update the previously created genAiInteraction record with the respective success fields and save to DB
|
|
241
|
-
const errorsStr = nestedResponse?.status == "error" && nestedResponse?.errors.join('\n ');
|
|
242
|
-
const errorTrace = nestedResponse?.status == "error" && nestedResponse?.error_trace?.join('\n');
|
|
243
|
-
|
|
244
|
-
// const genAiInteraction = await this.aiInteractionService.create({
|
|
245
|
-
// userId: aiInteraction.user.id,
|
|
246
|
-
// threadId: aiInteraction.threadId,
|
|
247
|
-
// parentInteractionId: aiInteraction.id,
|
|
248
|
-
// role: 'gen-ai',
|
|
249
|
-
// message: nestedResponse,
|
|
250
|
-
// contentType: aiResponse.content_type,
|
|
251
|
-
// errorMessage: `${errorsStr}\n\n${errorTrace}`,
|
|
252
|
-
// modelUsed: aiResponse.model,
|
|
253
|
-
// responseTimeMs: aiResponse.duration_ms,
|
|
254
|
-
// metadata: JSON.stringify(aiResponse, null, 2),
|
|
255
|
-
// isApplied: aiInteraction.isApplied,
|
|
256
|
-
// status: aiResponse.success ? 'succeeded' : 'failed'
|
|
257
|
-
// });
|
|
258
|
-
|
|
259
|
-
await this.aiInteractionService.update(genAiInteraction.id, {
|
|
260
|
-
errorMessage: nestedResponse.status == "error" ? `${errorsStr}\n\n${errorTrace}` : "",
|
|
261
|
-
contentType: aiResponse.content_type,
|
|
262
|
-
message: JSON.stringify(nestedResponse),
|
|
263
|
-
modelUsed: aiResponse.model,
|
|
264
|
-
responseTimeMs: aiResponse.duration_ms,
|
|
265
|
-
metadata: JSON.stringify(aiResponse, null, 2),
|
|
266
|
-
isApplied: aiInteraction.isApplied,
|
|
267
|
-
status: aiResponse.success && nestedResponse.status == "success" ? 'succeeded' : 'failed'
|
|
268
|
-
}, [], true);
|
|
269
|
-
|
|
270
|
-
// If the human interaction was with isAutoApply=true, then we can go ahead and autoApply.
|
|
271
|
-
if (aiInteraction.isAutoApply) {
|
|
272
|
-
this.aiInteractionService.applySolidAiInteraction(genAiInteraction.id);
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
return aiResponse;
|
|
277
|
-
}
|
|
278
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { Injectable } from "@nestjs/common";
|
|
2
|
-
import { QueuesModuleOptions, TriggerMcpClientOptions } from "../../interfaces";
|
|
3
|
-
import { MqMessageQueueService } from "src/services/mq-message-queue.service";
|
|
4
|
-
import { MqMessageService } from "src/services/mq-message.service";
|
|
5
|
-
import { RabbitMqPublisher } from "src/services/queues/rabbitmq-publisher.service";
|
|
6
|
-
import triggerMcpClientQueueOptions from "./trigger-mcp-client-queue-options";
|
|
7
|
-
|
|
8
|
-
@Injectable()
|
|
9
|
-
export class TriggerMcpClientPublisherRabbitmq extends RabbitMqPublisher<TriggerMcpClientOptions> {
|
|
10
|
-
constructor(
|
|
11
|
-
protected readonly mqMessageService: MqMessageService,
|
|
12
|
-
protected readonly mqMessageQueueService: MqMessageQueueService,
|
|
13
|
-
) {
|
|
14
|
-
super(mqMessageService, mqMessageQueueService);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
options(): QueuesModuleOptions {
|
|
18
|
-
return {
|
|
19
|
-
...triggerMcpClientQueueOptions
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { BrokerType } from "../../interfaces";
|
|
2
|
-
|
|
3
|
-
const TRIGGER_MCP_CLIENT_QUEUE_NAME = 'solid_trigger_mcp_client_queue_rabbitmq';
|
|
4
|
-
|
|
5
|
-
export default {
|
|
6
|
-
name: TRIGGER_MCP_CLIENT_QUEUE_NAME,
|
|
7
|
-
type: BrokerType.RabbitMQ,
|
|
8
|
-
queueName: TRIGGER_MCP_CLIENT_QUEUE_NAME,
|
|
9
|
-
};
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import { Injectable, Logger } from '@nestjs/common';
|
|
2
|
-
|
|
3
|
-
import { QueueMessage } from 'src/interfaces/mq';
|
|
4
|
-
import triggerMcpClientQueueOptions from "./trigger-mcp-client-queue-options";
|
|
5
|
-
import { AiInteractionService } from 'src/services/ai-interaction.service';
|
|
6
|
-
import { PollerService } from 'src/services/poller.service';
|
|
7
|
-
import { TriggerMcpClientOptions, QueuesModuleOptions } from '../../interfaces';
|
|
8
|
-
import { MqMessageQueueService } from 'src/services/mq-message-queue.service';
|
|
9
|
-
import { MqMessageService } from 'src/services/mq-message.service';
|
|
10
|
-
import { RabbitMqSubscriber } from 'src/services/queues/rabbitmq-subscriber.service';
|
|
11
|
-
|
|
12
|
-
@Injectable()
|
|
13
|
-
export class TriggerMcpClientSubscriberRabbitmq extends RabbitMqSubscriber<TriggerMcpClientOptions> {
|
|
14
|
-
private readonly triggerMcpClientSubscriberLogger = new Logger(TriggerMcpClientSubscriberRabbitmq.name);
|
|
15
|
-
|
|
16
|
-
constructor(
|
|
17
|
-
readonly mqMessageService: MqMessageService,
|
|
18
|
-
readonly mqMessageQueueService: MqMessageQueueService,
|
|
19
|
-
readonly poller: PollerService,
|
|
20
|
-
readonly aiInteractionService: AiInteractionService,
|
|
21
|
-
) {
|
|
22
|
-
super(mqMessageService, mqMessageQueueService);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
options(): QueuesModuleOptions {
|
|
26
|
-
return {
|
|
27
|
-
...triggerMcpClientQueueOptions
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
async subscribe(message: QueueMessage<TriggerMcpClientOptions>) {
|
|
32
|
-
this.triggerMcpClientSubscriberLogger.debug(`Received message: ${JSON.stringify(message)}`);
|
|
33
|
-
|
|
34
|
-
const codeGnerationOptions = message.payload;
|
|
35
|
-
|
|
36
|
-
const aiInteraction = await this.aiInteractionService.findOne(codeGnerationOptions.aiInteractionId, {
|
|
37
|
-
populate: ['user']
|
|
38
|
-
});
|
|
39
|
-
if (!aiInteraction) {
|
|
40
|
-
const m = `Unable to identified the aiInteraction entry that triggered this job... using id: ${codeGnerationOptions.aiInteractionId}`
|
|
41
|
-
this.triggerMcpClientSubscriberLogger.log(m);
|
|
42
|
-
throw new Error(m);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
// The message contains the users prompt.
|
|
46
|
-
const prompt = aiInteraction.message;
|
|
47
|
-
|
|
48
|
-
// Use this to invoke our mcp client
|
|
49
|
-
// TODO: try / catch ...
|
|
50
|
-
// Handle the rejection gracefully...
|
|
51
|
-
const aiResponse = await this.aiInteractionService.runMcpPrompt(prompt);
|
|
52
|
-
this.triggerMcpClientSubscriberLogger.log(`aiResponse: `);
|
|
53
|
-
this.triggerMcpClientSubscriberLogger.log(JSON.stringify(aiResponse));
|
|
54
|
-
|
|
55
|
-
if (!aiResponse.success) {
|
|
56
|
-
this.triggerMcpClientSubscriberLogger.log(`Gen ai has returned with a false status code`);
|
|
57
|
-
|
|
58
|
-
const errorsStr = aiResponse.errors.join('; ');
|
|
59
|
-
|
|
60
|
-
await this.aiInteractionService.create({
|
|
61
|
-
userId: aiInteraction.user.id,
|
|
62
|
-
threadId: aiInteraction.threadId,
|
|
63
|
-
parentInteractionId: aiInteraction.id,
|
|
64
|
-
role: 'gen-ai',
|
|
65
|
-
message: '-',
|
|
66
|
-
contentType: aiResponse.content_type,
|
|
67
|
-
errorMessage: errorsStr,
|
|
68
|
-
modelUsed: aiResponse.model,
|
|
69
|
-
responseTimeMs: aiResponse.duration_ms,
|
|
70
|
-
metadata: JSON.stringify(aiResponse),
|
|
71
|
-
isApplied: aiInteraction.isApplied,
|
|
72
|
-
status: aiResponse.success ? 'succeeded' : 'failed'
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
// update the job entry with failure... raising an error will lead the job to be marked as failed...
|
|
76
|
-
throw new Error(errorsStr);
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
let nestedResponse = aiResponse.response.trim();
|
|
80
|
-
|
|
81
|
-
const genAiInteraction = await this.aiInteractionService.create({
|
|
82
|
-
userId: aiInteraction.user.id,
|
|
83
|
-
threadId: aiInteraction.threadId,
|
|
84
|
-
parentInteractionId: aiInteraction.id,
|
|
85
|
-
role: 'gen-ai',
|
|
86
|
-
message: nestedResponse,
|
|
87
|
-
contentType: aiResponse.content_type,
|
|
88
|
-
errorMessage: '',
|
|
89
|
-
modelUsed: aiResponse.model,
|
|
90
|
-
responseTimeMs: aiResponse.duration_ms,
|
|
91
|
-
metadata: JSON.stringify(aiResponse),
|
|
92
|
-
isApplied: aiInteraction.isApplied,
|
|
93
|
-
status: aiResponse.success ? 'succeeded' : 'failed'
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
// If the human interaction was with isAutoApply=true, then we can go ahead and autoApply.
|
|
97
|
-
if (aiInteraction.isAutoApply) {
|
|
98
|
-
this.aiInteractionService.applySolidAiInteraction(genAiInteraction.id);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
return aiResponse;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@nestjs/common';
|
|
2
|
-
|
|
3
|
-
import { RedisPublisher } from 'src/services/queues/redis-publisher.service';
|
|
4
|
-
import triggerMcpClientQueueConfig from './trigger-mcp-client-queue-options-redis';
|
|
5
|
-
import { MqMessageQueueService } from '../../services/mq-message-queue.service';
|
|
6
|
-
import { MqMessageService } from '../../services/mq-message.service';
|
|
7
|
-
import { TriggerMcpClientOptions, QueuesModuleOptions } from "../../interfaces";
|
|
8
|
-
|
|
9
|
-
@Injectable()
|
|
10
|
-
export class TriggerMcpClientPublisherRedis extends RedisPublisher<TriggerMcpClientOptions> {
|
|
11
|
-
constructor(
|
|
12
|
-
protected readonly mqMessageService: MqMessageService,
|
|
13
|
-
protected readonly mqMessageQueueService: MqMessageQueueService,
|
|
14
|
-
) {
|
|
15
|
-
super(mqMessageService, mqMessageQueueService);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
options(): QueuesModuleOptions {
|
|
19
|
-
return {
|
|
20
|
-
...triggerMcpClientQueueConfig
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import { Injectable, Logger } from '@nestjs/common';
|
|
2
|
-
|
|
3
|
-
import { RedisSubscriber } from 'src/services/queues/redis-subscriber.service';
|
|
4
|
-
import { QueueMessage } from 'src/interfaces/mq';
|
|
5
|
-
import triggerMcpClientQueueConfig from './trigger-mcp-client-queue-options-redis';
|
|
6
|
-
import { MqMessageService } from '../../services/mq-message.service';
|
|
7
|
-
import { MqMessageQueueService } from '../../services/mq-message-queue.service';
|
|
8
|
-
import { TriggerMcpClientOptions, QueuesModuleOptions } from "../../interfaces";
|
|
9
|
-
import { AiInteractionService } from '../../services/ai-interaction.service';
|
|
10
|
-
import { PollerService } from '../../services/poller.service';
|
|
11
|
-
|
|
12
|
-
@Injectable()
|
|
13
|
-
export class TriggerMcpClientSubscriberRedis extends RedisSubscriber<TriggerMcpClientOptions> {
|
|
14
|
-
private readonly triggerMcpClientSubscriberLogger = new Logger(TriggerMcpClientSubscriberRedis.name);
|
|
15
|
-
|
|
16
|
-
constructor(
|
|
17
|
-
readonly mqMessageService: MqMessageService,
|
|
18
|
-
readonly mqMessageQueueService: MqMessageQueueService,
|
|
19
|
-
readonly poller: PollerService,
|
|
20
|
-
readonly aiInteractionService: AiInteractionService,
|
|
21
|
-
) {
|
|
22
|
-
super(mqMessageService, mqMessageQueueService);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
options(): QueuesModuleOptions {
|
|
26
|
-
return {
|
|
27
|
-
...triggerMcpClientQueueConfig
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
async subscribe(message: QueueMessage<TriggerMcpClientOptions>) {
|
|
32
|
-
this.triggerMcpClientSubscriberLogger.debug(`Received message: ${JSON.stringify(message)}`);
|
|
33
|
-
|
|
34
|
-
const codeGnerationOptions = message.payload;
|
|
35
|
-
|
|
36
|
-
const aiInteraction = await this.aiInteractionService.findOne(codeGnerationOptions.aiInteractionId, {
|
|
37
|
-
populate: ['user']
|
|
38
|
-
});
|
|
39
|
-
if (!aiInteraction) {
|
|
40
|
-
const m = `Unable to identified the aiInteraction entry that triggered this job... using id: ${codeGnerationOptions.aiInteractionId}`
|
|
41
|
-
this.triggerMcpClientSubscriberLogger.log(m);
|
|
42
|
-
throw new Error(m);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
const prompt = aiInteraction.message;
|
|
46
|
-
|
|
47
|
-
const aiResponse = await this.aiInteractionService.runMcpPrompt(prompt);
|
|
48
|
-
this.triggerMcpClientSubscriberLogger.log(`aiResponse: `);
|
|
49
|
-
this.triggerMcpClientSubscriberLogger.log(JSON.stringify(aiResponse));
|
|
50
|
-
|
|
51
|
-
if (!aiResponse.success) {
|
|
52
|
-
this.triggerMcpClientSubscriberLogger.log(`Gen ai has returned with a false status code`);
|
|
53
|
-
|
|
54
|
-
const errorsStr = aiResponse.errors.join('; ');
|
|
55
|
-
|
|
56
|
-
await this.aiInteractionService.create({
|
|
57
|
-
userId: aiInteraction.user.id,
|
|
58
|
-
threadId: aiInteraction.threadId,
|
|
59
|
-
parentInteractionId: aiInteraction.id,
|
|
60
|
-
role: 'gen-ai',
|
|
61
|
-
message: '-',
|
|
62
|
-
contentType: aiResponse.content_type,
|
|
63
|
-
errorMessage: errorsStr,
|
|
64
|
-
modelUsed: aiResponse.model,
|
|
65
|
-
responseTimeMs: aiResponse.duration_ms,
|
|
66
|
-
metadata: JSON.stringify(aiResponse),
|
|
67
|
-
isApplied: aiInteraction.isApplied,
|
|
68
|
-
status: aiResponse.success ? 'succeeded' : 'failed'
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
throw new Error(errorsStr);
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
let nestedResponse = aiResponse.response.trim();
|
|
75
|
-
|
|
76
|
-
const genAiInteraction = await this.aiInteractionService.create({
|
|
77
|
-
userId: aiInteraction.user.id,
|
|
78
|
-
threadId: aiInteraction.threadId,
|
|
79
|
-
parentInteractionId: aiInteraction.id,
|
|
80
|
-
role: 'gen-ai',
|
|
81
|
-
message: nestedResponse,
|
|
82
|
-
contentType: aiResponse.content_type,
|
|
83
|
-
errorMessage: '',
|
|
84
|
-
modelUsed: aiResponse.model,
|
|
85
|
-
responseTimeMs: aiResponse.duration_ms,
|
|
86
|
-
metadata: JSON.stringify(aiResponse),
|
|
87
|
-
isApplied: aiInteraction.isApplied,
|
|
88
|
-
status: aiResponse.success ? 'succeeded' : 'failed'
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
if (aiInteraction.isAutoApply) {
|
|
92
|
-
this.aiInteractionService.applySolidAiInteraction(genAiInteraction.id);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
return aiResponse;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@nestjs/common';
|
|
2
|
-
import { AiInteraction } from 'src/entities/ai-interaction.entity';
|
|
3
|
-
import { RequestContextService } from 'src/services/request-context.service';
|
|
4
|
-
import { DataSource } from 'typeorm';
|
|
5
|
-
import { SecurityRuleRepository } from './security-rule.repository';
|
|
6
|
-
import { SolidBaseRepository } from './solid-base.repository';
|
|
7
|
-
|
|
8
|
-
@Injectable()
|
|
9
|
-
export class AiInteractionRepository extends SolidBaseRepository<AiInteraction> {
|
|
10
|
-
constructor(
|
|
11
|
-
readonly dataSource: DataSource,
|
|
12
|
-
readonly requestContextService: RequestContextService,
|
|
13
|
-
readonly securityRuleRepository: SecurityRuleRepository,
|
|
14
|
-
) {
|
|
15
|
-
super(AiInteraction, dataSource, requestContextService, securityRuleRepository);
|
|
16
|
-
}
|
|
17
|
-
}
|