mirror of
https://github.com/ItzCrazyKns/Perplexica.git
synced 2025-10-21 23:08:15 +00:00
64 lines
1.8 KiB
TypeScript
64 lines
1.8 KiB
TypeScript
import React, { useState } from 'react';
|
|
import AddProvider from './AddProviderDialog';
|
|
import {
|
|
ConfigModelProvider,
|
|
ModelProviderUISection,
|
|
UIConfigField,
|
|
} from '@/lib/config/types';
|
|
import ModelProvider from './ModelProvider';
|
|
import ModelSelect from './ModelSelect';
|
|
|
|
const Models = ({
|
|
fields,
|
|
values,
|
|
}: {
|
|
fields: ModelProviderUISection[];
|
|
values: ConfigModelProvider[];
|
|
}) => {
|
|
const [providers, setProviders] = useState<ConfigModelProvider[]>(values);
|
|
|
|
return (
|
|
<div className="flex-1 space-y-6 overflow-y-auto py-6">
|
|
<div className="flex flex-col px-6 gap-y-4">
|
|
<h3 className="text-xs lg:text-sm text-black/70 dark:text-white/70">
|
|
Select models
|
|
</h3>
|
|
<ModelSelect
|
|
providers={values.filter((p) =>
|
|
p.chatModels.some((m) => m.key != 'error'),
|
|
)}
|
|
type="chat"
|
|
/>
|
|
<ModelSelect
|
|
providers={values.filter((p) =>
|
|
p.embeddingModels.some((m) => m.key != 'error'),
|
|
)}
|
|
type="embedding"
|
|
/>
|
|
</div>
|
|
<div className="border-t border-light-200 dark:border-dark-200" />
|
|
<div className="flex flex-row justify-between items-center px-6 ">
|
|
<p className="text-xs lg:text-sm text-black/70 dark:text-white/70">
|
|
Manage model provider
|
|
</p>
|
|
<AddProvider modelProviders={fields} setProviders={setProviders} />
|
|
</div>
|
|
<div className="flex flex-col px-6 gap-y-4">
|
|
{providers.map((provider) => (
|
|
<ModelProvider
|
|
key={`provider-${provider.id}`}
|
|
fields={
|
|
(fields.find((f) => f.key === provider.type)?.fields ??
|
|
[]) as UIConfigField[]
|
|
}
|
|
modelProvider={provider}
|
|
setProviders={setProviders}
|
|
/>
|
|
))}
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default Models;
|