@tambo-ai/react 0.48.0 → 0.50.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 (91) hide show
  1. package/dist/hooks/__tests__/use-message-images.test.d.ts +2 -0
  2. package/dist/hooks/__tests__/use-message-images.test.d.ts.map +1 -0
  3. package/dist/hooks/__tests__/use-message-images.test.js +66 -0
  4. package/dist/hooks/__tests__/use-message-images.test.js.map +1 -0
  5. package/dist/hooks/use-message-images.d.ts +25 -0
  6. package/dist/hooks/use-message-images.d.ts.map +1 -0
  7. package/dist/hooks/use-message-images.js +66 -0
  8. package/dist/hooks/use-message-images.js.map +1 -0
  9. package/dist/index.d.ts +1 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +3 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/providers/__tests__/tambo-registry-provider.test.d.ts +2 -0
  14. package/dist/providers/__tests__/tambo-registry-provider.test.d.ts.map +1 -0
  15. package/dist/providers/__tests__/tambo-registry-provider.test.js +224 -0
  16. package/dist/providers/__tests__/tambo-registry-provider.test.js.map +1 -0
  17. package/dist/providers/__tests__/tambo-thread-provider.test.js +99 -0
  18. package/dist/providers/__tests__/tambo-thread-provider.test.js.map +1 -1
  19. package/dist/providers/tambo-provider.d.ts.map +1 -1
  20. package/dist/providers/tambo-provider.js +2 -2
  21. package/dist/providers/tambo-provider.js.map +1 -1
  22. package/dist/providers/tambo-registry-provider.d.ts +12 -0
  23. package/dist/providers/tambo-registry-provider.d.ts.map +1 -1
  24. package/dist/providers/tambo-registry-provider.js +3 -1
  25. package/dist/providers/tambo-registry-provider.js.map +1 -1
  26. package/dist/providers/tambo-thread-input-provider.d.ts +11 -0
  27. package/dist/providers/tambo-thread-input-provider.d.ts.map +1 -1
  28. package/dist/providers/tambo-thread-input-provider.js +63 -12
  29. package/dist/providers/tambo-thread-input-provider.js.map +1 -1
  30. package/dist/providers/tambo-thread-provider.d.ts +1 -0
  31. package/dist/providers/tambo-thread-provider.d.ts.map +1 -1
  32. package/dist/providers/tambo-thread-provider.js +12 -6
  33. package/dist/providers/tambo-thread-provider.js.map +1 -1
  34. package/dist/util/__tests__/message-builder.test.d.ts +2 -0
  35. package/dist/util/__tests__/message-builder.test.d.ts.map +1 -0
  36. package/dist/util/__tests__/message-builder.test.js +191 -0
  37. package/dist/util/__tests__/message-builder.test.js.map +1 -0
  38. package/dist/util/message-builder.d.ts +10 -0
  39. package/dist/util/message-builder.d.ts.map +1 -0
  40. package/dist/util/message-builder.js +31 -0
  41. package/dist/util/message-builder.js.map +1 -0
  42. package/dist/util/tool-caller.d.ts +1 -1
  43. package/dist/util/tool-caller.d.ts.map +1 -1
  44. package/dist/util/tool-caller.js +11 -2
  45. package/dist/util/tool-caller.js.map +1 -1
  46. package/esm/hooks/__tests__/use-message-images.test.d.ts +2 -0
  47. package/esm/hooks/__tests__/use-message-images.test.d.ts.map +1 -0
  48. package/esm/hooks/__tests__/use-message-images.test.js +64 -0
  49. package/esm/hooks/__tests__/use-message-images.test.js.map +1 -0
  50. package/esm/hooks/use-message-images.d.ts +25 -0
  51. package/esm/hooks/use-message-images.d.ts.map +1 -0
  52. package/esm/hooks/use-message-images.js +63 -0
  53. package/esm/hooks/use-message-images.js.map +1 -0
  54. package/esm/index.d.ts +1 -0
  55. package/esm/index.d.ts.map +1 -1
  56. package/esm/index.js +1 -0
  57. package/esm/index.js.map +1 -1
  58. package/esm/providers/__tests__/tambo-registry-provider.test.d.ts +2 -0
  59. package/esm/providers/__tests__/tambo-registry-provider.test.d.ts.map +1 -0
  60. package/esm/providers/__tests__/tambo-registry-provider.test.js +219 -0
  61. package/esm/providers/__tests__/tambo-registry-provider.test.js.map +1 -0
  62. package/esm/providers/__tests__/tambo-thread-provider.test.js +99 -0
  63. package/esm/providers/__tests__/tambo-thread-provider.test.js.map +1 -1
  64. package/esm/providers/tambo-provider.d.ts.map +1 -1
  65. package/esm/providers/tambo-provider.js +2 -2
  66. package/esm/providers/tambo-provider.js.map +1 -1
  67. package/esm/providers/tambo-registry-provider.d.ts +12 -0
  68. package/esm/providers/tambo-registry-provider.d.ts.map +1 -1
  69. package/esm/providers/tambo-registry-provider.js +3 -1
  70. package/esm/providers/tambo-registry-provider.js.map +1 -1
  71. package/esm/providers/tambo-thread-input-provider.d.ts +11 -0
  72. package/esm/providers/tambo-thread-input-provider.d.ts.map +1 -1
  73. package/esm/providers/tambo-thread-input-provider.js +63 -12
  74. package/esm/providers/tambo-thread-input-provider.js.map +1 -1
  75. package/esm/providers/tambo-thread-provider.d.ts +1 -0
  76. package/esm/providers/tambo-thread-provider.d.ts.map +1 -1
  77. package/esm/providers/tambo-thread-provider.js +12 -6
  78. package/esm/providers/tambo-thread-provider.js.map +1 -1
  79. package/esm/util/__tests__/message-builder.test.d.ts +2 -0
  80. package/esm/util/__tests__/message-builder.test.d.ts.map +1 -0
  81. package/esm/util/__tests__/message-builder.test.js +189 -0
  82. package/esm/util/__tests__/message-builder.test.js.map +1 -0
  83. package/esm/util/message-builder.d.ts +10 -0
  84. package/esm/util/message-builder.d.ts.map +1 -0
  85. package/esm/util/message-builder.js +28 -0
  86. package/esm/util/message-builder.js.map +1 -0
  87. package/esm/util/tool-caller.d.ts +1 -1
  88. package/esm/util/tool-caller.d.ts.map +1 -1
  89. package/esm/util/tool-caller.js +11 -2
  90. package/esm/util/tool-caller.js.map +1 -1
  91. package/package.json +2 -2
@@ -0,0 +1,10 @@
1
+ import type TamboAI from "@tambo-ai/typescript-sdk";
2
+ import { StagedImage } from "../hooks/use-message-images";
3
+ /**
4
+ * Builds message content with text and images
5
+ * @param text - The text content
6
+ * @param images - Array of staged images
7
+ * @returns Array of message content parts
8
+ */
9
+ export declare function buildMessageContent(text: string, images: StagedImage[]): TamboAI.Beta.Threads.ChatCompletionContentPart[];
10
+ //# sourceMappingURL=message-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-builder.d.ts","sourceRoot":"","sources":["../../src/util/message-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,WAAW,EAAE,GACpB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE,CAwBlD"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Builds message content with text and images
3
+ * @param text - The text content
4
+ * @param images - Array of staged images
5
+ * @returns Array of message content parts
6
+ */
7
+ export function buildMessageContent(text, images) {
8
+ const content = [];
9
+ if (text.trim()) {
10
+ content.push({
11
+ type: "text",
12
+ text: text.trim(),
13
+ });
14
+ }
15
+ for (const image of images) {
16
+ content.push({
17
+ type: "image_url",
18
+ image_url: {
19
+ url: image.dataUrl,
20
+ },
21
+ });
22
+ }
23
+ if (content.length === 0) {
24
+ throw new Error("Message must contain text or images");
25
+ }
26
+ return content;
27
+ }
28
+ //# sourceMappingURL=message-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-builder.js","sourceRoot":"","sources":["../../src/util/message-builder.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAY,EACZ,MAAqB;IAErB,MAAM,OAAO,GAAqD,EAAE,CAAC;IAErE,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;SAClB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,WAAW;YACjB,SAAS,EAAE;gBACT,GAAG,EAAE,KAAK,CAAC,OAAO;aACnB;SACF,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC","sourcesContent":["import type TamboAI from \"@tambo-ai/typescript-sdk\";\nimport { StagedImage } from \"../hooks/use-message-images\";\n\n/**\n * Builds message content with text and images\n * @param text - The text content\n * @param images - Array of staged images\n * @returns Array of message content parts\n */\nexport function buildMessageContent(\n text: string,\n images: StagedImage[],\n): TamboAI.Beta.Threads.ChatCompletionContentPart[] {\n const content: TamboAI.Beta.Threads.ChatCompletionContentPart[] = [];\n\n if (text.trim()) {\n content.push({\n type: \"text\",\n text: text.trim(),\n });\n }\n\n for (const image of images) {\n content.push({\n type: \"image_url\",\n image_url: {\n url: image.dataUrl,\n },\n });\n }\n\n if (content.length === 0) {\n throw new Error(\"Message must contain text or images\");\n }\n\n return content;\n}\n"]}
@@ -6,7 +6,7 @@ import { TamboToolRegistry } from "../model/component-metadata";
6
6
  * @param toolRegistry - The tool registry
7
7
  * @returns The result of the tool call
8
8
  */
9
- export declare const handleToolCall: (message: TamboAI.Beta.Threads.ThreadMessage, toolRegistry: TamboToolRegistry) => Promise<{
9
+ export declare const handleToolCall: (message: TamboAI.Beta.Threads.ThreadMessage, toolRegistry: TamboToolRegistry, onCallUnregisteredTool?: (toolName: string, args: TamboAI.ToolCallParameter[]) => Promise<string>) => Promise<{
10
10
  result: string;
11
11
  error?: string;
12
12
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"tool-caller.d.ts","sourceRoot":"","sources":["../../src/util/tool-caller.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,0BAA0B,CAAC;AAC/C,OAAO,EAEL,iBAAiB,EAClB,MAAM,6BAA6B,CAAC;AAGrC;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GACzB,SAAS,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAC3C,cAAc,iBAAiB,KAC9B,OAAO,CAAC;IACT,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAiBA,CAAC"}
1
+ {"version":3,"file":"tool-caller.d.ts","sourceRoot":"","sources":["../../src/util/tool-caller.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,0BAA0B,CAAC;AAC/C,OAAO,EAEL,iBAAiB,EAClB,MAAM,6BAA6B,CAAC;AAGrC;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GACzB,SAAS,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAC3C,cAAc,iBAAiB,EAC/B,yBAAyB,CACvB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,CAAC,iBAAiB,EAAE,KAC9B,OAAO,CAAC,MAAM,CAAC,KACnB,OAAO,CAAC;IACT,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CA+BA,CAAC"}
@@ -5,12 +5,21 @@ import { mapTamboToolToContextTool } from "./registry";
5
5
  * @param toolRegistry - The tool registry
6
6
  * @returns The result of the tool call
7
7
  */
8
- export const handleToolCall = async (message, toolRegistry) => {
8
+ export const handleToolCall = async (message, toolRegistry, onCallUnregisteredTool) => {
9
9
  if (!message?.toolCallRequest?.toolName) {
10
10
  throw new Error("Tool name is required");
11
11
  }
12
12
  try {
13
13
  const tool = findTool(message.toolCallRequest.toolName, toolRegistry);
14
+ if (!tool) {
15
+ if (onCallUnregisteredTool) {
16
+ const result = await onCallUnregisteredTool(message.toolCallRequest.toolName, message.toolCallRequest.parameters);
17
+ return {
18
+ result,
19
+ };
20
+ }
21
+ throw new Error(`Tool ${message.toolCallRequest.toolName} not found in registry`);
22
+ }
14
23
  return {
15
24
  result: await runToolChoice(message.toolCallRequest, tool),
16
25
  };
@@ -26,7 +35,7 @@ export const handleToolCall = async (message, toolRegistry) => {
26
35
  const findTool = (toolName, toolRegistry) => {
27
36
  const registryTool = toolRegistry[toolName];
28
37
  if (!registryTool) {
29
- throw new Error(`Tool ${toolName} not found in registry`);
38
+ return null;
30
39
  }
31
40
  const contextTool = mapTamboToolToContextTool(registryTool);
32
41
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"tool-caller.js","sourceRoot":"","sources":["../../src/util/tool-caller.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EACjC,OAA2C,EAC3C,YAA+B,EAI9B,EAAE;IACH,IAAI,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACtE,OAAO;YACL,MAAM,EAAE,MAAM,aAAa,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC;SAC3D,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAChD,OAAO;YACL,MAAM,EAAE,gCAAgC,OAAO,CAAC,eAAe,CAAC,QAAQ,kCAAkC,KAAK,0EAA0E;YACzL,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,QAAgB,EAAE,YAA+B,EAAE,EAAE;IACrE,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IAE5C,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,wBAAwB,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,WAAW,GAAG,yBAAyB,CAAC,YAAY,CAAC,CAAC;IAC5D,OAAO;QACL,mBAAmB,EAAE,YAAY,CAAC,IAAI;QACtC,UAAU,EAAE,WAAW;KACxB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,KAAK,EACzB,eAAwC,EACxC,IAA0B,EACZ,EAAE;IAChB,mEAAmE;IACnE,MAAM,eAAe,GACnB,eAAe,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAEzE,OAAO,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,eAAe,CAAC,CAAC;AAC5D,CAAC,CAAC","sourcesContent":["import TamboAI from \"@tambo-ai/typescript-sdk\";\nimport {\n ComponentContextTool,\n TamboToolRegistry,\n} from \"../model/component-metadata\";\nimport { mapTamboToolToContextTool } from \"./registry\";\n\n/**\n * Process a message from the thread, invoking the appropriate tool and returning the result.\n * @param message - The message to handle\n * @param toolRegistry - The tool registry\n * @returns The result of the tool call\n */\nexport const handleToolCall = async (\n message: TamboAI.Beta.Threads.ThreadMessage,\n toolRegistry: TamboToolRegistry,\n): Promise<{\n result: string;\n error?: string;\n}> => {\n if (!message?.toolCallRequest?.toolName) {\n throw new Error(\"Tool name is required\");\n }\n\n try {\n const tool = findTool(message.toolCallRequest.toolName, toolRegistry);\n return {\n result: await runToolChoice(message.toolCallRequest, tool),\n };\n } catch (error) {\n console.error(\"Error in calling tool: \", error);\n return {\n result: `When attempting to call tool ${message.toolCallRequest.toolName} the following error occurred: ${error}. Explain to the user that the tool call failed and try again if needed.`,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n};\n\nconst findTool = (toolName: string, toolRegistry: TamboToolRegistry) => {\n const registryTool = toolRegistry[toolName];\n\n if (!registryTool) {\n throw new Error(`Tool ${toolName} not found in registry`);\n }\n\n const contextTool = mapTamboToolToContextTool(registryTool);\n return {\n getComponentContext: registryTool.tool,\n definition: contextTool,\n };\n};\n\nconst runToolChoice = async (\n toolCallRequest: TamboAI.ToolCallRequest,\n tool: ComponentContextTool,\n): Promise<any> => {\n // Assumes parameters are in the order they are defined in the tool\n const parameterValues =\n toolCallRequest.parameters?.map((param) => param.parameterValue) ?? [];\n\n return await tool.getComponentContext(...parameterValues);\n};\n"]}
1
+ {"version":3,"file":"tool-caller.js","sourceRoot":"","sources":["../../src/util/tool-caller.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EACjC,OAA2C,EAC3C,YAA+B,EAC/B,sBAGoB,EAInB,EAAE;IACH,IAAI,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACtE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,sBAAsB,EAAE,CAAC;gBAC3B,MAAM,MAAM,GAAG,MAAM,sBAAsB,CACzC,OAAO,CAAC,eAAe,CAAC,QAAQ,EAChC,OAAO,CAAC,eAAe,CAAC,UAAU,CACnC,CAAC;gBACF,OAAO;oBACL,MAAM;iBACP,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,KAAK,CACb,QAAQ,OAAO,CAAC,eAAe,CAAC,QAAQ,wBAAwB,CACjE,CAAC;QACJ,CAAC;QACD,OAAO;YACL,MAAM,EAAE,MAAM,aAAa,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC;SAC3D,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAChD,OAAO;YACL,MAAM,EAAE,gCAAgC,OAAO,CAAC,eAAe,CAAC,QAAQ,kCAAkC,KAAK,0EAA0E;YACzL,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,QAAgB,EAAE,YAA+B,EAAE,EAAE;IACrE,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IAE5C,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,yBAAyB,CAAC,YAAY,CAAC,CAAC;IAC5D,OAAO;QACL,mBAAmB,EAAE,YAAY,CAAC,IAAI;QACtC,UAAU,EAAE,WAAW;KACxB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,KAAK,EACzB,eAAwC,EACxC,IAA0B,EACZ,EAAE;IAChB,mEAAmE;IACnE,MAAM,eAAe,GACnB,eAAe,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAEzE,OAAO,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,eAAe,CAAC,CAAC;AAC5D,CAAC,CAAC","sourcesContent":["import TamboAI from \"@tambo-ai/typescript-sdk\";\nimport {\n ComponentContextTool,\n TamboToolRegistry,\n} from \"../model/component-metadata\";\nimport { mapTamboToolToContextTool } from \"./registry\";\n\n/**\n * Process a message from the thread, invoking the appropriate tool and returning the result.\n * @param message - The message to handle\n * @param toolRegistry - The tool registry\n * @returns The result of the tool call\n */\nexport const handleToolCall = async (\n message: TamboAI.Beta.Threads.ThreadMessage,\n toolRegistry: TamboToolRegistry,\n onCallUnregisteredTool?: (\n toolName: string,\n args: TamboAI.ToolCallParameter[],\n ) => Promise<string>,\n): Promise<{\n result: string;\n error?: string;\n}> => {\n if (!message?.toolCallRequest?.toolName) {\n throw new Error(\"Tool name is required\");\n }\n\n try {\n const tool = findTool(message.toolCallRequest.toolName, toolRegistry);\n if (!tool) {\n if (onCallUnregisteredTool) {\n const result = await onCallUnregisteredTool(\n message.toolCallRequest.toolName,\n message.toolCallRequest.parameters,\n );\n return {\n result,\n };\n }\n throw new Error(\n `Tool ${message.toolCallRequest.toolName} not found in registry`,\n );\n }\n return {\n result: await runToolChoice(message.toolCallRequest, tool),\n };\n } catch (error) {\n console.error(\"Error in calling tool: \", error);\n return {\n result: `When attempting to call tool ${message.toolCallRequest.toolName} the following error occurred: ${error}. Explain to the user that the tool call failed and try again if needed.`,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n};\n\nconst findTool = (toolName: string, toolRegistry: TamboToolRegistry) => {\n const registryTool = toolRegistry[toolName];\n\n if (!registryTool) {\n return null;\n }\n\n const contextTool = mapTamboToolToContextTool(registryTool);\n return {\n getComponentContext: registryTool.tool,\n definition: contextTool,\n };\n};\n\nconst runToolChoice = async (\n toolCallRequest: TamboAI.ToolCallRequest,\n tool: ComponentContextTool,\n): Promise<any> => {\n // Assumes parameters are in the order they are defined in the tool\n const parameterValues =\n toolCallRequest.parameters?.map((param) => param.parameterValue) ?? [];\n\n return await tool.getComponentContext(...parameterValues);\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tambo-ai/react",
3
- "version": "0.48.0",
3
+ "version": "0.50.0",
4
4
  "description": "React client package for Tambo AI",
5
5
  "repository": {
6
6
  "type": "git",
@@ -68,7 +68,7 @@
68
68
  },
69
69
  "dependencies": {
70
70
  "@modelcontextprotocol/sdk": "^1.17.4",
71
- "@tambo-ai/typescript-sdk": "^0.69.0",
71
+ "@tambo-ai/typescript-sdk": "^0.70.0",
72
72
  "@tanstack/react-query": "^5.85.5",
73
73
  "partial-json": "^0.1.7",
74
74
  "react-fast-compare": "^3.2.2",