Skip to main content
Glama
model-config-dialog.tsx4.62 kB
"use client" import type React from "react" import { useState } from "react" import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog" import { Button } from "@/components/ui/button" import { Slider } from "@/components/ui/slider" import { Label } from "@/components/ui/label" import { Input } from "@/components/ui/input" import { Settings } from "lucide-react" import type { ModelConfig } from "@/lib/types" import { DEFAULT_MODEL_CONFIG } from "@/lib/models" interface ModelConfigDialogProps { config: ModelConfig onConfigChange: (config: ModelConfig, showToast?: boolean) => void disabled?: boolean buttonClassName?: string } export function ModelConfigDialog({ config, onConfigChange, disabled = false, buttonClassName = "", }: ModelConfigDialogProps) { const [open, setOpen] = useState(false) const [localConfig, setLocalConfig] = useState<ModelConfig>(config) const handleOpenChange = (open: boolean) => { setOpen(open) if (open) { setLocalConfig(config) } } const handleTemperatureChange = (value: number[]) => { setLocalConfig((prev) => ({ ...prev, temperature: value[0] })) } const handleTopPChange = (value: number[]) => { setLocalConfig((prev) => ({ ...prev, topP: value[0] })) } const handleMaxTokensChange = (e: React.ChangeEvent<HTMLInputElement>) => { const value = Number.parseInt(e.target.value) if (!isNaN(value) && value > 0) { setLocalConfig((prev) => ({ ...prev, maxTokens: value })) } } const handleSave = () => { onConfigChange(localConfig, true) setOpen(false) } const handleReset = () => { const defaultConfig = { ...DEFAULT_MODEL_CONFIG, temperature: 0.4, topP: 0.95, } setLocalConfig(defaultConfig) onConfigChange(defaultConfig, false) } return ( <Dialog open={open} onOpenChange={handleOpenChange}> <DialogTrigger asChild> <Button variant="ghost" size="icon" className={`h-8 w-8 ${buttonClassName}`} disabled={disabled} title="Model Configuration" > <Settings className="h-4 w-4" /> <span className="sr-only">Model Configuration</span> </Button> </DialogTrigger> <DialogContent className="sm:max-w-[425px]"> <DialogHeader> <DialogTitle>Model Configuration</DialogTitle> </DialogHeader> <div className="grid gap-4 py-4"> <div className="grid gap-2"> <div className="flex items-center justify-between"> <Label htmlFor="temperature">Temperature: {localConfig.temperature.toFixed(2)}</Label> </div> <Slider id="temperature" min={0} max={1} step={0.01} value={[localConfig.temperature]} onValueChange={handleTemperatureChange} /> <div className="text-xs text-muted-foreground"> Controls randomness: Lower values are more deterministic, higher values are more creative. </div> </div> { localConfig.topP !== undefined && ( <div className="grid gap-2"> <div className="flex items-center justify-between"> <Label htmlFor="topP">Top P: {localConfig.topP.toFixed(2)}</Label> </div> <Slider id="topP" min={0} max={1} step={0.01} value={[localConfig.topP]} onValueChange={handleTopPChange} /> <div className="text-xs text-muted-foreground"> Controls diversity: Lower values consider only the most likely tokens, higher values consider a wider range. </div> </div> )} <div className="grid gap-2"> <Label htmlFor="maxTokens">Max Tokens</Label> <Input id="maxTokens" type="number" value={localConfig.maxTokens} onChange={handleMaxTokensChange} min={1} max={32000} /> <div className="text-xs text-muted-foreground"> Maximum number of tokens to generate. Higher values allow for longer responses. </div> </div> </div> <div className="flex justify-between"> <Button variant="outline" onClick={handleReset}> Reset to Default </Button> <Button onClick={handleSave}>Save Changes</Button> </div> </DialogContent> </Dialog> ) }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/myeong-ga/research-agent-mcp-0.36-pro-preview-06-01'

If you have feedback or need assistance with the MCP directory API, please join our Discord server