chatbot-ui/components/sidebar/items/models/model-item.tsx

103 lines
2.8 KiB
TypeScript

import { Input } from "@/components/ui/input"
import { Label } from "@/components/ui/label"
import { MODEL_NAME_MAX } from "@/db/limits"
import { Tables, TablesUpdate } from "@/supabase/types"
import { IconSparkles } from "@tabler/icons-react"
import { FC, useState } from "react"
import { SidebarItem } from "../all/sidebar-display-item"
interface ModelItemProps {
model: Tables<"models">
}
export const ModelItem: FC<ModelItemProps> = ({ model }) => {
const [isTyping, setIsTyping] = useState(false)
const [apiKey, setApiKey] = useState(model.api_key)
const [baseUrl, setBaseUrl] = useState(model.base_url)
const [description, setDescription] = useState(model.description)
const [modelId, setModelId] = useState(model.model_id)
const [name, setName] = useState(model.name)
const [contextLength, setContextLength] = useState(model.context_length)
return (
<SidebarItem
item={model}
isTyping={isTyping}
contentType="models"
icon={<IconSparkles height={30} width={30} />}
updateState={
{
api_key: apiKey,
base_url: baseUrl,
description,
context_length: contextLength,
model_id: modelId,
name
} as TablesUpdate<"models">
}
renderInputs={() => (
<>
<div className="space-y-1">
<Label>Name</Label>
<Input
placeholder="Model name..."
value={name}
onChange={e => setName(e.target.value)}
maxLength={MODEL_NAME_MAX}
/>
</div>
<div className="space-y-1">
<Label>Model ID</Label>
<Input
placeholder="Model ID..."
value={modelId}
onChange={e => setModelId(e.target.value)}
/>
</div>
<div className="space-y-1">
<Label>Base URL</Label>
<Input
placeholder="Base URL..."
value={baseUrl}
onChange={e => setBaseUrl(e.target.value)}
/>
<div className="pt-1 text-xs italic">
Your API must be compatible with the OpenAI SDK.
</div>
</div>
<div className="space-y-1">
<Label>API Key</Label>
<Input
type="password"
placeholder="API Key..."
value={apiKey}
onChange={e => setApiKey(e.target.value)}
/>
</div>
<div className="space-y-1">
<Label>Max Context Length</Label>
<Input
type="number"
placeholder="4096"
min={0}
value={contextLength}
onChange={e => setContextLength(parseInt(e.target.value))}
/>
</div>
</>
)}
/>
)
}