@@ -18,7 +18,7 @@ import { useSettings } from '~/lib/hooks/useSettings';
1818import type { ProviderInfo } from '~/types/model' ;
1919import { useSearchParams } from '@remix-run/react' ;
2020import { createSampler } from '~/utils/sampler' ;
21- import { getTemplates , selectStarterTemplate } from '~/utils/selectStarterTemplate' ;
21+ import { getLocalStarter } from '~/utils/selectStarterTemplate' ;
2222import { logStore } from '~/lib/stores/logs' ;
2323import { streamingState } from '~/lib/stores/streaming' ;
2424import { filesToArtifacts } from '~/utils/fileUtils' ;
@@ -100,7 +100,7 @@ export const ChatImpl = memo(
100100 ( project ) => project . id === supabaseConn . selectedProjectId ,
101101 ) ;
102102 const supabaseAlert = useStore ( workbenchStore . supabaseAlert ) ;
103- const { activeProviders, promptId, autoSelectTemplate , contextOptimizationEnabled } = useSettings ( ) ;
103+ const { activeProviders, promptId, contextOptimizationEnabled } = useSettings ( ) ;
104104 const [ llmErrorAlert , setLlmErrorAlert ] = useState < LlmErrorAlertType | undefined > ( undefined ) ;
105105 const [ model , setModel ] = useState ( ( ) => {
106106 const savedModel = Cookies . get ( 'selectedModel' ) ;
@@ -177,19 +177,76 @@ export const ChatImpl = memo(
177177 initialInput : Cookies . get ( PROMPT_COOKIE_KEY ) || '' ,
178178 } ) ;
179179 useEffect ( ( ) => {
180- const prompt = searchParams . get ( 'prompt' ) ;
180+ const handlePrompt = async ( ) => {
181+ const prompt = searchParams . get ( 'prompt' ) ;
181182
182- // console.log(prompt, searchParams, model, provider);
183+ if ( prompt && ! chatStarted ) {
184+ setSearchParams ( { } ) ;
185+ runAnimation ( ) ;
186+ setFakeLoading ( true ) ;
183187
184- if ( prompt ) {
185- setSearchParams ( { } ) ;
186- runAnimation ( ) ;
187- append ( {
188- role : 'user' ,
189- content : `[Model: ${ model } ]\n\n[Provider: ${ provider . name } ]\n\n${ prompt } ` ,
190- } ) ;
191- }
192- } , [ model , provider , searchParams ] ) ;
188+ const temResp = await getLocalStarter ( prompt ) . catch ( ( e ) => {
189+ console . error ( 'Failed to load local starter template:' , e ) ;
190+ toast . warning ( 'Failed to load starter template\n Continuing with blank template' ) ;
191+
192+ return null ;
193+ } ) ;
194+
195+ if ( temResp ) {
196+ const { assistantMessage, userMessage } = temResp ;
197+ const userMessageText = `[Model: ${ model } ]\n\n[Provider: ${ provider . name } ]\n\n${ prompt } ` ;
198+
199+ setMessages ( [
200+ {
201+ id : `1-${ new Date ( ) . getTime ( ) } ` ,
202+ role : 'user' ,
203+ content : userMessageText ,
204+ parts : createMessageParts ( userMessageText , imageDataList ) ,
205+ } ,
206+ {
207+ id : `2-${ new Date ( ) . getTime ( ) } ` ,
208+ role : 'assistant' ,
209+ content : assistantMessage ,
210+ } ,
211+ {
212+ id : `3-${ new Date ( ) . getTime ( ) } ` ,
213+ role : 'user' ,
214+ content : `[Model: ${ model } ]\n\n[Provider: ${ provider . name } ]\n\n${ userMessage } ` ,
215+ annotations : [ 'hidden' ] ,
216+ } ,
217+ ] ) ;
218+
219+ const reloadOptions =
220+ uploadedFiles . length > 0
221+ ? { experimental_attachments : await filesToAttachments ( uploadedFiles ) }
222+ : undefined ;
223+
224+ reload ( reloadOptions ) ;
225+ setInput ( '' ) ;
226+ Cookies . remove ( PROMPT_COOKIE_KEY ) ;
227+
228+ setUploadedFiles ( [ ] ) ;
229+ setImageDataList ( [ ] ) ;
230+
231+ resetEnhancer ( ) ;
232+
233+ textareaRef . current ?. blur ( ) ;
234+ setFakeLoading ( false ) ;
235+
236+ return ;
237+ }
238+ } else if ( prompt ) {
239+ setSearchParams ( { } ) ;
240+ runAnimation ( ) ;
241+ append ( {
242+ role : 'user' ,
243+ content : `[Model: ${ model } ]\n\n[Provider: ${ provider . name } ]\n\n${ prompt } ` ,
244+ } ) ;
245+ }
246+ } ;
247+
248+ handlePrompt ( ) ;
249+ } , [ model , provider , searchParams , chatStarted ] ) ;
193250
194251 const { enhancingPrompt, promptEnhanced, enhancePrompt, resetEnhancer } = usePromptEnhancer ( ) ;
195252 const { parsedMessages, parseMessages } = useMessageParser ( ) ;
@@ -410,95 +467,13 @@ export const ChatImpl = memo(
410467 runAnimation ( ) ;
411468
412469 if ( ! chatStarted ) {
413- setFakeLoading ( true ) ;
414-
415- if ( autoSelectTemplate ) {
416- const { template, title } = await selectStarterTemplate ( {
417- message : finalMessageContent ,
418- model,
419- provider,
420- } ) ;
421-
422- if ( template !== 'blank' ) {
423- const temResp = await getTemplates ( template , title ) . catch ( ( e ) => {
424- if ( e . message . includes ( 'rate limit' ) ) {
425- toast . warning ( 'Rate limit exceeded. Skipping starter template\n Continuing with blank template' ) ;
426- } else {
427- toast . warning ( 'Failed to import starter template\n Continuing with blank template' ) ;
428- }
429-
430- return null ;
431- } ) ;
432-
433- if ( temResp ) {
434- const { assistantMessage, userMessage } = temResp ;
435- const userMessageText = `[Model: ${ model } ]\n\n[Provider: ${ provider . name } ]\n\n${ finalMessageContent } ` ;
436-
437- setMessages ( [
438- {
439- id : `1-${ new Date ( ) . getTime ( ) } ` ,
440- role : 'user' ,
441- content : userMessageText ,
442- parts : createMessageParts ( userMessageText , imageDataList ) ,
443- } ,
444- {
445- id : `2-${ new Date ( ) . getTime ( ) } ` ,
446- role : 'assistant' ,
447- content : assistantMessage ,
448- } ,
449- {
450- id : `3-${ new Date ( ) . getTime ( ) } ` ,
451- role : 'user' ,
452- content : `[Model: ${ model } ]\n\n[Provider: ${ provider . name } ]\n\n${ userMessage } ` ,
453- annotations : [ 'hidden' ] ,
454- } ,
455- ] ) ;
456-
457- const reloadOptions =
458- uploadedFiles . length > 0
459- ? { experimental_attachments : await filesToAttachments ( uploadedFiles ) }
460- : undefined ;
461-
462- reload ( reloadOptions ) ;
463- setInput ( '' ) ;
464- Cookies . remove ( PROMPT_COOKIE_KEY ) ;
465-
466- setUploadedFiles ( [ ] ) ;
467- setImageDataList ( [ ] ) ;
468-
469- resetEnhancer ( ) ;
470-
471- textareaRef . current ?. blur ( ) ;
472- setFakeLoading ( false ) ;
473-
474- return ;
475- }
476- }
477- }
478-
479- // If autoSelectTemplate is disabled or template selection failed, proceed with normal message
480- const userMessageText = `[Model: ${ model } ]\n\n[Provider: ${ provider . name } ]\n\n${ finalMessageContent } ` ;
481- const attachments = uploadedFiles . length > 0 ? await filesToAttachments ( uploadedFiles ) : undefined ;
482-
483- setMessages ( [
484- {
485- id : `${ new Date ( ) . getTime ( ) } ` ,
486- role : 'user' ,
487- content : userMessageText ,
488- parts : createMessageParts ( userMessageText , imageDataList ) ,
489- experimental_attachments : attachments ,
490- } ,
491- ] ) ;
492- reload ( attachments ? { experimental_attachments : attachments } : undefined ) ;
493- setFakeLoading ( false ) ;
470+ // On home page, set prompt in URL to trigger the useEffect
471+ setSearchParams ( { prompt : finalMessageContent } ) ;
494472 setInput ( '' ) ;
495473 Cookies . remove ( PROMPT_COOKIE_KEY ) ;
496-
497474 setUploadedFiles ( [ ] ) ;
498475 setImageDataList ( [ ] ) ;
499-
500476 resetEnhancer ( ) ;
501-
502477 textareaRef . current ?. blur ( ) ;
503478
504479 return ;
0 commit comments