* Enable per-workspace provider/model combination * cleanup * remove resetWorkspaceChatModels and wipeWorkspaceModelPreference to prevent workspace from resetting model * add space --------- Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
100 lines
3.0 KiB
JavaScript
100 lines
3.0 KiB
JavaScript
import System from "@/models/system";
|
|
import { useState, useEffect } from "react";
|
|
|
|
export default function TogetherAiOptions({ settings }) {
|
|
return (
|
|
<div className="flex gap-x-4">
|
|
<div className="flex flex-col w-60">
|
|
<label className="text-white text-sm font-semibold block mb-4">
|
|
Together AI API Key
|
|
</label>
|
|
<input
|
|
type="password"
|
|
name="TogetherAiApiKey"
|
|
className="bg-zinc-900 text-white placeholder:text-white/20 text-sm rounded-lg focus:border-white block w-full p-2.5"
|
|
placeholder="Together AI API Key"
|
|
defaultValue={settings?.TogetherAiApiKey ? "*".repeat(20) : ""}
|
|
required={true}
|
|
autoComplete="off"
|
|
spellCheck={false}
|
|
/>
|
|
</div>
|
|
{!settings?.credentialsOnly && (
|
|
<TogetherAiModelSelection settings={settings} />
|
|
)}
|
|
</div>
|
|
);
|
|
}
|
|
function TogetherAiModelSelection({ settings }) {
|
|
const [groupedModels, setGroupedModels] = useState({});
|
|
const [loading, setLoading] = useState(true);
|
|
|
|
useEffect(() => {
|
|
async function findCustomModels() {
|
|
setLoading(true);
|
|
const { models } = await System.customModels("togetherai");
|
|
|
|
if (models?.length > 0) {
|
|
const modelsByOrganization = models.reduce((acc, model) => {
|
|
acc[model.organization] = acc[model.organization] || [];
|
|
acc[model.organization].push(model);
|
|
return acc;
|
|
}, {});
|
|
|
|
setGroupedModels(modelsByOrganization);
|
|
}
|
|
|
|
setLoading(false);
|
|
}
|
|
findCustomModels();
|
|
}, []);
|
|
|
|
if (loading || Object.keys(groupedModels).length === 0) {
|
|
return (
|
|
<div className="flex flex-col w-60">
|
|
<label className="text-white text-sm font-semibold block mb-4">
|
|
Chat Model Selection
|
|
</label>
|
|
<select
|
|
name="TogetherAiModelPref"
|
|
disabled={true}
|
|
className="bg-zinc-900 border-gray-500 text-white text-sm rounded-lg block w-full p-2.5"
|
|
>
|
|
<option disabled={true} selected={true}>
|
|
-- loading available models --
|
|
</option>
|
|
</select>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
return (
|
|
<div className="flex flex-col w-60">
|
|
<label className="text-white text-sm font-semibold block mb-4">
|
|
Chat Model Selection
|
|
</label>
|
|
<select
|
|
name="TogetherAiModelPref"
|
|
required={true}
|
|
className="bg-zinc-900 border-gray-500 text-white text-sm rounded-lg block w-full p-2.5"
|
|
>
|
|
{Object.keys(groupedModels)
|
|
.sort()
|
|
.map((organization) => (
|
|
<optgroup key={organization} label={organization}>
|
|
{groupedModels[organization].map((model) => (
|
|
<option
|
|
key={model.id}
|
|
value={model.id}
|
|
selected={settings?.OpenRouterModelPref === model.id}
|
|
>
|
|
{model.name}
|
|
</option>
|
|
))}
|
|
</optgroup>
|
|
))}
|
|
</select>
|
|
</div>
|
|
);
|
|
}
|