@assistant-ui/react 0.12.19 → 0.12.21
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.
- package/README.md +1 -1
- package/dist/client/ExternalThread.d.ts +24 -3
- package/dist/client/ExternalThread.d.ts.map +1 -1
- package/dist/client/ExternalThread.js +106 -27
- package/dist/client/ExternalThread.js.map +1 -1
- package/dist/client/InMemoryThreadList.js +23 -30
- package/dist/client/InMemoryThreadList.js.map +1 -1
- package/dist/client/SingleThreadList.d.ts +12 -0
- package/dist/client/SingleThreadList.d.ts.map +1 -0
- package/dist/client/SingleThreadList.js +68 -0
- package/dist/client/SingleThreadList.js.map +1 -0
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/primitives/composer/ComposerInput.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerInput.js +37 -7
- package/dist/primitives/composer/ComposerInput.js.map +1 -1
- package/dist/primitives/composer/ComposerQueue.d.ts +2 -0
- package/dist/primitives/composer/ComposerQueue.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerQueue.js +3 -0
- package/dist/primitives/composer/ComposerQueue.js.map +1 -0
- package/dist/primitives/composer/ComposerSend.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerSend.js +3 -1
- package/dist/primitives/composer/ComposerSend.js.map +1 -1
- package/dist/primitives/composer/mention/ComposerMentionBack.d.ts +21 -0
- package/dist/primitives/composer/mention/ComposerMentionBack.d.ts.map +1 -0
- package/dist/primitives/composer/mention/ComposerMentionBack.js +28 -0
- package/dist/primitives/composer/mention/ComposerMentionBack.js.map +1 -0
- package/dist/primitives/composer/mention/ComposerMentionCategories.d.ts +42 -0
- package/dist/primitives/composer/mention/ComposerMentionCategories.d.ts.map +1 -0
- package/dist/primitives/composer/mention/ComposerMentionCategories.js +32 -0
- package/dist/primitives/composer/mention/ComposerMentionCategories.js.map +1 -0
- package/dist/primitives/composer/mention/ComposerMentionContext.d.ts +23 -0
- package/dist/primitives/composer/mention/ComposerMentionContext.d.ts.map +1 -0
- package/dist/primitives/composer/mention/ComposerMentionContext.js +66 -0
- package/dist/primitives/composer/mention/ComposerMentionContext.js.map +1 -0
- package/dist/primitives/composer/mention/ComposerMentionItems.d.ts +46 -0
- package/dist/primitives/composer/mention/ComposerMentionItems.d.ts.map +1 -0
- package/dist/primitives/composer/mention/ComposerMentionItems.js +30 -0
- package/dist/primitives/composer/mention/ComposerMentionItems.js.map +1 -0
- package/dist/primitives/composer/mention/ComposerMentionPopover.d.ts +24 -0
- package/dist/primitives/composer/mention/ComposerMentionPopover.d.ts.map +1 -0
- package/dist/primitives/composer/mention/ComposerMentionPopover.js +28 -0
- package/dist/primitives/composer/mention/ComposerMentionPopover.js.map +1 -0
- package/dist/primitives/composer/mention/MentionResource.d.ts +39 -0
- package/dist/primitives/composer/mention/MentionResource.d.ts.map +1 -0
- package/dist/primitives/composer/mention/MentionResource.js +230 -0
- package/dist/primitives/composer/mention/MentionResource.js.map +1 -0
- package/dist/primitives/composer/mention/detectMentionTrigger.d.ts +2 -0
- package/dist/primitives/composer/mention/detectMentionTrigger.d.ts.map +1 -0
- package/dist/primitives/composer/mention/detectMentionTrigger.js +26 -0
- package/dist/primitives/composer/mention/detectMentionTrigger.js.map +1 -0
- package/dist/primitives/composer/mention/index.d.ts +6 -0
- package/dist/primitives/composer/mention/index.d.ts.map +1 -0
- package/dist/primitives/composer/mention/index.js +6 -0
- package/dist/primitives/composer/mention/index.js.map +1 -0
- package/dist/primitives/composer.d.ts +10 -0
- package/dist/primitives/composer.d.ts.map +1 -1
- package/dist/primitives/composer.js +10 -0
- package/dist/primitives/composer.js.map +1 -1
- package/dist/primitives/queueItem/QueueItemRemove.d.ts +19 -0
- package/dist/primitives/queueItem/QueueItemRemove.d.ts.map +1 -0
- package/dist/primitives/queueItem/QueueItemRemove.js +21 -0
- package/dist/primitives/queueItem/QueueItemRemove.js.map +1 -0
- package/dist/primitives/queueItem/QueueItemSteer.d.ts +19 -0
- package/dist/primitives/queueItem/QueueItemSteer.d.ts.map +1 -0
- package/dist/primitives/queueItem/QueueItemSteer.js +21 -0
- package/dist/primitives/queueItem/QueueItemSteer.js.map +1 -0
- package/dist/primitives/queueItem/QueueItemText.d.ts +18 -0
- package/dist/primitives/queueItem/QueueItemText.d.ts.map +1 -0
- package/dist/primitives/queueItem/QueueItemText.js +19 -0
- package/dist/primitives/queueItem/QueueItemText.js.map +1 -0
- package/dist/primitives/queueItem.d.ts +4 -0
- package/dist/primitives/queueItem.d.ts.map +1 -0
- package/dist/primitives/queueItem.js +4 -0
- package/dist/primitives/queueItem.js.map +1 -0
- package/dist/unstable/useToolMentionAdapter.d.ts +42 -0
- package/dist/unstable/useToolMentionAdapter.d.ts.map +1 -0
- package/dist/unstable/useToolMentionAdapter.js +65 -0
- package/dist/unstable/useToolMentionAdapter.js.map +1 -0
- package/package.json +10 -10
- package/src/client/ExternalThread.ts +160 -32
- package/src/client/InMemoryThreadList.ts +24 -35
- package/src/client/SingleThreadList.ts +95 -0
- package/src/index.ts +26 -0
- package/src/primitives/composer/ComposerInput.tsx +49 -5
- package/src/primitives/composer/ComposerQueue.tsx +3 -0
- package/src/primitives/composer/ComposerSend.ts +3 -1
- package/src/primitives/composer/mention/ComposerMentionBack.tsx +55 -0
- package/src/primitives/composer/mention/ComposerMentionCategories.tsx +104 -0
- package/src/primitives/composer/mention/ComposerMentionContext.tsx +141 -0
- package/src/primitives/composer/mention/ComposerMentionItems.tsx +104 -0
- package/src/primitives/composer/mention/ComposerMentionPopover.tsx +52 -0
- package/src/primitives/composer/mention/MentionResource.ts +328 -0
- package/src/primitives/composer/mention/detectMentionTrigger.test.ts +78 -0
- package/src/primitives/composer/mention/detectMentionTrigger.ts +37 -0
- package/src/primitives/composer/mention/index.ts +16 -0
- package/src/primitives/composer.ts +10 -0
- package/src/primitives/queueItem/QueueItemRemove.ts +37 -0
- package/src/primitives/queueItem/QueueItemSteer.ts +37 -0
- package/src/primitives/queueItem/QueueItemText.tsx +37 -0
- package/src/primitives/queueItem.ts +3 -0
- package/src/tests/BaseComposerRuntimeCore.test.ts +3 -1
- package/src/unstable/useToolMentionAdapter.ts +114 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useMemo } from "react";
|
|
4
|
+
import { useAui } from "@assistant-ui/store";
|
|
5
|
+
import type {
|
|
6
|
+
Unstable_MentionAdapter,
|
|
7
|
+
Unstable_MentionCategory,
|
|
8
|
+
Unstable_MentionItem,
|
|
9
|
+
} from "@assistant-ui/core";
|
|
10
|
+
|
|
11
|
+
export type Unstable_ToolMentionAdapterOptions = {
|
|
12
|
+
/**
|
|
13
|
+
* Explicit list of tools to show in the mention picker.
|
|
14
|
+
* If provided, model context tools are NOT included unless
|
|
15
|
+
* `includeModelContextTools` is true.
|
|
16
|
+
*/
|
|
17
|
+
tools?: readonly Unstable_MentionItem[] | undefined;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Include tools from the model context (registered via useAssistantTool).
|
|
21
|
+
* Defaults to true when `tools` is not provided, false otherwise.
|
|
22
|
+
*/
|
|
23
|
+
includeModelContextTools?: boolean | undefined;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Custom function to format the display label for a tool.
|
|
27
|
+
* Receives the tool name (id) and returns the display label.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```ts
|
|
31
|
+
* formatLabel: (name) => name.replace(/_/g, " ").replace(/\b\w/g, c => c.toUpperCase())
|
|
32
|
+
* // "get_current_weather" → "Get Current Weather"
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
formatLabel?: ((toolName: string) => string) | undefined;
|
|
36
|
+
|
|
37
|
+
/** Custom label for the tools category. @default "Tools" */
|
|
38
|
+
categoryLabel?: string | undefined;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* @deprecated This API is still under active development and might change without notice.
|
|
43
|
+
*
|
|
44
|
+
* Creates a MentionAdapter for tools. When a user types `@`, they see
|
|
45
|
+
* available tools and can mention them to hint the LLM to use a specific tool.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```tsx
|
|
49
|
+
* const mentionAdapter = unstable_useToolMentionAdapter({
|
|
50
|
+
* formatLabel: (name) => name.replaceAll("_", " "),
|
|
51
|
+
* });
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export function unstable_useToolMentionAdapter(
|
|
55
|
+
options?: Unstable_ToolMentionAdapterOptions,
|
|
56
|
+
): Unstable_MentionAdapter {
|
|
57
|
+
const aui = useAui();
|
|
58
|
+
const explicitTools = options?.tools;
|
|
59
|
+
const includeModelContext =
|
|
60
|
+
options?.includeModelContextTools ?? !explicitTools;
|
|
61
|
+
const formatLabel = options?.formatLabel;
|
|
62
|
+
const categoryLabel = options?.categoryLabel;
|
|
63
|
+
|
|
64
|
+
return useMemo<Unstable_MentionAdapter>(() => {
|
|
65
|
+
const getTools = (): Unstable_MentionItem[] => {
|
|
66
|
+
const items: Unstable_MentionItem[] = [];
|
|
67
|
+
|
|
68
|
+
if (explicitTools) {
|
|
69
|
+
items.push(...explicitTools);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (includeModelContext) {
|
|
73
|
+
const context = aui.thread().getModelContext();
|
|
74
|
+
const tools = context.tools;
|
|
75
|
+
if (tools) {
|
|
76
|
+
for (const [name, tool] of Object.entries(tools)) {
|
|
77
|
+
if (!items.some((i) => i.id === name)) {
|
|
78
|
+
items.push({
|
|
79
|
+
id: name,
|
|
80
|
+
type: "tool",
|
|
81
|
+
label: formatLabel ? formatLabel(name) : name,
|
|
82
|
+
description: tool.description ?? undefined,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return items;
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
return {
|
|
93
|
+
categories(): Unstable_MentionCategory[] {
|
|
94
|
+
return [
|
|
95
|
+
{ id: "tools", label: categoryLabel ?? "Tools", icon: undefined },
|
|
96
|
+
];
|
|
97
|
+
},
|
|
98
|
+
|
|
99
|
+
categoryItems(_categoryId: string): Unstable_MentionItem[] {
|
|
100
|
+
return getTools();
|
|
101
|
+
},
|
|
102
|
+
|
|
103
|
+
search(query: string): Unstable_MentionItem[] {
|
|
104
|
+
const lower = query.toLowerCase();
|
|
105
|
+
return getTools().filter(
|
|
106
|
+
(item) =>
|
|
107
|
+
item.id.toLowerCase().includes(lower) ||
|
|
108
|
+
item.label.toLowerCase().includes(lower) ||
|
|
109
|
+
item.description?.toLowerCase().includes(lower),
|
|
110
|
+
);
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
}, [aui, explicitTools, includeModelContext, formatLabel, categoryLabel]);
|
|
114
|
+
}
|