Skip to content
Merged
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
12 changes: 1 addition & 11 deletions web-app/src/routes/settings/providers/$providerName.tsx
Original file line number Diff line number Diff line change
@@ -1,115 +1,115 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import { Card, CardItem } from '@/containers/Card'
import HeaderPage from '@/containers/HeaderPage'
import SettingsMenu from '@/containers/SettingsMenu'
import { useModelProvider } from '@/hooks/useModelProvider'
import { cn, getProviderTitle } from '@/lib/utils'
import {

Check warning on line 7 in web-app/src/routes/settings/providers/$providerName.tsx

View workflow job for this annotation

GitHub Actions / coverage-check

2-7 lines are not covered with tests
createFileRoute,
Link,
useParams,
useSearch,
} from '@tanstack/react-router'
import { useTranslation } from '@/i18n/react-i18next-compat'
import Capabilities from '@/containers/Capabilities'
import { DynamicControllerSetting } from '@/containers/dynamicControllerSetting'
import { RenderMarkdown } from '@/containers/RenderMarkdown'
import { DialogEditModel } from '@/containers/dialogs/EditModel'
import { DialogAddModel } from '@/containers/dialogs/AddModel'
import { ImportVisionModelDialog } from '@/containers/dialogs/ImportVisionModelDialog'
import { ModelSetting } from '@/containers/ModelSetting'
import { DialogDeleteModel } from '@/containers/dialogs/DeleteModel'
import { FavoriteModelAction } from '@/containers/FavoriteModelAction'
import Joyride, { CallBackProps, STATUS } from 'react-joyride'
import { CustomTooltipJoyRide } from '@/containers/CustomeTooltipJoyRide'
import { route } from '@/constants/routes'
import DeleteProvider from '@/containers/dialogs/DeleteProvider'
import { useServiceHub } from '@/hooks/useServiceHub'
import { localStorageKey } from '@/constants/localStorage'
import { Button } from '@/components/ui/button'
import {

Check warning on line 30 in web-app/src/routes/settings/providers/$providerName.tsx

View workflow job for this annotation

GitHub Actions / coverage-check

13-30 lines are not covered with tests
IconFolderPlus,
IconLoader,
IconRefresh,
IconUpload,
} from '@tabler/icons-react'
import { toast } from 'sonner'
import { useCallback, useEffect, useState } from 'react'
import { predefinedProviders } from '@/consts/providers'
import { useModelLoad } from '@/hooks/useModelLoad'
import { useLlamacppDevices } from '@/hooks/useLlamacppDevices'
import { PlatformFeatures } from '@/lib/platform/const'
import { PlatformFeature } from '@/lib/platform/types'
import { useBackendUpdater } from '@/hooks/useBackendUpdater'

Check warning on line 43 in web-app/src/routes/settings/providers/$providerName.tsx

View workflow job for this annotation

GitHub Actions / coverage-check

36-43 lines are not covered with tests

// as route.threadsDetail
export const Route = createFileRoute('/settings/providers/$providerName')({
component: ProviderDetail,
validateSearch: (search: Record<string, unknown>): { step?: string } => {

Check warning on line 48 in web-app/src/routes/settings/providers/$providerName.tsx

View workflow job for this annotation

GitHub Actions / coverage-check

46-48 lines are not covered with tests
// validate and parse the search params into a typed state
return {
step: String(search?.step),
}
},
})

Check warning on line 54 in web-app/src/routes/settings/providers/$providerName.tsx

View workflow job for this annotation

GitHub Actions / coverage-check

50-54 lines are not covered with tests

function ProviderDetail() {
const { t } = useTranslation()
const serviceHub = useServiceHub()
const { setModelLoadError } = useModelLoad()
const steps = [
{
target: '.first-step-setup-remote-provider',
title: t('providers:joyride.chooseProviderTitle'),
disableBeacon: true,
content: t('providers:joyride.chooseProviderContent'),
},
{
target: '.second-step-setup-remote-provider',
title: t('providers:joyride.getApiKeyTitle'),
disableBeacon: true,
content: t('providers:joyride.getApiKeyContent'),
},
{
target: '.third-step-setup-remote-provider',
title: t('providers:joyride.insertApiKeyTitle'),
disableBeacon: true,
content: t('providers:joyride.insertApiKeyContent'),
},
]
const { step } = useSearch({ from: Route.id })
const [activeModels, setActiveModels] = useState<string[]>([])
const [loadingModels, setLoadingModels] = useState<string[]>([])
const [refreshingModels, setRefreshingModels] = useState(false)
const [isCheckingBackendUpdate, setIsCheckingBackendUpdate] = useState(false)
const [isInstallingBackend, setIsInstallingBackend] = useState(false)
const [importingModel, setImportingModel] = useState<string | null>(null)
const { checkForUpdate: checkForBackendUpdate, installBackend } =
useBackendUpdater()
const { providerName } = useParams({ from: Route.id })
const { getProviderByName, setProviders, updateProvider } = useModelProvider()
const provider = getProviderByName(providerName)
const isSetup = step === 'setup_remote_provider'

Check warning on line 92 in web-app/src/routes/settings/providers/$providerName.tsx

View workflow job for this annotation

GitHub Actions / coverage-check

56-92 lines are not covered with tests

// Check if llamacpp provider needs backend configuration
const needsBackendConfig =
provider?.provider === 'llamacpp' &&
provider.settings?.some(
(setting) =>
setting.key === 'version_backend' &&
(setting.controller_props.value === 'none' ||
setting.controller_props.value === '' ||
!setting.controller_props.value)
)

Check warning on line 103 in web-app/src/routes/settings/providers/$providerName.tsx

View workflow job for this annotation

GitHub Actions / coverage-check

95-103 lines are not covered with tests

const handleModelImportSuccess = async (importedModelName?: string) => {
if (importedModelName) {
setImportingModel(importedModelName)
}

Check warning on line 108 in web-app/src/routes/settings/providers/$providerName.tsx

View workflow job for this annotation

GitHub Actions / coverage-check

105-108 lines are not covered with tests

try {

Check warning on line 110 in web-app/src/routes/settings/providers/$providerName.tsx

View workflow job for this annotation

GitHub Actions / coverage-check

110 line is not covered with tests
// Refresh the provider to update the models list
await serviceHub.providers().getProviders().then(setProviders)

Check warning on line 112 in web-app/src/routes/settings/providers/$providerName.tsx

View workflow job for this annotation

GitHub Actions / coverage-check

112 line is not covered with tests

// If a model was imported and it might have vision capabilities, check and update
if (importedModelName && providerName === 'llamacpp') {
Expand Down Expand Up @@ -317,17 +317,7 @@
.getActiveModels()
.then((models) => setActiveModels(models || []))
} catch (error) {
console.error('Error starting model:', error)
if (
error &&
typeof error === 'object' &&
'message' in error &&
typeof error.message === 'string'
) {
setModelLoadError({ message: error.message })
} else {
setModelLoadError(typeof error === 'string' ? error : `${error}`)
}
setModelLoadError(error as ErrorObject)
} finally {
// Remove model from loading state
setLoadingModels((prev) => prev.filter((id) => id !== modelId))
Expand Down
Loading