diff --git a/package.json b/package.json index 81b8fbe..de03c80 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "apollo-server-core": "^3.10.0", "apollo-server-micro": "^3.10.2", "auto-bind": "^5.0.1", + "axios": "^1.2.3", "bignumber.js": "^9.1.0", "bootstrap": "^5.2.1", "dotenv": "^16.0.2", @@ -33,6 +34,7 @@ "mime": "^3.0.0", "next": "12.3.1", "next-pwa": "^5.5.4", + "openai": "^3.1.0", "orbit-db": "^0.28.6", "react": "18.2.0", "react-dom": "18.2.0", diff --git a/pages/api/generate.ts b/pages/api/generate.ts new file mode 100644 index 0000000..d07a2c1 --- /dev/null +++ b/pages/api/generate.ts @@ -0,0 +1,97 @@ +import {Configuration, OpenAIApi} from 'openai'; + +const configuration = new Configuration({ + apiKey: process.env.OPENAI_API_KEY, +}); +const openai = new OpenAIApi(configuration); +const MAX_TOKEN_LENGTH = 2048; +function truncatePrompt(prompt: string) { + if (prompt.length <= MAX_TOKEN_LENGTH) { + return prompt; + } else { + return prompt.substring(prompt.length - MAX_TOKEN_LENGTH, prompt.length); + } +} + +export default async function ( + req: { + body: { + prompt: string; + context: any; + }; + }, + res: { + status: (arg0: number) => { + (): any; + new (): any; + json: { + (arg0: { + error?: {message: string} | {message: string} | {message: string}; + result?: any; + }): void; + new (): any; + }; + }; + } +) { + if (!configuration.apiKey) { + res.status(500).json({ + error: { + message: + 'OpenAI API key not configured, please follow instructions in README.md', + }, + }); + return; + } + + const _text = req.body.prompt || ''; + if (_text.length === 0) { + res.status(400).json({ + error: { + message: 'Please enter message', + }, + }); + return; + } + + try { + const completion = await openai.createCompletion({ + model: 'text-davinci-003', + prompt: generatePrompt(_text), + temperature: 0.9, + max_tokens: 3500, + }); + + console.log(completion.data); + res.status(200).json({result: completion.data.choices[0].text}); + } catch (error: any) { + // Consider adjusting the error handling logic for your use case + if (error.response) { + console.error(error.response.status, error.response.data); + res.status(error.response.status).json(error.response.data); + } else { + console.error(`Error with OpenAI API request: ${error.message}`); + res.status(500).json({ + error: { + message: 'An error occurred during your request.', + }, + }); + } + } +} + +function generatePrompt(text: any) { + // const _t = truncatePrompt(text); + return [ + '!Only Responds If prompt Includes @AI!', + 'This is a conversation with an AI assistant. The assistant is helpful, creative, clever, and very friendly. Only Responds If prompt Includes @AI', + + 'Developer: Moikapy', + 'Twitter: @moikapy_', + 'Github: https://github.com/moikapy', + 'Twitch: https://www.twitch.tv/moikapy', + `Today's Date: ${new Date().toLocaleDateString()}`, + ...text, + '...awaiting response from bot...', + ].join('\n'); +} diff --git a/pages/index.tsx b/pages/index.tsx index 58a179f..b37023c 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -8,31 +8,11 @@ import H from '../src/components/common/H'; import {runTime} from '../dabu/helpers'; import Web3 from 'web3'; import TwitchEmbed from '@/src/components/blocks/TwitchEmbed'; +import Chatbot from '@/src/components/ui/Chatbot'; +import MoiLinkTree from '@/src/components/ui/MoiLinkTree'; var BN: any = Web3.utils.hexToNumberString; -// export async function getStaticProps(context: any, dabu: any) { -// const getLatestListed = async () => { -// // INIT Dabu -// var dabu = new DABU(process.env.AKKORO_ENV); -// console.log('dabu', dabu, await dabu.get_latest_nft_listing()); -// //Get Active Listings -// const latestListing: any = await dabu.get_latest_nft_listing(); -// return latestListing; -// }; -// const {scriptDuration: duration, res: latestListing} = await runTime( -// getLatestListed -// ); -// return { -// props: { -// latestListing: JSON.stringify(latestListing), -// scriptDuration: duration, -// }, -// // - At most once every 10 seconds -// revalidate: 15, // In seconds -// }; -// } - -export default function Dragon({latestListing}: any): JSX.Element { +export default function Index(): JSX.Element { return ( <> +
+

Welcome to Moika's Lookout!!

+

+ A Simple Link Tree To Take you to all of our official links +

+ {links.map((link) => { + return ( +
+ +
+ ); + })} +
+ + ); +} diff --git a/yarn.lock b/yarn.lock index a4695c9..550ca40 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8525,6 +8525,15 @@ axios@^0.27.2: follow-redirects "^1.14.9" form-data "^4.0.0" +axios@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.2.3.tgz#31a3d824c0ebf754a004b585e5f04a5f87e6c4ff" + integrity sha512-pdDkMYJeuXLZ6Xj/Q5J3Phpe+jbGdsSzlQaFVkMQzRUL05+6+tetX8TV3p4HrU4kzuO9bt+io/yGQxuyxA/xcw== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + axobject-query@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.1.1.tgz#3b6e5c6d4e43ca7ba51c5babf99d22a9c68485e1" @@ -12631,7 +12640,7 @@ focus-lock@^0.8.0: dependencies: tslib "^1.9.3" -follow-redirects@^1.10.0, follow-redirects@^1.14.0, follow-redirects@^1.14.7, follow-redirects@^1.14.8, follow-redirects@^1.14.9: +follow-redirects@^1.10.0, follow-redirects@^1.14.0, follow-redirects@^1.14.7, follow-redirects@^1.14.8, follow-redirects@^1.14.9, follow-redirects@^1.15.0: version "1.15.2" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== @@ -18032,6 +18041,14 @@ open@^8.4.0: is-docker "^2.1.1" is-wsl "^2.2.0" +openai@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/openai/-/openai-3.1.0.tgz#13bfb228cf777155b882c2deb3a03bc5094cb7b3" + integrity sha512-v5kKFH5o+8ld+t0arudj833Mgm3GcgBnbyN9946bj6u7bvel4Yg6YFz2A4HLIYDzmMjIo0s6vSG9x73kOwvdCg== + dependencies: + axios "^0.26.0" + form-data "^4.0.0" + opencollective-postinstall@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" @@ -19283,6 +19300,11 @@ proxy-compare@2.4.0: resolved "https://registry.yarnpkg.com/proxy-compare/-/proxy-compare-2.4.0.tgz#90f6abffe734ef86d8e37428c5026268606a9c1b" integrity sha512-FD8KmQUQD6Mfpd0hywCOzcon/dbkFP8XBd9F1ycbKtvVsfv6TsFUKJ2eC0Iz2y+KzlkdT1Z8SY6ZSgm07zOyqg== +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"