Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions web-app/src/hooks/useModelProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,104 +28,104 @@
selectedModel: null,
deletedModels: [],
getModelBy: (modelId: string) => {
const provider = get().providers.find(
(provider) => provider.provider === get().selectedProvider
)
if (!provider) return undefined
return provider.models.find((model) => model.id === modelId)
},

Check warning on line 36 in web-app/src/hooks/useModelProvider.ts

View workflow job for this annotation

GitHub Actions / coverage-check

31-36 lines are not covered with tests
setProviders: (providers) =>
set((state) => {
const existingProviders = state.providers

Check warning on line 39 in web-app/src/hooks/useModelProvider.ts

View workflow job for this annotation

GitHub Actions / coverage-check

38-39 lines are not covered with tests
// Filter out legacy llama.cpp provider for migration
// Can remove after a couple of releases
.filter((e) => e.provider !== 'llama.cpp')
.map((provider) => {
return {
...provider,
models: provider.models.filter(
(e) =>
('id' in e || 'model' in e) &&
typeof (e.id ?? e.model) === 'string'
),
}
})

Check warning on line 52 in web-app/src/hooks/useModelProvider.ts

View workflow job for this annotation

GitHub Actions / coverage-check

42-52 lines are not covered with tests
// Ensure deletedModels is always an array
const currentDeletedModels = Array.isArray(state.deletedModels)
? state.deletedModels
: []

Check warning on line 56 in web-app/src/hooks/useModelProvider.ts

View workflow job for this annotation

GitHub Actions / coverage-check

54-56 lines are not covered with tests

const updatedProviders = providers.map((provider) => {
const existingProvider = existingProviders.find(
(x) => x.provider === provider.provider
)
const models = (existingProvider?.models || []).filter(
(e) =>
('id' in e || 'model' in e) &&
typeof (e.id ?? e.model) === 'string'
)
const mergedModels = [
...(provider?.models ?? []).filter(
(e) =>
('id' in e || 'model' in e) &&
typeof (e.id ?? e.model) === 'string' &&
!models.some((m) => m.id === e.id) &&
!currentDeletedModels.includes(e.id)
),
...models,
]
const updatedModels = provider.models?.map((model) => {
const existingModel = models.find((m) => m.id === model.id)
return {
...model,
settings:
models.find((m) => m.id === model.id)?.settings ||
model.settings,
settings: existingModel?.settings || model.settings,
capabilities: existingModel?.capabilities || model.capabilities,
}
})
return {
...provider,
models: provider.persist ? updatedModels : mergedModels,
settings: provider.settings.map((setting) => {
const existingSetting = provider.persist
? undefined
: existingProvider?.settings?.find(
(x) => x.key === setting.key
)
return {
...setting,
controller_props: {
...setting.controller_props,
...(existingSetting?.controller_props || {}),
},
}
}),
api_key: existingProvider?.api_key || provider.api_key,
base_url: existingProvider?.base_url || provider.base_url,
active: existingProvider ? existingProvider?.active : true,
}
})
return {
providers: [
...updatedProviders,
...existingProviders.filter(
(e) => !updatedProviders.some((p) => p.provider === e.provider)
),
],
}
}),

Check warning on line 115 in web-app/src/hooks/useModelProvider.ts

View workflow job for this annotation

GitHub Actions / coverage-check

58-115 lines are not covered with tests
updateProvider: (providerName, data) => {
set((state) => ({
providers: state.providers.map((provider) => {
if (provider.provider === providerName) {
return {
...provider,
...data,
}
}
return provider
}),
}))
},

Check warning on line 128 in web-app/src/hooks/useModelProvider.ts

View workflow job for this annotation

GitHub Actions / coverage-check

117-128 lines are not covered with tests
getProviderByName: (providerName: string) => {
const provider = get().providers.find(
(provider) => provider.provider === providerName
Expand All @@ -135,21 +135,21 @@
},
selectModelProvider: (providerName: string, modelName: string) => {
// Find the model object
const provider = get().providers.find(
(provider) => provider.provider === providerName
)

Check warning on line 140 in web-app/src/hooks/useModelProvider.ts

View workflow job for this annotation

GitHub Actions / coverage-check

138-140 lines are not covered with tests

let modelObject: Model | undefined = undefined

Check warning on line 142 in web-app/src/hooks/useModelProvider.ts

View workflow job for this annotation

GitHub Actions / coverage-check

142 line is not covered with tests

if (provider && provider.models) {
modelObject = provider.models.find((model) => model.id === modelName)
}

Check warning on line 146 in web-app/src/hooks/useModelProvider.ts

View workflow job for this annotation

GitHub Actions / coverage-check

144-146 lines are not covered with tests

// Update state with provider name and model object
set({
selectedProvider: providerName,
selectedModel: modelObject || null,
})

Check warning on line 152 in web-app/src/hooks/useModelProvider.ts

View workflow job for this annotation

GitHub Actions / coverage-check

149-152 lines are not covered with tests

return modelObject
},
Expand Down
1 change: 1 addition & 0 deletions web-app/src/types/models.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,5 @@ export enum ModelCapabilities {
export enum DefaultToolUseSupportedModels {
JanNano = 'jan-nano',
Qwen3 = 'qwen3',
Lucy = 'lucy',
}
Loading