From c8fa39e552a82693d78ab87444823f300b930c66 Mon Sep 17 00:00:00 2001 From: Andrew Pareles Date: Wed, 5 Feb 2025 00:57:03 -0800 Subject: [PATCH] openai fim progress --- .../void/electron-main/llmMessage/openai.ts | 104 +++++++++++------- 1 file changed, 65 insertions(+), 39 deletions(-) diff --git a/src/vs/platform/void/electron-main/llmMessage/openai.ts b/src/vs/platform/void/electron-main/llmMessage/openai.ts index f3dcfd49..b1260456 100644 --- a/src/vs/platform/void/electron-main/llmMessage/openai.ts +++ b/src/vs/platform/void/electron-main/llmMessage/openai.ts @@ -43,7 +43,65 @@ export const openaiCompatibleList: _InternalModelListFnType = async ({ on -// export const sendOpenAIFimMsg: _InternalSendLLMFIMMessageFnType +type NewParams = Pick[0] & Parameters<_InternalSendLLMFIMMessageFnType>[0], 'settingsOfProvider' | 'providerName'> +const newOpenAI = ({ settingsOfProvider, providerName }: NewParams) => { + + if (providerName === 'openAI') { + const thisConfig = settingsOfProvider.openAI + return new OpenAI({ apiKey: thisConfig.apiKey, dangerouslyAllowBrowser: true }); + } + else if (providerName === 'openRouter') { + const thisConfig = settingsOfProvider.openRouter + return new OpenAI({ + baseURL: 'https://openrouter.ai/api/v1', apiKey: thisConfig.apiKey, dangerouslyAllowBrowser: true, + defaultHeaders: { + 'HTTP-Referer': 'https://voideditor.com', // Optional, for including your app on openrouter.ai rankings. + 'X-Title': 'Void Editor', // Optional. Shows in rankings on openrouter.ai. + }, + }) + } + else if (providerName === 'deepseek') { + const thisConfig = settingsOfProvider.deepseek + return new OpenAI({ + baseURL: 'https://api.deepseek.com/v1', apiKey: thisConfig.apiKey, dangerouslyAllowBrowser: true, + }) + + } + else if (providerName === 'openAICompatible') { + const thisConfig = settingsOfProvider.openAICompatible + return new OpenAI({ + baseURL: thisConfig.endpoint, apiKey: thisConfig.apiKey, dangerouslyAllowBrowser: true + }) + } + else { + console.error(`sendOpenAIMsg: invalid providerName: ${providerName}`) + throw new Error(`providerName was invalid: ${providerName}`) + } +} + + + +export const sendOpenAIFIM: _InternalSendLLMFIMMessageFnType = ({ messages, onText, onFinalMessage, onError, settingsOfProvider, modelName, _setAborter, providerName }) => { + + + const openai: OpenAI = newOpenAI({ providerName, settingsOfProvider }) + + const options: OpenAI.Completions.CompletionCreateParamsStreaming = { + prompt: messages.suffix, + suffix: messages.suffix, + model: modelName, + stream: true, + // max_completion_tokens: parseMaxTokensStr(thisConfig.maxTokens) + } + + + openai.completions + .create(options) + .then(async response => { + // TODO!!! + }) + +} @@ -52,44 +110,12 @@ export const sendOpenAIChat: _InternalSendLLMChatMessageFnType = ({ messages, on let fullText = '' - let openai: OpenAI - let options: OpenAI.Chat.Completions.ChatCompletionCreateParamsStreaming - - - if (providerName === 'openAI') { - const thisConfig = settingsOfProvider.openAI - openai = new OpenAI({ apiKey: thisConfig.apiKey, dangerouslyAllowBrowser: true }); - options = { model: modelName, messages: messages, stream: true, /*max_completion_tokens: parseMaxTokensStr(thisConfig.maxTokens)*/ } - } - else if (providerName === 'openRouter') { - const thisConfig = settingsOfProvider.openRouter - openai = new OpenAI({ - baseURL: 'https://openrouter.ai/api/v1', apiKey: thisConfig.apiKey, dangerouslyAllowBrowser: true, - defaultHeaders: { - 'HTTP-Referer': 'https://voideditor.com', // Optional, for including your app on openrouter.ai rankings. - 'X-Title': 'Void Editor', // Optional. Shows in rankings on openrouter.ai. - }, - }); - options = { model: modelName, messages: messages, stream: true, /*max_completion_tokens: parseMaxTokensStr(thisConfig.maxTokens)*/ } - } - else if (providerName === 'deepseek') { - const thisConfig = settingsOfProvider.deepseek - openai = new OpenAI({ - baseURL: 'https://api.deepseek.com/v1', apiKey: thisConfig.apiKey, dangerouslyAllowBrowser: true, - }); - options = { model: modelName, messages: messages, stream: true, /*max_completion_tokens: parseMaxTokensStr(thisConfig.maxTokens)*/ } - - } - else if (providerName === 'openAICompatible') { - const thisConfig = settingsOfProvider.openAICompatible - openai = new OpenAI({ - baseURL: thisConfig.endpoint, apiKey: thisConfig.apiKey, dangerouslyAllowBrowser: true - }) - options = { model: modelName, messages: messages, stream: true, /*max_completion_tokens: parseMaxTokensStr(thisConfig.maxTokens)*/ } - } - else { - console.error(`sendOpenAIMsg: invalid providerName: ${providerName}`) - throw new Error(`providerName was invalid: ${providerName}`) + const openai: OpenAI = newOpenAI({ providerName, settingsOfProvider }) + const options: OpenAI.Chat.Completions.ChatCompletionCreateParamsStreaming = { + model: modelName, + messages: messages, + stream: true, + // max_completion_tokens: parseMaxTokensStr(thisConfig.maxTokens) } openai.chat.completions