@futdevpro/nts-dynamo 1.15.105 → 1.15.110

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 (127) hide show
  1. package/.dynamo/logs/cicd-pipeline/output.log +1621 -1669
  2. package/.dynamo/logs/cicd-pipeline/status.json +43 -29
  3. package/build/_modules/ai/_collections/ai-model-config-validator.util.d.ts +32 -0
  4. package/build/_modules/ai/_collections/ai-model-config-validator.util.d.ts.map +1 -0
  5. package/build/_modules/ai/_collections/ai-model-config-validator.util.js +95 -0
  6. package/build/_modules/ai/_collections/ai-model-config-validator.util.js.map +1 -0
  7. package/build/_modules/ai/_collections/ai-provider-error.util.d.ts +44 -0
  8. package/build/_modules/ai/_collections/ai-provider-error.util.d.ts.map +1 -0
  9. package/build/_modules/ai/_collections/ai-provider-error.util.js +121 -0
  10. package/build/_modules/ai/_collections/ai-provider-error.util.js.map +1 -0
  11. package/build/_modules/ai/_models/interfaces/dynts-ai-provider-error.interface.d.ts +17 -0
  12. package/build/_modules/ai/_models/interfaces/dynts-ai-provider-error.interface.d.ts.map +1 -0
  13. package/build/_modules/ai/_models/interfaces/dynts-ai-provider-error.interface.js +3 -0
  14. package/build/_modules/ai/_models/interfaces/dynts-ai-provider-error.interface.js.map +1 -0
  15. package/build/_modules/ai/_modules/ai-mock/_collections/aim-default-collection.util.d.ts +23 -0
  16. package/build/_modules/ai/_modules/ai-mock/_collections/aim-default-collection.util.d.ts.map +1 -0
  17. package/build/_modules/ai/_modules/ai-mock/_collections/aim-default-collection.util.js +52 -0
  18. package/build/_modules/ai/_modules/ai-mock/_collections/aim-default-collection.util.js.map +1 -0
  19. package/build/_modules/ai/_modules/ai-mock/_collections/aim-fixture-match.util.d.ts +34 -0
  20. package/build/_modules/ai/_modules/ai-mock/_collections/aim-fixture-match.util.d.ts.map +1 -0
  21. package/build/_modules/ai/_modules/ai-mock/_collections/aim-fixture-match.util.js +56 -0
  22. package/build/_modules/ai/_modules/ai-mock/_collections/aim-fixture-match.util.js.map +1 -0
  23. package/build/_modules/ai/_modules/ai-mock/_collections/aim-fixture-serializer.util.d.ts +33 -0
  24. package/build/_modules/ai/_modules/ai-mock/_collections/aim-fixture-serializer.util.d.ts.map +1 -0
  25. package/build/_modules/ai/_modules/ai-mock/_collections/aim-fixture-serializer.util.js +89 -0
  26. package/build/_modules/ai/_modules/ai-mock/_collections/aim-fixture-serializer.util.js.map +1 -0
  27. package/build/_modules/ai/_modules/ai-mock/_enums/aim-modality.enum.d.ts +16 -0
  28. package/build/_modules/ai/_modules/ai-mock/_enums/aim-modality.enum.d.ts.map +1 -0
  29. package/build/_modules/ai/_modules/ai-mock/_enums/aim-modality.enum.js +20 -0
  30. package/build/_modules/ai/_modules/ai-mock/_enums/aim-modality.enum.js.map +1 -0
  31. package/build/_modules/ai/_modules/ai-mock/_models/interfaces/aim-call-input.interface.d.ts +15 -0
  32. package/build/_modules/ai/_modules/ai-mock/_models/interfaces/aim-call-input.interface.d.ts.map +1 -0
  33. package/build/_modules/ai/_modules/ai-mock/_models/interfaces/aim-call-input.interface.js +3 -0
  34. package/build/_modules/ai/_modules/ai-mock/_models/interfaces/aim-call-input.interface.js.map +1 -0
  35. package/build/_modules/ai/_modules/ai-mock/_models/interfaces/aim-error.interface.d.ts +11 -0
  36. package/build/_modules/ai/_modules/ai-mock/_models/interfaces/aim-error.interface.d.ts.map +1 -0
  37. package/build/_modules/ai/_modules/ai-mock/_models/interfaces/aim-error.interface.js +3 -0
  38. package/build/_modules/ai/_modules/ai-mock/_models/interfaces/aim-error.interface.js.map +1 -0
  39. package/build/_modules/ai/_modules/ai-mock/_models/interfaces/aim-fixture.interface.d.ts +30 -0
  40. package/build/_modules/ai/_modules/ai-mock/_models/interfaces/aim-fixture.interface.d.ts.map +1 -0
  41. package/build/_modules/ai/_modules/ai-mock/_models/interfaces/aim-fixture.interface.js +3 -0
  42. package/build/_modules/ai/_modules/ai-mock/_models/interfaces/aim-fixture.interface.js.map +1 -0
  43. package/build/_modules/ai/_modules/ai-mock/_models/interfaces/aim-request.interface.d.ts +19 -0
  44. package/build/_modules/ai/_modules/ai-mock/_models/interfaces/aim-request.interface.d.ts.map +1 -0
  45. package/build/_modules/ai/_modules/ai-mock/_models/interfaces/aim-request.interface.js +3 -0
  46. package/build/_modules/ai/_modules/ai-mock/_models/interfaces/aim-request.interface.js.map +1 -0
  47. package/build/_modules/ai/_modules/ai-mock/_models/interfaces/aim-service-collection.interface.d.ts +19 -0
  48. package/build/_modules/ai/_modules/ai-mock/_models/interfaces/aim-service-collection.interface.d.ts.map +1 -0
  49. package/build/_modules/ai/_modules/ai-mock/_models/interfaces/aim-service-collection.interface.js +3 -0
  50. package/build/_modules/ai/_modules/ai-mock/_models/interfaces/aim-service-collection.interface.js.map +1 -0
  51. package/build/_modules/ai/{_services → _modules/ai-mock/_services}/ai-embedding-mock.service.d.ts +2 -2
  52. package/build/_modules/ai/_modules/ai-mock/_services/ai-embedding-mock.service.d.ts.map +1 -0
  53. package/build/_modules/ai/{_services → _modules/ai-mock/_services}/ai-embedding-mock.service.js +1 -1
  54. package/build/_modules/ai/_modules/ai-mock/_services/ai-embedding-mock.service.js.map +1 -0
  55. package/build/_modules/ai/_modules/ai-mock/_services/aim-fixture-harness.service.d.ts +48 -0
  56. package/build/_modules/ai/_modules/ai-mock/_services/aim-fixture-harness.service.d.ts.map +1 -0
  57. package/build/_modules/ai/_modules/ai-mock/_services/aim-fixture-harness.service.js +104 -0
  58. package/build/_modules/ai/_modules/ai-mock/_services/aim-fixture-harness.service.js.map +1 -0
  59. package/build/_modules/ai/_modules/ai-mock/_services/aim-fixture-store.service.d.ts +35 -0
  60. package/build/_modules/ai/_modules/ai-mock/_services/aim-fixture-store.service.d.ts.map +1 -0
  61. package/build/_modules/ai/_modules/ai-mock/_services/aim-fixture-store.service.js +60 -0
  62. package/build/_modules/ai/_modules/ai-mock/_services/aim-fixture-store.service.js.map +1 -0
  63. package/build/_modules/ai/_modules/ai-mock/_services/aim-mock.service.d.ts +60 -0
  64. package/build/_modules/ai/_modules/ai-mock/_services/aim-mock.service.d.ts.map +1 -0
  65. package/build/_modules/ai/_modules/ai-mock/_services/aim-mock.service.js +121 -0
  66. package/build/_modules/ai/_modules/ai-mock/_services/aim-mock.service.js.map +1 -0
  67. package/build/_modules/ai/_modules/ai-mock/index.d.ts +14 -0
  68. package/build/_modules/ai/_modules/ai-mock/index.d.ts.map +1 -0
  69. package/build/_modules/ai/_modules/ai-mock/index.js +41 -0
  70. package/build/_modules/ai/_modules/ai-mock/index.js.map +1 -0
  71. package/build/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.d.ts +31 -3
  72. package/build/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.d.ts.map +1 -1
  73. package/build/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.js +71 -33
  74. package/build/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.js.map +1 -1
  75. package/build/_modules/ai/_services/ai-embedding-provider.registry.d.ts +1 -1
  76. package/build/_modules/ai/_services/ai-embedding-provider.registry.d.ts.map +1 -1
  77. package/build/_modules/ai/_services/ai-embedding-provider.registry.js +1 -1
  78. package/build/_modules/ai/_services/ai-embedding-provider.registry.js.map +1 -1
  79. package/build/_modules/ai/_services/ai-llm.service-base.d.ts +16 -0
  80. package/build/_modules/ai/_services/ai-llm.service-base.d.ts.map +1 -1
  81. package/build/_modules/ai/_services/ai-llm.service-base.js +65 -0
  82. package/build/_modules/ai/_services/ai-llm.service-base.js.map +1 -1
  83. package/build/_modules/ai/index.d.ts +4 -1
  84. package/build/_modules/ai/index.d.ts.map +1 -1
  85. package/build/_modules/ai/index.js +9 -1
  86. package/build/_modules/ai/index.js.map +1 -1
  87. package/build/_modules/server/server-status/server-status.control-service.d.ts +10 -0
  88. package/build/_modules/server/server-status/server-status.control-service.d.ts.map +1 -1
  89. package/build/_modules/server/server-status/server-status.control-service.js +21 -0
  90. package/build/_modules/server/server-status/server-status.control-service.js.map +1 -1
  91. package/package.json +11 -2
  92. package/src/_modules/ai/_collections/ai-model-config-validator.util.spec.ts +150 -0
  93. package/src/_modules/ai/_collections/ai-model-config-validator.util.ts +131 -0
  94. package/src/_modules/ai/_collections/ai-provider-error.util.ts +144 -0
  95. package/src/_modules/ai/_models/interfaces/dynts-ai-provider-error.interface.ts +16 -0
  96. package/src/_modules/ai/_modules/ai-mock/_collections/aim-default-collection.util.spec.ts +72 -0
  97. package/src/_modules/ai/_modules/ai-mock/_collections/aim-default-collection.util.ts +71 -0
  98. package/src/_modules/ai/_modules/ai-mock/_collections/aim-fixture-match.util.spec.ts +57 -0
  99. package/src/_modules/ai/_modules/ai-mock/_collections/aim-fixture-match.util.ts +60 -0
  100. package/src/_modules/ai/_modules/ai-mock/_collections/aim-fixture-serializer.util.spec.ts +56 -0
  101. package/src/_modules/ai/_modules/ai-mock/_collections/aim-fixture-serializer.util.ts +107 -0
  102. package/src/_modules/ai/_modules/ai-mock/_enums/aim-modality.enum.ts +15 -0
  103. package/src/_modules/ai/_modules/ai-mock/_models/interfaces/aim-call-input.interface.ts +14 -0
  104. package/src/_modules/ai/_modules/ai-mock/_models/interfaces/aim-error.interface.ts +11 -0
  105. package/src/_modules/ai/_modules/ai-mock/_models/interfaces/aim-fixture.interface.ts +30 -0
  106. package/src/_modules/ai/_modules/ai-mock/_models/interfaces/aim-request.interface.ts +19 -0
  107. package/src/_modules/ai/_modules/ai-mock/_models/interfaces/aim-service-collection.interface.ts +20 -0
  108. package/src/_modules/ai/{_services → _modules/ai-mock/_services}/ai-embedding-mock.service.spec.ts +1 -1
  109. package/src/_modules/ai/{_services → _modules/ai-mock/_services}/ai-embedding-mock.service.ts +2 -2
  110. package/src/_modules/ai/_modules/ai-mock/_services/aim-fixture-harness.service.spec.ts +134 -0
  111. package/src/_modules/ai/_modules/ai-mock/_services/aim-fixture-harness.service.ts +127 -0
  112. package/src/_modules/ai/_modules/ai-mock/_services/aim-fixture-pipeline.spec.ts +105 -0
  113. package/src/_modules/ai/_modules/ai-mock/_services/aim-fixture-store.service.spec.ts +50 -0
  114. package/src/_modules/ai/_modules/ai-mock/_services/aim-fixture-store.service.ts +65 -0
  115. package/src/_modules/ai/_modules/ai-mock/_services/aim-mock.service.spec.ts +112 -0
  116. package/src/_modules/ai/_modules/ai-mock/_services/aim-mock.service.ts +142 -0
  117. package/src/_modules/ai/_modules/ai-mock/index.ts +44 -0
  118. package/src/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.ts +90 -38
  119. package/src/_modules/ai/_services/ai-embedding-provider.registry.spec.ts +1 -1
  120. package/src/_modules/ai/_services/ai-embedding-provider.registry.ts +1 -1
  121. package/src/_modules/ai/_services/ai-llm.service-base.reconciler.spec.ts +133 -0
  122. package/src/_modules/ai/_services/ai-llm.service-base.ts +80 -0
  123. package/src/_modules/ai/index.ts +11 -1
  124. package/src/_modules/server/server-status/server-status.control-service.spec.ts +40 -0
  125. package/src/_modules/server/server-status/server-status.control-service.ts +40 -0
  126. package/build/_modules/ai/_services/ai-embedding-mock.service.d.ts.map +0 -1
  127. package/build/_modules/ai/_services/ai-embedding-mock.service.js.map +0 -1
@@ -12,7 +12,8 @@ import {
12
12
  DyFM_AI_LLM_Response,
13
13
  DyFM_AI_Tool,
14
14
  DyFM_AI_ToolCall,
15
- DyFM_AI_ModelInfo
15
+ DyFM_AI_ModelInfo,
16
+ DyFM_AI_ModelRegistry_Util
16
17
  } from '@futdevpro/fsm-dynamo/ai';
17
18
 
18
19
  import { DyNTS_global_settings } from '../../../../../_collections/global-settings.const';
@@ -514,33 +515,17 @@ export class DyNTS_OAI_LLM_ServiceBase extends DyNTS_AI_LLM_ServiceBase {
514
515
  try {
515
516
  const settings = set.settings ?? this.defaultSettings;
516
517
 
518
+ const useModel: string = String(settings?.useModel ?? this.defaultModel);
519
+
517
520
  const result: ChatCompletionCreateParamsBase = {
518
- model: settings?.useModel ?? this.defaultModel,
521
+ model: useModel,
519
522
  messages: set.conversation as ChatCompletionMessageParam[],
520
523
  };
521
524
 
522
- result.temperature = DyFM_notNull(settings?.temperature) ?
523
- settings.temperature :
524
- this.defaultSettings.temperature;
525
-
526
- /* result.max_completion_tokens = DyFM_notNull(settings?.maxTokens) ?
527
- settings.maxTokens :
528
- this.defaultSettings.maxTokens; */
529
- result.max_completion_tokens = DyFM_notNull(settings?.maxTokens) ?
530
- settings.maxTokens :
531
- this.defaultSettings.maxTokens;
532
-
533
- result.top_p = DyFM_notNull(settings?.topP) ?
534
- settings.topP :
535
- this.defaultSettings.topP;
536
-
537
- result.frequency_penalty = DyFM_notNull(settings?.frequencyPenalty) ?
538
- settings.frequencyPenalty :
539
- this.defaultSettings.frequencyPenalty;
540
-
541
- result.presence_penalty = DyFM_notNull(settings?.presencePenalty) ?
542
- settings.presencePenalty :
543
- this.defaultSettings.presencePenalty;
525
+ // FR-048 §3: a sampling-parameterek (+ max_completion_tokens) a per-model `settingsSchema` szerint
526
+ // kerulnek ra (drop/clamp). KORABBAN ez a NEM-tool ag FELTETEL NELKUL kuldte a sampling-parametereket,
527
+ // ezert reasoning modellen (GPT-5.x / o-series) 400-zal elhasalt volna — ezt itt zarjuk le.
528
+ this.applySamplingParams({ input: result, useModel: useModel, settings: set.settings });
544
529
 
545
530
  return result;
546
531
  } catch (error) {
@@ -603,19 +588,12 @@ export class DyNTS_OAI_LLM_ServiceBase extends DyNTS_AI_LLM_ServiceBase {
603
588
  const input: ChatCompletionCreateParamsBase = {
604
589
  model: useModel,
605
590
  messages: messages,
606
- max_completion_tokens: DyFM_notNull(settings?.maxTokens) ? settings.maxTokens : this.defaultSettings.maxTokens,
607
591
  };
608
592
 
609
- // Reasoning modellek (GPT-5.x / o-series) elutasitjak a sampling-parametereket
610
- // (temperature != 1, top_p, frequency/presence_penalty) -> 400. Ezeket NEM kuldjuk
611
- // reasoning modellnel. (Ez a FR-048 per-model settings elv lokalis, OpenAI-specifikus
612
- // alkalmazasa amig a general reconciler el nem keszul.)
613
- if (!this.isReasoningModel(String(useModel))) {
614
- input.temperature = DyFM_notNull(settings?.temperature) ? settings.temperature : this.defaultSettings.temperature;
615
- input.top_p = DyFM_notNull(settings?.topP) ? settings.topP : this.defaultSettings.topP;
616
- input.frequency_penalty = DyFM_notNull(settings?.frequencyPenalty) ? settings.frequencyPenalty : this.defaultSettings.frequencyPenalty;
617
- input.presence_penalty = DyFM_notNull(settings?.presencePenalty) ? settings.presencePenalty : this.defaultSettings.presencePenalty;
618
- }
593
+ // FR-048 §3: a sampling-parameterek + `max_completion_tokens` a per-model `settingsSchema` szerint
594
+ // kerulnek ra. A korabbi lokalis `isReasoningModel`-drop atmeneti fallback-kent bent maradt a
595
+ // helper-ben (l. `applySamplingParams`), amig a schema ki nem kerul a fsm-bol igy nincs regresszio.
596
+ this.applySamplingParams({ input: input, useModel: String(useModel), settings: set.settings });
619
597
 
620
598
  // Ures tools-tomb -> 400 ("tools must have minimum length 1"). Csak akkor kuldjuk, ha van tool.
621
599
  if (set.tools.length) {
@@ -728,14 +706,88 @@ export class DyNTS_OAI_LLM_ServiceBase extends DyNTS_AI_LLM_ServiceBase {
728
706
  }
729
707
 
730
708
  /**
731
- * Reasoning modell-e (GPT-5.x sor vagy o-series, pl. o1/o3/o4)? Ezek elutasitjak a
732
- * sampling-parametereket (temperature != 1, top_p, frequency/presence_penalty). A `gpt-4o`
733
- * NEM reasoning (a 'gpt-5' prefix nem illeszti, 'o'-prefix sem).
709
+ * ⚠️ **TUL TAG HEURISZTIKA csak FALLBACK, ne ez legyen az igazsag forrasa.**
710
+ *
711
+ * Eredetileg (FR-047) azt felteteleztuk, hogy MINDEN `gpt-5.x` + o-series modell elutasitja a
712
+ * sampling-parametereket. **Live capture 2026-07-21 ezt MEGCAFOLTA:**
713
+ * - elutasit: `gpt-5.5`, `o3-mini`, `o4-mini`
714
+ * - **ELFOGADJA**: `gpt-5.4-mini`, `gpt-5.4-nano` (HTTP 200, `reasoning_tokens: 0`)
715
+ *
716
+ * Vagyis erre a ket modellre ez a regex **NEMAN kidobna ervenyes parametereket** — halkan rontva a
717
+ * kimenetet. Ezert az `applySamplingParams` a **registry `settingsSchema`-t reszesiti elonyben**, es ezt
718
+ * a heurisztikat CSAK akkor hasznalja, ha az adott modellhez nincs schema (regi fsm-verzio / ismeretlen
719
+ * modell). Amint a populalt schema mindenhol elerheto, ez a metodus elhagyhato.
720
+ *
721
+ * Reszletek: `documentations/plans/ai-mocking-system/CAPTURE-FINDINGS.md` §1.
734
722
  */
735
723
  protected isReasoningModel(modelId: string): boolean {
736
724
  return /^gpt-5/.test(modelId) || /^o[0-9]/.test(modelId);
737
725
  }
738
726
 
727
+ /**
728
+ * FR-048 §3 — feloldja az agnosztikus sampling-settingseket (hivas-settings > default), atengedi a
729
+ * per-model reconciler-en (`settingsSchema` szerinti drop/clamp), majd RAKEPZI a natív OpenAI mezokre.
730
+ * Csak azok a natív mezok kerulnek az input-ra, amik a reconcile utan MEGMARADTAK.
731
+ *
732
+ * Ezzel a "melyik modell mit fogad el" tudas a registry `settingsSchema`-jaban (SSoT) el, nem
733
+ * provider-translatoronkent duplikalva.
734
+ *
735
+ * **Atmeneti fallback (szandekos):** ha a registry-bejegyzesnek MEG NINCS `settingsSchema`-ja (regebbi
736
+ * fsm-verzio, vagy registry-ben nem szereplo modell), a korabbi lokalis `isReasoningModel`-drop marad
737
+ * ervenyben — igy a FR-047 `514153f` fix NEM regresszal, amig a schema ki nem kerul a fsm-bol. Amint a
738
+ * schema mindenhol elerheto, ez a fallback (es az `isReasoningModel`) elhagyhato.
739
+ */
740
+ protected applySamplingParams(
741
+ set: {
742
+ input: ChatCompletionCreateParamsBase,
743
+ useModel: string,
744
+ settings?: DyFM_OAI_CallSettings,
745
+ }
746
+ ): void {
747
+ const source: DyFM_OAI_CallSettings = set.settings ?? this.defaultSettings;
748
+
749
+ const resolved: DyFM_OAI_CallSettings = {
750
+ ...source,
751
+ useModel: set.useModel,
752
+ temperature: DyFM_notNull(source?.temperature) ? source.temperature : this.defaultSettings.temperature,
753
+ maxTokens: DyFM_notNull(source?.maxTokens) ? source.maxTokens : this.defaultSettings.maxTokens,
754
+ topP: DyFM_notNull(source?.topP) ? source.topP : this.defaultSettings.topP,
755
+ frequencyPenalty: DyFM_notNull(source?.frequencyPenalty) ?
756
+ source.frequencyPenalty : this.defaultSettings.frequencyPenalty,
757
+ presencePenalty: DyFM_notNull(source?.presencePenalty) ?
758
+ source.presencePenalty : this.defaultSettings.presencePenalty,
759
+ };
760
+
761
+ const final: DyFM_OAI_CallSettings = this.reconcileCallSettings(set.useModel, resolved);
762
+
763
+ const modelInfo: DyFM_AI_ModelInfo = DyFM_AI_ModelRegistry_Util.findModelInfo(
764
+ this.getModelRegistry(),
765
+ set.useModel
766
+ );
767
+ const dropSampling: boolean = !modelInfo?.settingsSchema && this.isReasoningModel(set.useModel);
768
+
769
+ if (DyFM_notNull(final?.maxTokens)) {
770
+ set.input.max_completion_tokens = final.maxTokens;
771
+ }
772
+
773
+ if (dropSampling) {
774
+ return;
775
+ }
776
+
777
+ if (DyFM_notNull(final?.temperature)) {
778
+ set.input.temperature = final.temperature;
779
+ }
780
+ if (DyFM_notNull(final?.topP)) {
781
+ set.input.top_p = final.topP;
782
+ }
783
+ if (DyFM_notNull(final?.frequencyPenalty)) {
784
+ set.input.frequency_penalty = final.frequencyPenalty;
785
+ }
786
+ if (DyFM_notNull(final?.presencePenalty)) {
787
+ set.input.presence_penalty = final.presencePenalty;
788
+ }
789
+ }
790
+
739
791
  //#endregion
740
792
 
741
793
  // async askJSONListQuestion(
@@ -1,6 +1,6 @@
1
1
  import { DyNTS_AI_EmbeddingProvider_Registry } from './ai-embedding-provider.registry';
2
2
  import { DyNTS_LMStudio_Embedding_ControlService } from './lmstudio-embedding.control-service';
3
- import { DyNTS_AI_Embedding_MockService } from './ai-embedding-mock.service';
3
+ import { DyNTS_AI_Embedding_MockService } from '../_modules/ai-mock/_services/ai-embedding-mock.service';
4
4
  import { DyNTS_OAI_Embedding_ControlService } from '../_modules/open-ai/_services/oai-embedding.control-service';
5
5
 
6
6
  describe('| DyNTS_AI_EmbeddingProvider_Registry', () => {
@@ -3,7 +3,7 @@ import { DyFM_OAI_Settings } from '@futdevpro/fsm-dynamo/ai/open-ai';
3
3
  import { DyNTS_AI_Embedding_ServiceBase } from './ai-embedding.service-base';
4
4
  import { DyNTS_OAI_Embedding_ControlService } from '../_modules/open-ai/_services/oai-embedding.control-service';
5
5
  import { DyNTS_LMStudio_Embedding_ControlService, DyNTS_LMStudio_Embedding_Settings } from './lmstudio-embedding.control-service';
6
- import { DyNTS_AI_Embedding_MockService, DyNTS_AI_Embedding_MockSettings } from './ai-embedding-mock.service';
6
+ import { DyNTS_AI_Embedding_MockService, DyNTS_AI_Embedding_MockSettings } from '../_modules/ai-mock/_services/ai-embedding-mock.service';
7
7
  import { DyNTS_AI_CostEventCallback } from '../_models/interfaces/dynts-ai-cost-event-callback.interface';
8
8
 
9
9
  /**
@@ -0,0 +1,133 @@
1
+ import {
2
+ DyFM_AI_CallSettings,
3
+ DyFM_AI_ModelInfo,
4
+ DyFM_AI_ModelType,
5
+ DyFM_AI_Provider,
6
+ } from '@futdevpro/fsm-dynamo/ai';
7
+
8
+ import { DyNTS_AI_LLM_ServiceBase } from './ai-llm.service-base';
9
+
10
+ /** Minden-false capability-blokk a teszt-registry bejegyzesekhez. */
11
+ const NO_CAPS: any = {
12
+ functionCalling: false,
13
+ vision: false,
14
+ streaming: false,
15
+ jsonMode: false,
16
+ audioInput: false,
17
+ audioOutput: false,
18
+ imageGeneration: false,
19
+ embeddings: false,
20
+ adultContent: false,
21
+ };
22
+
23
+ /** Teszt-registry: egy schema-val rendelkezo es egy schema-mentes modell. */
24
+ const TEST_REGISTRY: DyFM_AI_ModelInfo[] = [
25
+ {
26
+ id: 'schema-model',
27
+ provider: DyFM_AI_Provider.OpenAI,
28
+ modelType: DyFM_AI_ModelType.Chat,
29
+ capabilities: NO_CAPS,
30
+ settingsSchema: {
31
+ supported: ['maxTokens'],
32
+ unsupported: ['temperature', 'topP'],
33
+ extraParams: ['reasoningEffort'],
34
+ constraints: {
35
+ maxTokens: { min: 10, max: 100 },
36
+ },
37
+ },
38
+ },
39
+ {
40
+ id: 'plain-model',
41
+ provider: DyFM_AI_Provider.OpenAI,
42
+ modelType: DyFM_AI_ModelType.Chat,
43
+ capabilities: NO_CAPS,
44
+ },
45
+ ];
46
+
47
+ class ReconcilerTestService extends DyNTS_AI_LLM_ServiceBase<DyFM_AI_CallSettings> {
48
+ readonly aiProvider: any = {} as any;
49
+ readonly capabilities: any = {} as any;
50
+ setup = (config: any): void => {};
51
+ testConnection = async (issuer: string): Promise<boolean> => true;
52
+
53
+ readonly defaultSettings: DyFM_AI_CallSettings = {
54
+ systemPrompt: 'Test',
55
+ useModel: 'schema-model',
56
+ debugLog: false,
57
+ };
58
+
59
+ readonly predefinedRequests = { yesNo: { upperCaseYes: 'YES' } };
60
+
61
+ requestSimpleMessage = async (set: any): Promise<string> => { return ''; };
62
+ requestYesNo = async (set: any): Promise<boolean> => { return false; };
63
+ requestPercentage = async (set: any): Promise<number> => { return 0; };
64
+ requestSelect = async <T>(set: any): Promise<T | { unparsableResult: string }> => { return null as any; };
65
+ requestMultiselect = async <T>(set: any): Promise<T[] | { unparsableResult: string }> => { return []; };
66
+ requestJSON = async <T>(set: any): Promise<T | { unparsableResult: string }> => { return null as any; };
67
+ requestJSONQuestionWithKeysDescription = async <T>(set: any): Promise<T | { unparsableResult: string }> => { return null as any; };
68
+ requestJSONWithExactKeys = async <T>(set: any): Promise<T | { unparsableResult: string }> => { return null as any; };
69
+ requestList = async <T>(set: any): Promise<T[] | { unparsableResult: string }> => { return []; };
70
+
71
+ protected override getModelRegistry(): DyFM_AI_ModelInfo[] {
72
+ return TEST_REGISTRY;
73
+ }
74
+
75
+ static getInstance(): ReconcilerTestService {
76
+ return ReconcilerTestService.getSingletonInstance();
77
+ }
78
+ }
79
+
80
+ describe('| DyNTS_AI_LLM_ServiceBase — FR-048 reconcileCallSettings', () => {
81
+ let service: ReconcilerTestService;
82
+
83
+ beforeEach(() => {
84
+ service = ReconcilerTestService.getInstance();
85
+ });
86
+
87
+ it('| dropolja az `unsupported` kulcsokat, a tobbit meghagyja', () => {
88
+ const result: DyFM_AI_CallSettings = (service as any).reconcileCallSettings('schema-model', {
89
+ temperature: 0.7,
90
+ topP: 0.9,
91
+ maxTokens: 50,
92
+ });
93
+
94
+ expect(result.temperature).toBeUndefined();
95
+ expect(result.topP).toBeUndefined();
96
+ expect(result.maxTokens).toBe(50);
97
+ });
98
+
99
+ it('| NEM mutalja az eredeti settings-objektumot', () => {
100
+ const original: DyFM_AI_CallSettings = { temperature: 0.7, maxTokens: 50 };
101
+
102
+ (service as any).reconcileCallSettings('schema-model', original);
103
+
104
+ expect(original.temperature).toBe(0.7);
105
+ });
106
+
107
+ it('| clamp-eli a `constraints` min/max szerint', () => {
108
+ const tooHigh: DyFM_AI_CallSettings = (service as any).reconcileCallSettings('schema-model', { maxTokens: 500 });
109
+ const tooLow: DyFM_AI_CallSettings = (service as any).reconcileCallSettings('schema-model', { maxTokens: 1 });
110
+
111
+ expect(tooHigh.maxTokens).toBe(100);
112
+ expect(tooLow.maxTokens).toBe(10);
113
+ });
114
+
115
+ it('| schema-mentes modell → permisszi­v passthrough (non-breaking)', () => {
116
+ const input: DyFM_AI_CallSettings = { temperature: 0.7, topP: 0.9 };
117
+ const result: DyFM_AI_CallSettings = (service as any).reconcileCallSettings('plain-model', input);
118
+
119
+ expect(result).toBe(input);
120
+ expect(result.temperature).toBe(0.7);
121
+ });
122
+
123
+ it('| ismeretlen modell → permisszi­v passthrough (honesty, nem dob)', () => {
124
+ const input: DyFM_AI_CallSettings = { temperature: 0.7 };
125
+ const result: DyFM_AI_CallSettings = (service as any).reconcileCallSettings('nincs-ilyen-modell', input);
126
+
127
+ expect(result).toBe(input);
128
+ });
129
+
130
+ it('| undefined settings → valtozatlanul visszaadva', () => {
131
+ expect((service as any).reconcileCallSettings('schema-model', undefined)).toBeUndefined();
132
+ });
133
+ });
@@ -10,6 +10,8 @@ import {
10
10
  DyFM_AI_ToolHandlers,
11
11
  DyFM_AI_ModelInfo,
12
12
  DyFM_AI_ModelRegistry_Util,
13
+ DyFM_AI_ModelSettingsSchema,
14
+ DyFM_AI_SettingConstraint,
13
15
  } from '@futdevpro/fsm-dynamo/ai';
14
16
  import { DyFM_Error, DyFM_Error_Settings, DyFM_getLocalStackLocation, DyFM_Log, DyFM_Object } from '@futdevpro/fsm-dynamo';
15
17
  import {
@@ -82,6 +84,84 @@ export abstract class DyNTS_AI_LLM_ServiceBase<
82
84
  }
83
85
  }
84
86
 
87
+ //////////////////////////////////////////////////////////////////////////////////////////
88
+ // PER-MODEL SETTINGS RECONCILER — FR-048 //
89
+ //////////////////////////////////////////////////////////////////////////////////////////
90
+
91
+ /**
92
+ * FR-048 reconciler — a resolved modell `settingsSchema`-ja szerint egyezteti a call-settings-et a
93
+ * tenyleges provider-hivas ELOTT: DROPolja az `unsupported` kulcsokat (debug-log, SOHA nem csendben),
94
+ * CLAMP-eli a `constraints` (min/max) szerint. Ismeretlen modell / schema-mentes registry-bejegyzes →
95
+ * permisszi­v passthrough + log (best-effort, honesty).
96
+ *
97
+ * Ezzel altalanosul a FR-047 Phase-4 lokalis param-drop (Anthropic Opus 4.7+ temperature/topP/topK) es a
98
+ * FR-047 `isReasoningModel` sampling-drop: a tudas mostantol a registry `settingsSchema`-jaban (SSoT) el,
99
+ * nem provider-translator-onkent duplikalva.
100
+ *
101
+ * NON-BREAKING: ha a registry ures vagy a modellnek nincs schemaja, a bemenet valtozatlanul ter vissza —
102
+ * igy a meglevo providerek viselkedese nem valtozik, amig a schema nincs feltoltve.
103
+ * @param modelId - a feloldott modell azonositoja
104
+ * @param settings - a hivas-settings (opcionalis)
105
+ */
106
+ protected reconcileCallSettings(modelId: string, settings?: T_AISettings): T_AISettings {
107
+ if (!settings) {
108
+ return settings;
109
+ }
110
+
111
+ const modelInfo: DyFM_AI_ModelInfo = DyFM_AI_ModelRegistry_Util.findModelInfo(this.getModelRegistry(), modelId);
112
+ const schema: DyFM_AI_ModelSettingsSchema = modelInfo?.settingsSchema;
113
+
114
+ if (!schema) {
115
+ if (this.debugLog) {
116
+ DyFM_Log.info(`[FR-048] no settingsSchema for '${modelId}' — passthrough (best-effort)`);
117
+ }
118
+
119
+ return settings;
120
+ }
121
+
122
+ const reconciled: T_AISettings = { ...settings };
123
+ // A generikus `T_AISettings` csak OLVASASRA indexelheto (TS2862), ezert a mutaciot egy nem-generikus
124
+ // aliason vegezzuk — UGYANARRA az objektumra mutat, igy cast nelkul is tipus-helyes marad.
125
+ const mutable: Record<string, unknown> = reconciled;
126
+
127
+ for (const key of schema.unsupported ?? []) {
128
+ if (mutable[key] !== undefined) {
129
+ if (this.debugLog) {
130
+ DyFM_Log.info(`[FR-048] drop unsupported '${key}' for model '${modelId}'`);
131
+ }
132
+ delete mutable[key];
133
+ }
134
+ }
135
+
136
+ const constraints: Record<string, DyFM_AI_SettingConstraint> = schema.constraints ?? {};
137
+
138
+ for (const key of Object.keys(constraints)) {
139
+ const constraint: DyFM_AI_SettingConstraint = constraints[key];
140
+ const value: unknown = mutable[key];
141
+
142
+ if (typeof value !== 'number') {
143
+ continue;
144
+ }
145
+
146
+ let next: number = value;
147
+
148
+ if (typeof constraint.min === 'number' && next < constraint.min) {
149
+ next = constraint.min;
150
+ }
151
+ if (typeof constraint.max === 'number' && next > constraint.max) {
152
+ next = constraint.max;
153
+ }
154
+ if (next !== value) {
155
+ if (this.debugLog) {
156
+ DyFM_Log.info(`[FR-048] clamp '${key}' ${value} → ${next} for model '${modelId}'`);
157
+ }
158
+ mutable[key] = next;
159
+ }
160
+ }
161
+
162
+ return reconciled;
163
+ }
164
+
85
165
  /**
86
166
  * GPT valasz Function Calling Agent Tool-okkal — provider-agnosztikus agent-loop.
87
167
  * @description A `tools` definiciok + `toolHandlers` alapjan tool-loop-ot futtat: hivja a
@@ -10,6 +10,12 @@ export * from './_models/ai-test-generation-result.interface';
10
10
  export * from './_models/interfaces/dynts-ai-cost-event.interface';
11
11
  export * from './_models/interfaces/dynts-ai-cost-event-callback.interface';
12
12
 
13
+ // FR-048 per-model settings — provider-faithful hiba-alak + validate-mode (production pre-validation).
14
+ // A reconciler (`DyNTS_AI_LLM_ServiceBase.reconcileCallSettings`) testvére: UGYANAZ a `settingsSchema` forrás.
15
+ export * from './_models/interfaces/dynts-ai-provider-error.interface';
16
+ export * from './_collections/ai-provider-error.util';
17
+ export * from './_collections/ai-model-config-validator.util';
18
+
13
19
  // Abstract Services
14
20
  export * from './_services/ai-provider.service-base';
15
21
  export * from './_services/ai-llm.service-base';
@@ -19,5 +25,9 @@ export * from './_services/ai-user-key.service-base';
19
25
 
20
26
  // Concrete Embedding Services + provider-dispatch (BFR-AM-002 / 007 / 008)
21
27
  export * from './_services/lmstudio-embedding.control-service';
22
- export * from './_services/ai-embedding-mock.service';
23
28
  export * from './_services/ai-embedding-provider.registry';
29
+
30
+ // BACKWARD-COMPAT (MP-5 SP-5.1): a determinisztikus embedding-mock FIZIKAILAG az `ai-mock` submodulba
31
+ // koltozott (`./_modules/ai-mock/_services/`), de a `@futdevpro/nts-dynamo/ai` import-utvonal VALTOZATLAN —
32
+ // a meglevo consumer (FAM `EMBEDDING_PROVIDER=mock`) nem torik. Uj kod inkabb `@futdevpro/nts-dynamo/ai/ai-mock`.
33
+ export * from './_modules/ai-mock/_services/ai-embedding-mock.service';
@@ -529,6 +529,46 @@ describe('| DyNTS_ServerStatus_ControlService', () => {
529
529
  expect(result.dbPingOk).toBe(false);
530
530
  });
531
531
 
532
+ // DIAGNOSZTIKA (2026-07-22) — a "readiness 503, de az app kiszolgál" flotta-lelet miatt.
533
+ // A lényeg: a diag-mezők akkor is kitöltődnek, amikor a probe NEM-ready-t jelent — épp AKKOR
534
+ // kellenek, hogy a következő mérés eldöntse, a probe mér-e rosszul vagy a DB halott-e.
535
+ it('| should populate diagnostics fields EVEN when not ready (this is when they matter)', async () => {
536
+ const fakeConnection = {
537
+ readyState: 0,
538
+ db: undefined,
539
+ host: 'mongodb',
540
+ name: 'adventor',
541
+ models: { user: {}, preset: {} },
542
+ };
543
+ spyOn(service as any, 'getMongooseConnection').and.returnValue(fakeConnection);
544
+
545
+ const result = await service.checkDbReadiness();
546
+
547
+ expect(result.ready).toBe(false);
548
+ expect(result.dbHost).toBe('mongodb');
549
+ expect(result.dbName).toBe('adventor');
550
+ // 0 model a default connectionön = a data-layer NEM ezt a handle-t használja (a fő gyanú)
551
+ expect(result.dbModelCount).toBe(2);
552
+ expect(result.dbConnectionCount).toEqual(jasmine.any(Number));
553
+ expect(result.dbOtherReadyStates).toEqual(jasmine.any(Array));
554
+ });
555
+
556
+ it('| should stay ready even if diagnostics collection throws (probe must never fail)', async () => {
557
+ // a diag-gyűjtés SAJÁT try-ban van → a getter-robbanás nem ronthatja el a readiness-választ
558
+ const fakeConnection = {
559
+ readyState: 1,
560
+ db: { admin: () => ({ ping: async () => ({ ok: 1 }) }) },
561
+ get host(): string { throw new Error('diag boom'); },
562
+ };
563
+ spyOn(service as any, 'getMongooseConnection').and.returnValue(fakeConnection);
564
+
565
+ const result = await service.checkDbReadiness();
566
+
567
+ expect(result.ready).toBe(true);
568
+ expect(result.dbReadyState).toBe(1);
569
+ expect(result.dbPingOk).toBe(true);
570
+ });
571
+
532
572
  it('| should NOT be ready when connected but ping fails (DB unresponsive)', async () => {
533
573
  const fakeConnection = {
534
574
  readyState: 1,
@@ -44,6 +44,24 @@ export interface DyNTS_DbReadiness {
44
44
  serverVersion: string;
45
45
  /** AZ APP saját verziója (`DyNTS_global_settings.systemVersion`) — deploy-verifikációhoz. */
46
46
  appVersion?: string;
47
+
48
+ // --- DIAGNOSZTIKA (2026-07-22) — a flotta-szintű "readiness 503, de az app kiszolgál" lelet miatt ---
49
+ // Élesben mérve: az adventor / token-service / master-prompter MIND `dbReadyState:0`-t adott, miközben
50
+ // kiszolgáltak, a Mongo bizonyítottan élt, és a reconnect-guard (amely UGYANEZT a readyState-et olvassa)
51
+ // egyetlen warningot sem logolt. Öt hipotézist zártunk ki méréssel (több replika · két mongoose-példány ·
52
+ // esModule default-export · leszármazott-override · halott DB) — a gyökér-ok NEM dőlt el. Ezek a mezők
53
+ // teszik a KÖVETKEZŐ mérést döntővé, találgatás nélkül. Mind ADDITÍV + opcionális → nem törnek meg semmit.
54
+
55
+ /** Hány mongoose-connection létezik ebben a process-ben (`mongoose.connections.length`). >1 → nem a default-on megy a data-layer. */
56
+ dbConnectionCount?: number;
57
+ /** A default connection cél-hosztja (`connection.host`) — üres/undefined, ha a connect sosem futott le rajta. */
58
+ dbHost?: string;
59
+ /** A default connection adatbázis-neve (`connection.name`). */
60
+ dbName?: string;
61
+ /** Hány model van a default connectionre regisztrálva. 0 → a data-layer NEM ezt a connectiont használja. */
62
+ dbModelCount?: number;
63
+ /** A NEM-default connectionök readyState-jei — ha itt van 1-es, a probe rossz handle-t mér. */
64
+ dbOtherReadyStates?: number[];
47
65
  }
48
66
 
49
67
  export abstract class DyNTS_ServerStatus_ControlService<
@@ -232,6 +250,27 @@ export abstract class DyNTS_ServerStatus_ControlService<
232
250
  dbPingOk = false;
233
251
  }
234
252
 
253
+ // DIAGNOSZTIKA (2026-07-22): sosem dobhat — a probe-nak determinisztikusan kell válaszolnia,
254
+ // ezért a diag-gyűjtés SAJÁT try-ban van (ha bármelyik mező kiolvasása elszáll, a readiness
255
+ // válasz attól még ép marad).
256
+ let diagnostics: Partial<DyNTS_DbReadiness> = {};
257
+ try {
258
+ const conn: mongoose.Connection = this.getMongooseConnection();
259
+ const all: mongoose.Connection[] = mongoose.connections ?? [];
260
+
261
+ diagnostics = {
262
+ dbConnectionCount: all.length,
263
+ dbHost: conn?.host,
264
+ dbName: conn?.name,
265
+ dbModelCount: Object.keys(conn?.models ?? {}).length,
266
+ // a default connectiont kihagyjuk — csak a "van-e MÁSIK, élő handle" kérdés érdekes
267
+ dbOtherReadyStates: all.filter((c: mongoose.Connection): boolean => c !== conn)
268
+ .map((c: mongoose.Connection): number => c?.readyState ?? -1),
269
+ };
270
+ } catch (error) {
271
+ DyFM_Log.warn('(checkDbReadiness) diagnostics collection failed (non-fatal)', error);
272
+ }
273
+
235
274
  return {
236
275
  ready: dbReadyState === 1 && dbPingOk,
237
276
  dbReadyState: dbReadyState,
@@ -239,6 +278,7 @@ export abstract class DyNTS_ServerStatus_ControlService<
239
278
  uptime: +new Date() - +this.up,
240
279
  serverVersion: this.serverVersion,
241
280
  appVersion: this.appVersion,
281
+ ...diagnostics,
242
282
  };
243
283
  }
244
284
 
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai-embedding-mock.service.d.ts","sourceRoot":"","sources":["../../../../src/_modules/ai/_services/ai-embedding-mock.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,EAAE,gBAAgB,EAAE,4BAA4B,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1G,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAE9E,OAAO,EAAE,0BAA0B,EAAE,MAAM,8DAA8D,CAAC;AAC1G,OAAO,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AAE7E,2GAA2G;AAC3G,eAAO,MAAM,4BAA4B,EAAE,MAAW,CAAC;AAEvD;;;GAGG;AACH,MAAM,WAAW,+BAA+B;IAC9C,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kGAAkG;IAClG,WAAW,CAAC,EAAE,0BAA0B,CAAC;CAC1C;AAED;;;;;;;;;;GAUG;AACH,qBAAa,8BAA+B,SAAQ,8BAA8B;IAEhF,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAA4B;IAEjE,8FAA8F;IAC9F,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAU;IAEjD,4DAA4D;IAC5D,QAAQ,CAAC,YAAY,EAAE,4BAA4B,CAWjD;IAEF,oCAAoC;IACpC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;IAEvB,gDAAgD;gBACpC,GAAG,CAAC,EAAE,+BAA+B;IASjD,wGAAwG;IACxG,KAAK,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAQnC;;;OAGG;IACG,eAAe,CACnB,GAAG,EAAE;QACH,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC;KAChB,GACA,OAAO,CAAC,MAAM,EAAE,GAAG,uBAAuB,CAAC;IAc9C;;;OAGG;IACG,gBAAgB,CACpB,GAAG,EAAE;QACH,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC;KAChB,GACA,OAAO,CAAC,MAAM,EAAE,EAAE,GAAG,uBAAuB,CAAC;IAehD,4EAA4E;IAC5E,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,sBAAsB;IAOvD,qDAAqD;IAC/C,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQvD;;;;OAIG;IACH,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAerD,wFAAwF;IACxF,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAejD,gFAAgF;IAChF,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,uBAAuB;IAclG,wFAAwF;IACxF,SAAS,CAAC,iBAAiB,CACzB,QAAQ,EAAE,kBAAkB,GAAG,iBAAiB,EAChD,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EAAE,EACf,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,IAAI;IAkBP,mDAAmD;IACnD,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;CASlD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai-embedding-mock.service.js","sourceRoot":"","sources":["../../../../src/_modules/ai/_services/ai-embedding-mock.service.ts"],"names":[],"mappings":"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"}