"use client"; import { useTranslations } from "next-intl"; import type { MemorySettingsExtended } from "@/shared/schemas/memory"; import type { EmbeddingProviderListing } from "@/lib/memory/embedding/types"; interface Props { settings: MemorySettingsExtended; providers: EmbeddingProviderListing[]; onSave: (updates: Partial) => Promise; saving?: boolean; } type EmbeddingSourceValue = "remote" | "static" | "transformers" | "auto"; export default function EmbeddingSourceSelector({ settings, providers, onSave, saving }: Props) { const t = useTranslations("memory"); const remoteProviders = providers.filter((p) => p.hasKey); const currentSource = settings.embeddingSource ?? "auto"; const currentProviderModel = settings.embeddingProviderModel ?? ""; const handleSourceChange = (source: EmbeddingSourceValue) => { onSave({ embeddingSource: source }); }; const handleProviderModelChange = (value: string) => { onSave({ embeddingProviderModel: value || null }); }; const options: Array<{ value: EmbeddingSourceValue; label: string; desc: string }> = [ { value: "auto", label: t("embedding.autoLabel"), desc: t("embedding.autoDesc"), }, { value: "remote", label: t("embedding.remoteLabel"), desc: t("embedding.remoteDesc"), }, { value: "static", label: t("embedding.staticLabel"), desc: t("embedding.staticDesc"), }, { value: "transformers", label: t("embedding.transformersLabel"), desc: t("embedding.transformersDesc"), }, ]; return (
{options.map((opt) => ( ))}
{currentSource === "remote" && (
{remoteProviders.length === 0 ? (

warning {t("embedding.noRemoteProviders")}

) : ( )}
)} {currentSource === "transformers" && (
info {t("embedding.transformersWarning")}
)}
); }