ai.matey.react.core 0.2.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.
- package/LICENSE +21 -0
- package/dist/cjs/index.js +18 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/types.js +10 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/use-chat.js +418 -0
- package/dist/cjs/use-chat.js.map +1 -0
- package/dist/cjs/use-completion.js +193 -0
- package/dist/cjs/use-completion.js.map +1 -0
- package/dist/cjs/use-object.js +250 -0
- package/dist/cjs/use-object.js.map +1 -0
- package/dist/esm/index.js +12 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/types.js +9 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/use-chat.js +415 -0
- package/dist/esm/use-chat.js.map +1 -0
- package/dist/esm/use-completion.js +190 -0
- package/dist/esm/use-completion.js.map +1 -0
- package/dist/esm/use-object.js +247 -0
- package/dist/esm/use-object.js.map +1 -0
- package/dist/types/index.d.ts +12 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/types.d.ts +295 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/use-chat.d.ts +73 -0
- package/dist/types/use-chat.d.ts.map +1 -0
- package/dist/types/use-completion.d.ts +37 -0
- package/dist/types/use-completion.d.ts.map +1 -0
- package/dist/types/use-object.d.ts +47 -0
- package/dist/types/use-object.d.ts.map +1 -0
- package/package.json +78 -0
- package/readme.md +232 -0
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useObject Hook
|
|
3
|
+
*
|
|
4
|
+
* React hook for streaming structured objects with streaming support.
|
|
5
|
+
*
|
|
6
|
+
* @module
|
|
7
|
+
*/
|
|
8
|
+
import { useState, useCallback, useRef } from 'react';
|
|
9
|
+
/**
|
|
10
|
+
* useObject - React hook for streaming structured objects.
|
|
11
|
+
*
|
|
12
|
+
* Provides state management for streaming JSON objects with
|
|
13
|
+
* partial updates as data arrives.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```tsx
|
|
17
|
+
* import { useObject } from 'ai.matey.react.core';
|
|
18
|
+
*
|
|
19
|
+
* interface Recipe {
|
|
20
|
+
* name: string;
|
|
21
|
+
* ingredients: string[];
|
|
22
|
+
* instructions: string[];
|
|
23
|
+
* }
|
|
24
|
+
*
|
|
25
|
+
* function RecipeGenerator() {
|
|
26
|
+
* const { object, submit, isLoading } = useObject<Recipe>({
|
|
27
|
+
* api: '/api/generate-recipe',
|
|
28
|
+
* });
|
|
29
|
+
*
|
|
30
|
+
* return (
|
|
31
|
+
* <div>
|
|
32
|
+
* <button onClick={() => submit('Generate a pasta recipe')} disabled={isLoading}>
|
|
33
|
+
* Generate Recipe
|
|
34
|
+
* </button>
|
|
35
|
+
* {object && (
|
|
36
|
+
* <div>
|
|
37
|
+
* <h2>{object.name}</h2>
|
|
38
|
+
* <ul>{object.ingredients?.map((i, idx) => <li key={idx}>{i}</li>)}</ul>
|
|
39
|
+
* </div>
|
|
40
|
+
* )}
|
|
41
|
+
* </div>
|
|
42
|
+
* );
|
|
43
|
+
* }
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export function useObject(options = {}) {
|
|
47
|
+
const { api = '/api/object', schema, initialValue, headers = {}, body = {}, onFinish, onError, } = options;
|
|
48
|
+
// State
|
|
49
|
+
const [object, setObject] = useState(initialValue);
|
|
50
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
51
|
+
const [error, setError] = useState(undefined);
|
|
52
|
+
// Refs for abort control
|
|
53
|
+
const abortControllerRef = useRef(null);
|
|
54
|
+
/**
|
|
55
|
+
* Stop current streaming request.
|
|
56
|
+
*/
|
|
57
|
+
const stop = useCallback(() => {
|
|
58
|
+
if (abortControllerRef.current) {
|
|
59
|
+
abortControllerRef.current.abort();
|
|
60
|
+
abortControllerRef.current = null;
|
|
61
|
+
}
|
|
62
|
+
}, []);
|
|
63
|
+
/**
|
|
64
|
+
* Submit a prompt to generate an object.
|
|
65
|
+
*/
|
|
66
|
+
const submit = useCallback(async (prompt) => {
|
|
67
|
+
try {
|
|
68
|
+
setIsLoading(true);
|
|
69
|
+
setError(undefined);
|
|
70
|
+
setObject(undefined);
|
|
71
|
+
// Create abort controller
|
|
72
|
+
abortControllerRef.current = new AbortController();
|
|
73
|
+
const { signal } = abortControllerRef.current;
|
|
74
|
+
// Prepare request body
|
|
75
|
+
const requestBody = {
|
|
76
|
+
prompt,
|
|
77
|
+
schema,
|
|
78
|
+
...body,
|
|
79
|
+
};
|
|
80
|
+
// Make request
|
|
81
|
+
const response = await fetch(api, {
|
|
82
|
+
method: 'POST',
|
|
83
|
+
headers: {
|
|
84
|
+
'Content-Type': 'application/json',
|
|
85
|
+
...headers,
|
|
86
|
+
},
|
|
87
|
+
body: JSON.stringify(requestBody),
|
|
88
|
+
signal,
|
|
89
|
+
});
|
|
90
|
+
if (!response.ok) {
|
|
91
|
+
throw new Error(`HTTP error! status: ${response.status}`);
|
|
92
|
+
}
|
|
93
|
+
if (!response.body) {
|
|
94
|
+
throw new Error('Response body is null');
|
|
95
|
+
}
|
|
96
|
+
// Handle streaming response
|
|
97
|
+
const reader = response.body.getReader();
|
|
98
|
+
const decoder = new TextDecoder();
|
|
99
|
+
let jsonBuffer = '';
|
|
100
|
+
// Read stream
|
|
101
|
+
while (true) {
|
|
102
|
+
const { done, value } = await reader.read();
|
|
103
|
+
if (done) {
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
const chunk = decoder.decode(value, { stream: true });
|
|
107
|
+
// Parse SSE data format
|
|
108
|
+
const lines = chunk.split('\n');
|
|
109
|
+
for (const line of lines) {
|
|
110
|
+
if (line.startsWith('data: ')) {
|
|
111
|
+
const data = line.slice(6);
|
|
112
|
+
if (data === '[DONE]') {
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
try {
|
|
116
|
+
const parsed = JSON.parse(data);
|
|
117
|
+
if (parsed.object) {
|
|
118
|
+
// Direct object update
|
|
119
|
+
setObject(parsed.object);
|
|
120
|
+
}
|
|
121
|
+
else if (parsed.partial) {
|
|
122
|
+
// Partial JSON string
|
|
123
|
+
jsonBuffer = parsed.partial;
|
|
124
|
+
try {
|
|
125
|
+
const partialObject = JSON.parse(jsonBuffer);
|
|
126
|
+
setObject(partialObject);
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
// Incomplete JSON, try to parse what we can
|
|
130
|
+
const repaired = tryRepairJson(jsonBuffer);
|
|
131
|
+
if (repaired) {
|
|
132
|
+
setObject(repaired);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
else if (parsed.delta) {
|
|
137
|
+
// Delta update - append to buffer
|
|
138
|
+
jsonBuffer += parsed.delta;
|
|
139
|
+
try {
|
|
140
|
+
const partialObject = JSON.parse(jsonBuffer);
|
|
141
|
+
setObject(partialObject);
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
// Incomplete JSON
|
|
145
|
+
const repaired = tryRepairJson(jsonBuffer);
|
|
146
|
+
if (repaired) {
|
|
147
|
+
setObject(repaired);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
// Ignore parse errors
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// Try to parse final object
|
|
159
|
+
let finalObject;
|
|
160
|
+
if (jsonBuffer) {
|
|
161
|
+
try {
|
|
162
|
+
finalObject = JSON.parse(jsonBuffer);
|
|
163
|
+
setObject(finalObject);
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
// Keep partial object
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
onFinish?.({ object: finalObject, error: undefined });
|
|
170
|
+
}
|
|
171
|
+
catch (err) {
|
|
172
|
+
if (err instanceof Error && err.name === 'AbortError') {
|
|
173
|
+
// Request was aborted
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
177
|
+
setError(error);
|
|
178
|
+
onError?.(error);
|
|
179
|
+
onFinish?.({ object: undefined, error });
|
|
180
|
+
}
|
|
181
|
+
finally {
|
|
182
|
+
setIsLoading(false);
|
|
183
|
+
abortControllerRef.current = null;
|
|
184
|
+
}
|
|
185
|
+
}, [api, body, headers, onError, onFinish, schema]);
|
|
186
|
+
return {
|
|
187
|
+
object,
|
|
188
|
+
submit,
|
|
189
|
+
stop,
|
|
190
|
+
isLoading,
|
|
191
|
+
error,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Try to repair incomplete JSON by closing open brackets.
|
|
196
|
+
*/
|
|
197
|
+
function tryRepairJson(json) {
|
|
198
|
+
if (!json.trim()) {
|
|
199
|
+
return null;
|
|
200
|
+
}
|
|
201
|
+
// Count open brackets
|
|
202
|
+
let openBraces = 0;
|
|
203
|
+
let openBrackets = 0;
|
|
204
|
+
let inString = false;
|
|
205
|
+
let escape = false;
|
|
206
|
+
for (const char of json) {
|
|
207
|
+
if (escape) {
|
|
208
|
+
escape = false;
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
if (char === '\\') {
|
|
212
|
+
escape = true;
|
|
213
|
+
continue;
|
|
214
|
+
}
|
|
215
|
+
if (char === '"') {
|
|
216
|
+
inString = !inString;
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
if (inString) {
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
if (char === '{')
|
|
223
|
+
openBraces++;
|
|
224
|
+
if (char === '}')
|
|
225
|
+
openBraces--;
|
|
226
|
+
if (char === '[')
|
|
227
|
+
openBrackets++;
|
|
228
|
+
if (char === ']')
|
|
229
|
+
openBrackets--;
|
|
230
|
+
}
|
|
231
|
+
// Try to close the JSON
|
|
232
|
+
let repaired = json;
|
|
233
|
+
// If we're in a string, close it
|
|
234
|
+
if (inString) {
|
|
235
|
+
repaired += '"';
|
|
236
|
+
}
|
|
237
|
+
// Close brackets and braces
|
|
238
|
+
repaired += ']'.repeat(Math.max(0, openBrackets));
|
|
239
|
+
repaired += '}'.repeat(Math.max(0, openBraces));
|
|
240
|
+
try {
|
|
241
|
+
return JSON.parse(repaired);
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
return null;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=use-object.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-object.js","sourceRoot":"","sources":["../../src/use-object.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Matey React Core
|
|
3
|
+
*
|
|
4
|
+
* Core React hooks for building AI-powered applications.
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
export { useChat } from './use-chat.js';
|
|
9
|
+
export { useCompletion } from './use-completion.js';
|
|
10
|
+
export { useObject } from './use-object.js';
|
|
11
|
+
export type { Message, ToolCall, ToolInvocation, Tool, UseChatOptions, UseChatReturn, ChatRequestOptions, UseCompletionOptions, UseCompletionReturn, CompletionRequestOptions, UseObjectOptions, UseObjectReturn, DirectBackend, DirectModeOptions, DirectToolCallHandler, } from './types.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,YAAY,EACV,OAAO,EACP,QAAQ,EACR,cAAc,EACd,IAAI,EACJ,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,wBAAwB,EACxB,gBAAgB,EAChB,eAAe,EAEf,aAAa,EACb,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React Core Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for React hooks and utilities.
|
|
5
|
+
*
|
|
6
|
+
* @module
|
|
7
|
+
*/
|
|
8
|
+
import type { IRChatRequest, IRChatResponse, IRStreamChunk, IRParameters, IRTool } from 'ai.matey.types';
|
|
9
|
+
/**
|
|
10
|
+
* Backend adapter interface for direct mode.
|
|
11
|
+
* This allows using a BackendAdapter or Bridge directly without HTTP.
|
|
12
|
+
*/
|
|
13
|
+
export interface DirectBackend {
|
|
14
|
+
execute(request: IRChatRequest, signal?: AbortSignal): Promise<IRChatResponse>;
|
|
15
|
+
executeStream?(request: IRChatRequest, signal?: AbortSignal): AsyncGenerator<IRStreamChunk, void, undefined>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Handler for tool calls in direct mode.
|
|
19
|
+
*/
|
|
20
|
+
export type DirectToolCallHandler = (toolName: string, toolInput: Record<string, unknown>, toolId: string) => Promise<string | {
|
|
21
|
+
content: string;
|
|
22
|
+
isError?: boolean;
|
|
23
|
+
}>;
|
|
24
|
+
/**
|
|
25
|
+
* Direct backend mode options.
|
|
26
|
+
*/
|
|
27
|
+
export interface DirectModeOptions {
|
|
28
|
+
/**
|
|
29
|
+
* The backend adapter to use (Bridge or BackendAdapter).
|
|
30
|
+
*/
|
|
31
|
+
backend: DirectBackend;
|
|
32
|
+
/**
|
|
33
|
+
* System prompt to prepend to conversations.
|
|
34
|
+
*/
|
|
35
|
+
systemPrompt?: string | (() => string | Promise<string>);
|
|
36
|
+
/**
|
|
37
|
+
* Default IR parameters for requests.
|
|
38
|
+
*/
|
|
39
|
+
defaultParameters?: IRParameters;
|
|
40
|
+
/**
|
|
41
|
+
* Available tools for the conversation.
|
|
42
|
+
*/
|
|
43
|
+
tools?: readonly IRTool[];
|
|
44
|
+
/**
|
|
45
|
+
* Handler for tool calls.
|
|
46
|
+
*/
|
|
47
|
+
onToolCall?: DirectToolCallHandler;
|
|
48
|
+
/**
|
|
49
|
+
* Auto-execute tools and continue the conversation.
|
|
50
|
+
* @default false
|
|
51
|
+
*/
|
|
52
|
+
autoExecuteTools?: boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Maximum tool execution rounds.
|
|
55
|
+
* @default 10
|
|
56
|
+
*/
|
|
57
|
+
maxToolRounds?: number;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Message in a chat conversation.
|
|
61
|
+
*/
|
|
62
|
+
export interface Message {
|
|
63
|
+
/** Unique message ID */
|
|
64
|
+
id: string;
|
|
65
|
+
/** Message role */
|
|
66
|
+
role: 'user' | 'assistant' | 'system';
|
|
67
|
+
/** Message content */
|
|
68
|
+
content: string;
|
|
69
|
+
/** Creation timestamp */
|
|
70
|
+
createdAt?: Date;
|
|
71
|
+
/** Tool calls made by this message */
|
|
72
|
+
toolCalls?: ToolCall[];
|
|
73
|
+
/** Tool invocations and results */
|
|
74
|
+
toolInvocations?: ToolInvocation[];
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Tool call request.
|
|
78
|
+
*/
|
|
79
|
+
export interface ToolCall {
|
|
80
|
+
/** Tool call ID */
|
|
81
|
+
id: string;
|
|
82
|
+
/** Tool name */
|
|
83
|
+
name: string;
|
|
84
|
+
/** Tool arguments */
|
|
85
|
+
arguments: Record<string, unknown>;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Tool invocation with result.
|
|
89
|
+
*/
|
|
90
|
+
export interface ToolInvocation {
|
|
91
|
+
/** Tool call ID */
|
|
92
|
+
toolCallId: string;
|
|
93
|
+
/** Tool name */
|
|
94
|
+
toolName: string;
|
|
95
|
+
/** Tool arguments */
|
|
96
|
+
args: Record<string, unknown>;
|
|
97
|
+
/** Tool result */
|
|
98
|
+
result?: unknown;
|
|
99
|
+
/** Invocation state */
|
|
100
|
+
state: 'pending' | 'completed' | 'error';
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Chat hook options.
|
|
104
|
+
*
|
|
105
|
+
* Supports two modes:
|
|
106
|
+
* 1. HTTP Mode (default): Uses `api` endpoint with fetch
|
|
107
|
+
* 2. Direct Mode: Uses `direct.backend` with wrapper-ir for direct backend access
|
|
108
|
+
*/
|
|
109
|
+
export interface UseChatOptions {
|
|
110
|
+
/** Initial messages */
|
|
111
|
+
initialMessages?: Message[];
|
|
112
|
+
/** Initial input value */
|
|
113
|
+
initialInput?: string;
|
|
114
|
+
/** Chat ID for persistence */
|
|
115
|
+
id?: string;
|
|
116
|
+
/** API endpoint for chat */
|
|
117
|
+
api?: string;
|
|
118
|
+
/** Request headers */
|
|
119
|
+
headers?: Record<string, string>;
|
|
120
|
+
/** Request body extras */
|
|
121
|
+
body?: Record<string, unknown>;
|
|
122
|
+
/** Stream protocol */
|
|
123
|
+
streamProtocol?: 'text' | 'data';
|
|
124
|
+
/** Called for each response chunk (HTTP mode only) */
|
|
125
|
+
onResponse?: (response: Response) => void;
|
|
126
|
+
/**
|
|
127
|
+
* Direct backend mode configuration.
|
|
128
|
+
* When provided, bypasses HTTP and uses the backend adapter directly.
|
|
129
|
+
*/
|
|
130
|
+
direct?: DirectModeOptions;
|
|
131
|
+
/** Generate unique message IDs */
|
|
132
|
+
generateId?: () => string;
|
|
133
|
+
/** Called when response stream finishes */
|
|
134
|
+
onFinish?: (message: Message) => void;
|
|
135
|
+
/** Called on error */
|
|
136
|
+
onError?: (error: Error) => void;
|
|
137
|
+
/** Keep last message on error */
|
|
138
|
+
keepLastMessageOnError?: boolean;
|
|
139
|
+
/** Max number of automatic tool retries */
|
|
140
|
+
maxToolRoundtrips?: number;
|
|
141
|
+
/** Send extra message fields */
|
|
142
|
+
sendExtraMessageFields?: boolean;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Chat hook return value.
|
|
146
|
+
*/
|
|
147
|
+
export interface UseChatReturn {
|
|
148
|
+
/** Chat messages */
|
|
149
|
+
messages: Message[];
|
|
150
|
+
/** Current input value */
|
|
151
|
+
input: string;
|
|
152
|
+
/** Set input value */
|
|
153
|
+
setInput: (input: string) => void;
|
|
154
|
+
/** Handle input change */
|
|
155
|
+
handleInputChange: (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void;
|
|
156
|
+
/** Handle form submit */
|
|
157
|
+
handleSubmit: (e?: React.FormEvent<HTMLFormElement>, options?: ChatRequestOptions) => void;
|
|
158
|
+
/** Submit message programmatically */
|
|
159
|
+
append: (message: Message | string, options?: ChatRequestOptions) => Promise<string | null | undefined>;
|
|
160
|
+
/** Reload last message */
|
|
161
|
+
reload: (options?: ChatRequestOptions) => Promise<string | null | undefined>;
|
|
162
|
+
/** Stop streaming */
|
|
163
|
+
stop: () => void;
|
|
164
|
+
/** Set messages */
|
|
165
|
+
setMessages: (messages: Message[] | ((messages: Message[]) => Message[])) => void;
|
|
166
|
+
/** Whether currently loading */
|
|
167
|
+
isLoading: boolean;
|
|
168
|
+
/** Error if any */
|
|
169
|
+
error: Error | undefined;
|
|
170
|
+
/** Data from API */
|
|
171
|
+
data?: unknown[];
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Chat request options.
|
|
175
|
+
*/
|
|
176
|
+
export interface ChatRequestOptions {
|
|
177
|
+
/** Request headers */
|
|
178
|
+
headers?: Record<string, string>;
|
|
179
|
+
/** Request body extras */
|
|
180
|
+
body?: Record<string, unknown>;
|
|
181
|
+
/** Data to send */
|
|
182
|
+
data?: Record<string, string>;
|
|
183
|
+
/** Tools to use */
|
|
184
|
+
tools?: Record<string, Tool>;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Tool definition.
|
|
188
|
+
*/
|
|
189
|
+
export interface Tool {
|
|
190
|
+
/** Tool description */
|
|
191
|
+
description?: string;
|
|
192
|
+
/** Tool parameter schema */
|
|
193
|
+
parameters: Record<string, unknown>;
|
|
194
|
+
/** Execute the tool */
|
|
195
|
+
execute?: (args: Record<string, unknown>) => Promise<unknown>;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Completion hook options.
|
|
199
|
+
*/
|
|
200
|
+
export interface UseCompletionOptions {
|
|
201
|
+
/** Initial prompt */
|
|
202
|
+
initialInput?: string;
|
|
203
|
+
/** Initial completion */
|
|
204
|
+
initialCompletion?: string;
|
|
205
|
+
/** Completion ID */
|
|
206
|
+
id?: string;
|
|
207
|
+
/** API endpoint */
|
|
208
|
+
api?: string;
|
|
209
|
+
/** Request headers */
|
|
210
|
+
headers?: Record<string, string>;
|
|
211
|
+
/** Request body extras */
|
|
212
|
+
body?: Record<string, unknown>;
|
|
213
|
+
/** Called when completion finishes */
|
|
214
|
+
onFinish?: (prompt: string, completion: string) => void;
|
|
215
|
+
/** Called on error */
|
|
216
|
+
onError?: (error: Error) => void;
|
|
217
|
+
/** Called for each response chunk */
|
|
218
|
+
onResponse?: (response: Response) => void;
|
|
219
|
+
/** Stream protocol */
|
|
220
|
+
streamProtocol?: 'text' | 'data';
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Completion hook return value.
|
|
224
|
+
*/
|
|
225
|
+
export interface UseCompletionReturn {
|
|
226
|
+
/** Current completion */
|
|
227
|
+
completion: string;
|
|
228
|
+
/** Current input */
|
|
229
|
+
input: string;
|
|
230
|
+
/** Set input */
|
|
231
|
+
setInput: (input: string) => void;
|
|
232
|
+
/** Handle input change */
|
|
233
|
+
handleInputChange: (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void;
|
|
234
|
+
/** Handle form submit */
|
|
235
|
+
handleSubmit: (e?: React.FormEvent<HTMLFormElement>) => void;
|
|
236
|
+
/** Complete programmatically */
|
|
237
|
+
complete: (prompt: string, options?: CompletionRequestOptions) => Promise<string | null | undefined>;
|
|
238
|
+
/** Stop streaming */
|
|
239
|
+
stop: () => void;
|
|
240
|
+
/** Set completion */
|
|
241
|
+
setCompletion: (completion: string) => void;
|
|
242
|
+
/** Whether currently loading */
|
|
243
|
+
isLoading: boolean;
|
|
244
|
+
/** Error if any */
|
|
245
|
+
error: Error | undefined;
|
|
246
|
+
/** Data from API */
|
|
247
|
+
data?: unknown[];
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Completion request options.
|
|
251
|
+
*/
|
|
252
|
+
export interface CompletionRequestOptions {
|
|
253
|
+
/** Request headers */
|
|
254
|
+
headers?: Record<string, string>;
|
|
255
|
+
/** Request body extras */
|
|
256
|
+
body?: Record<string, unknown>;
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Object hook options.
|
|
260
|
+
*/
|
|
261
|
+
export interface UseObjectOptions<T> {
|
|
262
|
+
/** API endpoint */
|
|
263
|
+
api?: string;
|
|
264
|
+
/** Schema for validation */
|
|
265
|
+
schema?: unknown;
|
|
266
|
+
/** Initial object value */
|
|
267
|
+
initialValue?: Partial<T>;
|
|
268
|
+
/** Request headers */
|
|
269
|
+
headers?: Record<string, string>;
|
|
270
|
+
/** Request body extras */
|
|
271
|
+
body?: Record<string, unknown>;
|
|
272
|
+
/** Called on finish */
|
|
273
|
+
onFinish?: (event: {
|
|
274
|
+
object: T | undefined;
|
|
275
|
+
error: Error | undefined;
|
|
276
|
+
}) => void;
|
|
277
|
+
/** Called on error */
|
|
278
|
+
onError?: (error: Error) => void;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Object hook return value.
|
|
282
|
+
*/
|
|
283
|
+
export interface UseObjectReturn<T> {
|
|
284
|
+
/** Partial object being streamed */
|
|
285
|
+
object: Partial<T> | undefined;
|
|
286
|
+
/** Submit a prompt */
|
|
287
|
+
submit: (prompt: string) => void;
|
|
288
|
+
/** Stop streaming */
|
|
289
|
+
stop: () => void;
|
|
290
|
+
/** Whether currently loading */
|
|
291
|
+
isLoading: boolean;
|
|
292
|
+
/** Error if any */
|
|
293
|
+
error: Error | undefined;
|
|
294
|
+
}
|
|
295
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useChat Hook
|
|
3
|
+
*
|
|
4
|
+
* React hook for building chat interfaces with streaming support.
|
|
5
|
+
* Supports both HTTP API mode and direct backend mode.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
import type { UseChatOptions, UseChatReturn } from './types.js';
|
|
10
|
+
/**
|
|
11
|
+
* useChat - React hook for chat interfaces.
|
|
12
|
+
*
|
|
13
|
+
* Provides state management, streaming, and utilities for building
|
|
14
|
+
* chat applications with AI backends.
|
|
15
|
+
*
|
|
16
|
+
* Supports two modes:
|
|
17
|
+
* 1. HTTP Mode (default): Uses `api` endpoint with fetch
|
|
18
|
+
* 2. Direct Mode: Uses `direct.backend` for direct backend access
|
|
19
|
+
*
|
|
20
|
+
* @example HTTP Mode
|
|
21
|
+
* ```tsx
|
|
22
|
+
* import { useChat } from 'ai.matey.react.core';
|
|
23
|
+
*
|
|
24
|
+
* function ChatComponent() {
|
|
25
|
+
* const { messages, input, handleInputChange, handleSubmit, isLoading } = useChat({
|
|
26
|
+
* api: '/api/chat',
|
|
27
|
+
* });
|
|
28
|
+
*
|
|
29
|
+
* return (
|
|
30
|
+
* <div>
|
|
31
|
+
* {messages.map((m) => (
|
|
32
|
+
* <div key={m.id}>{m.role}: {m.content}</div>
|
|
33
|
+
* ))}
|
|
34
|
+
* <form onSubmit={handleSubmit}>
|
|
35
|
+
* <input value={input} onChange={handleInputChange} />
|
|
36
|
+
* <button type="submit" disabled={isLoading}>Send</button>
|
|
37
|
+
* </form>
|
|
38
|
+
* </div>
|
|
39
|
+
* );
|
|
40
|
+
* }
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* @example Direct Mode
|
|
44
|
+
* ```tsx
|
|
45
|
+
* import { useChat } from 'ai.matey.react.core';
|
|
46
|
+
* import { AnthropicBackend } from 'ai.matey.backend/anthropic';
|
|
47
|
+
*
|
|
48
|
+
* const backend = new AnthropicBackend({ apiKey: process.env.ANTHROPIC_API_KEY });
|
|
49
|
+
*
|
|
50
|
+
* function ChatComponent() {
|
|
51
|
+
* const { messages, input, handleInputChange, handleSubmit, isLoading } = useChat({
|
|
52
|
+
* direct: {
|
|
53
|
+
* backend,
|
|
54
|
+
* systemPrompt: 'You are a helpful assistant.',
|
|
55
|
+
* },
|
|
56
|
+
* });
|
|
57
|
+
*
|
|
58
|
+
* return (
|
|
59
|
+
* <div>
|
|
60
|
+
* {messages.map((m) => (
|
|
61
|
+
* <div key={m.id}>{m.role}: {m.content}</div>
|
|
62
|
+
* ))}
|
|
63
|
+
* <form onSubmit={handleSubmit}>
|
|
64
|
+
* <input value={input} onChange={handleInputChange} />
|
|
65
|
+
* <button type="submit" disabled={isLoading}>Send</button>
|
|
66
|
+
* </form>
|
|
67
|
+
* </div>
|
|
68
|
+
* );
|
|
69
|
+
* }
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
export declare function useChat(options?: UseChatOptions): UseChatReturn;
|
|
73
|
+
//# sourceMappingURL=use-chat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-chat.d.ts","sourceRoot":"","sources":["../../src/use-chat.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAW,cAAc,EAAE,aAAa,EAAsB,MAAM,YAAY,CAAC;AAmB7F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AACH,wBAAgB,OAAO,CAAC,OAAO,GAAE,cAAmB,GAAG,aAAa,CA6anE"}
|