Skip to content
Merged
Changes from 1 commit
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
5 changes: 1 addition & 4 deletions web-app/src/routes/settings/providers/$providerName.tsx
Original file line number Diff line number Diff line change
@@ -1,117 +1,117 @@
/* 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 { 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 91 in web-app/src/routes/settings/providers/$providerName.tsx

View workflow job for this annotation

GitHub Actions / coverage-check

56-91 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 102 in web-app/src/routes/settings/providers/$providerName.tsx

View workflow job for this annotation

GitHub Actions / coverage-check

94-102 lines are not covered with tests

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

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

View workflow job for this annotation

GitHub Actions / coverage-check

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

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

View workflow job for this annotation

GitHub Actions / coverage-check

106 line is not covered with tests

// If a model was imported and it might have vision capabilities, check and update
if (importedModelName && providerName === 'llamacpp') {
try {
const mmprojExists = await serviceHub
.models()
.checkMmprojExists(importedModelName)
if (mmprojExists) {

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

View workflow job for this annotation

GitHub Actions / coverage-check

109-114 lines are not covered with tests
// Get the updated provider after refresh
const { getProviderByName, updateProvider: updateProviderState } =
useModelProvider.getState()
Expand Down Expand Up @@ -357,12 +357,9 @@

if (selectedFile && typeof selectedFile === 'string') {
// Process the file path: replace spaces with dashes and convert to lowercase
const processedFilePath = selectedFile
.replace(/\s+/g, '-')
.toLowerCase()

// Install the backend using the llamacpp extension
await installBackend(processedFilePath)
await installBackend(selectedFile)

// Extract filename from the selected file path and replace spaces with dashes
const fileName = (
Expand Down
Loading