@tambo-ai/react 0.45.0 → 0.46.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 (84) hide show
  1. package/dist/hooks/__tests__/use-suggestions.test.js +6 -4
  2. package/dist/hooks/__tests__/use-suggestions.test.js.map +1 -1
  3. package/dist/hooks/index.d.ts +0 -1
  4. package/dist/hooks/index.d.ts.map +1 -1
  5. package/dist/hooks/index.js +1 -3
  6. package/dist/hooks/index.js.map +1 -1
  7. package/dist/hooks/use-suggestions.d.ts.map +1 -1
  8. package/dist/hooks/use-suggestions.js +3 -3
  9. package/dist/hooks/use-suggestions.js.map +1 -1
  10. package/dist/index.d.ts +1 -2
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +3 -3
  13. package/dist/index.js.map +1 -1
  14. package/dist/providers/hooks/__tests__/use-tambo-session-token.test.js +139 -40
  15. package/dist/providers/hooks/__tests__/use-tambo-session-token.test.js.map +1 -1
  16. package/dist/providers/hooks/use-tambo-session-token.d.ts +3 -1
  17. package/dist/providers/hooks/use-tambo-session-token.d.ts.map +1 -1
  18. package/dist/providers/hooks/use-tambo-session-token.js +22 -39
  19. package/dist/providers/hooks/use-tambo-session-token.js.map +1 -1
  20. package/dist/providers/index.d.ts +1 -0
  21. package/dist/providers/index.d.ts.map +1 -1
  22. package/dist/providers/index.js +4 -1
  23. package/dist/providers/index.js.map +1 -1
  24. package/dist/providers/tambo-client-provider.d.ts +7 -0
  25. package/dist/providers/tambo-client-provider.d.ts.map +1 -1
  26. package/dist/providers/tambo-client-provider.js +20 -4
  27. package/dist/providers/tambo-client-provider.js.map +1 -1
  28. package/dist/providers/tambo-provider.d.ts +4 -1
  29. package/dist/providers/tambo-provider.d.ts.map +1 -1
  30. package/dist/providers/tambo-provider.js +10 -4
  31. package/dist/providers/tambo-provider.js.map +1 -1
  32. package/dist/providers/tambo-stubs.d.ts.map +1 -1
  33. package/dist/providers/tambo-stubs.js +3 -3
  34. package/dist/providers/tambo-stubs.js.map +1 -1
  35. package/dist/providers/tambo-thread-input-provider.d.ts +58 -0
  36. package/dist/providers/tambo-thread-input-provider.d.ts.map +1 -0
  37. package/dist/providers/tambo-thread-input-provider.js +106 -0
  38. package/dist/providers/tambo-thread-input-provider.js.map +1 -0
  39. package/esm/hooks/__tests__/use-suggestions.test.js +4 -2
  40. package/esm/hooks/__tests__/use-suggestions.test.js.map +1 -1
  41. package/esm/hooks/index.d.ts +0 -1
  42. package/esm/hooks/index.d.ts.map +1 -1
  43. package/esm/hooks/index.js +0 -1
  44. package/esm/hooks/index.js.map +1 -1
  45. package/esm/hooks/use-suggestions.d.ts.map +1 -1
  46. package/esm/hooks/use-suggestions.js +1 -1
  47. package/esm/hooks/use-suggestions.js.map +1 -1
  48. package/esm/index.d.ts +1 -2
  49. package/esm/index.d.ts.map +1 -1
  50. package/esm/index.js +1 -2
  51. package/esm/index.js.map +1 -1
  52. package/esm/providers/hooks/__tests__/use-tambo-session-token.test.js +139 -40
  53. package/esm/providers/hooks/__tests__/use-tambo-session-token.test.js.map +1 -1
  54. package/esm/providers/hooks/use-tambo-session-token.d.ts +3 -1
  55. package/esm/providers/hooks/use-tambo-session-token.d.ts.map +1 -1
  56. package/esm/providers/hooks/use-tambo-session-token.js +23 -40
  57. package/esm/providers/hooks/use-tambo-session-token.js.map +1 -1
  58. package/esm/providers/index.d.ts +1 -0
  59. package/esm/providers/index.d.ts.map +1 -1
  60. package/esm/providers/index.js +1 -0
  61. package/esm/providers/index.js.map +1 -1
  62. package/esm/providers/tambo-client-provider.d.ts +7 -0
  63. package/esm/providers/tambo-client-provider.d.ts.map +1 -1
  64. package/esm/providers/tambo-client-provider.js +18 -3
  65. package/esm/providers/tambo-client-provider.js.map +1 -1
  66. package/esm/providers/tambo-provider.d.ts +4 -1
  67. package/esm/providers/tambo-provider.d.ts.map +1 -1
  68. package/esm/providers/tambo-provider.js +11 -5
  69. package/esm/providers/tambo-provider.js.map +1 -1
  70. package/esm/providers/tambo-stubs.d.ts.map +1 -1
  71. package/esm/providers/tambo-stubs.js +3 -3
  72. package/esm/providers/tambo-stubs.js.map +1 -1
  73. package/esm/providers/tambo-thread-input-provider.d.ts +58 -0
  74. package/esm/providers/tambo-thread-input-provider.d.ts.map +1 -0
  75. package/esm/{hooks/use-thread-input.js → providers/tambo-thread-input-provider.js} +30 -14
  76. package/esm/providers/tambo-thread-input-provider.js.map +1 -0
  77. package/package.json +1 -1
  78. package/dist/hooks/use-thread-input.d.ts +0 -53
  79. package/dist/hooks/use-thread-input.d.ts.map +0 -1
  80. package/dist/hooks/use-thread-input.js +0 -56
  81. package/dist/hooks/use-thread-input.js.map +0 -1
  82. package/esm/hooks/use-thread-input.d.ts +0 -53
  83. package/esm/hooks/use-thread-input.d.ts.map +0 -1
  84. package/esm/hooks/use-thread-input.js.map +0 -1
@@ -1,53 +0,0 @@
1
- import { UseMutationResult } from "@tanstack/react-query";
2
- /**
3
- * Error messages for various input-related error scenarios
4
- * These messages are used to provide user-friendly error feedback
5
- * @readonly
6
- */
7
- export declare const INPUT_ERROR_MESSAGES: {
8
- /** Error when attempting to submit empty input */
9
- readonly EMPTY: "Message cannot be empty";
10
- /** Error when network connection fails */
11
- readonly NETWORK: "Network error. Please check your connection";
12
- /** Error when server fails to process the request */
13
- readonly SERVER: "Server error. Please try again";
14
- /** Error when input format is invalid */
15
- readonly VALIDATION: "Invalid message format";
16
- };
17
- /**
18
- * Interface for the thread input hook return value
19
- * Provides all necessary functions and state for managing thread input
20
- */
21
- interface UseThreadInputInternal {
22
- /** Current value of the input field */
23
- value: string;
24
- /**
25
- * Function to update the input value
26
- * @param value - New value for the input field
27
- */
28
- setValue: (value: string) => void;
29
- /**
30
- * Function to submit the current input value
31
- * Validates input, handles errors, and cleans up state after submission
32
- * @throws {ThreadInputError} If submission fails
33
- * @returns Promise that resolves when submission is complete
34
- */
35
- submit: (options?: {
36
- contextKey?: string;
37
- streamResponse?: boolean;
38
- forceToolChoice?: string;
39
- additionalContext?: Record<string, any>;
40
- }) => Promise<void>;
41
- }
42
- export type UseThreadInput = UseThreadInputInternal & UseMutationResult<void, Error, {
43
- contextKey?: string;
44
- streamResponse?: boolean;
45
- forceToolChoice?: string;
46
- }>;
47
- /**
48
- * Hook for managing thread message input state and submission
49
- * @returns Interface for managing thread input state and submission
50
- */
51
- export declare function useTamboThreadInput(contextKey?: string): UseThreadInput;
52
- export {};
53
- //# sourceMappingURL=use-thread-input.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-thread-input.d.ts","sourceRoot":"","sources":["../../src/hooks/use-thread-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAO1D;;;;GAIG;AACH,eAAO,MAAM,oBAAoB;IAC/B,kDAAkD;;IAElD,0CAA0C;;IAE1C,qDAAqD;;IAErD,yCAAyC;;CAEjC,CAAC;AAEX;;;GAGG;AACH,UAAU,sBAAsB;IAC9B,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;;;;;OAKG;IACH,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KACzC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrB;AACD,MAAM,MAAM,cAAc,GAAG,sBAAsB,GACjD,iBAAiB,CACf,IAAI,EACJ,KAAK,EACL;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,CAC5E,CAAC;AAEJ;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,cAAc,CAiDvE"}
@@ -1,56 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.INPUT_ERROR_MESSAGES = void 0;
4
- exports.useTamboThreadInput = useTamboThreadInput;
5
- const react_1 = require("react");
6
- const thread_input_error_1 = require("../model/thread-input-error");
7
- const validate_input_1 = require("../model/validate-input");
8
- const tambo_thread_provider_1 = require("../providers/tambo-thread-provider");
9
- const react_query_hooks_1 = require("./react-query-hooks");
10
- /**
11
- * Error messages for various input-related error scenarios
12
- * These messages are used to provide user-friendly error feedback
13
- * @readonly
14
- */
15
- exports.INPUT_ERROR_MESSAGES = {
16
- /** Error when attempting to submit empty input */
17
- EMPTY: "Message cannot be empty",
18
- /** Error when network connection fails */
19
- NETWORK: "Network error. Please check your connection",
20
- /** Error when server fails to process the request */
21
- SERVER: "Server error. Please try again",
22
- /** Error when input format is invalid */
23
- VALIDATION: "Invalid message format",
24
- };
25
- /**
26
- * Hook for managing thread message input state and submission
27
- * @returns Interface for managing thread input state and submission
28
- */
29
- function useTamboThreadInput(contextKey) {
30
- const { thread, sendThreadMessage } = (0, tambo_thread_provider_1.useTamboThread)();
31
- const [inputValue, setInputValue] = (0, react_1.useState)("");
32
- const submit = (0, react_1.useCallback)(async ({ contextKey: submitContextKey, streamResponse, forceToolChoice, additionalContext, } = {}) => {
33
- const validation = (0, validate_input_1.validateInput)(inputValue);
34
- if (!validation.isValid) {
35
- throw new thread_input_error_1.ThreadInputError(`Cannot submit message: ${validation.error ?? exports.INPUT_ERROR_MESSAGES.VALIDATION}`, { cause: validation.error });
36
- }
37
- await sendThreadMessage(validation.sanitizedInput, {
38
- threadId: thread.id,
39
- contextKey: submitContextKey ?? contextKey ?? undefined,
40
- streamResponse: streamResponse,
41
- forceToolChoice: forceToolChoice,
42
- additionalContext: additionalContext,
43
- });
44
- setInputValue(""); // Clear local state
45
- }, [inputValue, sendThreadMessage, thread.id, contextKey, setInputValue]);
46
- const { mutateAsync: submitAsync, mutate: _unusedSubmit, ...mutationState } = (0, react_query_hooks_1.useTamboMutation)({
47
- mutationFn: submit,
48
- });
49
- return {
50
- ...mutationState,
51
- value: inputValue,
52
- setValue: setInputValue,
53
- submit: submitAsync,
54
- };
55
- }
56
- //# sourceMappingURL=use-thread-input.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-thread-input.js","sourceRoot":"","sources":["../../src/hooks/use-thread-input.ts"],"names":[],"mappings":";;;AA2DA,kDAiDC;AA3GD,iCAA8C;AAC9C,oEAA+D;AAC/D,4DAAwD;AACxD,8EAAoE;AACpE,2DAAuD;AAEvD;;;;GAIG;AACU,QAAA,oBAAoB,GAAG;IAClC,kDAAkD;IAClD,KAAK,EAAE,yBAAyB;IAChC,0CAA0C;IAC1C,OAAO,EAAE,6CAA6C;IACtD,qDAAqD;IACrD,MAAM,EAAE,gCAAgC;IACxC,yCAAyC;IACzC,UAAU,EAAE,wBAAwB;CAC5B,CAAC;AAkCX;;;GAGG;AACH,SAAgB,mBAAmB,CAAC,UAAmB;IACrD,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,IAAA,sCAAc,GAAE,CAAC;IACvD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,IAAA,gBAAQ,EAAC,EAAE,CAAC,CAAC;IAEjD,MAAM,MAAM,GAAG,IAAA,mBAAW,EACxB,KAAK,EAAE,EACL,UAAU,EAAE,gBAAgB,EAC5B,cAAc,EACd,eAAe,EACf,iBAAiB,MAMf,EAAE,EAAE,EAAE;QACR,MAAM,UAAU,GAAG,IAAA,8BAAa,EAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,MAAM,IAAI,qCAAgB,CACxB,0BAA0B,UAAU,CAAC,KAAK,IAAI,4BAAoB,CAAC,UAAU,EAAE,EAC/E,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,CAC5B,CAAC;QACJ,CAAC;QAED,MAAM,iBAAiB,CAAC,UAAU,CAAC,cAAc,EAAE;YACjD,QAAQ,EAAE,MAAM,CAAC,EAAE;YACnB,UAAU,EAAE,gBAAgB,IAAI,UAAU,IAAI,SAAS;YACvD,cAAc,EAAE,cAAc;YAC9B,eAAe,EAAE,eAAe;YAChC,iBAAiB,EAAE,iBAAiB;SACrC,CAAC,CAAC;QACH,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB;IACzC,CAAC,EACD,CAAC,UAAU,EAAE,iBAAiB,EAAE,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,aAAa,CAAC,CACtE,CAAC;IACF,MAAM,EACJ,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,aAAa,EACrB,GAAG,aAAa,EACjB,GAAG,IAAA,oCAAgB,EAAC;QACnB,UAAU,EAAE,MAAM;KACnB,CAAC,CAAC;IAEH,OAAO;QACL,GAAG,aAAa;QAChB,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,aAAa;QACvB,MAAM,EAAE,WAAW;KACF,CAAC;AACtB,CAAC","sourcesContent":["import { UseMutationResult } from \"@tanstack/react-query\";\nimport { useCallback, useState } from \"react\";\nimport { ThreadInputError } from \"../model/thread-input-error\";\nimport { validateInput } from \"../model/validate-input\";\nimport { useTamboThread } from \"../providers/tambo-thread-provider\";\nimport { useTamboMutation } from \"./react-query-hooks\";\n\n/**\n * Error messages for various input-related error scenarios\n * These messages are used to provide user-friendly error feedback\n * @readonly\n */\nexport const INPUT_ERROR_MESSAGES = {\n /** Error when attempting to submit empty input */\n EMPTY: \"Message cannot be empty\",\n /** Error when network connection fails */\n NETWORK: \"Network error. Please check your connection\",\n /** Error when server fails to process the request */\n SERVER: \"Server error. Please try again\",\n /** Error when input format is invalid */\n VALIDATION: \"Invalid message format\",\n} as const;\n\n/**\n * Interface for the thread input hook return value\n * Provides all necessary functions and state for managing thread input\n */\ninterface UseThreadInputInternal {\n /** Current value of the input field */\n value: string;\n /**\n * Function to update the input value\n * @param value - New value for the input field\n */\n setValue: (value: string) => void;\n /**\n * Function to submit the current input value\n * Validates input, handles errors, and cleans up state after submission\n * @throws {ThreadInputError} If submission fails\n * @returns Promise that resolves when submission is complete\n */\n submit: (options?: {\n contextKey?: string;\n streamResponse?: boolean;\n forceToolChoice?: string;\n additionalContext?: Record<string, any>;\n }) => Promise<void>;\n}\nexport type UseThreadInput = UseThreadInputInternal &\n UseMutationResult<\n void,\n Error,\n { contextKey?: string; streamResponse?: boolean; forceToolChoice?: string }\n >;\n\n/**\n * Hook for managing thread message input state and submission\n * @returns Interface for managing thread input state and submission\n */\nexport function useTamboThreadInput(contextKey?: string): UseThreadInput {\n const { thread, sendThreadMessage } = useTamboThread();\n const [inputValue, setInputValue] = useState(\"\");\n\n const submit = useCallback(\n async ({\n contextKey: submitContextKey,\n streamResponse,\n forceToolChoice,\n additionalContext,\n }: {\n contextKey?: string;\n streamResponse?: boolean;\n forceToolChoice?: string;\n additionalContext?: Record<string, any>;\n } = {}) => {\n const validation = validateInput(inputValue);\n if (!validation.isValid) {\n throw new ThreadInputError(\n `Cannot submit message: ${validation.error ?? INPUT_ERROR_MESSAGES.VALIDATION}`,\n { cause: validation.error },\n );\n }\n\n await sendThreadMessage(validation.sanitizedInput, {\n threadId: thread.id,\n contextKey: submitContextKey ?? contextKey ?? undefined,\n streamResponse: streamResponse,\n forceToolChoice: forceToolChoice,\n additionalContext: additionalContext,\n });\n setInputValue(\"\"); // Clear local state\n },\n [inputValue, sendThreadMessage, thread.id, contextKey, setInputValue],\n );\n const {\n mutateAsync: submitAsync,\n mutate: _unusedSubmit,\n ...mutationState\n } = useTamboMutation({\n mutationFn: submit,\n });\n\n return {\n ...mutationState,\n value: inputValue,\n setValue: setInputValue,\n submit: submitAsync,\n } as UseThreadInput;\n}\n"]}
@@ -1,53 +0,0 @@
1
- import { UseMutationResult } from "@tanstack/react-query";
2
- /**
3
- * Error messages for various input-related error scenarios
4
- * These messages are used to provide user-friendly error feedback
5
- * @readonly
6
- */
7
- export declare const INPUT_ERROR_MESSAGES: {
8
- /** Error when attempting to submit empty input */
9
- readonly EMPTY: "Message cannot be empty";
10
- /** Error when network connection fails */
11
- readonly NETWORK: "Network error. Please check your connection";
12
- /** Error when server fails to process the request */
13
- readonly SERVER: "Server error. Please try again";
14
- /** Error when input format is invalid */
15
- readonly VALIDATION: "Invalid message format";
16
- };
17
- /**
18
- * Interface for the thread input hook return value
19
- * Provides all necessary functions and state for managing thread input
20
- */
21
- interface UseThreadInputInternal {
22
- /** Current value of the input field */
23
- value: string;
24
- /**
25
- * Function to update the input value
26
- * @param value - New value for the input field
27
- */
28
- setValue: (value: string) => void;
29
- /**
30
- * Function to submit the current input value
31
- * Validates input, handles errors, and cleans up state after submission
32
- * @throws {ThreadInputError} If submission fails
33
- * @returns Promise that resolves when submission is complete
34
- */
35
- submit: (options?: {
36
- contextKey?: string;
37
- streamResponse?: boolean;
38
- forceToolChoice?: string;
39
- additionalContext?: Record<string, any>;
40
- }) => Promise<void>;
41
- }
42
- export type UseThreadInput = UseThreadInputInternal & UseMutationResult<void, Error, {
43
- contextKey?: string;
44
- streamResponse?: boolean;
45
- forceToolChoice?: string;
46
- }>;
47
- /**
48
- * Hook for managing thread message input state and submission
49
- * @returns Interface for managing thread input state and submission
50
- */
51
- export declare function useTamboThreadInput(contextKey?: string): UseThreadInput;
52
- export {};
53
- //# sourceMappingURL=use-thread-input.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-thread-input.d.ts","sourceRoot":"","sources":["../../src/hooks/use-thread-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAO1D;;;;GAIG;AACH,eAAO,MAAM,oBAAoB;IAC/B,kDAAkD;;IAElD,0CAA0C;;IAE1C,qDAAqD;;IAErD,yCAAyC;;CAEjC,CAAC;AAEX;;;GAGG;AACH,UAAU,sBAAsB;IAC9B,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;;;;;OAKG;IACH,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KACzC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrB;AACD,MAAM,MAAM,cAAc,GAAG,sBAAsB,GACjD,iBAAiB,CACf,IAAI,EACJ,KAAK,EACL;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,CAC5E,CAAC;AAEJ;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,cAAc,CAiDvE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-thread-input.js","sourceRoot":"","sources":["../../src/hooks/use-thread-input.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,kDAAkD;IAClD,KAAK,EAAE,yBAAyB;IAChC,0CAA0C;IAC1C,OAAO,EAAE,6CAA6C;IACtD,qDAAqD;IACrD,MAAM,EAAE,gCAAgC;IACxC,yCAAyC;IACzC,UAAU,EAAE,wBAAwB;CAC5B,CAAC;AAkCX;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAmB;IACrD,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,cAAc,EAAE,CAAC;IACvD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEjD,MAAM,MAAM,GAAG,WAAW,CACxB,KAAK,EAAE,EACL,UAAU,EAAE,gBAAgB,EAC5B,cAAc,EACd,eAAe,EACf,iBAAiB,MAMf,EAAE,EAAE,EAAE;QACR,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,MAAM,IAAI,gBAAgB,CACxB,0BAA0B,UAAU,CAAC,KAAK,IAAI,oBAAoB,CAAC,UAAU,EAAE,EAC/E,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,CAC5B,CAAC;QACJ,CAAC;QAED,MAAM,iBAAiB,CAAC,UAAU,CAAC,cAAc,EAAE;YACjD,QAAQ,EAAE,MAAM,CAAC,EAAE;YACnB,UAAU,EAAE,gBAAgB,IAAI,UAAU,IAAI,SAAS;YACvD,cAAc,EAAE,cAAc;YAC9B,eAAe,EAAE,eAAe;YAChC,iBAAiB,EAAE,iBAAiB;SACrC,CAAC,CAAC;QACH,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB;IACzC,CAAC,EACD,CAAC,UAAU,EAAE,iBAAiB,EAAE,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,aAAa,CAAC,CACtE,CAAC;IACF,MAAM,EACJ,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,aAAa,EACrB,GAAG,aAAa,EACjB,GAAG,gBAAgB,CAAC;QACnB,UAAU,EAAE,MAAM;KACnB,CAAC,CAAC;IAEH,OAAO;QACL,GAAG,aAAa;QAChB,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,aAAa;QACvB,MAAM,EAAE,WAAW;KACF,CAAC;AACtB,CAAC","sourcesContent":["import { UseMutationResult } from \"@tanstack/react-query\";\nimport { useCallback, useState } from \"react\";\nimport { ThreadInputError } from \"../model/thread-input-error\";\nimport { validateInput } from \"../model/validate-input\";\nimport { useTamboThread } from \"../providers/tambo-thread-provider\";\nimport { useTamboMutation } from \"./react-query-hooks\";\n\n/**\n * Error messages for various input-related error scenarios\n * These messages are used to provide user-friendly error feedback\n * @readonly\n */\nexport const INPUT_ERROR_MESSAGES = {\n /** Error when attempting to submit empty input */\n EMPTY: \"Message cannot be empty\",\n /** Error when network connection fails */\n NETWORK: \"Network error. Please check your connection\",\n /** Error when server fails to process the request */\n SERVER: \"Server error. Please try again\",\n /** Error when input format is invalid */\n VALIDATION: \"Invalid message format\",\n} as const;\n\n/**\n * Interface for the thread input hook return value\n * Provides all necessary functions and state for managing thread input\n */\ninterface UseThreadInputInternal {\n /** Current value of the input field */\n value: string;\n /**\n * Function to update the input value\n * @param value - New value for the input field\n */\n setValue: (value: string) => void;\n /**\n * Function to submit the current input value\n * Validates input, handles errors, and cleans up state after submission\n * @throws {ThreadInputError} If submission fails\n * @returns Promise that resolves when submission is complete\n */\n submit: (options?: {\n contextKey?: string;\n streamResponse?: boolean;\n forceToolChoice?: string;\n additionalContext?: Record<string, any>;\n }) => Promise<void>;\n}\nexport type UseThreadInput = UseThreadInputInternal &\n UseMutationResult<\n void,\n Error,\n { contextKey?: string; streamResponse?: boolean; forceToolChoice?: string }\n >;\n\n/**\n * Hook for managing thread message input state and submission\n * @returns Interface for managing thread input state and submission\n */\nexport function useTamboThreadInput(contextKey?: string): UseThreadInput {\n const { thread, sendThreadMessage } = useTamboThread();\n const [inputValue, setInputValue] = useState(\"\");\n\n const submit = useCallback(\n async ({\n contextKey: submitContextKey,\n streamResponse,\n forceToolChoice,\n additionalContext,\n }: {\n contextKey?: string;\n streamResponse?: boolean;\n forceToolChoice?: string;\n additionalContext?: Record<string, any>;\n } = {}) => {\n const validation = validateInput(inputValue);\n if (!validation.isValid) {\n throw new ThreadInputError(\n `Cannot submit message: ${validation.error ?? INPUT_ERROR_MESSAGES.VALIDATION}`,\n { cause: validation.error },\n );\n }\n\n await sendThreadMessage(validation.sanitizedInput, {\n threadId: thread.id,\n contextKey: submitContextKey ?? contextKey ?? undefined,\n streamResponse: streamResponse,\n forceToolChoice: forceToolChoice,\n additionalContext: additionalContext,\n });\n setInputValue(\"\"); // Clear local state\n },\n [inputValue, sendThreadMessage, thread.id, contextKey, setInputValue],\n );\n const {\n mutateAsync: submitAsync,\n mutate: _unusedSubmit,\n ...mutationState\n } = useTamboMutation({\n mutationFn: submit,\n });\n\n return {\n ...mutationState,\n value: inputValue,\n setValue: setInputValue,\n submit: submitAsync,\n } as UseThreadInput;\n}\n"]}