|
1 | | -import type { ContainerProperties } from '@react-three/uikit' |
| 1 | +import type { CardProperties } from '@react-three/uikit-default' |
2 | 2 |
|
3 | | -import { Container, Text } from '@react-three/uikit' |
4 | | -import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@react-three/uikit-default' |
| 3 | +import { Text } from '@react-three/uikit' |
| 4 | +import { Button, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Input } from '@react-three/uikit-default' |
| 5 | +import { useState } from 'react' |
5 | 6 |
|
6 | | -export const SettingsProviders = (props: ContainerProperties) => ( |
7 | | - <Container flexDirection="column" {...props}> |
8 | | - <Accordion> |
9 | | - <AccordionItem value="item-1"> |
10 | | - <AccordionTrigger> |
11 | | - <Text>Is it accessible?</Text> |
12 | | - </AccordionTrigger> |
13 | | - <AccordionContent> |
14 | | - <Text>Yes. It adheres to the WAI-ARIA design pattern.</Text> |
15 | | - </AccordionContent> |
16 | | - </AccordionItem> |
17 | | - <AccordionItem value="item-2"> |
18 | | - <AccordionTrigger> |
19 | | - <Text>Is it styled?</Text> |
20 | | - </AccordionTrigger> |
21 | | - <AccordionContent> |
22 | | - <Text>Yes. It comes with default styles that matches the other components' aesthetic.</Text> |
23 | | - </AccordionContent> |
24 | | - </AccordionItem> |
25 | | - <AccordionItem value="item-3"> |
26 | | - <AccordionTrigger> |
27 | | - <Text>Is it animated?</Text> |
28 | | - </AccordionTrigger> |
29 | | - <AccordionContent> |
30 | | - <Text>Yes. It's animated by default, but you can disable it if you prefer.</Text> |
31 | | - </AccordionContent> |
32 | | - </AccordionItem> |
33 | | - </Accordion> |
34 | | - </Container> |
| 7 | +import { useLLMProvider } from '~/hooks/use-providers' |
| 8 | + |
| 9 | +const LLMProvider = (props: CardProperties) => { |
| 10 | + const [llmProvider, setLLMProvider] = useLLMProvider() |
| 11 | + |
| 12 | + const [baseURL, setBaseURL] = useState(llmProvider.baseURL) |
| 13 | + const [apiKey, setApiKey] = useState(llmProvider.apiKey) |
| 14 | + const [model, setModel] = useState(llmProvider.model) |
| 15 | + |
| 16 | + return ( |
| 17 | + <Card {...props}> |
| 18 | + <CardHeader> |
| 19 | + <CardTitle> |
| 20 | + <Text>LLM</Text> |
| 21 | + </CardTitle> |
| 22 | + <CardDescription> |
| 23 | + <Text>Creates a model response for the given chat conversation.</Text> |
| 24 | + </CardDescription> |
| 25 | + </CardHeader> |
| 26 | + <CardContent flexDirection="column" gap={16}> |
| 27 | + <Input onValueChange={setBaseURL} placeholder="baseURL, e.g. https://api.openai.com/v1/" value={baseURL} /> |
| 28 | + <Input onValueChange={setApiKey} placeholder="apiKey (optional), e.g. sk-******" value={apiKey} /> |
| 29 | + <Input onValueChange={setModel} placeholder="model, e.g. gpt-4o" value={model} /> |
| 30 | + </CardContent> |
| 31 | + <CardFooter> |
| 32 | + <Button |
| 33 | + data-test-id="llm-provider-submit" |
| 34 | + flexDirection="row" |
| 35 | + onClick={() => setLLMProvider({ apiKey, baseURL, model })} |
| 36 | + width="100%" |
| 37 | + > |
| 38 | + <Text>Submit</Text> |
| 39 | + </Button> |
| 40 | + </CardFooter> |
| 41 | + </Card> |
| 42 | + ) |
| 43 | +} |
| 44 | + |
| 45 | +export const SettingsProviders = (props: CardProperties) => ( |
| 46 | + <LLMProvider {...props} /> |
35 | 47 | ) |
0 commit comments