@solidstarters/solid-core 1.2.161 → 1.2.163

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.
Files changed (58) hide show
  1. package/dist/commands/ingest.command.d.ts +16 -0
  2. package/dist/commands/ingest.command.d.ts.map +1 -0
  3. package/dist/commands/ingest.command.js +50 -0
  4. package/dist/commands/ingest.command.js.map +1 -0
  5. package/dist/commands/refresh-module.command.d.ts.map +1 -1
  6. package/dist/commands/refresh-module.command.js.map +1 -1
  7. package/dist/controllers/service.controller.d.ts +16 -1
  8. package/dist/controllers/service.controller.d.ts.map +1 -1
  9. package/dist/controllers/service.controller.js +55 -2
  10. package/dist/controllers/service.controller.js.map +1 -1
  11. package/dist/controllers/test.controller.d.ts +6 -1
  12. package/dist/controllers/test.controller.d.ts.map +1 -1
  13. package/dist/controllers/test.controller.js +21 -3
  14. package/dist/controllers/test.controller.js.map +1 -1
  15. package/dist/entities/common.entity.d.ts.map +1 -1
  16. package/dist/entities/common.entity.js +14 -2
  17. package/dist/entities/common.entity.js.map +1 -1
  18. package/dist/entities/user.entity.d.ts.map +1 -1
  19. package/dist/entities/user.entity.js +11 -1
  20. package/dist/entities/user.entity.js.map +1 -1
  21. package/dist/helpers/error-mapper.service.d.ts +8 -0
  22. package/dist/helpers/error-mapper.service.d.ts.map +1 -0
  23. package/dist/helpers/error-mapper.service.js +108 -0
  24. package/dist/helpers/error-mapper.service.js.map +1 -0
  25. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts.map +1 -1
  26. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js +4 -2
  27. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js.map +1 -1
  28. package/dist/seeders/seed-data/solid-core-metadata.json +21 -0
  29. package/dist/services/genai/ingest-metadata.service.d.ts +38 -0
  30. package/dist/services/genai/ingest-metadata.service.d.ts.map +1 -0
  31. package/dist/services/genai/ingest-metadata.service.js +530 -0
  32. package/dist/services/genai/ingest-metadata.service.js.map +1 -0
  33. package/dist/services/genai/r2r-helper.service.d.ts +7 -0
  34. package/dist/services/genai/r2r-helper.service.d.ts.map +1 -0
  35. package/dist/services/genai/r2r-helper.service.js +36 -0
  36. package/dist/services/genai/r2r-helper.service.js.map +1 -0
  37. package/dist/services/setting.service.d.ts.map +1 -1
  38. package/dist/services/setting.service.js +38 -20
  39. package/dist/services/setting.service.js.map +1 -1
  40. package/dist/solid-core.module.d.ts.map +1 -1
  41. package/dist/solid-core.module.js +8 -0
  42. package/dist/solid-core.module.js.map +1 -1
  43. package/dist/tsconfig.tsbuildinfo +1 -1
  44. package/package.json +2 -1
  45. package/src/commands/ingest-rag-chunking-strategy-for.md +224 -0
  46. package/src/commands/ingest.command.ts +36 -0
  47. package/src/commands/refresh-module.command.ts +0 -1
  48. package/src/controllers/service.controller.ts +66 -3
  49. package/src/controllers/test.controller.ts +15 -3
  50. package/src/entities/common.entity.ts +10 -0
  51. package/src/entities/user.entity.ts +33 -1
  52. package/src/helpers/error-mapper.service.ts +214 -0
  53. package/src/jobs/database/trigger-mcp-client-subscriber-database.service.ts +4 -2
  54. package/src/seeders/seed-data/solid-core-metadata.json +21 -0
  55. package/src/services/genai/ingest-metadata.service.ts +695 -0
  56. package/src/services/genai/r2r-helper.service.ts +33 -0
  57. package/src/services/setting.service.ts +46 -22
  58. package/src/solid-core.module.ts +8 -0
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ErrorMapperService = exports.ERROR_CODES = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ exports.ERROR_CODES = [
12
+ 'bedrock-throttling-error',
13
+ 'bedrock-access-denied',
14
+ 'bedrock-input-too-long',
15
+ 'bedrock-validation-error',
16
+ 'bedrock-model-not-found',
17
+ 'db-duplicate-key',
18
+ 'db-foreign-key-error',
19
+ 'metadata-extraction-date-parsing-failed',
20
+ 'metadata-extraction-missing-s3-file',
21
+ 'solidx-mcp-server-unavailable',
22
+ 'unknown-error',
23
+ ];
24
+ let ErrorMapperService = class ErrorMapperService {
25
+ mapException(exc) {
26
+ const combined = this.combineErrorText(exc);
27
+ if (combined.includes("all connection attempts failed") && combined.includes("unhandled errors in a taskgroup (1 sub-exception)")) {
28
+ return 'solidx-mcp-server-unavailable';
29
+ }
30
+ if (combined.includes('throttlingexception') ||
31
+ combined.includes('too many tokens')) {
32
+ return 'bedrock-throttling-error';
33
+ }
34
+ if (combined.includes('accessdeniedexception')) {
35
+ return 'bedrock-access-denied';
36
+ }
37
+ if (combined.includes('validationexception') &&
38
+ combined.includes('input is too long')) {
39
+ return 'bedrock-input-too-long';
40
+ }
41
+ if (combined.includes('validationexception')) {
42
+ return 'bedrock-validation-error';
43
+ }
44
+ if (combined.includes('modelnotfoundexception')) {
45
+ return 'bedrock-model-not-found';
46
+ }
47
+ if (combined.includes('unique constraint') ||
48
+ combined.includes('duplicate key')) {
49
+ return 'db-duplicate-key';
50
+ }
51
+ if (combined.includes('foreign key')) {
52
+ return 'db-foreign-key-error';
53
+ }
54
+ if (combined.includes('mapper_parsing_exception') &&
55
+ (combined.includes('failed to parse field [metadata.properties.dates]') ||
56
+ combined.includes('failed to parse field [metadata.properties.date_authored]'))) {
57
+ return 'metadata-extraction-date-parsing-failed';
58
+ }
59
+ if (combined.includes('nosuchkey') && combined.includes('getobject')) {
60
+ return 'metadata-extraction-missing-s3-file';
61
+ }
62
+ return 'unknown-error';
63
+ }
64
+ mapMessage(message, trace) {
65
+ const combined = `${message ?? ''}\n${trace ?? ''}`.toLowerCase();
66
+ return this.mapException(combined);
67
+ }
68
+ combineErrorText(exc) {
69
+ if (typeof exc === 'string') {
70
+ return exc.toLowerCase();
71
+ }
72
+ if (exc instanceof Error) {
73
+ const message = exc.message ?? '';
74
+ const stack = exc.stack ?? '';
75
+ return `${message}\n${stack}`.toLowerCase();
76
+ }
77
+ if (exc && typeof exc === 'object') {
78
+ try {
79
+ const maybeAny = exc;
80
+ const msg = String(maybeAny.message ?? '') ||
81
+ String(maybeAny['Message'] ?? '') ||
82
+ '';
83
+ const name = String(maybeAny.name ?? '') ||
84
+ String(maybeAny['__type'] ?? '') ||
85
+ '';
86
+ const stack = String(maybeAny.stack ?? '');
87
+ const json = safeJsonStringify(maybeAny);
88
+ return `${name}\n${msg}\n${stack}\n${json}`.toLowerCase();
89
+ }
90
+ catch {
91
+ }
92
+ }
93
+ return String(exc ?? '').toLowerCase();
94
+ }
95
+ };
96
+ exports.ErrorMapperService = ErrorMapperService;
97
+ exports.ErrorMapperService = ErrorMapperService = __decorate([
98
+ (0, common_1.Injectable)()
99
+ ], ErrorMapperService);
100
+ function safeJsonStringify(obj) {
101
+ try {
102
+ return JSON.stringify(obj);
103
+ }
104
+ catch {
105
+ return '';
106
+ }
107
+ }
108
+ //# sourceMappingURL=error-mapper.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-mapper.service.js","sourceRoot":"","sources":["../../src/helpers/error-mapper.service.ts"],"names":[],"mappings":"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","sourcesContent":["// src/common/errors/error-mapper.service.ts\nimport { Injectable } from '@nestjs/common';\n\nexport const ERROR_CODES = [\n 'bedrock-throttling-error',\n 'bedrock-access-denied',\n 'bedrock-input-too-long',\n 'bedrock-validation-error',\n 'bedrock-model-not-found',\n 'db-duplicate-key',\n 'db-foreign-key-error',\n 'metadata-extraction-date-parsing-failed',\n 'metadata-extraction-missing-s3-file',\n 'solidx-mcp-server-unavailable',\n 'unknown-error',\n] as const;\n\nexport type ErrorCode = typeof ERROR_CODES[number];\n\n@Injectable()\nexport class ErrorMapperService {\n /**\n * Given an error/exception, return a mapped error code string.\n * Default: \"unknown-error\"\n */\n mapException(exc: unknown): ErrorCode {\n const combined = this.combineErrorText(exc);\n\n // AiInteraction - mcp server down. \n // {\n // \"success\": false,\n // \"errors\": [\n // \"unhandled errors in a TaskGroup (1 sub-exception)\"\n // ],\n // \"error_trace\": [\n // \"Traceback (most recent call last):\",\n // \"File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/envs/solid_mcp_client/lib/python3.12/site-packages/mcp/client/sse.py\\\", line 47, in sse_client\\n async with aconnect_sse(\\n ^^^^^^^^^^^^^\",\n // \"File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/lib/python3.12/contextlib.py\\\", line 210, in __aenter__\\n return await anext(self.gen)\\n ^^^^^^^^^^^^^^^^^^^^^\",\n // \"File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/envs/solid_mcp_client/lib/python3.12/site-packages/httpx_sse/_api.py\\\", line 69, in aconnect_sse\\n async with client.stream(method, url, headers=headers, **kwargs) as response:\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\",\n // \"File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/lib/python3.12/contextlib.py\\\", line 210, in __aenter__\\n return await anext(self.gen)\\n ^^^^^^^^^^^^^^^^^^^^^\",\n // \"File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/envs/solid_mcp_client/lib/python3.12/site-packages/httpx/_client.py\\\", line 1583, in stream\\n response = await self.send(\\n ^^^^^^^^^^^^^^^^\",\n // \"File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/envs/solid_mcp_client/lib/python3.12/site-packages/httpx/_client.py\\\", line 1629, in send\\n response = await self._send_handling_auth(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\",\n // \"File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/envs/solid_mcp_client/lib/python3.12/site-packages/httpx/_client.py\\\", line 1657, in _send_handling_auth\\n response = await self._send_handling_redirects(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\",\n // \"File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/envs/solid_mcp_client/lib/python3.12/site-packages/httpx/_client.py\\\", line 1694, in _send_handling_redirects\\n response = await self._send_single_request(request)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\",\n // \"File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/envs/solid_mcp_client/lib/python3.12/site-packages/httpx/_client.py\\\", line 1730, in _send_single_request\\n response = await transport.handle_async_request(request)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\",\n // \"File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/envs/solid_mcp_client/lib/python3.12/site-packages/httpx/_transports/default.py\\\", line 393, in handle_async_request\\n with map_httpcore_exceptions():\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\",\n // \"File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/lib/python3.12/contextlib.py\\\", line 158, in __exit__\\n self.gen.throw(value)\",\n // \"File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/envs/solid_mcp_client/lib/python3.12/site-packages/httpx/_transports/default.py\\\", line 118, in map_httpcore_exceptions\\n raise mapped_exc(message) from exc\",\n // \"httpx.ConnectError: All connection attempts failed\",\n // \"During handling of the above exception, another exception occurred:\",\n // \"+ Exception Group Traceback (most recent call last):\",\n // \"| File \\\"/Users/harishpatel/mcp/clients/solidx_mcp_client/client_sse_nochat.py\\\", line 239, in main\\n | await client.connect_to_sse_server()\",\n // \"| File \\\"/Users/harishpatel/mcp/clients/solidx_mcp_client/client_sse_nochat.py\\\", line 49, in connect_to_sse_server\\n | streams = await self._streams_context.__aenter__()\\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\",\n // \"| File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/lib/python3.12/contextlib.py\\\", line 210, in __aenter__\\n | return await anext(self.gen)\\n | ^^^^^^^^^^^^^^^^^^^^^\",\n // \"| File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/envs/solid_mcp_client/lib/python3.12/site-packages/mcp/client/sse.py\\\", line 43, in sse_client\\n | async with anyio.create_task_group() as tg:\\n | ^^^^^^^^^^^^^^^^^^^^^^^^^\",\n // \"| File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/envs/solid_mcp_client/lib/python3.12/site-packages/anyio/_backends/_asyncio.py\\\", line 767, in __aexit__\\n | raise BaseExceptionGroup(\",\n // \"| ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)\",\n // \"+-+---------------- 1 ----------------\",\n // \"| Traceback (most recent call last):\",\n // \"| File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/envs/solid_mcp_client/lib/python3.12/site-packages/httpx/_transports/default.py\\\", line 101, in map_httpcore_exceptions\\n | yield\",\n // \"| File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/envs/solid_mcp_client/lib/python3.12/site-packages/httpx/_transports/default.py\\\", line 394, in handle_async_request\\n | resp = await self._pool.handle_async_request(req)\\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\",\n // \"| File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/envs/solid_mcp_client/lib/python3.12/site-packages/httpcore/_async/connection_pool.py\\\", line 256, in handle_async_request\\n | raise exc from None\",\n // \"| File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/envs/solid_mcp_client/lib/python3.12/site-packages/httpcore/_async/connection_pool.py\\\", line 236, in handle_async_request\\n | response = await connection.handle_async_request(\\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\",\n // \"| File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/envs/solid_mcp_client/lib/python3.12/site-packages/httpcore/_async/connection.py\\\", line 101, in handle_async_request\\n | raise exc\",\n // \"| File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/envs/solid_mcp_client/lib/python3.12/site-packages/httpcore/_async/connection.py\\\", line 78, in handle_async_request\\n | stream = await self._connect(request)\\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\",\n // \"| File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/envs/solid_mcp_client/lib/python3.12/site-packages/httpcore/_async/connection.py\\\", line 124, in _connect\\n | stream = await self._network_backend.connect_tcp(**kwargs)\\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\",\n // \"| File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/envs/solid_mcp_client/lib/python3.12/site-packages/httpcore/_backends/auto.py\\\", line 31, in connect_tcp\\n | return await self._backend.connect_tcp(\\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\",\n // \"| File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/envs/solid_mcp_client/lib/python3.12/site-packages/httpcore/_backends/anyio.py\\\", line 113, in connect_tcp\\n | with map_exceptions(exc_map):\\n | ^^^^^^^^^^^^^^^^^^^^^^^\",\n // \"| File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/lib/python3.12/contextlib.py\\\", line 158, in __exit__\\n | self.gen.throw(value)\",\n // \"| File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/envs/solid_mcp_client/lib/python3.12/site-packages/httpcore/_exceptions.py\\\", line 14, in map_exceptions\\n | raise to_exc(exc) from exc\",\n // \"| httpcore.ConnectError: All connection attempts failed\",\n // \"| \\n | The above exception was the direct cause of the following exception:\\n |\",\n // \"| Traceback (most recent call last):\",\n // \"| File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/envs/solid_mcp_client/lib/python3.12/site-packages/mcp/client/sse.py\\\", line 47, in sse_client\\n | async with aconnect_sse(\\n | ^^^^^^^^^^^^^\",\n // \"| File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/lib/python3.12/contextlib.py\\\", line 210, in __aenter__\\n | return await anext(self.gen)\\n | ^^^^^^^^^^^^^^^^^^^^^\",\n // \"| File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/envs/solid_mcp_client/lib/python3.12/site-packages/httpx_sse/_api.py\\\", line 69, in aconnect_sse\\n | async with client.stream(method, url, headers=headers, **kwargs) as response:\\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\",\n // \"| File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/lib/python3.12/contextlib.py\\\", line 210, in __aenter__\\n | return await anext(self.gen)\\n | ^^^^^^^^^^^^^^^^^^^^^\",\n // \"| File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/envs/solid_mcp_client/lib/python3.12/site-packages/httpx/_client.py\\\", line 1583, in stream\\n | response = await self.send(\\n | ^^^^^^^^^^^^^^^^\",\n // \"| File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/envs/solid_mcp_client/lib/python3.12/site-packages/httpx/_client.py\\\", line 1629, in send\\n | response = await self._send_handling_auth(\\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\",\n // \"| File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/envs/solid_mcp_client/lib/python3.12/site-packages/httpx/_client.py\\\", line 1657, in _send_handling_auth\\n | response = await self._send_handling_redirects(\\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\",\n // \"| File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/envs/solid_mcp_client/lib/python3.12/site-packages/httpx/_client.py\\\", line 1694, in _send_handling_redirects\\n | response = await self._send_single_request(request)\\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\",\n // \"| File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/envs/solid_mcp_client/lib/python3.12/site-packages/httpx/_client.py\\\", line 1730, in _send_single_request\\n | response = await transport.handle_async_request(request)\\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\",\n // \"| File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/envs/solid_mcp_client/lib/python3.12/site-packages/httpx/_transports/default.py\\\", line 393, in handle_async_request\\n | with map_httpcore_exceptions():\\n | ^^^^^^^^^^^^^^^^^^^^^^^^^\",\n // \"| File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/lib/python3.12/contextlib.py\\\", line 158, in __exit__\\n | self.gen.throw(value)\",\n // \"| File \\\"/Users/harishpatel/.pyenv/versions/3.12.7/envs/solid_mcp_client/lib/python3.12/site-packages/httpx/_transports/default.py\\\", line 118, in map_httpcore_exceptions\\n | raise mapped_exc(message) from exc\",\n // \"| httpx.ConnectError: All connection attempts failed\",\n // \"+------------------------------------\"\n // ],\n // \"request\": \"\\\"Can you do 1 + 1\\\"\"\n // }\n if (combined.includes(\"all connection attempts failed\") && combined.includes(\"unhandled errors in a taskgroup (1 sub-exception)\")) {\n return 'solidx-mcp-server-unavailable';\n }\n\n // --- Bedrock errors ---\n // Throttling: \"ThrottlingException\" or \"Too many tokens\"\n if (\n combined.includes('throttlingexception') ||\n combined.includes('too many tokens')\n ) {\n return 'bedrock-throttling-error';\n }\n\n if (combined.includes('accessdeniedexception')) {\n return 'bedrock-access-denied';\n }\n\n if (\n combined.includes('validationexception') &&\n combined.includes('input is too long')\n ) {\n return 'bedrock-input-too-long';\n }\n\n if (combined.includes('validationexception')) {\n return 'bedrock-validation-error';\n }\n\n if (combined.includes('modelnotfoundexception')) {\n return 'bedrock-model-not-found';\n }\n\n // --- DB errors ---\n if (\n combined.includes('unique constraint') ||\n combined.includes('duplicate key')\n ) {\n return 'db-duplicate-key';\n }\n\n if (combined.includes('foreign key')) {\n return 'db-foreign-key-error';\n }\n\n // --- OpenSearch errors ---\n // mapper_parsing_exception on specific fields\n if (\n combined.includes('mapper_parsing_exception') &&\n (combined.includes('failed to parse field [metadata.properties.dates]') ||\n combined.includes(\n 'failed to parse field [metadata.properties.date_authored]',\n ))\n ) {\n return 'metadata-extraction-date-parsing-failed';\n }\n\n // --- S3 errors ---\n // NoSuchKey during GetObject\n if (combined.includes('nosuchkey') && combined.includes('getobject')) {\n return 'metadata-extraction-missing-s3-file';\n }\n\n // --- Catch-all ---\n return 'unknown-error';\n }\n\n /**\n * Same mapping, but takes raw strings instead of an Exception object.\n */\n mapMessage(message: string, trace?: string): ErrorCode {\n const combined = `${message ?? ''}\\n${trace ?? ''}`.toLowerCase();\n return this.mapException(combined);\n }\n\n // ---- helpers ----\n\n private combineErrorText(exc: unknown): string {\n // If caller passed us a pre-lowered string (e.g. from mapMessage), use it\n if (typeof exc === 'string') {\n return exc.toLowerCase();\n }\n\n // Standard Error\n if (exc instanceof Error) {\n const message = exc.message ?? '';\n // Many libs set .stack to \"Error: message\\n<stack>\"\n // We still include it in case upstream mutated it.\n const stack = exc.stack ?? '';\n return `${message}\\n${stack}`.toLowerCase();\n }\n\n // Some SDKs throw objects (e.g., { name, message, code, $metadata, ... })\n if (exc && typeof exc === 'object') {\n try {\n const maybeAny = exc as Record<string, unknown>;\n const msg =\n String(maybeAny.message ?? '') ||\n String(maybeAny['Message'] ?? '') ||\n '';\n const name =\n String(maybeAny.name ?? '') ||\n String(maybeAny['__type'] ?? '') ||\n '';\n const stack = String((maybeAny as any).stack ?? '');\n // Also fold in a JSON snapshot as a last resort\n const json = safeJsonStringify(maybeAny);\n return `${name}\\n${msg}\\n${stack}\\n${json}`.toLowerCase();\n } catch {\n // fall through\n }\n }\n\n // Fallback\n return String(exc ?? '').toLowerCase();\n }\n}\n\nfunction safeJsonStringify(obj: unknown): string {\n try {\n return JSON.stringify(obj);\n } catch {\n return '';\n }\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"trigger-mcp-client-subscriber-database.service.d.ts","sourceRoot":"","sources":["../../../src/jobs/database/trigger-mcp-client-subscriber-database.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,iDAAiD,CAAC;AAErF,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,qBACa,kCAAmC,SAAQ,kBAAkB,CAAC,uBAAuB,CAAC;IAI3F,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB;IAC3C,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB;IACrD,QAAQ,CAAC,MAAM,EAAE,aAAa;IAC9B,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB;IANvD,OAAO,CAAC,QAAQ,CAAC,gCAAgC,CAAuD;gBAG3F,gBAAgB,EAAE,gBAAgB,EAClC,qBAAqB,EAAE,qBAAqB,EAC5C,MAAM,EAAE,aAAa,EACrB,oBAAoB,EAAE,oBAAoB;IAKvD,OAAO,IAAI,mBAAmB;IAMxB,SAAS,CAAC,OAAO,EAAE,YAAY,CAAC,uBAAuB,CAAC;CAuEjE"}
1
+ {"version":3,"file":"trigger-mcp-client-subscriber-database.service.d.ts","sourceRoot":"","sources":["../../../src/jobs/database/trigger-mcp-client-subscriber-database.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,iDAAiD,CAAC;AAErF,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,qBACa,kCAAmC,SAAQ,kBAAkB,CAAC,uBAAuB,CAAC;IAI3F,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB;IAC3C,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB;IACrD,QAAQ,CAAC,MAAM,EAAE,aAAa;IAC9B,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB;IANvD,OAAO,CAAC,QAAQ,CAAC,gCAAgC,CAAuD;gBAG3F,gBAAgB,EAAE,gBAAgB,EAClC,qBAAqB,EAAE,qBAAqB,EAC5C,MAAM,EAAE,aAAa,EACrB,oBAAoB,EAAE,oBAAoB;IAKvD,OAAO,IAAI,mBAAmB;IAMxB,SAAS,CAAC,OAAO,EAAE,YAAY,CAAC,uBAAuB,CAAC;CAyEjE"}
@@ -64,7 +64,8 @@ let TriggerMcpClientSubscriberDatabase = TriggerMcpClientSubscriberDatabase_1 =
64
64
  modelUsed: aiResponse.model,
65
65
  responseTimeMs: aiResponse.duration_ms,
66
66
  metadata: JSON.stringify(aiResponse),
67
- isApplied: aiInteraction.isApplied
67
+ isApplied: aiInteraction.isApplied,
68
+ status: aiResponse.success ? 'succeeded' : 'failed'
68
69
  });
69
70
  throw new Error(errorsStr);
70
71
  }
@@ -81,7 +82,8 @@ let TriggerMcpClientSubscriberDatabase = TriggerMcpClientSubscriberDatabase_1 =
81
82
  modelUsed: aiResponse.model,
82
83
  responseTimeMs: aiResponse.duration_ms,
83
84
  metadata: JSON.stringify(aiResponse),
84
- isApplied: aiInteraction.isApplied
85
+ isApplied: aiInteraction.isApplied,
86
+ status: aiResponse.success ? 'succeeded' : 'failed'
85
87
  });
86
88
  if (aiInteraction.isAutoApply) {
87
89
  this.aiInteractionService.applySolidAiInteraction(genAiInteraction.id);
@@ -1 +1 @@
1
- {"version":3,"file":"trigger-mcp-client-subscriber-database.service.js","sourceRoot":"","sources":["../../../src/jobs/database/trigger-mcp-client-subscriber-database.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, Logger } from '@nestjs/common';\n\nimport { QueueMessage } from 'src/interfaces/mq';\nimport { MqMessageService } from '../../services/mq-message.service';\nimport { MqMessageQueueService } from '../../services/mq-message-queue.service';\nimport { QueuesModuleOptions, TriggerMcpClientOptions } from \"../../interfaces\";\nimport { DatabaseSubscriber } from 'src/services/queues/database-subscriber.service';\nimport triggerMcpClientQueueOptions from \"./trigger-mcp-client-queue-options\";\nimport { AiInteractionService } from 'src/services/ai-interaction.service';\nimport { PollerService } from 'src/services/poller.service';\n\n@Injectable()\nexport class TriggerMcpClientSubscriberDatabase extends DatabaseSubscriber<TriggerMcpClientOptions> {\n private readonly triggerMcpClientSubscriberLogger = new Logger(TriggerMcpClientSubscriberDatabase.name);\n\n constructor(\n readonly mqMessageService: MqMessageService,\n readonly mqMessageQueueService: MqMessageQueueService,\n readonly poller: PollerService,\n readonly aiInteractionService: AiInteractionService,\n ) {\n super(mqMessageService, mqMessageQueueService, poller);\n }\n\n options(): QueuesModuleOptions {\n return {\n ...triggerMcpClientQueueOptions\n }\n }\n\n async subscribe(message: QueueMessage<TriggerMcpClientOptions>) {\n this.triggerMcpClientSubscriberLogger.debug(`Received message: ${JSON.stringify(message)}`);\n\n const codeGnerationOptions = message.payload;\n\n const aiInteraction = await this.aiInteractionService.findOne(codeGnerationOptions.aiInteractionId, {\n populate: ['user']\n });\n if (!aiInteraction) {\n const m = `Unable to identified the aiInteraction entry that triggered this job... using id: ${codeGnerationOptions.aiInteractionId}`\n this.triggerMcpClientSubscriberLogger.log(m);\n throw new Error(m);\n }\n\n // The message contains the users prompt.\n const prompt = aiInteraction.message;\n\n // Use this to invoke our mcp client\n // TODO: try / catch ... \n // Handle the rejection gracefully...\n const aiResponse = await this.aiInteractionService.runMcpPrompt(prompt);\n this.triggerMcpClientSubscriberLogger.log(`aiResponse: `);\n this.triggerMcpClientSubscriberLogger.log(JSON.stringify(aiResponse));\n\n if (!aiResponse.success) {\n this.triggerMcpClientSubscriberLogger.log(`Gen ai has returned with a false status code`);\n\n const errorsStr = aiResponse.errors.join('; ');\n\n await this.aiInteractionService.create({\n userId: aiInteraction.user.id,\n threadId: aiInteraction.threadId,\n parentInteractionId: aiInteraction.id,\n role: 'gen-ai',\n message: '-',\n contentType: aiResponse.content_type,\n errorMessage: errorsStr,\n modelUsed: aiResponse.model,\n responseTimeMs: aiResponse.duration_ms,\n metadata: JSON.stringify(aiResponse),\n isApplied: aiInteraction.isApplied\n });\n\n // update the job entry with failure... raising an error will lead the job to be marked as failed...\n throw new Error(errorsStr);\n }\n else {\n let nestedResponse = aiResponse.response.trim();\n\n const genAiInteraction = await this.aiInteractionService.create({\n userId: aiInteraction.user.id,\n threadId: aiInteraction.threadId,\n parentInteractionId: aiInteraction.id,\n role: 'gen-ai',\n message: nestedResponse,\n contentType: aiResponse.content_type,\n errorMessage: '',\n modelUsed: aiResponse.model,\n responseTimeMs: aiResponse.duration_ms,\n metadata: JSON.stringify(aiResponse),\n isApplied: aiInteraction.isApplied\n });\n\n // If the human interaction was with isAutoApply=true, then we can go ahead and autoApply.\n if (aiInteraction.isAutoApply) {\n this.aiInteractionService.applySolidAiInteraction(genAiInteraction.id);\n }\n }\n\n return aiResponse;\n }\n}\n"]}
1
+ {"version":3,"file":"trigger-mcp-client-subscriber-database.service.js","sourceRoot":"","sources":["../../../src/jobs/database/trigger-mcp-client-subscriber-database.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, Logger } from '@nestjs/common';\n\nimport { QueueMessage } from 'src/interfaces/mq';\nimport { MqMessageService } from '../../services/mq-message.service';\nimport { MqMessageQueueService } from '../../services/mq-message-queue.service';\nimport { QueuesModuleOptions, TriggerMcpClientOptions } from \"../../interfaces\";\nimport { DatabaseSubscriber } from 'src/services/queues/database-subscriber.service';\nimport triggerMcpClientQueueOptions from \"./trigger-mcp-client-queue-options\";\nimport { AiInteractionService } from 'src/services/ai-interaction.service';\nimport { PollerService } from 'src/services/poller.service';\n\n@Injectable()\nexport class TriggerMcpClientSubscriberDatabase extends DatabaseSubscriber<TriggerMcpClientOptions> {\n private readonly triggerMcpClientSubscriberLogger = new Logger(TriggerMcpClientSubscriberDatabase.name);\n\n constructor(\n readonly mqMessageService: MqMessageService,\n readonly mqMessageQueueService: MqMessageQueueService,\n readonly poller: PollerService,\n readonly aiInteractionService: AiInteractionService,\n ) {\n super(mqMessageService, mqMessageQueueService, poller);\n }\n\n options(): QueuesModuleOptions {\n return {\n ...triggerMcpClientQueueOptions\n }\n }\n\n async subscribe(message: QueueMessage<TriggerMcpClientOptions>) {\n this.triggerMcpClientSubscriberLogger.debug(`Received message: ${JSON.stringify(message)}`);\n\n const codeGnerationOptions = message.payload;\n\n const aiInteraction = await this.aiInteractionService.findOne(codeGnerationOptions.aiInteractionId, {\n populate: ['user']\n });\n if (!aiInteraction) {\n const m = `Unable to identified the aiInteraction entry that triggered this job... using id: ${codeGnerationOptions.aiInteractionId}`\n this.triggerMcpClientSubscriberLogger.log(m);\n throw new Error(m);\n }\n\n // The message contains the users prompt.\n const prompt = aiInteraction.message;\n\n // Use this to invoke our mcp client\n // TODO: try / catch ... \n // Handle the rejection gracefully...\n const aiResponse = await this.aiInteractionService.runMcpPrompt(prompt);\n this.triggerMcpClientSubscriberLogger.log(`aiResponse: `);\n this.triggerMcpClientSubscriberLogger.log(JSON.stringify(aiResponse));\n\n if (!aiResponse.success) {\n this.triggerMcpClientSubscriberLogger.log(`Gen ai has returned with a false status code`);\n\n const errorsStr = aiResponse.errors.join('; ');\n\n await this.aiInteractionService.create({\n userId: aiInteraction.user.id,\n threadId: aiInteraction.threadId,\n parentInteractionId: aiInteraction.id,\n role: 'gen-ai',\n message: '-',\n contentType: aiResponse.content_type,\n errorMessage: errorsStr,\n modelUsed: aiResponse.model,\n responseTimeMs: aiResponse.duration_ms,\n metadata: JSON.stringify(aiResponse),\n isApplied: aiInteraction.isApplied,\n status: aiResponse.success ? 'succeeded' : 'failed'\n });\n\n // update the job entry with failure... raising an error will lead the job to be marked as failed...\n throw new Error(errorsStr);\n }\n else {\n let nestedResponse = aiResponse.response.trim();\n\n const genAiInteraction = await this.aiInteractionService.create({\n userId: aiInteraction.user.id,\n threadId: aiInteraction.threadId,\n parentInteractionId: aiInteraction.id,\n role: 'gen-ai',\n message: nestedResponse,\n contentType: aiResponse.content_type,\n errorMessage: '',\n modelUsed: aiResponse.model,\n responseTimeMs: aiResponse.duration_ms,\n metadata: JSON.stringify(aiResponse),\n isApplied: aiInteraction.isApplied,\n status: aiResponse.success ? 'succeeded' : 'failed'\n });\n\n // If the human interaction was with isAutoApply=true, then we can go ahead and autoApply.\n if (aiInteraction.isAutoApply) {\n this.aiInteractionService.applySolidAiInteraction(genAiInteraction.id);\n }\n }\n\n return aiResponse;\n }\n}\n"]}
@@ -5584,6 +5584,19 @@
5584
5584
  "moduleUserKey": "solid-core",
5585
5585
  "modelUserKey": "setting"
5586
5586
  },
5587
+ {
5588
+ "displayName": "Ai settings",
5589
+ "name": "ai-settings-action",
5590
+ "type": "custom",
5591
+ "domain": "",
5592
+ "context": "",
5593
+ "customComponent": "/admin/core/solid-core/settings/ai-settings",
5594
+ "customIsModal": true,
5595
+ "serverEndpoint": "",
5596
+ "viewUserKey": "",
5597
+ "moduleUserKey": "solid-core",
5598
+ "modelUserKey": "setting"
5599
+ },
5587
5600
  {
5588
5601
  "displayName": "Misc",
5589
5602
  "name": "misc-settings-action",
@@ -5952,6 +5965,14 @@
5952
5965
  "moduleUserKey": "solid-core",
5953
5966
  "parentMenuItemUserKey": "settings-menu-item"
5954
5967
  },
5968
+ {
5969
+ "displayName": "Ai Settings",
5970
+ "name": "ai-settings-menu-item",
5971
+ "sequenceNumber": 3,
5972
+ "actionUserKey": "ai-settings-action",
5973
+ "moduleUserKey": "solid-core",
5974
+ "parentMenuItemUserKey": "settings-menu-item"
5975
+ },
5955
5976
  {
5956
5977
  "displayName": "Misc",
5957
5978
  "name": "misc-settings-menu-item",
@@ -0,0 +1,38 @@
1
+ import { R2RHelperService } from './r2r-helper.service';
2
+ export type FieldIngestionInfo = {
3
+ fieldName: string;
4
+ fieldChunkId?: string;
5
+ fieldHash?: string;
6
+ };
7
+ export type ModelIngestionInfo = {
8
+ modelName: string;
9
+ modelChunkId?: string;
10
+ modelHash?: string;
11
+ fields: FieldIngestionInfo[];
12
+ };
13
+ export type ModuleRAGIngestionInfo = {
14
+ moduleName?: string;
15
+ collectionId?: string;
16
+ documentId?: string;
17
+ documentHash?: string;
18
+ moduleChunkId?: string;
19
+ moduleHash?: string;
20
+ models: ModelIngestionInfo[];
21
+ };
22
+ export declare class IngestMetadataService {
23
+ private readonly r2rService;
24
+ private readonly logger;
25
+ private ragClient;
26
+ constructor(r2rService: R2RHelperService);
27
+ private _sha256OfJson;
28
+ private _oneLineBool;
29
+ private _shortList;
30
+ ingest(): Promise<void>;
31
+ private resolveRagCollectionForModule;
32
+ private deleteInsertRagDocumentForModuleMetadataJsonFile;
33
+ private deleteInsertRagChunkForModule;
34
+ private deleteInsertRagChunkForModel;
35
+ private _buildFieldTextAndMetadata;
36
+ private deleteInsertRagChunkForField;
37
+ }
38
+ //# sourceMappingURL=ingest-metadata.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ingest-metadata.service.d.ts","sourceRoot":"","sources":["../../../src/services/genai/ingest-metadata.service.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAKxD,MAAM,MAAM,kBAAkB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,kBAAkB,EAAE,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,MAAM,EAAE,kBAAkB,EAAE,CAAC;CAChC,CAAC;AAEF,qBACa,qBAAqB;IAK1B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAJ/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;IACjE,OAAO,CAAC,SAAS,CAAY;gBAGR,UAAU,EAAE,gBAAgB;IAajD,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,UAAU;IAMZ,MAAM;YAuDE,6BAA6B;YAoC7B,gDAAgD;YAqDhD,6BAA6B;YA8E7B,4BAA4B;IAwG1C,OAAO,CAAC,0BAA0B;YA+NpB,4BAA4B;CA2D7C"}