@@ -24,6 +24,7 @@ interface UsePipeOptions {
2424}
2525
2626const uuidSchema = z . string ( ) . uuid ( ) ;
27+ const externalThreadIdSchema = uuidSchema . optional ( ) ;
2728
2829export function usePipe ( {
2930 apiRoute = '/langbase/pipes/run-stream' ,
@@ -41,7 +42,9 @@ export function usePipe({
4142 const [ error , setError ] = useState < Error | null > ( null ) ;
4243
4344 const abortControllerRef = useRef < AbortController | null > ( null ) ;
44- const threadIdRef = useRef < string | null > ( initialThreadId || null ) ;
45+ const threadIdRef = useRef < string | undefined > (
46+ initialThreadId || undefined ,
47+ ) ;
4548 const messagesRef = useRef < Message [ ] > ( initialMessages ) ;
4649 const isFirstRequestRef = useRef < boolean > ( true ) ;
4750
@@ -87,6 +90,17 @@ export function usePipe({
8790 [ updateMessages , onResponse , onFinish ] ,
8891 ) ;
8992
93+ const setThreadId = useCallback ( ( newThreadId : string | undefined ) => {
94+ const isValidThreadId =
95+ externalThreadIdSchema . safeParse ( newThreadId ) . success ;
96+
97+ if ( isValidThreadId ) {
98+ threadIdRef . current = newThreadId ;
99+ } else {
100+ throw new Error ( 'Invalid thread ID' ) ;
101+ }
102+ } , [ ] ) ;
103+
90104 const getMessagesToSend = useCallback (
91105 ( updatedMessages : Message [ ] ) : [ Message [ ] , boolean ] => {
92106 const isInitialRequest = isFirstRequestRef . current ;
@@ -264,6 +278,7 @@ export function usePipe({
264278 threadId : threadIdRef . current ,
265279 sendMessage,
266280 setInput,
281+ setThreadId,
267282 } ) ,
268283 [
269284 messages ,
0 commit comments