From 1b4895b8213316f720eca1adbe98637124a3a77f Mon Sep 17 00:00:00 2001 From: Graeme Fulton Date: Mon, 29 Jul 2024 15:17:44 -0400 Subject: [PATCH] generate api --- package-lock.json | 373 +++++++++++++++++++++++++++++++- package.json | 10 +- pages/api/interview/generate.js | 13 +- 3 files changed, 382 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index fab97ccd..bd5ba197 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "@next/bundle-analyzer": "^12.1.5", "@phosphor-icons/react": "^2.0.15", "@plaiceholder/next": "^3.0.0", + "@prototypr/prototypr-postie": "^1.0.91", "@radix-ui/colors": "^0.1.8", "@radix-ui/react-checkbox": "^1.0.1", "@radix-ui/react-collapsible": "^1.0.1", @@ -62,6 +63,7 @@ "@tiptap/suggestion": "^2.5.4", "@vercel/og": "0.0.21", "@yaireo/tagify": "^4.17.4", + "ai": "^3.2.38", "axios": "^0.19.2", "better-scroll": "^2.4.2", "blurhash": "^2.0.5", @@ -116,7 +118,7 @@ "nodemailer": "^6.7.3", "normalize-url": "^7.2.0", "nprogress": "^0.2.0", - "openai": "^4.52.7", + "openai": "^4.53.2", "optimize-css-assets-webpack-plugin": "^6.0.1", "plaiceholder": "^3.0.0", "probe-image-size": "^7.2.3", @@ -171,7 +173,8 @@ "tiptypr": "^0.0.599", "tsparticles": "^2.7.1", "uuidv4": "^6.2.13", - "yup": "^0.32.11" + "yup": "^0.32.11", + "zod": "^3.23.8" }, "devDependencies": { "@babel/core": "^7.20.7", @@ -196,8 +199,178 @@ "tailwindcss-scoped-groups": "^2.0.0" }, "optionalDependencies": { - "@prototypr/paper-interview": "^0.0.28", - "@prototypr/prototypr-postie": "^1.0.9" + "@prototypr/paper-interview": "^0.0.30", + "@prototypr/prototypr-postie": "^1.0.91" + } + }, + "node_modules/@ai-sdk/provider": { + "version": "0.0.14", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-0.0.14.tgz", + "integrity": "sha512-gaQ5Y033nro9iX1YUjEDFDRhmMcEiCk56LJdIUbX5ozEiCNCfpiBpEqrjSp/Gp5RzBS2W0BVxfG7UGW6Ezcrzg==", + "dependencies": { + "json-schema": "0.4.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@ai-sdk/provider-utils": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-1.0.5.tgz", + "integrity": "sha512-XfOawxk95X3S43arn2iQIFyWGMi0DTxsf9ETc6t7bh91RPWOOPYN1tsmS5MTKD33OGJeaDQ/gnVRzXUCRBrckQ==", + "dependencies": { + "@ai-sdk/provider": "0.0.14", + "eventsource-parser": "1.1.2", + "nanoid": "3.3.6", + "secure-json-parse": "2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.0.0" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "node_modules/@ai-sdk/provider-utils/node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/@ai-sdk/react": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/@ai-sdk/react/-/react-0.0.31.tgz", + "integrity": "sha512-d9rgf3XfFVFtpisteoCkYPX8TqaruHXdb5maZP1udj0jEhS9gGxUGmsZ+U8lG4WgJu/6TuAykNtQ8bPJZqQauA==", + "dependencies": { + "@ai-sdk/provider-utils": "1.0.5", + "@ai-sdk/ui-utils": "0.0.21", + "swr": "2.2.5" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "react": "^18 || ^19", + "zod": "^3.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/@ai-sdk/react/node_modules/swr": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/swr/-/swr-2.2.5.tgz", + "integrity": "sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg==", + "dependencies": { + "client-only": "^0.0.1", + "use-sync-external-store": "^1.2.0" + }, + "peerDependencies": { + "react": "^16.11.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@ai-sdk/solid": { + "version": "0.0.24", + "resolved": "https://registry.npmjs.org/@ai-sdk/solid/-/solid-0.0.24.tgz", + "integrity": "sha512-QO2kE5mTXxJa0Vel0z9cVInfEIHKgeen6QJxhdQXCK/8Etcel7DRKvfQWcJf50PLVGmzVRqnGcRqjr6raaYePw==", + "dependencies": { + "@ai-sdk/provider-utils": "1.0.5", + "@ai-sdk/ui-utils": "0.0.21" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "solid-js": "^1.7.7" + }, + "peerDependenciesMeta": { + "solid-js": { + "optional": true + } + } + }, + "node_modules/@ai-sdk/svelte": { + "version": "0.0.25", + "resolved": "https://registry.npmjs.org/@ai-sdk/svelte/-/svelte-0.0.25.tgz", + "integrity": "sha512-uNPc7KNy+6/FY436Jys4rP2LnouxNTTPqZp4jLg5s9i4+D8n2ImuKTrrHlJjTB8UiMsWmkRWU+Tqh8BptEExbw==", + "dependencies": { + "@ai-sdk/provider-utils": "1.0.5", + "@ai-sdk/ui-utils": "0.0.21", + "sswr": "2.1.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "svelte": "^3.0.0 || ^4.0.0" + }, + "peerDependenciesMeta": { + "svelte": { + "optional": true + } + } + }, + "node_modules/@ai-sdk/ui-utils": { + "version": "0.0.21", + "resolved": "https://registry.npmjs.org/@ai-sdk/ui-utils/-/ui-utils-0.0.21.tgz", + "integrity": "sha512-qZ4ScEhNVpVqfg/2KcKYKKQcUpmfVyMD3P06OVDqXpzMaWvw95lUSYkJO/TDI49MhyVyK4eAI35pRU5B7bhrTQ==", + "dependencies": { + "@ai-sdk/provider": "0.0.14", + "@ai-sdk/provider-utils": "1.0.5", + "secure-json-parse": "2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.0.0" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "node_modules/@ai-sdk/vue": { + "version": "0.0.25", + "resolved": "https://registry.npmjs.org/@ai-sdk/vue/-/vue-0.0.25.tgz", + "integrity": "sha512-qdlcWH4mrTq93V3b6c/5GwECLBBSUMV4m1F4SYUV5q+YfZjc8NiNcTYGes4pQoSRJBsDvB1Ch0fTam0hM3Gr7w==", + "dependencies": { + "@ai-sdk/provider-utils": "1.0.5", + "@ai-sdk/ui-utils": "0.0.21", + "swrv": "1.0.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "vue": "^3.3.4" + }, + "peerDependenciesMeta": { + "vue": { + "optional": true + } } }, "node_modules/@algolia/events": { @@ -6238,6 +6411,14 @@ "@octokit/openapi-types": "^18.0.0" } }, + "node_modules/@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/@panva/hkdf": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@panva/hkdf/-/hkdf-1.0.1.tgz", @@ -6358,9 +6539,9 @@ } }, "node_modules/@prototypr/paper-interview": { - "version": "0.0.28", - "resolved": "https://npm.pkg.github.com/download/@prototypr/paper-interview/0.0.28/1b6e634a610e06573c078c4752656a6defbc27c6", - "integrity": "sha512-r92muEjWgIhP+FX3uFYKr6Fh+kF1NZF7DXyquChyZu0/sWc7Uc6CpN4K4rTcX4TzH/9ykoqleSMw5hNI9AFmEg==", + "version": "0.0.30", + "resolved": "https://npm.pkg.github.com/download/@prototypr/paper-interview/0.0.30/ab276dcaeb2959e1cafd78c3271c6ceb89adaf28", + "integrity": "sha512-2ngShqX1r5ajGYJbZTAsm6E8LbWkmvldnHIf00JYcrk2CG+SIYbT4n58hNEon5XnAo9NU4AGcHTtSPgG9fRWMQ==", "license": "UNLICENSED", "optional": true, "dependencies": { @@ -6398,6 +6579,7 @@ "fbemitter": "^3.0.0", "lucide-react": "^0.416.0", "openai": "^4.53.0", + "openai-edge": "^1.2.2", "react": "^18.3.1", "react-dom": "^18.3.1", "react-markdown": "^9.0.1", @@ -12434,6 +12616,11 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/diff-match-patch": { + "version": "1.0.36", + "resolved": "https://registry.npmjs.org/@types/diff-match-patch/-/diff-match-patch-1.0.36.tgz", + "integrity": "sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg==" + }, "node_modules/@types/doctrine": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz", @@ -13384,6 +13571,71 @@ "node": ">=8" } }, + "node_modules/ai": { + "version": "3.2.38", + "resolved": "https://registry.npmjs.org/ai/-/ai-3.2.38.tgz", + "integrity": "sha512-FxDgUG/3pKri2GMS+l24Bhk1M01B2LYXNW8nh8R+Ssf+CUnrh2kuThHmWbM2slOs/EBTWFbQ9Z53bC6TWY1yZg==", + "dependencies": { + "@ai-sdk/provider": "0.0.14", + "@ai-sdk/provider-utils": "1.0.5", + "@ai-sdk/react": "0.0.31", + "@ai-sdk/solid": "0.0.24", + "@ai-sdk/svelte": "0.0.25", + "@ai-sdk/ui-utils": "0.0.21", + "@ai-sdk/vue": "0.0.25", + "@opentelemetry/api": "1.9.0", + "eventsource-parser": "1.1.2", + "json-schema": "0.4.0", + "jsondiffpatch": "0.6.0", + "nanoid": "3.3.6", + "secure-json-parse": "2.7.0", + "zod-to-json-schema": "3.22.5" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "openai": "^4.42.0", + "react": "^18 || ^19", + "sswr": "^2.1.0", + "svelte": "^3.0.0 || ^4.0.0", + "zod": "^3.0.0" + }, + "peerDependenciesMeta": { + "openai": { + "optional": true + }, + "react": { + "optional": true + }, + "sswr": { + "optional": true + }, + "svelte": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/ai/node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -17237,6 +17489,11 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/diff-match-patch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz", + "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==" + }, "node_modules/diff-sequences": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", @@ -18047,6 +18304,14 @@ "node": ">=0.8.x" } }, + "node_modules/eventsource-parser": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-1.1.2.tgz", + "integrity": "sha512-v0eOBUbiaFojBu2s2NPBfYUoRR9GjcDNvCXVaqEf5vVfpIAh9f8RCo4vXTP8c63QRKCFwoLpMpTdPwwhEKVgzA==", + "engines": { + "node": ">=14.18" + } + }, "node_modules/evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", @@ -21754,6 +22019,11 @@ "dev": true, "license": "MIT" }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -21795,6 +22065,33 @@ "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", "dev": true }, + "node_modules/jsondiffpatch": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/jsondiffpatch/-/jsondiffpatch-0.6.0.tgz", + "integrity": "sha512-3QItJOXp2AP1uv7waBkao5nCvhEv+QmJAd38Ybq7wNI74Q+BBmnLn4EDKz6yI9xGAIQoUF87qHt+kc1IVxB4zQ==", + "dependencies": { + "@types/diff-match-patch": "^1.0.36", + "chalk": "^5.3.0", + "diff-match-patch": "^1.0.5" + }, + "bin": { + "jsondiffpatch": "bin/jsondiffpatch.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/jsondiffpatch/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -26136,6 +26433,15 @@ "openai": "bin/cli" } }, + "node_modules/openai-edge": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/openai-edge/-/openai-edge-1.2.2.tgz", + "integrity": "sha512-C3/Ao9Hkx5uBPv9YFBpX/x59XMPgPUU4dyGg/0J2sOJ7O9D98kD+lfdOc7v/60oYo5xzMGct80uFkYLH+X2qgw==", + "optional": true, + "engines": { + "node": ">=18" + } + }, "node_modules/opener": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", @@ -30048,6 +30354,11 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/secure-json-parse": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==" + }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -30685,6 +30996,17 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/sswr": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sswr/-/sswr-2.1.0.tgz", + "integrity": "sha512-Cqc355SYlTAaUt8iDPaC/4DPPXK925PePLMxyBKuWd5kKc5mwsG3nT9+Mq2tyguL5s7b4Jg+IRMpTRsNTAfpSQ==", + "dependencies": { + "swrev": "^4.0.0" + }, + "peerDependencies": { + "svelte": "^4.0.0 || ^5.0.0-next.0" + } + }, "node_modules/stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", @@ -31360,6 +31682,19 @@ "react": "^16.11.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/swrev": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/swrev/-/swrev-4.0.0.tgz", + "integrity": "sha512-LqVcOHSB4cPGgitD1riJ1Hh4vdmITOp+BkmfmXRh4hSF/t7EnS4iD+SOTmq7w5pPm/SiPeto4ADbKS6dHUDWFA==" + }, + "node_modules/swrv": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/swrv/-/swrv-1.0.4.tgz", + "integrity": "sha512-zjEkcP8Ywmj+xOJW3lIT65ciY/4AL4e/Or7Gj0MzU3zBJNMdJiT8geVZhINavnlHRMMCcJLHhraLTAiDOTmQ9g==", + "peerDependencies": { + "vue": ">=3.2.26 < 4" + } + }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -33251,6 +33586,14 @@ "version": "2.4.0", "license": "0BSD" }, + "node_modules/use-sync-external-store": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz", + "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/utf-8-validate": { "version": "5.0.10", "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", @@ -34455,6 +34798,22 @@ "url": "https://github.com/sponsors/holtwick" } }, + "node_modules/zod": { + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.22.5", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.22.5.tgz", + "integrity": "sha512-+akaPo6a0zpVCCseDed504KBJUQpEW5QZw7RMneNmKw+fGaML1Z9tUNLnHHAC8x6dzVRO1eB2oEMyZRnuBZg7Q==", + "peerDependencies": { + "zod": "^3.22.4" + } + }, "node_modules/zwitch": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", diff --git a/package.json b/package.json index ab849fca..808fddb2 100644 --- a/package.json +++ b/package.json @@ -74,6 +74,7 @@ "@tiptap/suggestion": "^2.5.4", "@vercel/og": "0.0.21", "@yaireo/tagify": "^4.17.4", + "ai": "^3.2.38", "axios": "^0.19.2", "better-scroll": "^2.4.2", "blurhash": "^2.0.5", @@ -128,7 +129,7 @@ "nodemailer": "^6.7.3", "normalize-url": "^7.2.0", "nprogress": "^0.2.0", - "openai": "^4.52.7", + "openai": "^4.53.2", "optimize-css-assets-webpack-plugin": "^6.0.1", "plaiceholder": "^3.0.0", "probe-image-size": "^7.2.3", @@ -183,11 +184,12 @@ "tiptypr": "^0.0.599", "tsparticles": "^2.7.1", "uuidv4": "^6.2.13", - "yup": "^0.32.11" + "yup": "^0.32.11", + "zod": "^3.23.8" }, "optionalDependencies": { - "@prototypr/paper-interview": "^0.0.28", - "@prototypr/prototypr-postie": "^1.0.9" + "@prototypr/paper-interview": "^0.0.30", + "@prototypr/prototypr-postie": "^1.0.91" }, "resolutions": { "sharp": "0.33.2" diff --git a/pages/api/interview/generate.js b/pages/api/interview/generate.js index 7f05d6dd..5483fbd1 100644 --- a/pages/api/interview/generate.js +++ b/pages/api/interview/generate.js @@ -1,15 +1,22 @@ // import { userCheck } from "@/lib/account/userCheck"; +import OpenAI from "openai"; + import { getIronSession } from "iron-session"; import { sessionOptions } from "@/lib/iron-session/session"; import {generate} from "@prototypr/paper-interview/dist/api/generate" -export const runtime = "edge"; -export const dynamic = "force-dynamic"; const getSession = async (req, res) =>{ const session = await getIronSession(req, res, sessionOptions); return session } +export const runtime = "edge"; +export const dynamic = "force-dynamic"; + +const openai = new OpenAI({ + apiKey: process.env.OPENAI_API_KEY, +}); + async function handler(req, res) { if (req.method !== "POST") { return new Response(JSON.stringify({ error: "Method not allowed" }), { @@ -35,7 +42,7 @@ async function handler(req, res) { if (userId) { // Call generate and get the stream - const stream = await generate({ req, res, user }); + const stream = await generate({ req, res, user, openai }); // Return the stream directly return new Response(stream, {