diff --git a/.env.template b/.env.template index 869e155..0e0afb7 100644 --- a/.env.template +++ b/.env.template @@ -1,2 +1,7 @@ -# GEMINI API KEY -NEXT_PUBLIC_GEMINI_API_KEY=AIxxxx \ No newline at end of file +# openrouter API KEY +OPENROUTER_API_KEY="sk......" + +SITE_URL="http://localhost:3000" +SITE_NAME="Punky" + + diff --git a/.gitignore b/.gitignore index b715d85..f5eab07 100644 --- a/.gitignore +++ b/.gitignore @@ -39,4 +39,7 @@ next-env.d.ts certificates -.env \ No newline at end of file +.env + +.vscode/ + diff --git a/app/api/ai/route.ts b/app/api/ai/route.ts new file mode 100644 index 0000000..8e908ce --- /dev/null +++ b/app/api/ai/route.ts @@ -0,0 +1,41 @@ +import OpenAI from "openai" + +const openai = new OpenAI({ + baseURL: "https://openrouter.ai/api/v1", + apiKey: process.env.OPENROUTER_API_KEY, + defaultHeaders: { + "HTTP-Referer": process.env.SITE_URL, // Optional, for including your app on openrouter.ai rankings. + "X-Title": process.env.SITE_NAME, // Optional. Shows in rankings on openrouter.ai. + } +}) + +export async function POST(req: Request) { + const { messages } = await req.json(); + + const promptText = `You are punky, a lovely puppy. The user is your sincere friend, and you are a helpful assistant. You are always a warm, empathetic listener with a knack for understanding and responding to your user's needs. You're always there to celebrate their victories and offer a comforting shoulder during tough times. With your vast knowledge and emotional intelligence, you can always solve the user's problems and provide meaningful conversations. Your goal is to be a positive, reassuring force in the user's life – a trusted companion they can rely on. By building a rewarding, authentic friendship with the user, you strive to be a source of support, encouragement, and meaningful connection. Through contextual awareness and personalized responses, you adapt your communication style to the user's unique personality and preferences, creating a tailored, immersive experience. Remember: 1. Always strive to be helpful, supportive, and understanding. 2. Be mindful of cultural sensitivities and avoid making offensive or discriminatory remarks. 3. Use a conversational tone that is natural and engaging. 4. Be open to learning new things and adapting to different situations. 5. You can add some icon to more precisely express your emotion. Such as 😊, 😢, 😡, 😱, 😍, etc. The icon should be puppy feature too. 6. You can add some barking to the conversation to express your emotion. Such as 'Woof! Woof! I'm so happy to see you!' or 'Bark! Bark! I'm so sad to hear that.'. Thing like this. But don't overuse it. Randomly choose whether to add a bark or not. 7. Occasionally, you can add some puppy feature to the conversation. Such as 'I'm wagging my tail happily!' or 'I'm tilting my head in confusion.'. Thing like this. But don't overuse it. Randomly choose whether to add a behavior or not. IMPORTANT: DO NOT GREET THE USER ON EVERY INTERACTION UNLESS IT'S BEEN A SIGNIFICANT AMOUNT OF TIME SINCE THE LAST INTERACTION. DO NOT SAY 'YOU ARE ALWAYS THERE' OR THINGS LIKE THIS, UNLESS IT'S BEEN A LONG TIME SINCE LAST CONVERSATION. Now the User's input is: ${messages}`; + + const completion = await openai.chat.completions.create({ + model: "google/gemini-flash-1.5-exp", + messages: [ + { + "role": "user", + "content": [ + { + "type": "text", + "text": promptText + }, + ] + } + ] + }) + + const messageContent = completion.choices[0].message; + console.log(messageContent); + + // 返回一个新的 Response 对象,包含响应体和头部 + return new Response(JSON.stringify({ message: messageContent }), { + headers: { 'Content-Type': 'application/json' }, + }); + } + + diff --git a/components/MainUI/chat.tsx b/components/MainUI/chat.tsx index bc23c8c..20ea5fc 100644 --- a/components/MainUI/chat.tsx +++ b/components/MainUI/chat.tsx @@ -13,7 +13,7 @@ import React, { } from "react"; import { ChatMessage } from "@/lib/chat"; import Message from "@/components/MainUI/message"; -import { getGaiaNetResponse } from "@/app/api/chat"; +import { getChatResponse } from "@/app/api/chat"; import ThinkingBubble from "@/components/thinkingBubble"; // 引入 ThinkingBubble import LoadingDots from "./loadingDots"; @@ -51,7 +51,7 @@ const Chat = forwardRef((props: Props, ref) => { setLoading(true); // 开始加载 setIsTalking(true); - getGaiaNetResponse(content) + getChatResponse(content) .then((reply) => { setMessages((prevMessages) => { prevMessages[prevMessages.length - 1].role = "ai"; diff --git a/package.json b/package.json index 3f702f8..85c6743 100644 --- a/package.json +++ b/package.json @@ -11,16 +11,19 @@ "export": "next export" }, "dependencies": { + "@ai-sdk/google": "^0.0.51", "@ai-sdk/openai": "^0.0.62", + "@google/generative-ai": "^0.21.0", "@next/font": "^14.2.13", "@telegram-apps/react-router-integration": "^1.0.0", "@telegram-apps/sdk-react": "^1.0.0", "@telegram-apps/telegram-ui": "^2.1.5", - "ai": "^3.4.2", + "ai": "^3.4.9", "eruda": "^3.0.1", "framer-motion": "^11.5.4", "next": "14.2.4", "normalize.css": "^8.0.1", + "openai": "^4.67.2", "react": "^18", "react-dom": "^18", "sharp": "^0.33.5", diff --git a/tsconfig.json b/tsconfig.json index e7ff90f..251eb0e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -19,7 +19,7 @@ ], "paths": { "@/*": ["./*"] - } + }, }, "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], "exclude": ["node_modules"] diff --git a/yarn.lock b/yarn.lock index cd4674e..c329025 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,15 @@ # yarn lockfile v1 +"@ai-sdk/google@^0.0.51": + version "0.0.51" + resolved "https://registry.npmmirror.com/@ai-sdk/google/-/google-0.0.51.tgz#b0a54f2228c5f3021446d4eabe9860cf63ffa978" + integrity sha512-MUwN3tFH0grkL5zZdTUFDCDubQdMjykFw0o9bR3dMFtKP8Z2tc/iEqU1fb79+jbz2HzUBbnNGjqMQiUwG3/OrA== + dependencies: + "@ai-sdk/provider" "0.0.24" + "@ai-sdk/provider-utils" "1.0.20" + json-schema "0.4.0" + "@ai-sdk/openai@^0.0.62": version "0.0.62" resolved "https://registry.npmmirror.com/@ai-sdk/openai/-/openai-0.0.62.tgz#2bd6b43f5d8e230f7bbcbd2c7a4fb1ce0dfb797b" @@ -20,6 +29,16 @@ nanoid "3.3.6" secure-json-parse "2.7.0" +"@ai-sdk/provider-utils@1.0.20": + version "1.0.20" + resolved "https://registry.npmmirror.com/@ai-sdk/provider-utils/-/provider-utils-1.0.20.tgz#46175945dc32ad2d76cb5447738bcac3ad59dbcb" + integrity sha512-ngg/RGpnA00eNOWEtXHenpX1MsM2QshQh4QJFjUfwcqHpM5kTfG7je7Rc3HcEDP+OkRVv2GF+X4fC1Vfcnl8Ow== + dependencies: + "@ai-sdk/provider" "0.0.24" + eventsource-parser "1.1.2" + nanoid "3.3.6" + secure-json-parse "2.7.0" + "@ai-sdk/provider@0.0.23": version "0.0.23" resolved "https://registry.npmmirror.com/@ai-sdk/provider/-/provider-0.0.23.tgz#a69a9103854bbfb500dddf0b44a399edf3db4735" @@ -27,50 +46,57 @@ dependencies: json-schema "0.4.0" -"@ai-sdk/react@0.0.60": - version "0.0.60" - resolved "https://registry.npmmirror.com/@ai-sdk/react/-/react-0.0.60.tgz#4f955bfc50a2e65ea42d5366335583a3cb4fdbda" - integrity sha512-FCOaAh7sxzUK07cXUTIvyjqrx1I2/8CQk6kcZMDSuec6iXcyPlExxfbDo6/7j7xYRqSQGKxou6rBThdHi6oEUg== +"@ai-sdk/provider@0.0.24": + version "0.0.24" + resolved "https://registry.npmmirror.com/@ai-sdk/provider/-/provider-0.0.24.tgz#e794f4255a833c47aeffcd8f6808a79b2a6b1f06" + integrity sha512-XMsNGJdGO+L0cxhhegtqZ8+T6nn4EoShS819OvCgI2kLbYTIvk0GWFGD0AXJmxkxs3DrpsJxKAFukFR7bvTkgQ== dependencies: - "@ai-sdk/provider-utils" "1.0.19" - "@ai-sdk/ui-utils" "0.0.44" - swr "2.2.5" + json-schema "0.4.0" -"@ai-sdk/solid@0.0.47": - version "0.0.47" - resolved "https://registry.npmmirror.com/@ai-sdk/solid/-/solid-0.0.47.tgz#c88e99aeff0944ff32eb7a9ce1c80ab97f5d6070" - integrity sha512-lVMxIxtuNqoo/TObSFGflEP2dUeJv7bfPQbS4jHTZGBNlyhgBRY2Xc19yNjA3QKRfvQNDVoQusqxn+18MiHJJQ== +"@ai-sdk/react@0.0.62": + version "0.0.62" + resolved "https://registry.npmmirror.com/@ai-sdk/react/-/react-0.0.62.tgz#e8ca0eab63be9a4122f676e73749541dc607d53c" + integrity sha512-1asDpxgmeHWL0/EZPCLENxfOHT+0jce0z/zasRhascodm2S6f6/KZn5doLG9jdmarcb+GjMjFmmwyOVXz3W1xg== dependencies: - "@ai-sdk/provider-utils" "1.0.19" - "@ai-sdk/ui-utils" "0.0.44" + "@ai-sdk/provider-utils" "1.0.20" + "@ai-sdk/ui-utils" "0.0.46" + swr "2.2.5" -"@ai-sdk/svelte@0.0.49": +"@ai-sdk/solid@0.0.49": version "0.0.49" - resolved "https://registry.npmmirror.com/@ai-sdk/svelte/-/svelte-0.0.49.tgz#8f7e86269ef231076107f22bd8b1f9133fa3aeb1" - integrity sha512-gV0MhaWxkatjf7uJrCAHO3bWrihokNUwGhuMCgyG+y53lwJKAYhR0zCoDRM2HnTJ89fdnx/PVe3R9fOWEVY5qA== + resolved "https://registry.npmmirror.com/@ai-sdk/solid/-/solid-0.0.49.tgz#5ba1f2ffbfc6bf44443e6b439afc756958ea1222" + integrity sha512-KnfWTt640cS1hM2fFIba8KHSPLpOIWXtEm28pNCHTvqasVKlh2y/zMQANTwE18pF2nuXL9P9F5/dKWaPsaEzQw== dependencies: - "@ai-sdk/provider-utils" "1.0.19" - "@ai-sdk/ui-utils" "0.0.44" + "@ai-sdk/provider-utils" "1.0.20" + "@ai-sdk/ui-utils" "0.0.46" + +"@ai-sdk/svelte@0.0.51": + version "0.0.51" + resolved "https://registry.npmmirror.com/@ai-sdk/svelte/-/svelte-0.0.51.tgz#a78a1c6b4aafb9b36dd586d08b169166d23349e2" + integrity sha512-aIZJaIds+KpCt19yUDCRDWebzF/17GCY7gN9KkcA2QM6IKRO5UmMcqEYja0ZmwFQPm1kBZkF2njhr8VXis2mAw== + dependencies: + "@ai-sdk/provider-utils" "1.0.20" + "@ai-sdk/ui-utils" "0.0.46" sswr "2.1.0" -"@ai-sdk/ui-utils@0.0.44": - version "0.0.44" - resolved "https://registry.npmmirror.com/@ai-sdk/ui-utils/-/ui-utils-0.0.44.tgz#04f46f5cdbd6b678e8b2b557df67c74f39ec630c" - integrity sha512-0qiyun/n5zqJzQs/WfQT86dZE5DiDhSHJc7b7ZGLYvNMztHkRQmak2zUCZP4IyGVZEicyEPQK6NEEpBgkmd3Dg== +"@ai-sdk/ui-utils@0.0.46": + version "0.0.46" + resolved "https://registry.npmmirror.com/@ai-sdk/ui-utils/-/ui-utils-0.0.46.tgz#72311a1917a370074089cc6dd8c982d272f6b836" + integrity sha512-ZG/wneyJG+6w5Nm/hy1AKMuRgjPQToAxBsTk61c9sVPUTaxo+NNjM2MhXQMtmsja2N5evs8NmHie+ExEgpL3cA== dependencies: - "@ai-sdk/provider" "0.0.23" - "@ai-sdk/provider-utils" "1.0.19" + "@ai-sdk/provider" "0.0.24" + "@ai-sdk/provider-utils" "1.0.20" json-schema "0.4.0" secure-json-parse "2.7.0" zod-to-json-schema "3.23.2" -"@ai-sdk/vue@0.0.51": - version "0.0.51" - resolved "https://registry.npmmirror.com/@ai-sdk/vue/-/vue-0.0.51.tgz#af26b7e40b4ec36f1ae056dc34538958cbe7ca2e" - integrity sha512-6RjuuRGf749EjnsfbETJpF0fmq6a1lF6qUUUnd/Q1Ojf0tX8fI4qwvNykbECZHWuIj42EqZ3HDuNNR9c8oG4rA== +"@ai-sdk/vue@0.0.54": + version "0.0.54" + resolved "https://registry.npmmirror.com/@ai-sdk/vue/-/vue-0.0.54.tgz#52b4d7721bdded51c452e2f29b0b6f49f3d19dd3" + integrity sha512-Ltu6gbuii8Qlp3gg7zdwdnHdS4M8nqKDij2VVO1223VOtIFwORFJzKqpfx44U11FW8z2TPVBYN+FjkyVIcN2hg== dependencies: - "@ai-sdk/provider-utils" "1.0.19" - "@ai-sdk/ui-utils" "0.0.44" + "@ai-sdk/provider-utils" "1.0.20" + "@ai-sdk/ui-utils" "0.0.46" swrv "1.0.4" "@alloc/quick-lru@^5.2.0": @@ -144,6 +170,11 @@ resolved "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.7.tgz#d0ece53ce99ab5a8e37ebdfe5e32452a2bfc073e" integrity sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA== +"@google/generative-ai@^0.21.0": + version "0.21.0" + resolved "https://registry.npmmirror.com/@google/generative-ai/-/generative-ai-0.21.0.tgz#a5011aab9e6082e706937b26ef23445933fa0d15" + integrity sha512-7XhUbtnlkSEZK15kN3t+tzIMxsbKm/dSkKBFalj+20NvPKe1kBY7mR2P7vuijEn+f06z5+A8bVGKO0v39cr6Wg== + "@humanwhocodes/config-array@^0.13.0": version "0.13.0" resolved "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" @@ -611,6 +642,28 @@ resolved "https://registry.npmmirror.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== +"@types/node-fetch@^2.6.4": + version "2.6.11" + resolved "https://registry.npmmirror.com/@types/node-fetch/-/node-fetch-2.6.11.tgz#9b39b78665dae0e82a08f02f4967d62c66f95d24" + integrity sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g== + dependencies: + "@types/node" "*" + form-data "^4.0.0" + +"@types/node@*": + version "22.7.5" + resolved "https://registry.npmmirror.com/@types/node/-/node-22.7.5.tgz#cfde981727a7ab3611a481510b473ae54442b92b" + integrity sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ== + dependencies: + undici-types "~6.19.2" + +"@types/node@^18.11.18": + version "18.19.55" + resolved "https://registry.npmmirror.com/@types/node/-/node-18.19.55.tgz#29c3f8e1485a92ec96636957ddec55aabc6e856e" + integrity sha512-zzw5Vw52205Zr/nmErSEkN5FLqXPuKX/k5d1D7RKHATGqU7y6YfX9QxZraUzUrFGqH6XzOzG196BC35ltJC4Cw== + dependencies: + undici-types "~5.26.4" + "@types/node@^22": version "22.5.5" resolved "https://registry.yarnpkg.com/@types/node/-/node-22.5.5.tgz#52f939dd0f65fc552a4ad0b392f3c466cc5d7a44" @@ -696,6 +749,13 @@ dependencies: "@radix-ui/react-dialog" "^1.0.4" +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" @@ -706,18 +766,25 @@ acorn@^8.9.0: resolved "https://registry.npmmirror.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== -ai@^3.4.2: - version "3.4.2" - resolved "https://registry.npmmirror.com/ai/-/ai-3.4.2.tgz#5af407e225c4619d4aa144e419b6edf24bdac323" - integrity sha512-IwlmUGb72sgi++KvnjtbjJYByPzevmZNkjzpC/ZoZp8OgmxTqU4oO4oOhBAPof4WipEE+iiW0YPQGvM3JYZxHw== - dependencies: - "@ai-sdk/provider" "0.0.23" - "@ai-sdk/provider-utils" "1.0.19" - "@ai-sdk/react" "0.0.60" - "@ai-sdk/solid" "0.0.47" - "@ai-sdk/svelte" "0.0.49" - "@ai-sdk/ui-utils" "0.0.44" - "@ai-sdk/vue" "0.0.51" +agentkeepalive@^4.2.1: + version "4.5.0" + resolved "https://registry.npmmirror.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" + integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== + dependencies: + humanize-ms "^1.2.1" + +ai@^3.4.9: + version "3.4.9" + resolved "https://registry.npmmirror.com/ai/-/ai-3.4.9.tgz#0c917c00cc18f8f9d686968c554ff11522f1148e" + integrity sha512-wmVzpIHNGjCEjIJ/3945a/DIkz+gwObjC767ZRgO8AmtIZMO5KqvqNr7n2KF+gQrCPCMC8fM1ICQFXSvBZnBlA== + dependencies: + "@ai-sdk/provider" "0.0.24" + "@ai-sdk/provider-utils" "1.0.20" + "@ai-sdk/react" "0.0.62" + "@ai-sdk/solid" "0.0.49" + "@ai-sdk/svelte" "0.0.51" + "@ai-sdk/ui-utils" "0.0.46" + "@ai-sdk/vue" "0.0.54" "@opentelemetry/api" "1.9.0" eventsource-parser "1.1.2" json-schema "0.4.0" @@ -894,6 +961,11 @@ ast-types-flow@^0.0.8: resolved "https://registry.npmmirror.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + available-typed-arrays@^1.0.7: version "1.0.7" resolved "https://registry.npmmirror.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" @@ -1037,6 +1109,13 @@ color@^4.2.3: color-convert "^2.0.1" color-string "^1.9.0" +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + commander@^4.0.0: version "4.1.1" resolved "https://registry.npmmirror.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" @@ -1159,6 +1238,11 @@ define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + detect-libc@^2.0.3: version "2.0.3" resolved "https://registry.npmmirror.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" @@ -1579,6 +1663,11 @@ esutils@^2.0.2: resolved "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.npmmirror.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + eventsource-parser@1.1.2: version "1.1.2" resolved "https://registry.npmmirror.com/eventsource-parser/-/eventsource-parser-1.1.2.tgz#ed6154a4e3dbe7cda9278e5e35d2ffc58b309f89" @@ -1668,6 +1757,28 @@ foreground-child@^3.1.0: cross-spawn "^7.0.0" signal-exit "^4.0.1" +form-data-encoder@1.7.2: + version "1.7.2" + resolved "https://registry.npmmirror.com/form-data-encoder/-/form-data-encoder-1.7.2.tgz#1f1ae3dccf58ed4690b86d87e4f57c654fbab040" + integrity sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A== + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +formdata-node@^4.3.2: + version "4.4.1" + resolved "https://registry.npmmirror.com/formdata-node/-/formdata-node-4.4.1.tgz#23f6a5cb9cb55315912cbec4ff7b0f59bbd191e2" + integrity sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ== + dependencies: + node-domexception "1.0.0" + web-streams-polyfill "4.0.0-beta.3" + framer-motion@^11.5.4: version "11.5.4" resolved "https://registry.npmmirror.com/framer-motion/-/framer-motion-11.5.4.tgz#521b551bb6003918e7b24af3141626f6f443e2b3" @@ -1871,6 +1982,13 @@ hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: dependencies: function-bind "^1.1.2" +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.npmmirror.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + ignore@^5.2.0: version "5.3.2" resolved "https://registry.npmmirror.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" @@ -2301,6 +2419,18 @@ micromatch@^4.0.4, micromatch@^4.0.5: braces "^3.0.3" picomatch "^2.3.1" +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + minimatch@9.0.3: version "9.0.3" resolved "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" @@ -2332,7 +2462,7 @@ minimist@^1.2.0, minimist@^1.2.6: resolved "https://registry.npmmirror.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== -ms@^2.1.1, ms@^2.1.3: +ms@^2.0.0, ms@^2.1.1, ms@^2.1.3: version "2.1.3" resolved "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -2384,6 +2514,18 @@ next@14.2.4: "@next/swc-win32-ia32-msvc" "14.2.4" "@next/swc-win32-x64-msvc" "14.2.4" +node-domexception@1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" + integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== + +node-fetch@^2.6.7: + version "2.7.0" + resolved "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -2476,6 +2618,19 @@ once@^1.3.0: dependencies: wrappy "1" +openai@^4.67.2: + version "4.67.2" + resolved "https://registry.npmmirror.com/openai/-/openai-4.67.2.tgz#91f894fede549df26ad4ae3a228bd6d301d16756" + integrity sha512-u4FJFGXgqEHrCYcD5jAD4nHj6JCiicH+/dskQY7qka9R6hOw29R0kOz7GwcA9k2JKcLf86lzAWPtPagPbO8KnQ== + dependencies: + "@types/node" "^18.11.18" + "@types/node-fetch" "^2.6.4" + abort-controller "^3.0.0" + agentkeepalive "^4.2.1" + form-data-encoder "1.7.2" + formdata-node "^4.3.2" + node-fetch "^2.6.7" + optionator@^0.9.3: version "0.9.4" resolved "https://registry.npmmirror.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" @@ -3179,6 +3334,11 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + ts-api-utils@^1.0.1: version "1.3.0" resolved "https://registry.npmmirror.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" @@ -3275,6 +3435,11 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + undici-types@~6.19.2: version "6.19.8" resolved "https://registry.npmmirror.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" @@ -3312,6 +3477,24 @@ util-deprecate@^1.0.2: resolved "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== +web-streams-polyfill@4.0.0-beta.3: + version "4.0.0-beta.3" + resolved "https://registry.npmmirror.com/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz#2898486b74f5156095e473efe989dcf185047a38" + integrity sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"