diff --git a/.env.dev.pcb b/.env.dev.pcb index 9d44ff0..68ed4f1 100644 --- a/.env.dev.pcb +++ b/.env.dev.pcb @@ -43,4 +43,5 @@ SCRIPTS_DIR=admin_scripts CLOUDFLARE_TOKENS=[{"label":"Paolo.arena77@gmail.com","value":"M9EM309v8WFquJKpYgZCw-TViM2wX6vB3wlK6GD0"},{"label":"gruppomacro.com","value":"bqmzGShoX7WqOBzkXocoECyBkPq3GfqcM5t6VFd8"}] MIAB_HOST=box.lamiaposta.org MIAB_ADMIN_EMAIL=admin@lamiaposta.org -MIAB_ADMIN_PASSWORD=passpao1pabox@1A \ No newline at end of file +MIAB_ADMIN_PASSWORD=passpao1pabox@1A +DS_API_KEY="sk-222e3addb3d8455d8b0516d93906eec7" \ No newline at end of file diff --git a/.env.dev.riso b/.env.dev.riso index 2498e7b..98b7713 100644 --- a/.env.dev.riso +++ b/.env.dev.riso @@ -40,4 +40,5 @@ FTPSERVER_USER=ftpusrsrv_ FTPSERVER_PWD=ftpmypwd@1A_ AUTH_NEW_SITES=123123123 SCRIPTS_DIR=admin_scripts -CLOUDFLARE_TOKENS=[{"label":"Paolo.arena77@gmail.com","value":"M9EM309v8WFquJKpYgZCw-TViM2wX6vB3wlK6GD0"},{"label":"gruppomacro.com","value":"bqmzGShoX7WqOBzkXocoECyBkPq3GfqcM5t6VFd8"}] \ No newline at end of file +CLOUDFLARE_TOKENS=[{"label":"Paolo.arena77@gmail.com","value":"M9EM309v8WFquJKpYgZCw-TViM2wX6vB3wlK6GD0"},{"label":"gruppomacro.com","value":"bqmzGShoX7WqOBzkXocoECyBkPq3GfqcM5t6VFd8"}] +DS_API_KEY="sk-222e3addb3d8455d8b0516d93906eec7" \ No newline at end of file diff --git a/.env.development b/.env.development index 2498e7b..68ed4f1 100644 --- a/.env.development +++ b/.env.development @@ -1,12 +1,12 @@ -DATABASE=test_FreePlanet +DATABASE=test_PiuCheBuono UDB=paofreeplanet PDB=mypassword@1A SEND_EMAIL=0 SEND_EMAIL_ORDERS=1 PORT=3000 -appTelegram_TEST=["1","13"] -appTelegram=["1","13"] -appTelegram_DEVELOP=["13"] +appTelegram_TEST=["1","17"] +appTelegram=["1","17"] +appTelegram_DEVELOP=["17"] DOMAIN=mongodb://localhost:27017/ AUTH_MONGODB=1 MONGODB_USER=admin @@ -40,4 +40,8 @@ FTPSERVER_USER=ftpusrsrv_ FTPSERVER_PWD=ftpmypwd@1A_ AUTH_NEW_SITES=123123123 SCRIPTS_DIR=admin_scripts -CLOUDFLARE_TOKENS=[{"label":"Paolo.arena77@gmail.com","value":"M9EM309v8WFquJKpYgZCw-TViM2wX6vB3wlK6GD0"},{"label":"gruppomacro.com","value":"bqmzGShoX7WqOBzkXocoECyBkPq3GfqcM5t6VFd8"}] \ No newline at end of file +CLOUDFLARE_TOKENS=[{"label":"Paolo.arena77@gmail.com","value":"M9EM309v8WFquJKpYgZCw-TViM2wX6vB3wlK6GD0"},{"label":"gruppomacro.com","value":"bqmzGShoX7WqOBzkXocoECyBkPq3GfqcM5t6VFd8"}] +MIAB_HOST=box.lamiaposta.org +MIAB_ADMIN_EMAIL=admin@lamiaposta.org +MIAB_ADMIN_PASSWORD=passpao1pabox@1A +DS_API_KEY="sk-222e3addb3d8455d8b0516d93906eec7" \ No newline at end of file diff --git a/package.json b/package.json index a8335c4..fa87306 100755 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "node-telegram-bot-api": "^0.65.1", "nodemailer": "^6.7.8", "npm-check-updates": "^16.14.18", + "openai": "^4.83.0", "pdf-lib": "^1.17.1", "pdf-parse": "^1.1.1", "pem": "^1.14.6", diff --git a/src/server/models/catai.js b/src/server/models/catai.js index e0576a6..2c8da20 100755 --- a/src/server/models/catai.js +++ b/src/server/models/catai.js @@ -13,12 +13,12 @@ mongoose.plugin(schema => { }); const CatAISchema = new Schema({ - _id: { - type: Number, - }, name: { type: String, }, + idapp: { + type: String, + }, img: { type: String, }, @@ -47,7 +47,7 @@ CatAISchema.statics.executeQueryTable = function (idapp, params) { }; CatAISchema.statics.findAllIdApp = async function (idapp) { - const myfind = {}; + const myfind = { idapp }; return await CatAI.find(myfind).sort({ name: 1 }); }; diff --git a/src/server/models/queryai.js b/src/server/models/queryai.js index 9c5183a..e7a68b3 100755 --- a/src/server/models/queryai.js +++ b/src/server/models/queryai.js @@ -15,6 +15,8 @@ mongoose.plugin(schema => { schema.options.usePushEach = true }); +const OpenAI = require("openai"); + const QueryAISchema = new Schema({ idapp: { type: String, @@ -73,7 +75,7 @@ QueryAISchema.statics.getFieldsForSearch = function () { QueryAISchema.statics.executeQueryTable = function (idapp, params) { params.fieldsearch = this.getFieldsForSearch(); - return tools.executeQueryTable(this, 0, params); + return tools.executeQueryTable(this, idapp, params); }; diff --git a/src/server/router/aitools_router.js b/src/server/router/aitools_router.js index b58638a..506c297 100755 --- a/src/server/router/aitools_router.js +++ b/src/server/router/aitools_router.js @@ -21,6 +21,7 @@ const globalTables = require('../tools/globalTables'); const { ObjectId } = require('mongodb'); +const OpenAI = require("openai"); router.post('/getlist', authenticate_noerror, async function (req, res, next) { @@ -43,4 +44,66 @@ router.post('/getlist', authenticate_noerror, async function (req, res, next) { }); + + +async function getDeepSeekResponse(prompt, options) { + try { + + const deepseek = new OpenAI({ + baseURL: 'https://api.deepseek.com/v1', // Verifica il percorso esatto dalle API + apiKey: process.env.DS_API_KEY, // Mai hardcodare la chiave! + defaultHeaders: { + 'Content-Type': 'application/json' + } + }); + + if (!options.withexplain) { + prompt = prompt + '\n' + 'Ritornami solo il risultato, senza spiegazione.' + } + if (options.outputType) { + prompt = prompt + '\n' + options.outputType; + } + + const completion = await deepseek.chat.completions.create({ + model: options.model || "deepseek-chat", + messages: [ + { role: "system", content: options.contestsystem || "" }, + { role: "user", content: prompt } + ], + temperature: options.temp || 0.3, + max_tokens: options.max_tokens || 1000, + stream: options.stream || false, + }); + + if (!completion || !completion.choices || completion.choices.length === 0) { + throw new Error('Invalid response from DeepSeek API'); + } + + return completion.choices[0]; + } catch (error) { + console.error('DeepSeek Error:', error.response?.data || error.message); + throw new Error('Failed to get AI response'); + } +} + +// Endpoint per DeepSeek +router.post('/ds', authenticate, async (req, res) => { + try { + let prompt = req.body.prompt; + let options = req.body.options; + + const choice = await getDeepSeekResponse(prompt, options); + + return res.send({ + code: server_constants.RIS_CODE_OK, + choice, + }); + + } catch (error) { + console.error('DeepSeek API Error:', error.response?.data || error.message); + return res.send({ code: server_constants.RIS_CODE_ERR, error: 'Errore nella chiamata a DeepSeek: ' + error.response?.data || error.message }); + } +}); + + module.exports = router; diff --git a/src/server/tools/globalTables.js b/src/server/tools/globalTables.js index 3b0c95f..7e71fe1 100755 --- a/src/server/tools/globalTables.js +++ b/src/server/tools/globalTables.js @@ -74,7 +74,7 @@ const Department = require('../models/department'); const CatProd = require('../models/catprod'); const Collana = require('../models/collana'); const CatAI = require('../models/catai'); -const QueryAI = require('../models/queryai'); +const { QueryAI } = require('../models/queryai'); const SubCatProd = require('../models/subcatprod'); const { Category } = require('../models/category'); const ShareWithUs = require('../models/sharewithus'); diff --git a/yarn.lock b/yarn.lock index 6b69887..252410e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1875,6 +1875,14 @@ "@types/bson" "*" "@types/node" "*" +"@types/node-fetch@^2.6.4": + version "2.6.12" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.12.tgz#8ab5c3ef8330f13100a7479e2cd56d3386830a03" + integrity sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA== + dependencies: + "@types/node" "*" + form-data "^4.0.0" + "@types/node@*", "@types/node@>=10.0.0": version "22.10.1" resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.1.tgz#41ffeee127b8975a05f8c4f83fb89bcb2987d766" @@ -1882,6 +1890,13 @@ dependencies: undici-types "~6.20.0" +"@types/node@^18.11.18": + version "18.19.75" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.75.tgz#be932799d1ab40779ffd16392a2b2300f81b565d" + integrity sha512-UIksWtThob6ZVSyxcOqCLOUNg/dyO1Qvx4McgeuhrEtHTLFTf7BBhEazaE4K806FGTPtzd/2sE90qn4fVr7cyw== + dependencies: + undici-types "~5.26.4" + "@types/semver-utils@^1.1.1": version "1.1.3" resolved "https://registry.yarnpkg.com/@types/semver-utils/-/semver-utils-1.1.3.tgz#f78233e6613e53626844112422845f0f13b573fb" @@ -1930,6 +1945,13 @@ abbrev@1, abbrev@^1.0.0: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + accepts@~1.3.4, accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -4419,6 +4441,11 @@ event-stream@^4.0.1: stream-combiner "^0.2.2" through "^2.3.8" +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + eventemitter3@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" @@ -4849,6 +4876,11 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== +form-data-encoder@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.2.tgz#1f1ae3dccf58ed4690b86d87e4f57c654fbab040" + integrity sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A== + form-data-encoder@^2.1.2: version "2.1.4" resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-2.1.4.tgz#261ea35d2a70d48d30ec7a9603130fa5515e9cd5" @@ -4881,6 +4913,14 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" +formdata-node@^4.3.2: + version "4.4.1" + resolved "https://registry.yarnpkg.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" + formidable@^1.2.2: version "1.2.6" resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.6.tgz#d2a51d60162bbc9b4a055d8457a7c75315d1a168" @@ -8340,6 +8380,11 @@ node-cron@^3.0.2: dependencies: uuid "8.3.2" +node-domexception@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" + integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== + node-emoji@^1.11.0: version "1.11.0" resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" @@ -8352,7 +8397,7 @@ node-ensure@^0.0.0: resolved "https://registry.yarnpkg.com/node-ensure/-/node-ensure-0.0.0.tgz#ecae764150de99861ec5c810fd5d096b183932a7" integrity sha512-DRI60hzo2oKN1ma0ckc6nQWlHU69RH6xN0sjQTjMpChPfTYvKZdcQFfdYK2RWbJcKyUizSIy/l8OTGxMAM1QDw== -node-fetch@^2.6.0: +node-fetch@^2.6.0, node-fetch@^2.6.7: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== @@ -8784,6 +8829,19 @@ open@7: is-docker "^2.0.0" is-wsl "^2.1.1" +openai@^4.83.0: + version "4.83.0" + resolved "https://registry.yarnpkg.com/openai/-/openai-4.83.0.tgz#87edfebecf8a4dc2317269dd704cf0ebd9f11979" + integrity sha512-fmTsqud0uTtRKsPC7L8Lu55dkaTwYucqncDHzVvO64DKOpNTuiYwjbR/nVgpapXuYy8xSnhQQPUm+3jQaxICgw== + 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" + openurl@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/openurl/-/openurl-1.1.1.tgz#3875b4b0ef7a52c156f0db41d4609dbb0f94b387" @@ -11537,6 +11595,11 @@ underscore@~1.13.1: resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.7.tgz#970e33963af9a7dda228f17ebe8399e5fbe63a10" integrity sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g== +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + undici-types@~6.20.0: version "6.20.0" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" @@ -11874,6 +11937,11 @@ web-resource-inliner@^6.0.1: node-fetch "^2.6.0" valid-data-url "^3.0.0" +web-streams-polyfill@4.0.0-beta.3: + version "4.0.0-beta.3" + resolved "https://registry.yarnpkg.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.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"