@mohamedtebo/convai-platform 1.0.0 → 1.0.4

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 (154) hide show
  1. package/README.md +80 -72
  2. package/dist/providers/openai/builders/conversation-or-create.builder.d.ts +7 -6
  3. package/dist/providers/openai/builders/conversation-or-create.builder.d.ts.map +1 -1
  4. package/dist/providers/openai/builders/conversation-or-create.builder.js +11 -11
  5. package/dist/providers/openai/builders/conversation-or-create.builder.js.map +1 -1
  6. package/dist/providers/openai/loops/responses-tool.loop.d.ts +7 -2
  7. package/dist/providers/openai/loops/responses-tool.loop.d.ts.map +1 -1
  8. package/dist/providers/openai/loops/responses-tool.loop.js +164 -48
  9. package/dist/providers/openai/loops/responses-tool.loop.js.map +1 -1
  10. package/dist/providers/openai/openai-responses.provider.d.ts.map +1 -1
  11. package/dist/providers/openai/openai-responses.provider.js +1 -2
  12. package/dist/providers/openai/openai-responses.provider.js.map +1 -1
  13. package/dist/providers/openai/operations/create-response.operation.d.ts +2 -1
  14. package/dist/providers/openai/operations/create-response.operation.d.ts.map +1 -1
  15. package/dist/providers/openai/operations/create-response.operation.js +13 -4
  16. package/dist/providers/openai/operations/create-response.operation.js.map +1 -1
  17. package/dist/providers/openai/operations/submit-tool-outputs.operation.d.ts +4 -3
  18. package/dist/providers/openai/operations/submit-tool-outputs.operation.d.ts.map +1 -1
  19. package/dist/providers/openai/operations/submit-tool-outputs.operation.js +13 -7
  20. package/dist/providers/openai/operations/submit-tool-outputs.operation.js.map +1 -1
  21. package/docs/API_INTEGRATION.md +385 -0
  22. package/package.json +3 -3
  23. package/dist/src/adapters/index.d.ts +0 -2
  24. package/dist/src/adapters/index.d.ts.map +0 -1
  25. package/dist/src/adapters/index.js +0 -6
  26. package/dist/src/adapters/index.js.map +0 -1
  27. package/dist/src/adapters/memory-conversation.store.d.ts +0 -12
  28. package/dist/src/adapters/memory-conversation.store.d.ts.map +0 -1
  29. package/dist/src/adapters/memory-conversation.store.js +0 -25
  30. package/dist/src/adapters/memory-conversation.store.js.map +0 -1
  31. package/dist/src/composed/platform-client.d.ts +0 -29
  32. package/dist/src/composed/platform-client.d.ts.map +0 -1
  33. package/dist/src/composed/platform-client.js +0 -16
  34. package/dist/src/composed/platform-client.js.map +0 -1
  35. package/dist/src/errors/index.d.ts +0 -4
  36. package/dist/src/errors/index.d.ts.map +0 -1
  37. package/dist/src/errors/index.js +0 -11
  38. package/dist/src/errors/index.js.map +0 -1
  39. package/dist/src/errors/provider.error.d.ts +0 -16
  40. package/dist/src/errors/provider.error.d.ts.map +0 -1
  41. package/dist/src/errors/provider.error.js +0 -15
  42. package/dist/src/errors/provider.error.js.map +0 -1
  43. package/dist/src/errors/sdk.error.d.ts +0 -15
  44. package/dist/src/errors/sdk.error.d.ts.map +0 -1
  45. package/dist/src/errors/sdk.error.js +0 -16
  46. package/dist/src/errors/sdk.error.js.map +0 -1
  47. package/dist/src/errors/tool-loop.error.d.ts +0 -11
  48. package/dist/src/errors/tool-loop.error.d.ts.map +0 -1
  49. package/dist/src/errors/tool-loop.error.js +0 -30
  50. package/dist/src/errors/tool-loop.error.js.map +0 -1
  51. package/dist/src/factory/index.d.ts +0 -2
  52. package/dist/src/factory/index.d.ts.map +0 -1
  53. package/dist/src/factory/index.js +0 -6
  54. package/dist/src/factory/index.js.map +0 -1
  55. package/dist/src/factory/provider.factory.d.ts +0 -8
  56. package/dist/src/factory/provider.factory.d.ts.map +0 -1
  57. package/dist/src/factory/provider.factory.js +0 -49
  58. package/dist/src/factory/provider.factory.js.map +0 -1
  59. package/dist/src/index.d.ts +0 -13
  60. package/dist/src/index.d.ts.map +0 -1
  61. package/dist/src/index.js +0 -34
  62. package/dist/src/index.js.map +0 -1
  63. package/dist/src/providers/anthropic/anthropic.provider.d.ts +0 -22
  64. package/dist/src/providers/anthropic/anthropic.provider.d.ts.map +0 -1
  65. package/dist/src/providers/anthropic/anthropic.provider.js +0 -34
  66. package/dist/src/providers/anthropic/anthropic.provider.js.map +0 -1
  67. package/dist/src/providers/anthropic/loops/claude-tool.loop.d.ts +0 -11
  68. package/dist/src/providers/anthropic/loops/claude-tool.loop.d.ts.map +0 -1
  69. package/dist/src/providers/anthropic/loops/claude-tool.loop.js +0 -58
  70. package/dist/src/providers/anthropic/loops/claude-tool.loop.js.map +0 -1
  71. package/dist/src/providers/anthropic/utils/error-mapper.d.ts +0 -4
  72. package/dist/src/providers/anthropic/utils/error-mapper.d.ts.map +0 -1
  73. package/dist/src/providers/anthropic/utils/error-mapper.js +0 -35
  74. package/dist/src/providers/anthropic/utils/error-mapper.js.map +0 -1
  75. package/dist/src/providers/openai/builders/conversation-or-create.builder.d.ts +0 -15
  76. package/dist/src/providers/openai/builders/conversation-or-create.builder.d.ts.map +0 -1
  77. package/dist/src/providers/openai/builders/conversation-or-create.builder.js +0 -18
  78. package/dist/src/providers/openai/builders/conversation-or-create.builder.js.map +0 -1
  79. package/dist/src/providers/openai/loops/assistants-tool.loop.d.ts +0 -19
  80. package/dist/src/providers/openai/loops/assistants-tool.loop.d.ts.map +0 -1
  81. package/dist/src/providers/openai/loops/assistants-tool.loop.js +0 -58
  82. package/dist/src/providers/openai/loops/assistants-tool.loop.js.map +0 -1
  83. package/dist/src/providers/openai/loops/responses-tool.loop.d.ts +0 -14
  84. package/dist/src/providers/openai/loops/responses-tool.loop.d.ts.map +0 -1
  85. package/dist/src/providers/openai/loops/responses-tool.loop.js +0 -87
  86. package/dist/src/providers/openai/loops/responses-tool.loop.js.map +0 -1
  87. package/dist/src/providers/openai/openai-assistants.provider.d.ts +0 -27
  88. package/dist/src/providers/openai/openai-assistants.provider.d.ts.map +0 -1
  89. package/dist/src/providers/openai/openai-assistants.provider.js +0 -40
  90. package/dist/src/providers/openai/openai-assistants.provider.js.map +0 -1
  91. package/dist/src/providers/openai/openai-responses.provider.d.ts +0 -25
  92. package/dist/src/providers/openai/openai-responses.provider.d.ts.map +0 -1
  93. package/dist/src/providers/openai/openai-responses.provider.js +0 -35
  94. package/dist/src/providers/openai/openai-responses.provider.js.map +0 -1
  95. package/dist/src/providers/openai/operations/create-conversation.operation.d.ts +0 -7
  96. package/dist/src/providers/openai/operations/create-conversation.operation.d.ts.map +0 -1
  97. package/dist/src/providers/openai/operations/create-conversation.operation.js +0 -22
  98. package/dist/src/providers/openai/operations/create-conversation.operation.js.map +0 -1
  99. package/dist/src/providers/openai/operations/create-response.operation.d.ts +0 -13
  100. package/dist/src/providers/openai/operations/create-response.operation.d.ts.map +0 -1
  101. package/dist/src/providers/openai/operations/create-response.operation.js +0 -27
  102. package/dist/src/providers/openai/operations/create-response.operation.js.map +0 -1
  103. package/dist/src/providers/openai/operations/submit-tool-outputs.operation.d.ts +0 -17
  104. package/dist/src/providers/openai/operations/submit-tool-outputs.operation.d.ts.map +0 -1
  105. package/dist/src/providers/openai/operations/submit-tool-outputs.operation.js +0 -33
  106. package/dist/src/providers/openai/operations/submit-tool-outputs.operation.js.map +0 -1
  107. package/dist/src/providers/openai/utils/error-mapper.d.ts +0 -4
  108. package/dist/src/providers/openai/utils/error-mapper.d.ts.map +0 -1
  109. package/dist/src/providers/openai/utils/error-mapper.js +0 -45
  110. package/dist/src/providers/openai/utils/error-mapper.js.map +0 -1
  111. package/dist/src/providers/openai/utils/usage-mapper.d.ts +0 -10
  112. package/dist/src/providers/openai/utils/usage-mapper.d.ts.map +0 -1
  113. package/dist/src/providers/openai/utils/usage-mapper.js +0 -16
  114. package/dist/src/providers/openai/utils/usage-mapper.js.map +0 -1
  115. package/dist/src/safe/index.d.ts +0 -2
  116. package/dist/src/safe/index.d.ts.map +0 -1
  117. package/dist/src/safe/index.js +0 -6
  118. package/dist/src/safe/index.js.map +0 -1
  119. package/dist/src/safe/safe-platform.client.d.ts +0 -14
  120. package/dist/src/safe/safe-platform.client.d.ts.map +0 -1
  121. package/dist/src/safe/safe-platform.client.js +0 -56
  122. package/dist/src/safe/safe-platform.client.js.map +0 -1
  123. package/dist/src/types/ask-with-tools.types.d.ts +0 -48
  124. package/dist/src/types/ask-with-tools.types.d.ts.map +0 -1
  125. package/dist/src/types/ask-with-tools.types.js +0 -3
  126. package/dist/src/types/ask-with-tools.types.js.map +0 -1
  127. package/dist/src/types/client-config.interface.d.ts +0 -33
  128. package/dist/src/types/client-config.interface.d.ts.map +0 -1
  129. package/dist/src/types/client-config.interface.js +0 -3
  130. package/dist/src/types/client-config.interface.js.map +0 -1
  131. package/dist/src/types/conversation-store.interface.d.ts +0 -24
  132. package/dist/src/types/conversation-store.interface.d.ts.map +0 -1
  133. package/dist/src/types/conversation-store.interface.js +0 -3
  134. package/dist/src/types/conversation-store.interface.js.map +0 -1
  135. package/dist/src/types/index.d.ts +0 -8
  136. package/dist/src/types/index.d.ts.map +0 -1
  137. package/dist/src/types/index.js +0 -7
  138. package/dist/src/types/index.js.map +0 -1
  139. package/dist/src/types/provider.interface.d.ts +0 -13
  140. package/dist/src/types/provider.interface.d.ts.map +0 -1
  141. package/dist/src/types/provider.interface.js +0 -3
  142. package/dist/src/types/provider.interface.js.map +0 -1
  143. package/dist/src/types/sdk-result.interface.d.ts +0 -30
  144. package/dist/src/types/sdk-result.interface.d.ts.map +0 -1
  145. package/dist/src/types/sdk-result.interface.js +0 -11
  146. package/dist/src/types/sdk-result.interface.js.map +0 -1
  147. package/dist/src/types/tool-handler.interface.d.ts +0 -45
  148. package/dist/src/types/tool-handler.interface.d.ts.map +0 -1
  149. package/dist/src/types/tool-handler.interface.js +0 -3
  150. package/dist/src/types/tool-handler.interface.js.map +0 -1
  151. package/dist/tests/safe-client.test.d.ts +0 -2
  152. package/dist/tests/safe-client.test.d.ts.map +0 -1
  153. package/dist/tests/safe-client.test.js +0 -66
  154. package/dist/tests/safe-client.test.js.map +0 -1
@@ -7,12 +7,21 @@ async function createResponse(openai, params) {
7
7
  const { conversationId, previousResponseId, model, instructions, userQuestion, tools, vectorStoreIds, } = params;
8
8
  const body = {
9
9
  model,
10
- conversation_id: conversationId,
11
10
  instructions,
12
- input: userQuestion,
13
- ...(previousResponseId ? { previous_response_id: previousResponseId } : {}),
14
- ...(tools?.length ? { tools } : {}),
11
+ // Responses API requires an array of message objects, not a plain string
12
+ input: [{ role: 'user', content: userQuestion }],
13
+ store: true,
15
14
  };
15
+ // Pass existing conversation or chain via previous_response_id — never both
16
+ if (conversationId) {
17
+ body['conversation'] = conversationId;
18
+ }
19
+ else if (previousResponseId) {
20
+ body['previous_response_id'] = previousResponseId;
21
+ }
22
+ if (tools?.length) {
23
+ body['tools'] = tools;
24
+ }
16
25
  if (vectorStoreIds?.length) {
17
26
  body['tool_resources'] = { file_search: { vector_store_ids: vectorStoreIds } };
18
27
  }
@@ -1 +1 @@
1
- {"version":3,"file":"create-response.operation.js","sourceRoot":"","sources":["../../../../src/providers/openai/operations/create-response.operation.ts"],"names":[],"mappings":";;AAcA,wCAiCC;AA9CD,wDAAuD;AAYvD,mFAAmF;AAC5E,KAAK,UAAU,cAAc,CAClC,MAAc,EACd,MAA4B;IAE5B,MAAM,EACJ,cAAc,EACd,kBAAkB,EAClB,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,KAAK,EACL,cAAc,GACf,GAAG,MAAM,CAAC;IAEX,MAAM,IAAI,GAA4B;QACpC,KAAK;QACL,eAAe,EAAE,cAAc;QAC/B,YAAY;QACZ,KAAK,EAAE,YAAY;QACnB,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpC,CAAC;IAEF,IAAI,cAAc,EAAE,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE,gBAAgB,EAAE,cAAc,EAAE,EAAE,CAAC;IACjF,CAAC;IAED,IAAI,CAAC;QACH,8DAA8D;QAC9D,OAAO,MAAO,MAAc,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAA,6BAAc,EAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"create-response.operation.js","sourceRoot":"","sources":["../../../../src/providers/openai/operations/create-response.operation.ts"],"names":[],"mappings":";;AAeA,wCA2CC;AAzDD,wDAAuD;AAavD,mFAAmF;AAC5E,KAAK,UAAU,cAAc,CAClC,MAAc,EACd,MAA4B;IAE5B,MAAM,EACJ,cAAc,EACd,kBAAkB,EAClB,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,KAAK,EACL,cAAc,GACf,GAAG,MAAM,CAAC;IAEX,MAAM,IAAI,GAA4B;QACpC,KAAK;QACL,YAAY;QACZ,yEAAyE;QACzE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;QAChD,KAAK,EAAE,IAAI;KACZ,CAAC;IAEF,4EAA4E;IAC5E,IAAI,cAAc,EAAE,CAAC;QACnB,IAAI,CAAC,cAAc,CAAC,GAAG,cAAc,CAAC;IACxC,CAAC;SAAM,IAAI,kBAAkB,EAAE,CAAC;QAC9B,IAAI,CAAC,sBAAsB,CAAC,GAAG,kBAAkB,CAAC;IACpD,CAAC;IAED,IAAI,KAAK,EAAE,MAAM,EAAE,CAAC;QAClB,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;IACxB,CAAC;IAED,IAAI,cAAc,EAAE,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE,gBAAgB,EAAE,cAAc,EAAE,EAAE,CAAC;IACjF,CAAC;IAED,IAAI,CAAC;QACH,8DAA8D;QAC9D,OAAO,MAAO,MAAc,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAA,6BAAc,EAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC"}
@@ -2,7 +2,8 @@ import type OpenAI from 'openai';
2
2
  import type { ToolOutput } from '../../../types/tool-handler.interface';
3
3
  export interface SubmitToolOutputsParams {
4
4
  previousResponseId: string;
5
- conversationId: string;
5
+ /** Used only when previous_response_id is not set — never send both. */
6
+ conversationId?: string;
6
7
  model: string;
7
8
  instructions: string;
8
9
  toolOutputs: ToolOutput[];
@@ -10,8 +11,8 @@ export interface SubmitToolOutputsParams {
10
11
  }
11
12
  /**
12
13
  * Resumes the AI response by submitting tool call outputs.
13
- * In the Responses API this is a new responses.create call with the previous_response_id set
14
- * and the tool results embedded in the input array.
14
+ * OpenAI accepts either `conversation` OR `previous_response_id`, never both.
15
+ * Tool continuations chain via previous_response_id (matches telbany legacy when no conversation).
15
16
  */
16
17
  export declare function submitToolOutputs(openai: OpenAI, params: SubmitToolOutputsParams): Promise<unknown>;
17
18
  //# sourceMappingURL=submit-tool-outputs.operation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"submit-tool-outputs.operation.d.ts","sourceRoot":"","sources":["../../../../src/providers/openai/operations/submit-tool-outputs.operation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAGxE,MAAM,WAAW,uBAAuB;IACtC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,OAAO,CAAC,CAwBlB"}
1
+ {"version":3,"file":"submit-tool-outputs.operation.d.ts","sourceRoot":"","sources":["../../../../src/providers/openai/operations/submit-tool-outputs.operation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAGxE,MAAM,WAAW,uBAAuB;IACtC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,wEAAwE;IACxE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,OAAO,CAAC,CA8BlB"}
@@ -4,24 +4,30 @@ exports.submitToolOutputs = submitToolOutputs;
4
4
  const error_mapper_1 = require("../utils/error-mapper");
5
5
  /**
6
6
  * Resumes the AI response by submitting tool call outputs.
7
- * In the Responses API this is a new responses.create call with the previous_response_id set
8
- * and the tool results embedded in the input array.
7
+ * OpenAI accepts either `conversation` OR `previous_response_id`, never both.
8
+ * Tool continuations chain via previous_response_id (matches telbany legacy when no conversation).
9
9
  */
10
10
  async function submitToolOutputs(openai, params) {
11
11
  const { previousResponseId, conversationId, model, instructions, toolOutputs, tools } = params;
12
12
  const toolResultMessages = toolOutputs.map((o) => ({
13
- type: 'tool_result',
14
- tool_use_id: o.call_id,
15
- content: o.output,
13
+ type: 'function_call_output',
14
+ call_id: o.call_id,
15
+ output: o.output,
16
16
  }));
17
17
  const body = {
18
18
  model,
19
- conversation_id: conversationId,
20
19
  instructions,
21
- previous_response_id: previousResponseId,
22
20
  input: toolResultMessages,
21
+ store: true,
23
22
  ...(tools?.length ? { tools } : {}),
24
23
  };
24
+ // Mutually exclusive — prefer chaining from the function-call response
25
+ if (previousResponseId) {
26
+ body['previous_response_id'] = previousResponseId;
27
+ }
28
+ else if (conversationId) {
29
+ body['conversation'] = conversationId;
30
+ }
25
31
  try {
26
32
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
27
33
  return await openai.responses.create(body);
@@ -1 +1 @@
1
- {"version":3,"file":"submit-tool-outputs.operation.js","sourceRoot":"","sources":["../../../../src/providers/openai/operations/submit-tool-outputs.operation.ts"],"names":[],"mappings":";;AAkBA,8CA2BC;AA3CD,wDAAuD;AAWvD;;;;GAIG;AACI,KAAK,UAAU,iBAAiB,CACrC,MAAc,EACd,MAA+B;IAE/B,MAAM,EAAE,kBAAkB,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IAE/F,MAAM,kBAAkB,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACjD,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,CAAC,CAAC,OAAO;QACtB,OAAO,EAAE,CAAC,CAAC,MAAM;KAClB,CAAC,CAAC,CAAC;IAEJ,MAAM,IAAI,GAA4B;QACpC,KAAK;QACL,eAAe,EAAE,cAAc;QAC/B,YAAY;QACZ,oBAAoB,EAAE,kBAAkB;QACxC,KAAK,EAAE,kBAAkB;QACzB,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpC,CAAC;IAEF,IAAI,CAAC;QACH,8DAA8D;QAC9D,OAAO,MAAO,MAAc,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAA,6BAAc,EAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"submit-tool-outputs.operation.js","sourceRoot":"","sources":["../../../../src/providers/openai/operations/submit-tool-outputs.operation.ts"],"names":[],"mappings":";;AAmBA,8CAiCC;AAlDD,wDAAuD;AAYvD;;;;GAIG;AACI,KAAK,UAAU,iBAAiB,CACrC,MAAc,EACd,MAA+B;IAE/B,MAAM,EAAE,kBAAkB,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IAE/F,MAAM,kBAAkB,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACjD,IAAI,EAAE,sBAAsB;QAC5B,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,MAAM,EAAE,CAAC,CAAC,MAAM;KACjB,CAAC,CAAC,CAAC;IAEJ,MAAM,IAAI,GAA4B;QACpC,KAAK;QACL,YAAY;QACZ,KAAK,EAAE,kBAAkB;QACzB,KAAK,EAAE,IAAI;QACX,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpC,CAAC;IAEF,uEAAuE;IACvE,IAAI,kBAAkB,EAAE,CAAC;QACvB,IAAI,CAAC,sBAAsB,CAAC,GAAG,kBAAkB,CAAC;IACpD,CAAC;SAAM,IAAI,cAAc,EAAE,CAAC;QAC1B,IAAI,CAAC,cAAc,CAAC,GAAG,cAAc,CAAC;IACxC,CAAC;IAED,IAAI,CAAC;QACH,8DAA8D;QAC9D,OAAO,MAAO,MAAc,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAA,6BAAc,EAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC"}
@@ -0,0 +1,385 @@
1
+ # @mohamedtebo/convai-platform — API Integration Guide
2
+
3
+ Integration of this SDK into the **api** service for OpenAI **Responses + Conversations**, with MongoDB persistence and custom function tools.
4
+
5
+ > **Package:** `@mohamedtebo/convai-platform`
6
+ > **Consumer adapters:** `api/src/core/convai-adapters/` (in the api monorepo)
7
+
8
+ ---
9
+
10
+ ## Table of contents
11
+
12
+ 1. [Architecture](#architecture)
13
+ 2. [Environment variables](#environment-variables)
14
+ 3. [Setup examples](#setup-examples)
15
+ 4. [Production rollout & migration scripts](#production-rollout--migration-scripts)
16
+ 5. [User message → AI reply lifecycle](#user-message--ai-reply-lifecycle)
17
+ 6. [WhatsApp integration cycle](#whatsapp-integration-cycle)
18
+ 7. [Facebook Messenger integration cycle](#facebook-messenger-integration-cycle)
19
+ 8. [Tool loop lifecycle](#tool-loop-lifecycle)
20
+ 9. [Vision (images)](#vision-images)
21
+ 10. [Troubleshooting](#troubleshooting)
22
+ 11. [Publish this package](#publish-this-package)
23
+
24
+ ---
25
+
26
+ ## Architecture
27
+
28
+ ```
29
+ Widget / Channel
30
+
31
+
32
+ api (Socket: ask-question)
33
+
34
+
35
+ ThreadRunQueue ──► getBotMessageForResponses()
36
+
37
+ ├── AI_USE_CONVAI_SDK=false → legacy response-tool-loop (deprecated)
38
+
39
+ └── AI_USE_CONVAI_SDK=true → getBotMessageForResponsesViaSdk()
40
+
41
+ ├── buildResponseConfig() ← instructions, tools, model
42
+ ├── enrichResponsesUserQuestion() ← vision when enabled
43
+ ├── getAIPlatformClient() ← cached SDK client
44
+ └── sdkClient.safe.askWithTools()
45
+
46
+ ├── MongoConversationStore
47
+ ├── ApiToolHandler ← tickets, calendar, custom functions
48
+ └── OpenAI Responses API tool loop (this SDK)
49
+
50
+
51
+ AssistantResponseService / handleFinalResponseForResponses
52
+
53
+
54
+ Socket BOT_REPLIED → widget
55
+ ```
56
+
57
+ ### api adapter files
58
+
59
+ | File | Role |
60
+ |------|------|
61
+ | `api/src/core/convai-adapters/ai-platform.factory.ts` | Cached `PlatformClient` |
62
+ | `api/src/core/convai-adapters/mongo-conversation.store.ts` | `Thread.openai_conversation_id` / `last_response_id` |
63
+ | `api/src/core/convai-adapters/telbany-tool.handler.ts` | **ApiToolHandler** → `run-completion.service` |
64
+ | `api/src/core/convai-adapters/tool-loop-context.loader.ts` | Chatbot functions + org context |
65
+ | `api/src/core/services/ai/providers/openai/response-config.builder.ts` | Instructions, tools, model |
66
+ | `api/src/api/v1/routes/openai/helpers.ts` | `getBotMessageForResponses()` |
67
+
68
+ ### SDK files (this package)
69
+
70
+ | File | Role |
71
+ |------|------|
72
+ | `src/composed/platform-client.ts` | `createPlatformClient()` |
73
+ | `src/providers/openai/openai-responses.provider.ts` | Responses provider |
74
+ | `src/providers/openai/loops/responses-tool.loop.ts` | Tool loop (max 10 turns) |
75
+ | `src/providers/openai/operations/create-response.operation.ts` | `responses.create` |
76
+ | `src/providers/openai/operations/submit-tool-outputs.operation.ts` | Tool output submit |
77
+ | `src/types/conversation-store.interface.ts` | `ConversationStore` contract |
78
+ | `src/types/tool-handler.interface.ts` | `ToolHandler` contract |
79
+
80
+ ---
81
+
82
+ ## Environment variables
83
+
84
+ In **api** `.env`:
85
+
86
+ ```env
87
+ AI_BACKEND_DEFAULT=assistants
88
+ AI_RESPONSES_MODEL_DEFAULT=gpt-4o-mini
89
+ AI_USE_CONVAI_SDK=false
90
+ OPENAI_API_KEY=sk-...
91
+ ```
92
+
93
+ | Variable | Values | When to change |
94
+ |----------|--------|----------------|
95
+ | `AI_BACKEND_DEFAULT` | `assistants` \| `responses` | After migration steps 01–04 |
96
+ | `AI_USE_CONVAI_SDK` | `true` \| `false` | After parity test (step 06) on staging |
97
+ | `AI_RESPONSES_MODEL_DEFAULT` | e.g. `gpt-4o-mini` | Optional default model |
98
+
99
+ MongoDB per chatbot:
100
+
101
+ | Field | Purpose |
102
+ |-------|---------|
103
+ | `chatbots.ai_backend` | `assistants` or `responses` |
104
+ | `generalsettings.openai_vision_enabled` | Image analysis before model call |
105
+
106
+ ---
107
+
108
+ ## Setup examples
109
+
110
+ ### Install
111
+
112
+ ```bash
113
+ npm install @mohamedtebo/convai-platform openai
114
+ ```
115
+
116
+ ### Standalone SDK
117
+
118
+ ```typescript
119
+ import { createPlatformClient, MemoryConversationStore } from '@mohamedtebo/convai-platform';
120
+
121
+ const client = createPlatformClient({
122
+ provider: 'openai-responses',
123
+ apiKey: process.env.OPENAI_API_KEY!,
124
+ model: 'gpt-4o-mini',
125
+ conversationStore: new MemoryConversationStore(),
126
+ });
127
+
128
+ const result = await client.safe.askWithTools({
129
+ threadKey: 'resp_conv_abc123',
130
+ chatbotId: '507f1f77bcf86cd799439011',
131
+ organizationId: 'org_001',
132
+ userQuestion: 'I want to book a ticket for tomorrow',
133
+ instructions: 'You are a helpful assistant.',
134
+ tools: [],
135
+ });
136
+
137
+ if (result.success && result.data.kind === 'text') {
138
+ console.log(result.data.outputText);
139
+ }
140
+ ```
141
+
142
+ ### With api adapters (production)
143
+
144
+ ```typescript
145
+ import { getAIPlatformClient } from './core/convai-adapters';
146
+
147
+ const client = getAIPlatformClient({ backend: 'openai-responses', model: 'gpt-4o-mini' });
148
+
149
+ const result = await client.safe.askWithTools({
150
+ threadKey: threadId,
151
+ chatbotId,
152
+ organizationId,
153
+ userQuestion: enrichedQuestion,
154
+ instructions: params.instructions,
155
+ tools: params.tools,
156
+ vectorStoreIds: vectorStoreId ? [vectorStoreId] : undefined,
157
+ model: params.model,
158
+ mediaUrl,
159
+ });
160
+ ```
161
+
162
+ ### Custom ConversationStore + ToolHandler
163
+
164
+ ```typescript
165
+ import { createPlatformClient } from '@mohamedtebo/convai-platform';
166
+ import type { ConversationStore, ToolHandler } from '@mohamedtebo/convai-platform';
167
+
168
+ const client = createPlatformClient({
169
+ provider: 'openai-responses',
170
+ apiKey: process.env.OPENAI_API_KEY!,
171
+ model: 'gpt-4o',
172
+ conversationStore: myStore as ConversationStore,
173
+ toolHandler: myHandler as ToolHandler,
174
+ });
175
+ ```
176
+
177
+ ---
178
+
179
+ ## Production rollout & migration scripts
180
+
181
+ Run from the **api** service root (`MONGO_URI`, `OPENAI_API_KEY` required).
182
+
183
+ ### Steps (must run before production Responses + SDK)
184
+
185
+ | Step | Purpose | Changes DB? |
186
+ |------|---------|-------------|
187
+ | **01** | Audit chatbots, assistant IDs, vector stores | No |
188
+ | **02** | Verify `General.system_prompt` for all chatbots | Conditionally |
189
+ | **03** | Backfill `openai_conversation_id` from Assistants threads | Yes |
190
+ | **04** | Verify threads missing conversation ID | No |
191
+ | **05** | Set `ai_backend=responses` on pilot chatbots | Yes |
192
+ | **06** | Golden-path parity Q&A test | API calls only |
193
+
194
+ ### Commands
195
+
196
+ ```bash
197
+ cd api
198
+
199
+ # Audit
200
+ AI_MIGRATION_DRY_RUN=true MIGRATION_STEPS=01,02 \
201
+ ts-node -r tsconfig-paths/register migrations/openai-responses/run-openai-responses-migration.ts
202
+
203
+ # Backfill (active threads, 90 days)
204
+ AI_MIGRATION_DRY_RUN=false MIGRATION_STEPS=03 \
205
+ ts-node -r tsconfig-paths/register migrations/openai-responses/run-openai-responses-migration.ts
206
+
207
+ # Verify
208
+ AI_MIGRATION_DRY_RUN=false MIGRATION_STEPS=04 \
209
+ ts-node -r tsconfig-paths/register migrations/openai-responses/run-openai-responses-migration.ts
210
+
211
+ # Enable Responses on pilot chatbots
212
+ AI_MIGRATION_DRY_RUN=false MIGRATION_STEPS=05 \
213
+ MIGRATION_CHATBOT_IDS=CHATBOT_ID_1,CHATBOT_ID_2 \
214
+ ts-node -r tsconfig-paths/register migrations/openai-responses/run-openai-responses-migration.ts
215
+
216
+ # Parity test
217
+ AI_MIGRATION_DRY_RUN=false MIGRATION_STEPS=06 \
218
+ PARITY_CHATBOT_ID=CHATBOT_ID_1 \
219
+ ts-node -r tsconfig-paths/register migrations/openai-responses/run-openai-responses-migration.ts
220
+
221
+ # Deploy api: AI_USE_CONVAI_SDK=true
222
+ ```
223
+
224
+ ### Production checklist
225
+
226
+ | Order | Action |
227
+ |-------|--------|
228
+ | 1 | Deploy api code (SDK adapters + fixes) with `AI_USE_CONVAI_SDK=false` |
229
+ | 2 | Run migration steps **01–04** on production Mongo |
230
+ | 3 | Run step **05** on 2–3 internal chatbots |
231
+ | 4 | Run step **06** parity on staging, then prod sample |
232
+ | 5 | Set `AI_USE_CONVAI_SDK=true` on staging → soak → production |
233
+ | 6 | Expand step **05** (5% → 25% → 100% chatbots) |
234
+
235
+ ### Rollback
236
+
237
+ ```bash
238
+ AI_MIGRATION_DRY_RUN=false ROLLBACK_CHATBOT_IDS=CHATBOT_ID \
239
+ ts-node -r tsconfig-paths/register migrations/openai-responses/repair/reset-ai-backend.step.ts
240
+ ```
241
+
242
+ Set `AI_USE_CONVAI_SDK=false` and redeploy.
243
+
244
+ ---
245
+
246
+ ## User message → AI reply lifecycle
247
+
248
+ When `ai_backend=responses` and `AI_USE_CONVAI_SDK=true`:
249
+
250
+ | # | Step | Location | What happens |
251
+ |---|------|----------|--------------|
252
+ | 1 | User sends message | Widget → Socket `ask-question` | `userQuestion`, optional `mediaUrl` |
253
+ | 2 | Save message | `api/.../bot-thread-active.handler.ts` | `userQuestionMessage()` → Mongo `Message` |
254
+ | 3 | Enqueue job | `thread-run-queue.service.ts` | One run per `threadId` (batch or sequential) |
255
+ | 4 | Resolve backend | `resolve-job-backend.helper.ts` | `resp_*` or `ai_backend=responses` |
256
+ | 5 | Batch path | `batch-run-processor.ts` | `getBotMessageForResponses()` (not Assistants API) |
257
+ | 6 | Vision | `helpers.ts` → `enrichResponsesUserQuestion()` | `buildVisionMessageContent()` if enabled |
258
+ | 7 | Config | `response-config.builder.ts` | `system_prompt`, context, function tools |
259
+ | 8 | SDK | `getBotMessageForResponsesViaSdk()` | `askWithTools()` |
260
+ | 9 | Load state | `mongo-conversation.store.ts` | `Thread.openai_conversation_id` |
261
+ | 10 | OpenAI | SDK `create-response.operation.ts` | `responses.create` |
262
+ | 11 | Tools? | SDK `responses-tool.loop.ts` | See tool loop section |
263
+ | 12 | Post-process | `handleFinalResponseForResponses()` | Tickets, markers, widget shape |
264
+ | 13 | Reply | Socket `onResult` | `BOT_REPLIED` event |
265
+
266
+ **Thread IDs**
267
+
268
+ | Backend | Format | Created in |
269
+ |---------|--------|------------|
270
+ | Assistants | `thread_…` | OpenAI Threads API |
271
+ | Responses | `resp_conv_…` | OpenAI Conversations API |
272
+
273
+ > **Full guide (Widget + WhatsApp + Facebook + migration):**
274
+ > api monorepo: `api/docs/COMPLETE_CONVAI_SDK_INTEGRATION_GUIDE.md`
275
+
276
+ ---
277
+
278
+ ## WhatsApp integration cycle
279
+
280
+ ```
281
+ WhatsApp user → Meta webhook → handle-event.ts → handle-incoming-message.ts
282
+ → BullMQ queue_worker (addTextJob / addMediaJob)
283
+ → handleChannelAskQuestion('whatsapp')
284
+ → userQuestionMessage() + ThreadRunQueue.enqueueJob()
285
+ → getBotMessageForResponses() [SDK when AI_USE_CONVAI_SDK=true]
286
+ → dispatchBotReply() → WhatsAppAdapter.sendMessage() → user
287
+ ```
288
+
289
+ | # | Step | File |
290
+ |---|------|------|
291
+ | 1 | Meta webhook POST | `whatsapp/webhook/handle-event.ts` |
292
+ | 2 | Parse text/media/button | `handle-incoming-message.ts` |
293
+ | 3 | Redis queue | `queue_worker.ts` |
294
+ | 4 | Channel routing | `channel-ask-question.handler.ts` |
295
+ | 5 | Save + enqueue AI | `existing-lead-bot-text.handler.ts` |
296
+ | 6 | AI pipeline | Shared (see above) |
297
+ | 7 | Outbound | `channel-bot-reply.handler.ts` → `WhatsAppAdapter` |
298
+
299
+ WhatsApp-specific: typing indicator, interactive calendar lists, media upload to Wasabi.
300
+
301
+ ---
302
+
303
+ ## Facebook Messenger integration cycle
304
+
305
+ ```
306
+ Facebook user → Meta webhook → FacebookAdapter.handleEvent()
307
+ → fetchMessengerMedia() (attachments) → BullMQ queue_worker
308
+ → handleChannelAskQuestion('facebook')
309
+ → userQuestionMessage() + ThreadRunQueue.enqueueJob()
310
+ → getBotMessageForResponses() [SDK when AI_USE_CONVAI_SDK=true]
311
+ → dispatchBotReply() → FacebookAdapter.sendMessage() → user
312
+ ```
313
+
314
+ | # | Step | File |
315
+ |---|------|------|
316
+ | 1 | Meta webhook POST | `FacebookAdapter.ts` |
317
+ | 2 | Skip echo, resolve page | `handleEvent()` |
318
+ | 3 | Media / audio transcript | `fetchMessengerMedia()`, `transcribeAudioToText()` |
319
+ | 4 | Redis queue | `queue_worker.ts` |
320
+ | 5 | Channel routing | `channel-ask-question.handler.ts` |
321
+ | 6 | Save + enqueue AI | `existing-lead-bot-text.handler.ts` |
322
+ | 7 | Outbound | `channel-bot-reply.handler.ts` → `FacebookAdapter` |
323
+
324
+ ---
325
+
326
+ ## Tool loop lifecycle
327
+
328
+ Triggered when `response.output[]` contains `type: function_call`.
329
+
330
+ | # | Step | Location | Description |
331
+ |---|------|----------|-------------|
332
+ | 1 | Detect calls | SDK `responses-tool.loop.ts` | Scan output for `function_call` |
333
+ | 2 | Build output | api `run-completion.service.ts` | Route by function name |
334
+ | 3 | Missing params | api `query-function.context.ts` | JSON + `MANDATORY_RESPONSE_FORMAT` |
335
+ | 4 | Submit | SDK `submit-tool-outputs.operation.ts` | Chain via `conversation` or `previous_response_id` |
336
+ | 5 | Cap | `MAX_TURNS = 10` | Prevent infinite loops |
337
+ | 6 | Extract | api `ApiToolHandler.extractResult()` | Ticket / API when complete |
338
+ | 7 | Short-circuit | SDK `kind: 'toolResult'` | `AssistantResponseService.run()` |
339
+ | 8 | Continue | `extractResult` returns `null` | Model asks user for missing fields |
340
+
341
+ **Tool sources**
342
+
343
+ | Source | Examples |
344
+ |--------|----------|
345
+ | Platform tools | `notifyAgent`, calendar, `get_current_date` |
346
+ | Custom (Mongo) | `create_ticket_for_booking`, `job_application` |
347
+ | File search | When chatbot has vector store |
348
+
349
+ ---
350
+
351
+ ## Vision (images)
352
+
353
+ When `openai_vision_enabled=true`:
354
+
355
+ 1. api `enrichResponsesUserQuestion()` → `buildVisionMessageContent()`
356
+ 2. `VisionFactory.analyzeImages()` → `Image analysis: …` in text
357
+ 3. Enriched text sent as `userQuestion` to SDK
358
+
359
+ ---
360
+
361
+ ## Troubleshooting
362
+
363
+ | Symptom | Cause | Fix area |
364
+ |---------|-------|----------|
365
+ | `Invalid thread_id resp_conv_…` | Assistants API on Responses thread | api batch processor |
366
+ | `Invalid schema … image` | Raw param type to OpenAI | api `function-param-schema.helper.ts` |
367
+ | Ignores images | Vision not enriched | api `enrichResponsesUserQuestion` |
368
+ | Empty reply | SDK error | Check `[getBotMessageForResponses] SDK error` logs |
369
+ | Stale SDK in Docker | Old dist | Rebuild package + restart api |
370
+
371
+ ---
372
+
373
+ ## Publish this package
374
+
375
+ ```bash
376
+ cd convai-platform
377
+ npm run build
378
+ npm publish --access public
379
+ ```
380
+
381
+ If publish returns **404 / no permission**, run `npm login` with the account that owns the `@mohamedtebo` scope on npmjs.com. Until then, mount `./convai-platform/dist` in Docker.
382
+
383
+ ---
384
+
385
+ MIT © mohamedtebo
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@mohamedtebo/convai-platform",
3
- "version": "1.0.0",
3
+ "version": "1.0.4",
4
4
  "description": "Multi-provider AI platform SDK — OpenAI Responses/Conversations + Anthropic Claude with explicit tool loops, pluggable persistence, and SRP architecture",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
- "files": ["dist", "README.md"],
7
+ "files": ["dist", "README.md", "docs"],
8
8
  "scripts": {
9
- "build": "tsc",
9
+ "build": "rm -rf dist && tsc",
10
10
  "dev": "tsc --watch",
11
11
  "test": "npm run build && node --test dist/tests/safe-client.test.js",
12
12
  "prepublishOnly": "npm run build"
@@ -1,2 +0,0 @@
1
- export { MemoryConversationStore } from './memory-conversation.store';
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC"}
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MemoryConversationStore = void 0;
4
- var memory_conversation_store_1 = require("./memory-conversation.store");
5
- Object.defineProperty(exports, "MemoryConversationStore", { enumerable: true, get: function () { return memory_conversation_store_1.MemoryConversationStore; } });
6
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/index.ts"],"names":[],"mappings":";;;AAAA,yEAAsE;AAA7D,oIAAA,uBAAuB,OAAA"}
@@ -1,12 +0,0 @@
1
- import type { ConversationState, ConversationStore } from '../types/conversation-store.interface';
2
- /**
3
- * In-memory ConversationStore — useful for tests and lightweight apps.
4
- * State is lost when the process restarts. Use MongoConversationStore in production.
5
- */
6
- export declare class MemoryConversationStore implements ConversationStore {
7
- private readonly map;
8
- load(threadKey: string): Promise<ConversationState | null>;
9
- save(threadKey: string, state: ConversationState): Promise<void>;
10
- create(threadKey: string, conversationId: string): Promise<ConversationState>;
11
- }
12
- //# sourceMappingURL=memory-conversation.store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory-conversation.store.d.ts","sourceRoot":"","sources":["../../../src/adapters/memory-conversation.store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAElG;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,iBAAiB;IAC/D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAwC;IAEtD,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAI1D,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAKpF"}
@@ -1,25 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MemoryConversationStore = void 0;
4
- /**
5
- * In-memory ConversationStore — useful for tests and lightweight apps.
6
- * State is lost when the process restarts. Use MongoConversationStore in production.
7
- */
8
- class MemoryConversationStore {
9
- constructor() {
10
- this.map = new Map();
11
- }
12
- async load(threadKey) {
13
- return this.map.get(threadKey) ?? null;
14
- }
15
- async save(threadKey, state) {
16
- this.map.set(threadKey, state);
17
- }
18
- async create(threadKey, conversationId) {
19
- const state = { conversationId };
20
- this.map.set(threadKey, state);
21
- return state;
22
- }
23
- }
24
- exports.MemoryConversationStore = MemoryConversationStore;
25
- //# sourceMappingURL=memory-conversation.store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory-conversation.store.js","sourceRoot":"","sources":["../../../src/adapters/memory-conversation.store.ts"],"names":[],"mappings":";;;AAEA;;;GAGG;AACH,MAAa,uBAAuB;IAApC;QACmB,QAAG,GAAG,IAAI,GAAG,EAA6B,CAAC;IAe9D,CAAC;IAbC,KAAK,CAAC,IAAI,CAAC,SAAiB;QAC1B,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAiB,EAAE,KAAwB;QACpD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,SAAiB,EAAE,cAAsB;QACpD,MAAM,KAAK,GAAsB,EAAE,cAAc,EAAE,CAAC;QACpD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAhBD,0DAgBC"}
@@ -1,29 +0,0 @@
1
- import type { ClientConfig } from '../types/client-config.interface';
2
- import type { AskWithToolsParams, AskWithToolsResult } from '../types/ask-with-tools.types';
3
- import type { SdkResult } from '../types/sdk-result.interface';
4
- /**
5
- * Fully composed SDK client.
6
- * Exposes both a raw API (throws on error) and a safe API (returns SdkResult).
7
- *
8
- * @example
9
- * const client = createPlatformClient({
10
- * provider: 'openai-responses',
11
- * apiKey: process.env.OPENAI_API_KEY!,
12
- * model: 'gpt-4o',
13
- * conversationStore: new MongoConversationStore(),
14
- * toolHandler: new TelbanyToolHandler(),
15
- * });
16
- *
17
- * const result = await client.safe.askWithTools({ ... });
18
- * if (result.success) console.log(result.data.outputText);
19
- */
20
- export interface PlatformClient {
21
- /** Call askWithTools directly — throws SdkError on failure. */
22
- askWithTools(params: AskWithToolsParams): Promise<AskWithToolsResult>;
23
- /** Safe version — never throws, returns SdkResult<T>. */
24
- safe: {
25
- askWithTools(params: AskWithToolsParams): Promise<SdkResult<AskWithToolsResult>>;
26
- };
27
- }
28
- export declare function createPlatformClient(config: ClientConfig): PlatformClient;
29
- //# sourceMappingURL=platform-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"platform-client.d.ts","sourceRoot":"","sources":["../../../src/composed/platform-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAC5F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAI/D;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,cAAc;IAC7B,+DAA+D;IAC/D,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACtE,yDAAyD;IACzD,IAAI,EAAE;QACJ,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,CAAC;KAClF,CAAC;CACH;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,cAAc,CAUzE"}
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createPlatformClient = createPlatformClient;
4
- const provider_factory_1 = require("../factory/provider.factory");
5
- const safe_platform_client_1 = require("../safe/safe-platform.client");
6
- function createPlatformClient(config) {
7
- const provider = (0, provider_factory_1.buildProvider)(config);
8
- const safeClient = new safe_platform_client_1.SafePlatformClient(provider);
9
- return {
10
- askWithTools: (params) => provider.askWithTools(params),
11
- safe: {
12
- askWithTools: (params) => safeClient.askWithTools(params),
13
- },
14
- };
15
- }
16
- //# sourceMappingURL=platform-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"platform-client.js","sourceRoot":"","sources":["../../../src/composed/platform-client.ts"],"names":[],"mappings":";;AA+BA,oDAUC;AAtCD,kEAA4D;AAC5D,uEAAkE;AA2BlE,SAAgB,oBAAoB,CAAC,MAAoB;IACvD,MAAM,QAAQ,GAAG,IAAA,gCAAa,EAAC,MAAM,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,IAAI,yCAAkB,CAAC,QAAQ,CAAC,CAAC;IAEpD,OAAO;QACL,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC;QACvD,IAAI,EAAE;YACJ,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC;SAC1D;KACF,CAAC;AACJ,CAAC"}
@@ -1,4 +0,0 @@
1
- export { SdkError } from './sdk.error';
2
- export { ProviderError } from './provider.error';
3
- export { ToolLoopError, NoToolHandlerError } from './tool-loop.error';
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NoToolHandlerError = exports.ToolLoopError = exports.ProviderError = exports.SdkError = void 0;
4
- var sdk_error_1 = require("./sdk.error");
5
- Object.defineProperty(exports, "SdkError", { enumerable: true, get: function () { return sdk_error_1.SdkError; } });
6
- var provider_error_1 = require("./provider.error");
7
- Object.defineProperty(exports, "ProviderError", { enumerable: true, get: function () { return provider_error_1.ProviderError; } });
8
- var tool_loop_error_1 = require("./tool-loop.error");
9
- Object.defineProperty(exports, "ToolLoopError", { enumerable: true, get: function () { return tool_loop_error_1.ToolLoopError; } });
10
- Object.defineProperty(exports, "NoToolHandlerError", { enumerable: true, get: function () { return tool_loop_error_1.NoToolHandlerError; } });
11
- //# sourceMappingURL=index.js.map