@carlonicora/nestjs-neo4jsonapi 2.14.11 → 2.15.0

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 (121) hide show
  1. package/dist/agents/contextualiser/contexts/contextualiser.context.d.ts +41 -0
  2. package/dist/agents/contextualiser/contexts/contextualiser.context.d.ts.map +1 -1
  3. package/dist/agents/contextualiser/contexts/contextualiser.context.js +17 -0
  4. package/dist/agents/contextualiser/contexts/contextualiser.context.js.map +1 -1
  5. package/dist/agents/contextualiser/contexts/notebook.context.d.ts +22 -0
  6. package/dist/agents/contextualiser/contexts/notebook.context.d.ts.map +1 -1
  7. package/dist/agents/contextualiser/contexts/notebook.context.js +14 -0
  8. package/dist/agents/contextualiser/contexts/notebook.context.js.map +1 -1
  9. package/dist/agents/contextualiser/factories/contextualiser.context.factory.d.ts.map +1 -1
  10. package/dist/agents/contextualiser/factories/contextualiser.context.factory.js +2 -0
  11. package/dist/agents/contextualiser/factories/contextualiser.context.factory.js.map +1 -1
  12. package/dist/agents/contextualiser/nodes/atomicfacts.node.service.d.ts.map +1 -1
  13. package/dist/agents/contextualiser/nodes/atomicfacts.node.service.js +17 -5
  14. package/dist/agents/contextualiser/nodes/atomicfacts.node.service.js.map +1 -1
  15. package/dist/agents/contextualiser/nodes/chunk.node.service.d.ts +1 -14
  16. package/dist/agents/contextualiser/nodes/chunk.node.service.d.ts.map +1 -1
  17. package/dist/agents/contextualiser/nodes/chunk.node.service.js +56 -206
  18. package/dist/agents/contextualiser/nodes/chunk.node.service.js.map +1 -1
  19. package/dist/agents/contextualiser/nodes/chunk.vector.node.service.d.ts +3 -12
  20. package/dist/agents/contextualiser/nodes/chunk.vector.node.service.d.ts.map +1 -1
  21. package/dist/agents/contextualiser/nodes/chunk.vector.node.service.js +44 -133
  22. package/dist/agents/contextualiser/nodes/chunk.vector.node.service.js.map +1 -1
  23. package/dist/agents/contextualiser/nodes/keyconcepts.node.service.d.ts +1 -2
  24. package/dist/agents/contextualiser/nodes/keyconcepts.node.service.d.ts.map +1 -1
  25. package/dist/agents/contextualiser/nodes/keyconcepts.node.service.js +60 -60
  26. package/dist/agents/contextualiser/nodes/keyconcepts.node.service.js.map +1 -1
  27. package/dist/agents/contextualiser/nodes/question.refiner.node.service.d.ts.map +1 -1
  28. package/dist/agents/contextualiser/nodes/question.refiner.node.service.js +7 -2
  29. package/dist/agents/contextualiser/nodes/question.refiner.node.service.js.map +1 -1
  30. package/dist/agents/contextualiser/nodes/rational.node.service.js +2 -1
  31. package/dist/agents/contextualiser/nodes/rational.node.service.js.map +1 -1
  32. package/dist/agents/contextualiser/services/contextualiser.service.d.ts.map +1 -1
  33. package/dist/agents/contextualiser/services/contextualiser.service.js +30 -22
  34. package/dist/agents/contextualiser/services/contextualiser.service.js.map +1 -1
  35. package/dist/agents/prompts/index.d.ts +0 -2
  36. package/dist/agents/prompts/index.d.ts.map +1 -1
  37. package/dist/agents/prompts/index.js +7 -5
  38. package/dist/agents/prompts/index.js.map +1 -1
  39. package/dist/agents/responder/contexts/responder.context.d.ts +96 -0
  40. package/dist/agents/responder/contexts/responder.context.d.ts.map +1 -1
  41. package/dist/agents/responder/interfaces/unified.trace.interface.d.ts +9 -0
  42. package/dist/agents/responder/interfaces/unified.trace.interface.d.ts.map +1 -1
  43. package/dist/agents/responder/nodes/__tests__/helpers/answer-node.harness.d.ts +38 -0
  44. package/dist/agents/responder/nodes/__tests__/helpers/answer-node.harness.d.ts.map +1 -0
  45. package/dist/agents/responder/nodes/__tests__/helpers/answer-node.harness.js +36 -0
  46. package/dist/agents/responder/nodes/__tests__/helpers/answer-node.harness.js.map +1 -0
  47. package/dist/agents/responder/nodes/graph.node.service.d.ts.map +1 -1
  48. package/dist/agents/responder/nodes/graph.node.service.js +18 -3
  49. package/dist/agents/responder/nodes/graph.node.service.js.map +1 -1
  50. package/dist/agents/responder/nodes/planner.node.service.d.ts.map +1 -1
  51. package/dist/agents/responder/nodes/planner.node.service.js +9 -0
  52. package/dist/agents/responder/nodes/planner.node.service.js.map +1 -1
  53. package/dist/agents/responder/nodes/responder.answer.node.service.d.ts +26 -1
  54. package/dist/agents/responder/nodes/responder.answer.node.service.d.ts.map +1 -1
  55. package/dist/agents/responder/nodes/responder.answer.node.service.js +127 -13
  56. package/dist/agents/responder/nodes/responder.answer.node.service.js.map +1 -1
  57. package/dist/agents/responder/services/responder.service.d.ts.map +1 -1
  58. package/dist/agents/responder/services/responder.service.js +4 -0
  59. package/dist/agents/responder/services/responder.service.js.map +1 -1
  60. package/dist/common/utils/settled.d.ts +33 -0
  61. package/dist/common/utils/settled.d.ts.map +1 -0
  62. package/dist/common/utils/settled.js +66 -0
  63. package/dist/common/utils/settled.js.map +1 -0
  64. package/dist/config/interfaces/config.prompts.interface.d.ts +12 -0
  65. package/dist/config/interfaces/config.prompts.interface.d.ts.map +1 -1
  66. package/dist/eval/retrieval/end-to-end-sweep.service.d.ts +52 -0
  67. package/dist/eval/retrieval/end-to-end-sweep.service.d.ts.map +1 -0
  68. package/dist/eval/retrieval/end-to-end-sweep.service.js +194 -0
  69. package/dist/eval/retrieval/end-to-end-sweep.service.js.map +1 -0
  70. package/dist/eval/retrieval/evidence.matcher.d.ts +23 -0
  71. package/dist/eval/retrieval/evidence.matcher.d.ts.map +1 -0
  72. package/dist/eval/retrieval/evidence.matcher.js +38 -0
  73. package/dist/eval/retrieval/evidence.matcher.js.map +1 -0
  74. package/dist/eval/retrieval/index.d.ts +10 -0
  75. package/dist/eval/retrieval/index.d.ts.map +1 -0
  76. package/dist/eval/retrieval/index.js +35 -0
  77. package/dist/eval/retrieval/index.js.map +1 -0
  78. package/dist/eval/retrieval/question-set.loader.d.ts +16 -0
  79. package/dist/eval/retrieval/question-set.loader.d.ts.map +1 -0
  80. package/dist/eval/retrieval/question-set.loader.js +73 -0
  81. package/dist/eval/retrieval/question-set.loader.js.map +1 -0
  82. package/dist/eval/retrieval/retrieval-eval.module.d.ts +14 -0
  83. package/dist/eval/retrieval/retrieval-eval.module.d.ts.map +1 -0
  84. package/dist/eval/retrieval/retrieval-eval.module.js +48 -0
  85. package/dist/eval/retrieval/retrieval-eval.module.js.map +1 -0
  86. package/dist/eval/retrieval/retrieval-eval.types.d.ts +84 -0
  87. package/dist/eval/retrieval/retrieval-eval.types.d.ts.map +1 -0
  88. package/dist/eval/retrieval/retrieval-eval.types.js +25 -0
  89. package/dist/eval/retrieval/retrieval-eval.types.js.map +1 -0
  90. package/dist/eval/retrieval/retrieval-sweep.service.d.ts +35 -0
  91. package/dist/eval/retrieval/retrieval-sweep.service.d.ts.map +1 -0
  92. package/dist/eval/retrieval/retrieval-sweep.service.js +93 -0
  93. package/dist/eval/retrieval/retrieval-sweep.service.js.map +1 -0
  94. package/dist/eval/retrieval/rubric-judge.service.d.ts +30 -0
  95. package/dist/eval/retrieval/rubric-judge.service.d.ts.map +1 -0
  96. package/dist/eval/retrieval/rubric-judge.service.js +138 -0
  97. package/dist/eval/retrieval/rubric-judge.service.js.map +1 -0
  98. package/dist/eval/retrieval/sweep-report.d.ts +11 -0
  99. package/dist/eval/retrieval/sweep-report.d.ts.map +1 -0
  100. package/dist/eval/retrieval/sweep-report.js +79 -0
  101. package/dist/eval/retrieval/sweep-report.js.map +1 -0
  102. package/dist/eval/retrieval/token-accounting.check.d.ts +39 -0
  103. package/dist/eval/retrieval/token-accounting.check.d.ts.map +1 -0
  104. package/dist/eval/retrieval/token-accounting.check.js +75 -0
  105. package/dist/eval/retrieval/token-accounting.check.js.map +1 -0
  106. package/dist/foundations/atomicfact/repositories/atomicfact.repository.d.ts.map +1 -1
  107. package/dist/foundations/atomicfact/repositories/atomicfact.repository.js +7 -0
  108. package/dist/foundations/atomicfact/repositories/atomicfact.repository.js.map +1 -1
  109. package/dist/foundations/chunk/repositories/chunk.repository.d.ts +87 -1
  110. package/dist/foundations/chunk/repositories/chunk.repository.d.ts.map +1 -1
  111. package/dist/foundations/chunk/repositories/chunk.repository.js +239 -50
  112. package/dist/foundations/chunk/repositories/chunk.repository.js.map +1 -1
  113. package/dist/foundations/chunk/repositories/retrieval.constants.d.ts +69 -0
  114. package/dist/foundations/chunk/repositories/retrieval.constants.d.ts.map +1 -0
  115. package/dist/foundations/chunk/repositories/retrieval.constants.js +72 -0
  116. package/dist/foundations/chunk/repositories/retrieval.constants.js.map +1 -0
  117. package/dist/foundations/keyconcept/repositories/keyconcept.repository.d.ts +2 -0
  118. package/dist/foundations/keyconcept/repositories/keyconcept.repository.d.ts.map +1 -1
  119. package/dist/foundations/keyconcept/repositories/keyconcept.repository.js +9 -5
  120. package/dist/foundations/keyconcept/repositories/keyconcept.repository.js.map +1 -1
  121. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"chunk.vector.node.service.js","sourceRoot":"","sources":["../../../../src/agents/contextualiser/nodes/chunk.vector.node.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chunk.vector.node.service.js","sourceRoot":"","sources":["../../../../src/agents/contextualiser/nodes/chunk.vector.node.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAsE;AACtE,kFAA8E;AAC9E,+FAA2F;AAC3F,sEAA2E;AAM3E,yFAA0G;AAE1G,MAAM,eAAe,GAAG,CAAC,CAAC;AAGnB,IAAM,sBAAsB,8BAA5B,MAAM,sBAAsB;IAGjC,YACmB,eAAgC,EAChC,eAAgC,EAGjD,gBAAiE;QAJhD,oBAAe,GAAf,eAAe,CAAiB;QAChC,oBAAe,GAAf,eAAe,CAAiB;QAGhC,qBAAgB,GAAhB,gBAAgB,CAAgC;QAPlD,WAAM,GAAG,IAAI,eAAM,CAAC,wBAAsB,CAAC,IAAI,CAAC,CAAC;IAQ/D,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,MAAqD;QACjE,2EAA2E;QAC3E,0EAA0E;QAC1E,oDAAoD;QACpD,MAAM,cAAc,GAClB,MAAM,CAAC,KAAK,CAAC,iBAAiB;YAC9B,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;gBACxC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ;gBAC3B,WAAW,EAAE,IAAA,6CAAyB,EAAC;oBACrC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS;oBACjC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW;oBACrC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;oBAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;iBACpB,CAAC;aACH,CAAC,CAAC,CAAC;QAEN,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC9C,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC;gBACvC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ;gBAC/B,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;gBAC/B,cAAc;gBACd,yEAAyE;gBACzE,oEAAoE;gBACpE,wEAAwE;gBACxE,wEAAwE;gBACxE,+DAA+D;gBAC/D,WAAW,EAAE,IAAA,6CAAyB,EAAC;oBACrC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS;oBACjC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW;oBACrC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;oBAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;iBACpB,CAAC;aACH,CAAC;YACF,OAAO,CAAC,GAAG,CACT,CAAC,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAC3C,MAAM;iBACH,MAAM,CAAC;gBACN,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ;gBAC/B,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,YAAY;gBACvC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS;gBACjC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;aAChC,CAAC;iBACD,KAAK,CAAC,CAAC,CAAQ,EAAE,EAAE;gBAClB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBACvE,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CACL,CACF,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAChC,CAAC,CAAC;QAEH,qEAAqE;QACrE,0EAA0E;QAC1E,iDAAiD;QACjD,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAChD,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM;YAC5C,CAAC,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;YACvG,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,OAAe,EAAU,EAAE;YACpD,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC/B,IAAI,CAAC,CAAC;gBAAE,OAAO,OAAO,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzD,CAAC,CAAC;QAEF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;YACnF,wDAAwD;YACxD,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,iBAAiB,EAAE,cAAc,EAAE,CAAC;QAC5D,CAAC;QAED,qEAAqE;QACrE,4EAA4E;QAC5E,sEAAsE;QACtE,4EAA4E;QAC5E,MAAM,kBAAkB,GAAqC,EAAE,CAAC;QAEhE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE;gBAAE,SAAS;YAC5D,kBAAkB,CAAC,IAAI,CAAC;gBACtB,OAAO,EAAE,KAAK,CAAC,EAAE;gBACjB,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC;gBACvC,MAAM,EAAE,EAAE;gBACV,WAAW,EAAE,MAAM;gBACnB,QAAQ,EAAE,SAAS;gBACnB,KAAK,EAAG,KAA4B,CAAC,KAAK;gBAC1C,WAAW,EAAE,KAAK,CAAC,OAAO;aAC3B,CAAC,CAAC;QACL,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;YAChC,kBAAkB,CAAC,IAAI,CAAC;gBACtB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,MAAM;gBACxC,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,KAAK,EAAE,SAAS;gBAChB,WAAW,EAAE,SAAS;aACvB,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;YAC3B,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxC,QAAQ,EAAE,kBAAkB;YAC5B,iBAAiB,EAAE,cAAc;YACjC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;SAChC,CAAC;IACJ,CAAC;CACF,CAAA;AAzHY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,mBAAU,GAAE;IAOR,WAAA,IAAA,iBAAQ,GAAE,CAAA;IACV,WAAA,IAAA,eAAM,EAAC,8CAAiB,CAAC,CAAA;qCAHQ,kCAAe;QACf,kCAAe;GALxC,sBAAsB,CAyHlC"}
@@ -5,7 +5,7 @@ import { LLMService } from "../../../core/llm/services/llm.service";
5
5
  import { WebSocketService } from "../../../core/websocket/services/websocket.service";
6
6
  import { KeyConceptRepository } from "../../../foundations/keyconcept/repositories/keyconcept.repository";
7
7
  import { ContextualiserContext, ContextualiserContextState } from "../../contextualiser/contexts/contextualiser.context";
8
- export declare const defaultKeyConceptsPrompt = "\nAs an intelligent assistant, your primary objective is to score a list of key concepts in relation to the user question.\n\nYou are given the question, the rational plan, and a list of key elements with additional metadata.\nYour must check a list of Key Concepts, with the objective of selecting the most relevant ones to efficiently answer the question.\nThese initial key concepts are crucial because they are the starting point for searching for relevant information.\n\nGiven the **question**, the **rational plan** to answer the question, and the list of **Key Concepts** you have to:\n1. for each key concept\n - Read the key concept\n - Read the metadata (if they are available)\n - Assess a relevance to the potential answer by assigning a score between 0 and 100. A score of 100 implies a high likelihood of relevance to the answer, whereas a score of 0 suggests minimal relevance.\n - If the key element contains metadata and the metadata is very relevant to the question and it will be used to answer the question, please indicate that the key element is used as a source for the answer setting isUsedAsSource to true. In any other case (there is no metadata or the metadata is not relevant to the question), set isUsedAsSource to false.\n2. Provide a Status Message\n - Write a **short, friendly message** (maximum 40 characters) about your action.\n - **Avoid technical terms** such as \"nodes\", \"atomic facts\", or \"key concepts\".\n - The status message should make the user understand the action being taken\n - The status message **MUST** contain clear information contextualised to the current question and the gathered information.\n - The status message should be specific to the context and clearly convey the next steps or actions being taken.\n - The status message **MUST NOT** be something unrelated to the text, such as \"success\", \"sufficient information\", \"insufficient information\", \"chunk analysed\", \"chunk processed\" or similar generic messages.\n\n### IMPORTANT\n - You should only use Key concepts provided in the list of key elements and refrain from using any other key concepts.\n - You **MUST NOT** create new key concepts, but use ONLY the ones provided.\n\n### **Please strictly follow the above instructions and format. Let's begin.**\n";
8
+ export declare const defaultKeyConceptsPrompt = "\nAs an intelligent assistant, your primary objective is to score a list of key concepts in relation to the user question.\n\nYou are given the question, the rational plan, and a list of key elements.\nYour must check a list of Key Concepts, with the objective of selecting the most relevant ones to efficiently answer the question.\nThese initial key concepts are crucial because they are the starting point for searching for relevant information.\n\nGiven the **question**, the **rational plan** to answer the question, and the list of **Key Concepts** you have to:\n1. for each key concept\n - Read the key concept\n - Return the key concept's **index** \u2014 the position number given to it in the input list.\n - Restate its first few words (at most five) as the **label**, so the score that follows is anchored to the concept you actually read.\n - Assess a relevance to the potential answer by assigning a score between 0 and 100. A score of 100 implies a high likelihood of relevance to the answer, whereas a score of 0 suggests minimal relevance.\n2. Provide a Status Message\n - Write a **short, friendly message** (maximum 40 characters) about your action.\n - **Avoid technical terms** such as \"nodes\", \"atomic facts\", or \"key concepts\".\n - The status message should make the user understand the action being taken\n - The status message **MUST** contain clear information contextualised to the current question and the gathered information.\n - The status message should be specific to the context and clearly convey the next steps or actions being taken.\n - The status message **MUST NOT** be something unrelated to the text, such as \"success\", \"sufficient information\", \"insufficient information\", \"chunk analysed\", \"chunk processed\" or similar generic messages.\n\n### IMPORTANT\n - You should only use Key concepts provided in the list of key elements and refrain from using any other key concepts.\n - You **MUST NOT** create new key concepts, but use ONLY the ones provided.\n\n### **Please strictly follow the above instructions and format. Let's begin.**\n";
9
9
  export declare class KeyConceptsNodeService {
10
10
  private readonly llmService;
11
11
  private readonly keyConceptRepository;
@@ -18,6 +18,5 @@ export declare class KeyConceptsNodeService {
18
18
  execute(params: {
19
19
  state: typeof ContextualiserContext.State;
20
20
  }): Promise<Partial<ContextualiserContextState>>;
21
- private _transformMetadata;
22
21
  }
23
22
  //# sourceMappingURL=keyconcepts.node.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"keyconcepts.node.service.d.ts","sourceRoot":"","sources":["../../../../src/agents/contextualiser/nodes/keyconcepts.node.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAE,mBAAmB,EAA0B,MAAM,4BAA4B,CAAC;AACzF,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oDAAoD,CAAC;AAEtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,oEAAoE,CAAC;AAE1G,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC3B,MAAM,sDAAsD,CAAC;AAE9D,eAAO,MAAM,wBAAwB,owEA0BpC,CAAC;AAoCF,qBACa,sBAAsB;IAK/B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,aAAa;IARhC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2C;IAClE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAGnB,UAAU,EAAE,UAAU,EACtB,oBAAoB,EAAE,oBAAoB,EAC1C,gBAAgB,EAAE,gBAAgB,EAClC,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa,CAAC,mBAAmB,CAAC;IAM9D,OAAO,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,OAAO,qBAAqB,CAAC,KAAK,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;IA0HlH,OAAO,CAAC,kBAAkB;CAa3B"}
1
+ {"version":3,"file":"keyconcepts.node.service.d.ts","sourceRoot":"","sources":["../../../../src/agents/contextualiser/nodes/keyconcepts.node.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAE,mBAAmB,EAA0B,MAAM,4BAA4B,CAAC;AACzF,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oDAAoD,CAAC;AAGtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,oEAAoE,CAAC;AAE1G,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC3B,MAAM,sDAAsD,CAAC;AAE9D,eAAO,MAAM,wBAAwB,ikEA0BpC,CAAC;AA+CF,qBACa,sBAAsB;IAK/B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,aAAa;IARhC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2C;IAClE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAGnB,UAAU,EAAE,UAAU,EACtB,oBAAoB,EAAE,oBAAoB,EAC1C,gBAAgB,EAAE,gBAAgB,EAClC,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa,CAAC,mBAAmB,CAAC;IAM9D,OAAO,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,OAAO,qBAAqB,CAAC,KAAK,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;CA+HnH"}
@@ -17,21 +17,22 @@ const nestjs_cls_1 = require("nestjs-cls");
17
17
  const zod_1 = require("zod");
18
18
  const llm_service_1 = require("../../../core/llm/services/llm.service");
19
19
  const websocket_service_1 = require("../../../core/websocket/services/websocket.service");
20
+ const retrieval_constants_1 = require("../../../foundations/chunk/repositories/retrieval.constants");
20
21
  const keyconcept_repository_1 = require("../../../foundations/keyconcept/repositories/keyconcept.repository");
21
22
  const usage_attribution_1 = require("../../common/usage-attribution");
22
23
  exports.defaultKeyConceptsPrompt = `
23
24
  As an intelligent assistant, your primary objective is to score a list of key concepts in relation to the user question.
24
25
 
25
- You are given the question, the rational plan, and a list of key elements with additional metadata.
26
+ You are given the question, the rational plan, and a list of key elements.
26
27
  Your must check a list of Key Concepts, with the objective of selecting the most relevant ones to efficiently answer the question.
27
28
  These initial key concepts are crucial because they are the starting point for searching for relevant information.
28
29
 
29
30
  Given the **question**, the **rational plan** to answer the question, and the list of **Key Concepts** you have to:
30
31
  1. for each key concept
31
32
  - Read the key concept
32
- - Read the metadata (if they are available)
33
+ - Return the key concept's **index** the position number given to it in the input list.
34
+ - Restate its first few words (at most five) as the **label**, so the score that follows is anchored to the concept you actually read.
33
35
  - Assess a relevance to the potential answer by assigning a score between 0 and 100. A score of 100 implies a high likelihood of relevance to the answer, whereas a score of 0 suggests minimal relevance.
34
- - If the key element contains metadata and the metadata is very relevant to the question and it will be used to answer the question, please indicate that the key element is used as a source for the answer setting isUsedAsSource to true. In any other case (there is no metadata or the metadata is not relevant to the question), set isUsedAsSource to false.
35
36
  2. Provide a Status Message
36
37
  - Write a **short, friendly message** (maximum 40 characters) about your action.
37
38
  - **Avoid technical terms** such as "nodes", "atomic facts", or "key concepts".
@@ -49,26 +50,31 @@ Given the **question**, the **rational plan** to answer the question, and the li
49
50
  const outputSchema = zod_1.z.object({
50
51
  status: zod_1.z
51
52
  .string()
52
- .describe(`Write a short, friendly message (max 40 characters) about your action, avoiding technical terms such as "nodes" or "atomic facts" or "key Concepts". Give flavour to the message and avoid repeating the same message.`),
53
+ .describe(`Write a short, friendly message (max 40 characters) about your action, avoiding technical terms such as "nodes" or "atomic facts" or "key concepts". Give flavour to the message and avoid repeating the same message.`),
53
54
  keyConcepts: zod_1.z
54
55
  .array(zod_1.z.object({
55
- keyConcept: zod_1.z.string().describe(`name of a relevant keyConcepts`),
56
+ index: zod_1.z
57
+ .number()
58
+ .int()
59
+ .describe("Zero-based position of the concept in the keyConcepts list you were given. This is the ONLY field used to identify the concept — copy the position exactly."),
60
+ label: zod_1.z
61
+ .string()
62
+ .describe("The first few words (at most five) of the concept at that position, copied from the list. Write this BEFORE the score: restating what you are judging is what keeps the score anchored to the right concept. It is not used to identify the concept — the index is."),
56
63
  score: zod_1.z
57
64
  .number()
58
- .describe(`Relevance to the potential answer by assigning a score between 0 and 100. A score of 100 implies a high likelihood of relevance to the answer, whereas a score of 0 suggests minimal relevance.`),
59
- isUsedAsSource: zod_1.z.boolean().describe(`Indicate if the keyConcept is used as a source for the answer`),
65
+ .describe("Relevance of that concept to the question and plan, 0-100. 100 means highly likely to lead to the answer; 0 means irrelevant."),
60
66
  }))
61
- .describe(`List of relevant keyConcepts to the question and plan`),
67
+ .describe(`The concepts worth following, as positions in the input list. Return ONLY those scoring above 50 — omitting a concept is how you reject it.`),
62
68
  });
63
69
  const inputSchema = zod_1.z.object({
64
70
  question: zod_1.z.string().describe("The user question"),
65
71
  rationalPlan: zod_1.z.string().describe("The rational plan to use to answer the user question"),
66
72
  keyConcepts: zod_1.z
67
73
  .array(zod_1.z.object({
74
+ index: zod_1.z.number().int().describe("This concept's position. Refer to the concept by THIS number."),
68
75
  keyConcept: zod_1.z.string().describe("Key Concept"),
69
- metadata: zod_1.z.any().optional().describe("The metadata associated with the key concept"),
70
76
  }))
71
- .describe("The key concepts to analyse"),
77
+ .describe("The key concepts to analyse, each with the position you must use to refer to it"),
72
78
  });
73
79
  let KeyConceptsNodeService = KeyConceptsNodeService_1 = class KeyConceptsNodeService {
74
80
  constructor(llmService, keyConceptRepository, webSocketService, clsService, configService) {
@@ -82,7 +88,6 @@ let KeyConceptsNodeService = KeyConceptsNodeService_1 = class KeyConceptsNodeSer
82
88
  this.systemPrompt = prompts?.contextualiser?.keyConceptExtractor ?? exports.defaultKeyConceptsPrompt;
83
89
  }
84
90
  async execute(params) {
85
- params.state.hops += 1;
86
91
  let keyConcepts = [];
87
92
  if (params.state.nextStep === "key_concepts") {
88
93
  keyConcepts = await this.keyConceptRepository.findPotentialKeyConcepts({
@@ -95,6 +100,11 @@ let KeyConceptsNodeService = KeyConceptsNodeService_1 = class KeyConceptsNodeSer
95
100
  dataLimits: params.state.limits,
96
101
  scope: params.state,
97
102
  }),
103
+ // Reuses the embedding chunk_vector already computed this turn instead
104
+ // of embedding the same question twice. Falls back to embedding
105
+ // itself when undefined (e.g. a run that reaches this node without
106
+ // chunk_vector having executed).
107
+ queryEmbedding: params.state.questionEmbedding,
98
108
  });
99
109
  this.logger.log(`findPotentialKeyConcepts → ${keyConcepts.length} concepts ` +
100
110
  `(question="${params.state.question}" howToMode=${!!params.state.limits.howToMode} ` +
@@ -109,29 +119,33 @@ let KeyConceptsNodeService = KeyConceptsNodeService_1 = class KeyConceptsNodeSer
109
119
  this.logger.log(`findNeighboursByKeyConcepts → ${keyConcepts.length} concepts ` +
110
120
  `(from ${params.state.processedKeyConcepts.length} processed)`);
111
121
  }
112
- const metadataList = [];
113
122
  const usableNodes = keyConcepts
114
123
  .filter((keyConcept) => !params.state.processedKeyConcepts.includes(keyConcept.value))
115
- .map((keyConcept) => {
116
- const metadata = [];
124
+ .map((keyConcept) => ({ keyConcept: keyConcept.value }));
125
+ // Safety check: nothing left to explore. The run-wide ceiling is the call
126
+ // budget in contextualiser.service.ts — this node no longer carries a
127
+ // second, disagreeing one of its own.
128
+ if (!usableNodes || !usableNodes.length) {
129
+ this.logger.warn(`key_concepts → answer (no usable concepts): usableNodes=${usableNodes?.length ?? 0} ` +
130
+ `processedKeyConcepts=${params.state.processedKeyConcepts.length}`);
131
+ // Delta only: ContextualiserContext.tokens is additive, so returning the
132
+ // whole state re-adds every token accumulated so far. The node consumed
133
+ // one graph hop and `neighbouringAlreadyExplored` is mutated on
134
+ // `params.state` above, so both stay in the delta. No provider call was
135
+ // made on this path, so it reports no `llmCalls`.
117
136
  return {
118
- keyConcept: keyConcept.value,
119
- metadata: metadata,
137
+ nextStep: "answer",
138
+ hops: params.state.hops + 1,
139
+ neighbouringAlreadyExplored: params.state.neighbouringAlreadyExplored,
140
+ queuedKeyConcepts: [],
120
141
  };
121
- });
122
- // Safety check: If approaching max hops or no usable nodes, stop exploration
123
- const approachingMaxHops = params.state.hops >= 15;
124
- if (!usableNodes || !usableNodes.length || approachingMaxHops) {
125
- this.logger.warn(`key_concepts → answer (no usable concepts): usableNodes=${usableNodes?.length ?? 0} ` +
126
- `processedKeyConcepts=${params.state.processedKeyConcepts.length} ` +
127
- `approachingMaxHops=${approachingMaxHops}`);
128
- params.state.nextStep = "answer";
129
- return params.state;
130
142
  }
131
143
  const inputParams = {
132
144
  rationalPlan: params.state.rationalPlan,
133
145
  question: params.state.question,
134
- keyConcepts: usableNodes,
146
+ // The model answers with positions in THIS array, so the numbering it is
147
+ // given and the array the answer maps back into must stay in one order.
148
+ keyConcepts: usableNodes.map((node, index) => ({ index, keyConcept: node.keyConcept })),
135
149
  };
136
150
  const llmResponse = await this.llmService.call({
137
151
  inputSchema: inputSchema,
@@ -139,6 +153,7 @@ let KeyConceptsNodeService = KeyConceptsNodeService_1 = class KeyConceptsNodeSer
139
153
  outputSchema: outputSchema,
140
154
  systemPrompts: [this.systemPrompt],
141
155
  temperature: 0.1,
156
+ metadata: { agentName: "contextualiser", nodeName: "key_concepts" },
142
157
  // Billed to the CALLING agent: its ledger category, its entity. Spread
143
158
  // LAST so nothing above can overwrite the attribution.
144
159
  ...(0, usage_attribution_1.buildInheritedAttribution)(params.state),
@@ -148,50 +163,35 @@ let KeyConceptsNodeService = KeyConceptsNodeService_1 = class KeyConceptsNodeSer
148
163
  message: llmResponse.status,
149
164
  conversationId: params.state.contentId,
150
165
  });
151
- llmResponse.keyConcepts.forEach((node) => {
152
- if (node.isUsedAsSource) {
153
- const keyConcept = node.keyConcept.split(" - Metadata ")[0];
154
- if (!keyConcept)
155
- return;
156
- const metadata = metadataList.find((el) => el.node === keyConcept)?.metadata;
157
- if (!metadata)
158
- return;
159
- metadata.forEach((singleMetadata) => {
160
- // const meta = this._transformMetadata({ node: keyConcept, metadata: singleMetadata });
161
- // params.state.notebook = `${params.state.notebook}
162
- // ${meta}`;
163
- if (keyConcept)
164
- params.state.ontology.push(singleMetadata.id);
165
- });
166
- }
167
- });
168
- const allowableConcepts = keyConcepts
169
- .filter((keyConcept) => !params.state.processedKeyConcepts.includes(keyConcept.value))
170
- .map((el) => el.value);
171
- const generatedConcepts = llmResponse.keyConcepts.filter((el) => allowableConcepts.includes(el.keyConcept));
172
- const keyConceptsQueue = generatedConcepts
166
+ // The INDEX identifies the concept; the `label` exists only so the model
167
+ // restates what it is judging before it scores it. Measured: dropping the
168
+ // restatement entirely (index + score alone) kept the same NUMBER of
169
+ // concepts but selected a materially worse SET — atomic-fact yield fell 25%
170
+ // across the eval corpus, on 13 of 20 questions. See Gate 3b in
171
+ // docs/superpowers/reports/2026-08-21-contextualiser-phase3-report.md.
172
+ const scoredConcepts = (llmResponse.keyConcepts ?? []).filter((scored) => Number.isInteger(scored.index) && scored.index >= 0 && scored.index < usableNodes.length);
173
+ // A label that does not match its index means the model lost position
174
+ // discipline — the score then belongs to a different concept than the one
175
+ // queued. Diagnostic only: the index still wins, because a mismatched label
176
+ // is no evidence about which of the two is wrong.
177
+ const drifted = scoredConcepts.filter((scored) => !!scored.label &&
178
+ !usableNodes[scored.index].keyConcept.toLowerCase().startsWith(scored.label.trim().toLowerCase().slice(0, 12))).length;
179
+ if (drifted > 0)
180
+ this.logger.warn(`key_concepts: ${drifted}/${scoredConcepts.length} labels did not match their index`);
181
+ const keyConceptsQueue = scoredConcepts
173
182
  .sort((a, b) => b.score - a.score)
174
- .map((el) => el.keyConcept)
175
- .slice(0, 10);
183
+ .map((scored) => usableNodes[scored.index].keyConcept)
184
+ .slice(0, retrieval_constants_1.MAX_KEY_CONCEPTS);
176
185
  const returnedHops = params.state.hops + 1;
177
186
  return {
178
187
  hops: returnedHops,
188
+ llmCalls: 1,
179
189
  queuedKeyConcepts: keyConceptsQueue,
180
190
  nextStep: "atomic_facts",
181
191
  status: [llmResponse.status],
182
192
  tokens: llmResponse.tokenUsage,
183
193
  };
184
194
  }
185
- _transformMetadata(params) {
186
- let response = `Metadata for ${params.node} > `;
187
- response += `Type: ${params.metadata.type}`;
188
- if (params.metadata.data && typeof params.metadata.data === "object") {
189
- Object.entries(params.metadata.data).forEach(([key, value]) => {
190
- response += `, ${key}: ${value}`;
191
- });
192
- }
193
- return response;
194
- }
195
195
  };
196
196
  exports.KeyConceptsNodeService = KeyConceptsNodeService;
197
197
  exports.KeyConceptsNodeService = KeyConceptsNodeService = KeyConceptsNodeService_1 = __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"keyconcepts.node.service.js","sourceRoot":"","sources":["../../../../src/agents/contextualiser/nodes/keyconcepts.node.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"keyconcepts.node.service.js","sourceRoot":"","sources":["../../../../src/agents/contextualiser/nodes/keyconcepts.node.service.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"question.refiner.node.service.d.ts","sourceRoot":"","sources":["../../../../src/agents/contextualiser/nodes/question.refiner.node.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAE,mBAAmB,EAA0B,MAAM,4BAA4B,CAAC;AACzF,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oDAAoD,CAAC;AACtF,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC3B,MAAM,sDAAsD,CAAC;AAG9D,eAAO,MAAM,4BAA4B,6oDAuCxC,CAAC;AA0BF,qBACa,0BAA0B;IAInC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,aAAa;IANhC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAGnB,UAAU,EAAE,UAAU,EACtB,gBAAgB,EAAE,gBAAgB,EAClC,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa,CAAC,mBAAmB,CAAC;IAM9D,OAAO,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,OAAO,qBAAqB,CAAC,KAAK,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;CAuCnH"}
1
+ {"version":3,"file":"question.refiner.node.service.d.ts","sourceRoot":"","sources":["../../../../src/agents/contextualiser/nodes/question.refiner.node.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAE,mBAAmB,EAA0B,MAAM,4BAA4B,CAAC;AACzF,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oDAAoD,CAAC;AACtF,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC3B,MAAM,sDAAsD,CAAC;AAG9D,eAAO,MAAM,4BAA4B,6oDAuCxC,CAAC;AA0BF,qBACa,0BAA0B;IAInC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,aAAa;IANhC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAGnB,UAAU,EAAE,UAAU,EACtB,gBAAgB,EAAE,gBAAgB,EAClC,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa,CAAC,mBAAmB,CAAC;IAM9D,OAAO,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,OAAO,qBAAqB,CAAC,KAAK,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;CA2CnH"}
@@ -83,9 +83,12 @@ let QuestionRefinerNodeService = class QuestionRefinerNodeService {
83
83
  this.systemPrompt = prompts?.contextualiser?.questionRefiner ?? exports.defaultQuestionRefinerPrompt;
84
84
  }
85
85
  async execute(params) {
86
- params.state.hops += 1;
86
+ // Nothing to refine on a fresh conversation. Return a DELTA rather than the
87
+ // whole state — see keyconcepts.node.service.ts for why. The node still
88
+ // consumed one graph hop, so the delta carries `hops`; it made no provider
89
+ // call, so it reports no `llmCalls`.
87
90
  if (params.state.chatHistory.length === 0)
88
- return params.state;
91
+ return { hops: params.state.hops + 1 };
89
92
  const inputParams = {
90
93
  chatHistory: [
91
94
  ...params.state.chatHistory,
@@ -101,6 +104,7 @@ let QuestionRefinerNodeService = class QuestionRefinerNodeService {
101
104
  outputSchema: outputSchema,
102
105
  systemPrompts: [this.systemPrompt],
103
106
  temperature: 0.1,
107
+ metadata: { agentName: "contextualiser", nodeName: "question_refiner" },
104
108
  // Billed to the CALLING agent: its ledger category, its entity. Spread
105
109
  // LAST so nothing above can overwrite the attribution.
106
110
  ...(0, usage_attribution_1.buildInheritedAttribution)(params.state),
@@ -113,6 +117,7 @@ let QuestionRefinerNodeService = class QuestionRefinerNodeService {
113
117
  const returnedHops = params.state.hops + 1;
114
118
  return {
115
119
  hops: returnedHops,
120
+ llmCalls: 1,
116
121
  question: llmResponse.response,
117
122
  tokens: llmResponse.tokenUsage,
118
123
  };
@@ -1 +1 @@
1
- {"version":3,"file":"question.refiner.node.service.js","sourceRoot":"","sources":["../../../../src/agents/contextualiser/nodes/question.refiner.node.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"question.refiner.node.service.js","sourceRoot":"","sources":["../../../../src/agents/contextualiser/nodes/question.refiner.node.service.ts"],"names":[],"mappings":"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"}
@@ -67,7 +67,6 @@ let RationalNodeService = class RationalNodeService {
67
67
  this.systemPrompt = prompts?.contextualiser?.rationalPlan ?? exports.defaultRationalPlanPrompt;
68
68
  }
69
69
  async execute(params) {
70
- params.state.hops += 1;
71
70
  const inputParams = {
72
71
  question: params.state.question,
73
72
  analysis: params.state.previousAnalysis,
@@ -78,6 +77,7 @@ let RationalNodeService = class RationalNodeService {
78
77
  outputSchema: outputSchema,
79
78
  systemPrompts: [this.systemPrompt],
80
79
  temperature: 0.1,
80
+ metadata: { agentName: "contextualiser", nodeName: "rational_plan" },
81
81
  // Billed to the CALLING agent: its ledger category, its entity. Spread
82
82
  // LAST so nothing above can overwrite the attribution.
83
83
  ...(0, usage_attribution_1.buildInheritedAttribution)(params.state),
@@ -90,6 +90,7 @@ let RationalNodeService = class RationalNodeService {
90
90
  const returnedHops = params.state.hops + 1;
91
91
  return {
92
92
  hops: returnedHops,
93
+ llmCalls: 1,
93
94
  rationalPlan: llmResponse.rationalPlan,
94
95
  nextStep: "key_concepts",
95
96
  status: [llmResponse.status],
@@ -1 +1 @@
1
- {"version":3,"file":"rational.node.service.js","sourceRoot":"","sources":["../../../../src/agents/contextualiser/nodes/rational.node.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,2CAA+C;AAC/C,2CAAwC;AACxC,6BAAwB;AAExB,wEAAoE;AACpE,0FAAsF;AAKtF,sEAA2E;AAE9D,QAAA,yBAAyB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BxC,CAAC;AAEF,MAAM,YAAY,GAAG,OAAC,CAAC,MAAM,CAAC;IAC5B,MAAM,EAAE,OAAC;SACN,MAAM,EAAE;SACR,QAAQ,CACP,wNAAwN,CACzN;IACH,YAAY,EAAE,OAAC;SACZ,MAAM,EAAE;SACR,QAAQ,CAAC,4FAA4F,CAAC;CAC1G,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,OAAC,CAAC,MAAM,CAAC;IAC3B,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAClD,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;CAC/E,CAAC,CAAC;AAGI,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAG9B,YACmB,UAAsB,EACtB,gBAAkC,EAClC,UAAsB,EACtB,aAAiD;QAHjD,eAAU,GAAV,UAAU,CAAY;QACtB,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,eAAU,GAAV,UAAU,CAAY;QACtB,kBAAa,GAAb,aAAa,CAAoC;QAElE,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAyB,SAAS,CAAC,CAAC;QAC1E,IAAI,CAAC,YAAY,GAAG,OAAO,EAAE,cAAc,EAAE,YAAY,IAAI,iCAAyB,CAAC;IACzF,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAqD;QACjE,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;QAEvB,MAAM,WAAW,GAAgC;YAC/C,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ;YAC/B,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,gBAAgB;SACxC,CAAC;QAEF,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAA+B;YAC3E,WAAW,EAAE,WAAW;YACxB,WAAW,EAAE,WAAW;YACxB,YAAY,EAAE,YAAY;YAC1B,aAAa,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC;YAClC,WAAW,EAAE,GAAG;YAChB,uEAAuE;YACvE,uDAAuD;YACvD,GAAG,IAAA,6CAAyB,EAAC,MAAM,CAAC,KAAK,CAAC;SAC3C,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,KAAK,cAAc;YAC7C,MAAM,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,gBAAgB,EAAE;gBAC7F,OAAO,EAAE,WAAW,CAAC,MAAM;gBAC3B,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS;aACvC,CAAC,CAAC;QAEL,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;QAE3C,OAAO;YACL,IAAI,EAAE,YAAY;YAClB,YAAY,EAAE,WAAW,CAAC,YAAY;YACtC,QAAQ,EAAE,cAAc;YACxB,MAAM,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC;YAC5B,MAAM,EAAE,WAAW,CAAC,UAAU;SAC/B,CAAC;IACJ,CAAC;CACF,CAAA;AAhDY,kDAAmB;8BAAnB,mBAAmB;IAD/B,IAAA,mBAAU,GAAE;qCAKoB,wBAAU;QACJ,oCAAgB;QACtB,uBAAU;QACP,sBAAa;GAPpC,mBAAmB,CAgD/B"}
1
+ {"version":3,"file":"rational.node.service.js","sourceRoot":"","sources":["../../../../src/agents/contextualiser/nodes/rational.node.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,2CAA+C;AAC/C,2CAAwC;AACxC,6BAAwB;AAExB,wEAAoE;AACpE,0FAAsF;AAKtF,sEAA2E;AAE9D,QAAA,yBAAyB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BxC,CAAC;AAEF,MAAM,YAAY,GAAG,OAAC,CAAC,MAAM,CAAC;IAC5B,MAAM,EAAE,OAAC;SACN,MAAM,EAAE;SACR,QAAQ,CACP,wNAAwN,CACzN;IACH,YAAY,EAAE,OAAC;SACZ,MAAM,EAAE;SACR,QAAQ,CAAC,4FAA4F,CAAC;CAC1G,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,OAAC,CAAC,MAAM,CAAC;IAC3B,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAClD,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;CAC/E,CAAC,CAAC;AAGI,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAG9B,YACmB,UAAsB,EACtB,gBAAkC,EAClC,UAAsB,EACtB,aAAiD;QAHjD,eAAU,GAAV,UAAU,CAAY;QACtB,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,eAAU,GAAV,UAAU,CAAY;QACtB,kBAAa,GAAb,aAAa,CAAoC;QAElE,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAyB,SAAS,CAAC,CAAC;QAC1E,IAAI,CAAC,YAAY,GAAG,OAAO,EAAE,cAAc,EAAE,YAAY,IAAI,iCAAyB,CAAC;IACzF,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAqD;QACjE,MAAM,WAAW,GAAgC;YAC/C,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ;YAC/B,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,gBAAgB;SACxC,CAAC;QAEF,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAA+B;YAC3E,WAAW,EAAE,WAAW;YACxB,WAAW,EAAE,WAAW;YACxB,YAAY,EAAE,YAAY;YAC1B,aAAa,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC;YAClC,WAAW,EAAE,GAAG;YAChB,QAAQ,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,eAAe,EAAE;YACpE,uEAAuE;YACvE,uDAAuD;YACvD,GAAG,IAAA,6CAAyB,EAAC,MAAM,CAAC,KAAK,CAAC;SAC3C,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,KAAK,cAAc;YAC7C,MAAM,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,gBAAgB,EAAE;gBAC7F,OAAO,EAAE,WAAW,CAAC,MAAM;gBAC3B,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS;aACvC,CAAC,CAAC;QAEL,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;QAE3C,OAAO;YACL,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,CAAC;YACX,YAAY,EAAE,WAAW,CAAC,YAAY;YACtC,QAAQ,EAAE,cAAc;YACxB,MAAM,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC;YAC5B,MAAM,EAAE,WAAW,CAAC,UAAU;SAC/B,CAAC;IACJ,CAAC;CACF,CAAA;AAhDY,kDAAmB;8BAAnB,mBAAmB;IAD/B,IAAA,mBAAU,GAAE;qCAKoB,wBAAU;QACJ,oCAAgB;QACtB,uBAAU;QACP,sBAAa;GAPpC,mBAAmB,CAgD/B"}
@@ -1 +1 @@
1
- {"version":3,"file":"contextualiser.service.d.ts","sourceRoot":"","sources":["../../../../src/agents/contextualiser/services/contextualiser.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAEL,0BAA0B,EAE3B,MAAM,sDAAsD,CAAC;AAC9D,OAAO,EAAE,mCAAmC,EAAE,MAAM,+DAA+D,CAAC;AACpH,OAAO,EAAE,sBAAsB,EAAE,MAAM,qDAAqD,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,+CAA+C,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,sDAAsD,CAAC;AAC9F,OAAO,EAAE,sBAAsB,EAAE,MAAM,qDAAqD,CAAC;AAC7F,OAAO,EAAE,0BAA0B,EAAE,MAAM,0DAA0D,CAAC;AACtG,OAAO,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAA6B,MAAM,gCAAgC,CAAC;AAEnG;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAAI,eAAe,MAAM,KAAG,eAAe,GAAG,kBAChB,CAAC;AAE7D,qBACa,qBAAqB;IAI9B,OAAO,CAAC,QAAQ,CAAC,mCAAmC;IACpD,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAXzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;gBAG9C,mCAAmC,EAAE,mCAAmC,EACxE,mBAAmB,EAAE,0BAA0B,EAC/C,YAAY,EAAE,mBAAmB,EACjC,eAAe,EAAE,sBAAsB,EACvC,eAAe,EAAE,sBAAsB,EACvC,SAAS,EAAE,gBAAgB,EAC3B,eAAe,EAAE,sBAAsB,EACvC,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,cAAc;IAGnC,GAAG,CAAC,MAAM,EAAE;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,UAAU,EAAE,UAAU,CAAC;QACvB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;QAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB;;;;WAIG;QACH,WAAW,CAAC,EAAE,sBAAsB,CAAC;KACtC,GAAG,OAAO,CAAC,0BAA0B,CAAC;CAwMxC"}
1
+ {"version":3,"file":"contextualiser.service.d.ts","sourceRoot":"","sources":["../../../../src/agents/contextualiser/services/contextualiser.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAEL,0BAA0B,EAE3B,MAAM,sDAAsD,CAAC;AAC9D,OAAO,EAAE,mCAAmC,EAAE,MAAM,+DAA+D,CAAC;AACpH,OAAO,EAAE,sBAAsB,EAAE,MAAM,qDAAqD,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,+CAA+C,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,sDAAsD,CAAC;AAC9F,OAAO,EAAE,sBAAsB,EAAE,MAAM,qDAAqD,CAAC;AAC7F,OAAO,EAAE,0BAA0B,EAAE,MAAM,0DAA0D,CAAC;AACtG,OAAO,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAEhF,OAAO,EAAE,sBAAsB,EAA6B,MAAM,gCAAgC,CAAC;AAEnG;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAAI,eAAe,MAAM,KAAG,eAAe,GAAG,kBAChB,CAAC;AAE7D,qBACa,qBAAqB;IAI9B,OAAO,CAAC,QAAQ,CAAC,mCAAmC;IACpD,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAXzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;gBAG9C,mCAAmC,EAAE,mCAAmC,EACxE,mBAAmB,EAAE,0BAA0B,EAC/C,YAAY,EAAE,mBAAmB,EACjC,eAAe,EAAE,sBAAsB,EACvC,eAAe,EAAE,sBAAsB,EACvC,SAAS,EAAE,gBAAgB,EAC3B,eAAe,EAAE,sBAAsB,EACvC,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,cAAc;IAGnC,GAAG,CAAC,MAAM,EAAE;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,UAAU,EAAE,UAAU,CAAC;QACvB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;QAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB;;;;WAIG;QACH,WAAW,CAAC,EAAE,sBAAsB,CAAC;KACtC,GAAG,OAAO,CAAC,0BAA0B,CAAC;CA4PxC"}
@@ -23,6 +23,7 @@ const keyconcepts_node_service_1 = require("../../contextualiser/nodes/keyconcep
23
23
  const question_refiner_node_service_1 = require("../../contextualiser/nodes/question.refiner.node.service");
24
24
  const rational_node_service_1 = require("../../contextualiser/nodes/rational.node.service");
25
25
  const tracing_service_1 = require("../../../core/tracing/services/tracing.service");
26
+ const retrieval_constants_1 = require("../../../foundations/chunk/repositories/retrieval.constants");
26
27
  const usage_attribution_1 = require("../../common/usage-attribution");
27
28
  /**
28
29
  * Picks the graph entry node for a turn.
@@ -47,7 +48,9 @@ let ContextualiserService = ContextualiserService_1 = class ContextualiserServic
47
48
  this.logger = new common_1.Logger(ContextualiserService_1.name);
48
49
  }
49
50
  async run(params) {
50
- const maxHops = 20;
51
+ // Supersteps, not spend. LangGraph needs an absolute ceiling so a routing
52
+ // bug cannot loop forever; the SPEND bound is MAX_LLM_CALLS_PER_RUN below.
53
+ const maxSupersteps = 20;
51
54
  // Log proportionately. A caller that named NOTHING is opting out — MCP tool
52
55
  // calls do this on every single request and are right to — so it gets a
53
56
  // debug line, not a warning. A caller that named something unusable is a
@@ -77,8 +80,8 @@ let ContextualiserService = ContextualiserService_1 = class ContextualiserServic
77
80
  contentType: params.contentType,
78
81
  messagesCount: params.messages.length,
79
82
  question: params.question ?? "none",
80
- maxHops: maxHops,
81
- recursionLimit: maxHops + 2,
83
+ maxSupersteps: maxSupersteps,
84
+ recursionLimit: maxSupersteps + 2,
82
85
  initialNode: initial,
83
86
  },
84
87
  });
@@ -87,88 +90,93 @@ let ContextualiserService = ContextualiserService_1 = class ContextualiserServic
87
90
  this.clsService.set("ragStatus", `${params.state.status.join("\n\n")}`);
88
91
  }
89
92
  const nextStep = params.forceNextStep ?? params.state.nextStep;
90
- const finalNextStep = params.state.hops === maxHops ? "answer" : nextStep;
91
- return finalNextStep;
93
+ // The budget is on PROVIDER CALLS. `hops` counts nodes and three of them
94
+ // advance it by two, so it was never a spend bound.
95
+ const budgetSpent = (params.state.llmCalls ?? 0) >= retrieval_constants_1.MAX_LLM_CALLS_PER_RUN;
96
+ if (budgetSpent) {
97
+ this.logger.warn(`contextualiser call budget spent (${params.state.llmCalls}/${retrieval_constants_1.MAX_LLM_CALLS_PER_RUN}) — routing to answer`);
98
+ }
99
+ return budgetSpent ? "answer" : nextStep;
92
100
  };
93
101
  const workflow = new langgraph_1.StateGraph(contextualiser_context_1.ContextualiserContext)
94
102
  .addNode("question_refiner", async (state) => {
95
- this.tracer.addSpanEvent(`Node: question_refiner - hop ${state.hops}/${maxHops}`, {
103
+ this.tracer.addSpanEvent(`Node: question_refiner - hop ${state.hops} calls ${state.llmCalls ?? 0}/${retrieval_constants_1.MAX_LLM_CALLS_PER_RUN}`, {
96
104
  hopCount: state.hops,
97
105
  });
98
106
  const result = await this.questionRefinedNode.execute({ state: state });
99
- this.tracer.addSpanEvent(`Node: question_refiner complete - hop ${state.hops}/${maxHops}`, {
107
+ this.tracer.addSpanEvent(`Node: question_refiner complete - hop ${state.hops} calls ${state.llmCalls ?? 0}/${retrieval_constants_1.MAX_LLM_CALLS_PER_RUN}`, {
100
108
  nextStep: result.nextStep,
101
109
  });
102
110
  return result;
103
111
  })
104
112
  .addNode("rational_plan", async (state) => {
105
- this.tracer.addSpanEvent(`Node: rational_plan - hop ${state.hops}/${maxHops}`, {
113
+ this.tracer.addSpanEvent(`Node: rational_plan - hop ${state.hops} calls ${state.llmCalls ?? 0}/${retrieval_constants_1.MAX_LLM_CALLS_PER_RUN}`, {
106
114
  hopCount: state.hops,
107
115
  });
108
116
  const result = await this.rationalNode.execute({ state: state });
109
- this.tracer.addSpanEvent(`Node: rational_plan complete - hop ${state.hops}/${maxHops}`, {
117
+ this.tracer.addSpanEvent(`Node: rational_plan complete - hop ${state.hops} calls ${state.llmCalls ?? 0}/${retrieval_constants_1.MAX_LLM_CALLS_PER_RUN}`, {
110
118
  nextStep: result.nextStep,
111
119
  });
112
120
  return result;
113
121
  })
114
122
  .addNode("key_concepts", async (state) => {
115
- this.tracer.addSpanEvent(`Node: key_concepts - hop ${state.hops}/${maxHops}`, {
123
+ this.tracer.addSpanEvent(`Node: key_concepts - hop ${state.hops} calls ${state.llmCalls ?? 0}/${retrieval_constants_1.MAX_LLM_CALLS_PER_RUN}`, {
116
124
  hopCount: state.hops,
117
125
  });
118
126
  const result = await this.keyConceptsNode.execute({
119
127
  state: state,
120
128
  });
121
- this.tracer.addSpanEvent(`Node: key_concepts complete - hop ${state.hops}/${maxHops}`, {
129
+ this.tracer.addSpanEvent(`Node: key_concepts complete - hop ${state.hops} calls ${state.llmCalls ?? 0}/${retrieval_constants_1.MAX_LLM_CALLS_PER_RUN}`, {
122
130
  nextStep: result.nextStep,
123
131
  });
124
132
  return result;
125
133
  })
126
134
  .addNode("atomic_facts", async (state) => {
127
- this.tracer.addSpanEvent(`Node: atomic_facts - hop ${state.hops}/${maxHops}`, {
135
+ this.tracer.addSpanEvent(`Node: atomic_facts - hop ${state.hops} calls ${state.llmCalls ?? 0}/${retrieval_constants_1.MAX_LLM_CALLS_PER_RUN}`, {
128
136
  hopCount: state.hops,
129
137
  });
130
138
  const result = await this.atomicFactsNode.execute({
131
139
  state: state,
132
140
  });
133
- this.tracer.addSpanEvent(`Node: atomic_facts complete - hop ${state.hops}/${maxHops}`, {
141
+ this.tracer.addSpanEvent(`Node: atomic_facts complete - hop ${state.hops} calls ${state.llmCalls ?? 0}/${retrieval_constants_1.MAX_LLM_CALLS_PER_RUN}`, {
134
142
  nextStep: result.nextStep,
135
143
  });
136
144
  return result;
137
145
  })
138
146
  .addNode("chunk_vector", async (state) => {
139
- this.tracer.addSpanEvent(`Node: chunk_vector - hop ${state.hops}/${maxHops}`, {
147
+ this.tracer.addSpanEvent(`Node: chunk_vector - hop ${state.hops} calls ${state.llmCalls ?? 0}/${retrieval_constants_1.MAX_LLM_CALLS_PER_RUN}`, {
140
148
  hopCount: state.hops,
141
149
  });
142
150
  const result = await this.chunkVectorNode.execute({ state });
143
- this.tracer.addSpanEvent(`Node: chunk_vector complete - hop ${state.hops}/${maxHops}`);
151
+ this.tracer.addSpanEvent(`Node: chunk_vector complete - hop ${state.hops} calls ${state.llmCalls ?? 0}/${retrieval_constants_1.MAX_LLM_CALLS_PER_RUN}`);
144
152
  return result;
145
153
  })
146
154
  .addNode("chunks", async (state) => {
147
- this.tracer.addSpanEvent(`Node: chunks - hop ${state.hops}/${maxHops}`, {
155
+ this.tracer.addSpanEvent(`Node: chunks - hop ${state.hops} calls ${state.llmCalls ?? 0}/${retrieval_constants_1.MAX_LLM_CALLS_PER_RUN}`, {
148
156
  hopCount: state.hops,
149
157
  });
150
158
  const result = await this.chunkNode.execute({
151
159
  state: state,
152
160
  });
153
- this.tracer.addSpanEvent(`Node: chunks complete - hop ${state.hops}/${maxHops}`, {
161
+ this.tracer.addSpanEvent(`Node: chunks complete - hop ${state.hops} calls ${state.llmCalls ?? 0}/${retrieval_constants_1.MAX_LLM_CALLS_PER_RUN}`, {
154
162
  nextStep: result.nextStep,
155
163
  });
156
164
  return result;
157
165
  })
158
166
  .addNode("neighbouring_nodes", async (state) => {
159
- this.tracer.addSpanEvent(`Node: neighbouring_nodes - hop ${state.hops}/${maxHops}`, {
167
+ this.tracer.addSpanEvent(`Node: neighbouring_nodes - hop ${state.hops} calls ${state.llmCalls ?? 0}/${retrieval_constants_1.MAX_LLM_CALLS_PER_RUN}`, {
160
168
  hopCount: state.hops,
161
169
  });
162
170
  const result = await this.keyConceptsNode.execute({
163
171
  state: state,
164
172
  });
165
- this.tracer.addSpanEvent(`Node: neighbouring_nodes complete - hop ${state.hops}/${maxHops}`, {
173
+ this.tracer.addSpanEvent(`Node: neighbouring_nodes complete - hop ${state.hops} calls ${state.llmCalls ?? 0}/${retrieval_constants_1.MAX_LLM_CALLS_PER_RUN}`, {
166
174
  nextStep: result.nextStep,
167
175
  });
168
176
  return result;
169
177
  })
170
178
  .addNode("answer", (state) => {
171
- this.tracer.addSpanEvent(`Node: answer - hop ${state.hops}/${maxHops} (final)`, {
179
+ this.tracer.addSpanEvent(`Node: answer - hop ${state.hops} calls ${state.llmCalls ?? 0}/${retrieval_constants_1.MAX_LLM_CALLS_PER_RUN} (final)`, {
172
180
  hopCount: state.hops,
173
181
  });
174
182
  return { ...state, tokens: { input: 0, output: 0 } };
@@ -200,13 +208,13 @@ let ContextualiserService = ContextualiserService_1 = class ContextualiserServic
200
208
  let finalState;
201
209
  try {
202
210
  finalState = await app.invoke(initialState, {
203
- recursionLimit: maxHops + 2,
211
+ recursionLimit: maxSupersteps + 2,
204
212
  });
205
213
  this.tracer.addSpanEvent("Workflow Completed", {
206
214
  finalHopCount: finalState.hops,
207
215
  totalSteps: stepCount,
208
216
  });
209
- this.logger.log(`contextualiser END hops=${finalState.hops}/${maxHops} ` +
217
+ this.logger.log(`contextualiser END hops=${finalState.hops} calls=${finalState.llmCalls ?? 0}/${retrieval_constants_1.MAX_LLM_CALLS_PER_RUN} ` +
210
218
  `processedKeyConcepts=${finalState.processedKeyConcepts?.length ?? 0} ` +
211
219
  `processedAtomicFacts=${finalState.processedAtomicFacts?.length ?? 0} ` +
212
220
  `processedChunks=${finalState.processedChunks?.length ?? 0} ` +