@@ -509,6 +509,10 @@ function ChatProvider({ children }: { children: React.ReactNode }) {
509509
510510 let stoppedGeneratingMessage = false ;
511511 let createMessageFilters : ChunkFilter | null = null ;
512+ let useImage = false ;
513+ let referenceImageUrls : string [ ] = [ ] ;
514+ let referenceChunks : Chunk [ ] = [ ] ;
515+
512516
513517 if ( ! groupIds || groupIds . length === 0 ) {
514518 chatMessageAbortController . current = new AbortController ( ) ;
@@ -524,65 +528,6 @@ function ChatProvider({ children }: { children: React.ReactNode }) {
524528
525529 setLoadingText ( "Thinking about filter criteria..." ) ;
526530
527- let referenceImageUrls : string [ ] = [ ] ;
528- let referenceChunks : Chunk [ ] = [ ] ;
529- let useImage = false ;
530-
531- const handleImageEdit = async ( ) => {
532- console . log ( "REFERENCE IMAGE URLS" , referenceImageUrls ) ;
533- if ( useImage ) {
534- setLoadingText ( "Editing image..." ) ;
535-
536- try {
537- const editImageResponse = await trieveSDK . editImage ( {
538- input_images : [
539- {
540- image_src : {
541- url : imageUrl ,
542- } ,
543- file_name : "input_image" ,
544- } ,
545- ...( referenceImageUrls ?. map ( ( url : string , index : number ) => ( {
546- image_src : {
547- url,
548- } ,
549- file_name : `reference_image_${ index + 1 } ` ,
550- } ) ) || [ ] ) ,
551- ] ,
552- prompt :
553- "Using the input image as a base reference, apply the following edit and use the reference images if provided: " +
554- ( questionProp || currentQuestion ) ,
555- quality : "medium" ,
556- n : 1 ,
557- } ) ;
558-
559- if (
560- editImageResponse . image_urls &&
561- editImageResponse . image_urls . length > 0
562- ) {
563- setMessages ( ( m ) => [
564- ...m . slice ( 0 , - 1 ) ,
565- {
566- type : "system" ,
567- text : "Here's your edited image and other suggestions!" ,
568- additional : referenceChunks ,
569- queryId : null ,
570- imageUrl : editImageResponse . image_urls [ 0 ] ,
571- } ,
572- ] ) ;
573- setImageUrl ( "" ) ;
574- setIsLoading ( false ) ;
575- return true ;
576- }
577- } catch ( e ) {
578- console . error ( "error editing image" , e ) ;
579- return false ;
580- }
581- }
582-
583- return false ;
584- } ;
585-
586531 try {
587532 const priceFiltersPromise = retryOperation ( async ( ) => {
588533 if ( props . type === "ecommerce" && ! curGroup ) {
@@ -726,9 +671,8 @@ function ChatProvider({ children }: { children: React.ReactNode }) {
726671 } ) ;
727672 }
728673
729- useImage = ( imageFiltersResp ?. parameters &&
730- ( imageFiltersResp . parameters as any ) [ "image" ] === true &&
731- imageUrl ) as boolean ;
674+ useImage = ( imageFiltersResp ?. parameters &&
675+ ( imageFiltersResp . parameters as any ) [ "image" ] === true && imageUrl ) as boolean ;
732676
733677 const match_any_tags = [ ] ;
734678 if ( tagFiltersResp ?. parameters ) {
@@ -1047,6 +991,61 @@ function ChatProvider({ children }: { children: React.ReactNode }) {
1047991 }
1048992 }
1049993
994+ const handleImageEdit = async ( ) => {
995+ console . log ( "REFERENCE IMAGE URLS" , referenceImageUrls ) ;
996+ if ( useImage ) {
997+ setLoadingText ( "Editing image..." ) ;
998+
999+ try {
1000+ const editImageResponse = await trieveSDK . editImage ( {
1001+ input_images : [
1002+ {
1003+ image_src : {
1004+ url : imageUrl ,
1005+ } ,
1006+ file_name : "input_image" ,
1007+ } ,
1008+ ...( referenceImageUrls ?. map ( ( url : string , index : number ) => ( {
1009+ image_src : {
1010+ url,
1011+ } ,
1012+ file_name : `reference_image_${ index + 1 } ` ,
1013+ } ) ) || [ ] ) ,
1014+ ] ,
1015+ prompt :
1016+ "Using the input image as a base reference, apply the following edit and use the reference images if provided: " +
1017+ ( questionProp || currentQuestion ) ,
1018+ quality : "medium" ,
1019+ n : 1 ,
1020+ } ) ;
1021+
1022+ if (
1023+ editImageResponse . image_urls &&
1024+ editImageResponse . image_urls . length > 0
1025+ ) {
1026+ setMessages ( ( m ) => [
1027+ ...m . slice ( 0 , - 1 ) ,
1028+ {
1029+ type : "system" ,
1030+ text : "Here's your edited image and other suggestions!" ,
1031+ additional : referenceChunks ,
1032+ queryId : null ,
1033+ imageUrl : editImageResponse . image_urls [ 0 ] ,
1034+ } ,
1035+ ] ) ;
1036+ setImageUrl ( "" ) ;
1037+ setIsLoading ( false ) ;
1038+ return true ;
1039+ }
1040+ } catch ( e ) {
1041+ console . error ( "error editing image" , e ) ;
1042+ return false ;
1043+ }
1044+ }
1045+
1046+ return false ;
1047+ } ;
1048+
10501049 if ( referenceImageUrls . length > 0 ) {
10511050 if ( await handleImageEdit ( ) ) {
10521051 return ;
0 commit comments