gemini-live-api-demo / src /components /settings-dialog /ResponseModalitySelector.tsx
johnliontw
move all project files to root for Hugging Face Space
610dd27
import { useCallback, useState } from "react";
import Select from "react-select";
import { useLiveAPIContext } from "../../contexts/LiveAPIContext";
const options = [
{ value: "audio", label: "audio" },
{ value: "text", label: "text" },
];
export default function ResponseModalitySelector() {
const { config, setConfig } = useLiveAPIContext();
const [selectedOption, setSelectedOption] = useState<{
value: string;
label: string;
} | null>(options[0]);
const updateConfig = useCallback(
(modality: "audio" | "text" | undefined) => {
setConfig({
...config,
generationConfig: {
...config.generationConfig,
responseModalities: modality,
},
});
},
[config, setConfig]
);
return (
<div className="select-group">
<label htmlFor="response-modality-selector">Response modality</label>
<Select
id="response-modality-selector"
className="react-select"
classNamePrefix="react-select"
styles={{
control: (baseStyles) => ({
...baseStyles,
background: "var(--Neutral-15)",
color: "var(--Neutral-90)",
minHeight: "33px",
maxHeight: "33px",
border: 0,
}),
option: (styles, { isFocused, isSelected }) => ({
...styles,
backgroundColor: isFocused
? "var(--Neutral-30)"
: isSelected
? "var(--Neutral-20)"
: undefined,
}),
}}
defaultValue={selectedOption}
options={options}
onChange={(e) => {
setSelectedOption(e);
if (e && (e.value === "audio" || e.value === "text")) {
updateConfig(e.value);
}
}}
/>
</div>
);
}