UNPKG

byokay-kit

Version:

Byokay Kit lets users bring their own AI API keys and store them securely in their browser. This eliminates the need for your app to manage sensitive credentials or maintain AI API backend infrastructure.

74 lines (73 loc) 2.46 kB
import { useState } from "react"; import { KeyManager } from "../core/KeyManager"; // Initialize KeyManager - should be the same instance as in useMultiApiKeys const keyManager = new KeyManager(); export function useOpenAI() { const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(null); // Get key from the KeyManager const getOpenAIKey = () => { const key = keyManager.getKey("openai"); if (!key) { throw new Error("OpenAI API key not found. Please set your API key first."); } return key; }; // Chat completion function to generate text const generateCompletion = async (params) => { try { const key = getOpenAIKey(); setIsLoading(true); setError(null); const response = await fetch("https://api.openai.com/v1/chat/completions", { method: "POST", headers: { "Content-Type": "application/json", Authorization: `Bearer ${key}`, }, body: JSON.stringify(params), }); if (!response.ok) { const errorData = await response.json(); throw new Error(errorData.error?.message || "Error calling OpenAI API"); } const data = await response.json(); return data.choices[0]?.message?.content || ""; } catch (err) { const errorMessage = err instanceof Error ? err.message : "Unknown error occurred"; setError(errorMessage); throw err; } finally { setIsLoading(false); } }; // Helper for simple text completions with a default system prompt const completeText = async (userPrompt, model = "gpt-3.5-turbo") => { return generateCompletion({ model, messages: [ { role: "system", content: "You are a helpful assistant.", }, { role: "user", content: userPrompt, }, ], }); }; // Check if OpenAI key is available const hasOpenAIKey = () => { return !!keyManager.getKey("openai"); }; return { generateCompletion, completeText, hasOpenAIKey, isLoading, error, }; }