Allow creating custom providers (#132)

This commit is contained in:
Will Chen
2025-05-12 15:04:42 -07:00
committed by GitHub
parent cd7eaa8ece
commit 642895f0ba
7 changed files with 341 additions and 1 deletions

View File

@@ -0,0 +1,58 @@
import { useMutation, useQueryClient } from "@tanstack/react-query";
import { IpcClient } from "@/ipc/ipc_client";
import type { LanguageModelProvider } from "@/ipc/ipc_types";
import { showError } from "@/lib/toast";
export interface CreateCustomLanguageModelProviderParams {
id: string;
name: string;
apiBaseUrl: string;
envVarName?: string;
}
export function useCustomLanguageModelProvider() {
const queryClient = useQueryClient();
const ipcClient = IpcClient.getInstance();
const createProviderMutation = useMutation({
mutationFn: async (
params: CreateCustomLanguageModelProviderParams,
): Promise<LanguageModelProvider> => {
if (!params.id.trim()) {
throw new Error("Provider ID is required");
}
if (!params.name.trim()) {
throw new Error("Provider name is required");
}
if (!params.apiBaseUrl.trim()) {
throw new Error("API base URL is required");
}
return ipcClient.createCustomLanguageModelProvider({
id: params.id.trim(),
name: params.name.trim(),
apiBaseUrl: params.apiBaseUrl.trim(),
envVarName: params.envVarName?.trim() || undefined,
});
},
onSuccess: () => {
// Invalidate and refetch
queryClient.invalidateQueries({ queryKey: ["languageModelProviders"] });
},
onError: (error) => {
showError(error);
},
});
const createProvider = async (
params: CreateCustomLanguageModelProviderParams,
): Promise<LanguageModelProvider> => {
return createProviderMutation.mutateAsync(params);
};
return {
createProvider,
isCreating: createProviderMutation.isPending,
error: createProviderMutation.error,
};
}