@@ -123,7 +123,13 @@ export const getDataSourceChoices = (
123123 framework : TemplateFramework ,
124124 selectedDataSource : TemplateDataSource [ ] ,
125125) => {
126+ // If LlamaCloud is already selected, don't show any other options
127+ if ( selectedDataSource . find ( ( s ) => s . type === "llamacloud" ) ) {
128+ return [ ] ;
129+ }
130+
126131 const choices = [ ] ;
132+
127133 if ( selectedDataSource . length > 0 ) {
128134 choices . push ( {
129135 title : "No" ,
@@ -171,6 +177,13 @@ export const getDataSourceChoices = (
171177 value : "db" ,
172178 } ) ;
173179 }
180+
181+ if ( ! selectedDataSource . length ) {
182+ choices . push ( {
183+ title : "Use managed index from LlamaCloud" ,
184+ value : "llamacloud" ,
185+ } ) ;
186+ }
174187 return choices ;
175188} ;
176189
@@ -484,17 +497,19 @@ export const askQuestions = async (
484497 // continue asking user for data sources if none are initially provided
485498 while ( true ) {
486499 const firstQuestion = program . dataSources . length === 0 ;
500+ const choices = getDataSourceChoices (
501+ program . framework ,
502+ program . dataSources ,
503+ ) ;
504+ if ( choices . length === 0 ) break ;
487505 const { selectedSource } = await prompts (
488506 {
489507 type : "select" ,
490508 name : "selectedSource" ,
491509 message : firstQuestion
492510 ? "Which data source would you like to use?"
493511 : "Would you like to add another data source?" ,
494- choices : getDataSourceChoices (
495- program . framework ,
496- program . dataSources ,
497- ) ,
512+ choices,
498513 initial : firstQuestion ? 1 : 0 ,
499514 } ,
500515 questionHandlers ,
@@ -591,51 +606,76 @@ export const askQuestions = async (
591606 config : await prompts ( dbPrompts , questionHandlers ) ,
592607 } ) ;
593608 }
609+ case "llamacloud" : {
610+ program . dataSources . push ( {
611+ type : "llamacloud" ,
612+ config : { } ,
613+ } ) ;
614+ program . dataSources . push ( EXAMPLE_FILE ) ;
615+ break ;
616+ }
594617 }
595618 }
596619 }
597620 }
598621
599- // Asking for LlamaParse if user selected file or folder data source
600- if (
601- program . dataSources . some ( ( ds ) => ds . type === "file" ) &&
602- program . useLlamaParse === undefined
603- ) {
622+ const isUsingLlamaCloud = program . dataSources . some (
623+ ( ds ) => ds . type === "llamacloud" ,
624+ ) ;
625+
626+ // Asking for LlamaParse if user selected file data source
627+ if ( isUsingLlamaCloud ) {
628+ // default to use LlamaParse if using LlamaCloud
629+ program . useLlamaParse = preferences . useLlamaParse = true ;
630+ } else {
631+ if ( program . dataSources . some ( ( ds ) => ds . type === "file" ) ) {
632+ if ( ciInfo . isCI ) {
633+ program . useLlamaParse = getPrefOrDefault ( "useLlamaParse" ) ;
634+ } else {
635+ const { useLlamaParse } = await prompts (
636+ {
637+ type : "toggle" ,
638+ name : "useLlamaParse" ,
639+ message :
640+ "Would you like to use LlamaParse (improved parser for RAG - requires API key)?" ,
641+ initial : false ,
642+ active : "yes" ,
643+ inactive : "no" ,
644+ } ,
645+ questionHandlers ,
646+ ) ;
647+ program . useLlamaParse = useLlamaParse ;
648+ preferences . useLlamaParse = useLlamaParse ;
649+ }
650+ }
651+ }
652+
653+ // Ask for LlamaCloud API key when using a LlamaCloud index or LlamaParse
654+ if ( isUsingLlamaCloud || program . useLlamaParse ) {
604655 if ( ciInfo . isCI ) {
605- program . useLlamaParse = getPrefOrDefault ( "useLlamaParse" ) ;
606656 program . llamaCloudKey = getPrefOrDefault ( "llamaCloudKey" ) ;
607657 } else {
608- const { useLlamaParse } = await prompts (
658+ // Ask for LlamaCloud API key
659+ const { llamaCloudKey } = await prompts (
609660 {
610- type : "toggle " ,
611- name : "useLlamaParse " ,
661+ type : "text " ,
662+ name : "llamaCloudKey " ,
612663 message :
613- "Would you like to use LlamaParse (improved parser for RAG - requires API key)?" ,
614- initial : false ,
615- active : "yes" ,
616- inactive : "no" ,
664+ "Please provide your LlamaCloud API key (leave blank to skip):" ,
617665 } ,
618666 questionHandlers ,
619667 ) ;
620- program . useLlamaParse = useLlamaParse ;
621-
622- // Ask for LlamaCloud API key
623- if ( useLlamaParse && program . llamaCloudKey === undefined ) {
624- const { llamaCloudKey } = await prompts (
625- {
626- type : "text" ,
627- name : "llamaCloudKey" ,
628- message :
629- "Please provide your LlamaIndex Cloud API key (leave blank to skip):" ,
630- } ,
631- questionHandlers ,
632- ) ;
633- program . llamaCloudKey = llamaCloudKey ;
634- }
668+ program . llamaCloudKey = preferences . llamaCloudKey =
669+ llamaCloudKey || process . env . LLAMA_CLOUD_API_KEY ;
635670 }
636671 }
637672
638- if ( program . dataSources . length > 0 && ! program . vectorDb ) {
673+ if ( isUsingLlamaCloud ) {
674+ // When using a LlamaCloud index, don't ask for vector database and use code in `llamacloud` folder for vector database
675+ const vectorDb = "llamacloud" ;
676+ program . vectorDb = vectorDb ;
677+ preferences . vectorDb = vectorDb ;
678+ } else if ( program . dataSources . length > 0 && ! program . vectorDb ) {
639679 if ( ciInfo . isCI ) {
640680 program . vectorDb = getPrefOrDefault ( "vectorDb" ) ;
641681 } else {
0 commit comments