diff options
| author | bobzel <zzzman@gmail.com> | 2023-05-10 11:14:57 -0400 | 
|---|---|---|
| committer | bobzel <zzzman@gmail.com> | 2023-05-10 11:14:57 -0400 | 
| commit | 53273651cc8ed0f9e073fa30590e0bb172e492e8 (patch) | |
| tree | f6b1fd36f99bfa951b99da8ab0e8c70560b031b5 /src/client/apis/gpt | |
| parent | abcf1167340f9f411e7712d11f2110625b0938d8 (diff) | |
| parent | 97a743455e7fa3eee768b1d4d025b9dedc49f370 (diff) | |
Merge branch 'master' into collaboration-sarah
Diffstat (limited to 'src/client/apis/gpt')
| -rw-r--r-- | src/client/apis/gpt/GPT.ts | 87 | 
1 files changed, 87 insertions, 0 deletions
| diff --git a/src/client/apis/gpt/GPT.ts b/src/client/apis/gpt/GPT.ts new file mode 100644 index 000000000..4b3960902 --- /dev/null +++ b/src/client/apis/gpt/GPT.ts @@ -0,0 +1,87 @@ +import { Configuration, OpenAIApi } from 'openai'; + +enum GPTCallType { +    SUMMARY = 'summary', +    COMPLETION = 'completion', +    EDIT = 'edit', +} + +type GPTCallOpts = { +    model: string; +    maxTokens: number; +    temp: number; +    prompt: string; +}; + +const callTypeMap: { [type: string]: GPTCallOpts } = { +    summary: { model: 'text-davinci-003', maxTokens: 256, temp: 0.5, prompt: 'Summarize this text briefly: ' }, +    edit: { model: 'text-davinci-003', maxTokens: 256, temp: 0.5, prompt: 'Reword this: ' }, +    completion: { model: 'text-davinci-003', maxTokens: 256, temp: 0.5, prompt: '' }, +}; + +/** + * Calls the OpenAI API. + * + * @param inputText Text to process + * @returns AI Output + */ +const gptAPICall = async (inputText: string, callType: GPTCallType) => { +    if (callType === GPTCallType.SUMMARY) inputText += '.'; +    const opts: GPTCallOpts = callTypeMap[callType]; +    try { +        const configuration = new Configuration({ +            apiKey: process.env.OPENAI_KEY, +        }); +        const openai = new OpenAIApi(configuration); +        const response = await openai.createCompletion({ +            model: opts.model, +            max_tokens: opts.maxTokens, +            temperature: opts.temp, +            prompt: `${opts.prompt}${inputText}`, +        }); +        console.log(response.data.choices[0]); +        return response.data.choices[0].text; +    } catch (err) { +        console.log(err); +        return 'Error connecting with API.'; +    } +}; + +const gptImageCall = async (prompt: string) => { +    try { +        const configuration = new Configuration({ +            apiKey: process.env.OPENAI_KEY, +        }); +        const openai = new OpenAIApi(configuration); +        const response = await openai.createImage({ +            prompt: prompt, +            n: 1, +            size: '1024x1024', +        }); +        return response.data.data[0].url; +    } catch (err) { +        console.error(err); +        return; +    } +}; + +// const gptEditCall = async (selectedText: string, fullText: string) => { +//     try { +//         const configuration = new Configuration({ +//             apiKey: process.env.OPENAI_KEY, +//         }); +//         const openai = new OpenAIApi(configuration); +//         const response = await openai.createCompletion({ +//             model: 'text-davinci-003', +//             max_tokens: 256, +//             temperature: 0.1, +//             prompt: `Replace the phrase ${selectedText} inside of ${fullText}.`, +//         }); +//         return response.data.choices[0].text.trim(); +//     } catch (err) { +//         console.log(err); +//         return 'Error connecting with API.'; +//     } +// }; + +export { gptAPICall, gptImageCall, GPTCallType }; | 
