1- import { Accessor , createMemo , createSignal , useContext , For } from "solid-js" ;
1+ import { Accessor , createMemo , createSignal , createEffect , useContext , For } from "solid-js" ;
2+ import { AiOutlineWarning } from "solid-icons/ai" ;
23import {
34 Dialog ,
45 DialogPanel ,
@@ -12,7 +13,6 @@ import { useNavigate } from "@solidjs/router";
1213import {
1314 ServerEnvsConfiguration ,
1415 availableDistanceMetrics ,
15- availableEmbeddingModels ,
1616} from "shared/types" ;
1717import { defaultServerEnvsConfiguration } from "../pages/Dashboard/Dataset/DatasetSettingsPage" ;
1818import { createToast } from "./ShowToasts" ;
@@ -35,6 +35,20 @@ export const NewDatasetModal = (props: NewDatasetModalProps) => {
3535 const [ isLoading , setIsLoading ] = createSignal ( false ) ;
3636 const [ fillWithExampleData , setFillWithExampleData ] = createSignal ( false ) ;
3737
38+ const api_host = import . meta. env . VITE_API_HOST as unknown as string ;
39+
40+ const [ availableEmbeddingModels , setAvailableEmbeddingModels ] =
41+ createSignal < any > ( [ ] ) ;
42+
43+ createEffect ( ( ) => {
44+ fetch ( `${ api_host } /embedding_models` )
45+ . then ( ( resp ) => resp . json ( ) )
46+ . then ( ( json ) => {
47+ console . log ( json . models ) ;
48+ setAvailableEmbeddingModels ( json . models )
49+ } )
50+ } ) ;
51+
3852 const selectedOrgnaization = createMemo ( ( ) => {
3953 const selectedOrgId = userContext . selectedOrganizationId ?.( ) ;
4054 if ( ! selectedOrgId ) return null ;
@@ -186,51 +200,69 @@ export const NewDatasetModal = (props: NewDatasetModalProps) => {
186200 >
187201 Embedding Model
188202 </ label >
189- < select
190- id = "embeddingSize"
191- name = "embeddingSize"
192- class = "col-span-2 block w-full rounded-md border-[0.5px] border-neutral-300 bg-white px-3 py-1.5 shadow-sm placeholder:text-neutral-400 focus:outline-magenta-500 sm:text-sm sm:leading-6"
193- value = {
194- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
195- availableEmbeddingModels . find (
196- ( model ) =>
203+ < Show when = { availableEmbeddingModels ( ) . length > 0 } >
204+ < select
205+ id = "embeddingSize"
206+ name = "embeddingSize"
207+ class = "col-span-2 block w-full rounded-md border-[0.5px] border-neutral-300 bg-white px-3 py-1.5 shadow-sm placeholder:text-neutral-400 focus:outline-magenta-500 sm:text-sm sm:leading-6"
208+ value = {
209+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
210+ availableEmbeddingModels ( ) . find (
211+ ( model ) =>
212+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
213+ model . id ===
214+ serverConfig ( ) . EMBEDDING_MODEL_NAME ,
197215 // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
198- model . id ===
199- serverConfig ( ) . EMBEDDING_MODEL_NAME ,
200- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
201- ) ?. name ?? availableEmbeddingModels [ 0 ] . name
202- }
203- onChange = { ( e ) => {
204- const selectedModel = availableEmbeddingModels . find (
205- ( model ) => model . name === e . currentTarget . value ,
206- ) ;
216+ ) ?. display_name ??
217+ availableEmbeddingModels ( ) [ 0 ] ?. display_name
218+ }
219+ onChange = { ( e ) => {
220+ const selectedModel =
221+ availableEmbeddingModels ( ) ?. find (
222+ ( model ) =>
223+ model . display_name === e . currentTarget . value ,
224+ ) ;
207225
208- const embeddingSize =
209- selectedModel ?. dimension ?? 1536 ;
226+ const embeddingSize =
227+ selectedModel ?. dimension ?? 1536 ;
210228
211- setServerConfig ( ( prev ) => {
212- return {
213- ...prev ,
214- EMBEDDING_SIZE : embeddingSize ,
215- EMBEDDING_MODEL_NAME :
216- selectedModel ?. id ?? "jina-base-en" ,
217- EMBEDDING_QUERY_PREFIX :
218- selectedModel ?. id === "jina-base-en"
219- ? "Search for:"
220- : "" ,
221- EMBEDDING_BASE_URL :
222- selectedModel ?. url ??
223- "https://api.openai.com/v1" ,
224- } ;
225- } ) ;
226- } }
227- >
228- < For each = { availableEmbeddingModels } >
229- { ( model ) => (
230- < option value = { model . name } > { model . name } </ option >
231- ) }
232- </ For >
233- </ select >
229+ setServerConfig ( ( prev ) => {
230+ return {
231+ ...prev ,
232+ EMBEDDING_SIZE : embeddingSize ,
233+ EMBEDDING_MODEL_NAME :
234+ selectedModel ?. id ?? "jina-base-en" ,
235+ EMBEDDING_QUERY_PREFIX :
236+ selectedModel ?. id === "jina-base-en"
237+ ? "Search for:"
238+ : "" ,
239+ EMBEDDING_BASE_URL :
240+ selectedModel ?. url ??
241+ "https://api.openai.com/v1" ,
242+ } ;
243+ } ) ;
244+ } }
245+ >
246+ < For each = { availableEmbeddingModels ( ) } >
247+ { ( model ) => (
248+ < option value = { model . display_name } > { model . display_name } </ option >
249+ ) }
250+ </ For >
251+ </ select >
252+ </ Show >
253+ < Show when = { availableEmbeddingModels ( ) . length == 0 } >
254+ < div class = "col-span-2 flex items-center space-x-2" >
255+ < AiOutlineWarning class = "h-5 w-5 text-yellow-400" />
256+ < div class = "flex flex-col space-y-1" >
257+ < div class = "w-full text-base text-neutral-800 sm:text-sm sm:leading-6" >
258+ No Embedding Models available
259+ </ div >
260+ < div class = "w-full text-xs" >
261+ Check server settings
262+ </ div >
263+ </ div >
264+ </ div >
265+ </ Show >
234266 </ div >
235267
236268 < div class = "content-center py-4 sm:grid sm:grid-cols-3 sm:items-start sm:gap-4" >
0 commit comments