diff --git a/server/routers/dry-wash/image.js b/server/routers/dry-wash/image.js new file mode 100644 index 0000000..263e342 --- /dev/null +++ b/server/routers/dry-wash/image.js @@ -0,0 +1,91 @@ +const API_URL = "https://gigachat.devices.sberbank.ru/api/v1" +const router = require('express').Router() +const { v4: uuidv4 } = require("uuid"); + +process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0" + +const token = 'MTQwMmNmZjgtZjA5OC00OGMxLWI0OTUtNWU3ZTU4YzMzZjdjOmU5OGFiYmNiLThmMDItNGVmOC1hNjhhLTA4Y2QxYjVmOGRmMA==' + + +const getToken = async (req, res) => { + + const rqUID = uuidv4() + const body = new URLSearchParams({ + scope: "GIGACHAT_API_PERS", + }) + + const response = await fetch("https://ngw.devices.sberbank.ru:9443/api/v2/oauth", { + method: "POST", + headers: { + Authorization: `Basic ${token}`, + "Content-Type": "application/x-www-form-urlencoded", + Accept: "application/json", + RqUID: rqUID, + }, + body, + }) + + if (!response.ok) { + const errorData = await response.json(); + console.error(" Ошибка запроса:", errorData); + return res.status(response.status).json(errorData); + } + + return await response.json() +} + +async function analyzeImage(fileId,token) { + const response = await fetch(`${API_URL}/chat/completions`, { + method: "POST", + headers: { + "Content-Type": "application/json", + Accept: "application/json", + Authorization: `Bearer ${token}`, + }, + body: JSON.stringify({ + model: "GigaChat-Max", + stream: false, + update_interval: 0, + messages: [ + { + role: "system", + content: + "Ты эксперт по оценке чистоты автомобилей. Твоя задача — анализировать фотографии машин и определять степень их чистоты по 10-балльной шкале, где 1 — очень грязная, 10 — полностью чистая. Отвечай только числом от 1 до 10, без пояснений и дополнительных слов.", + }, + { + role: "user", + content: "Что с чистотой машины? Отвечай на основе приложенного документа", + attachments: [fileId], + }, + ], + }), + }); + + const data = await response.json() + console.log(" Результат анализа:", data) + return data +} + +router.post("/upload", async (req, res) => { + + const {access_token} = await getToken(req, res) + + const response = await fetch(`${API_URL}/files`, { + method: "POST", + headers: { + Authorization: `Bearer ${access_token}`, + contentType: "multipart/form-data", + }, + body: req.body, + }) + + const data = await response.json() + + const analysisResponse = await analyzeImage(data.id,access_token) + + res.json({ fileId: data.id, analysis: analysisResponse }) +}) + + + +module.exports = router diff --git a/server/routers/dry-wash/index.js b/server/routers/dry-wash/index.js index 5a89a80..b1dda9f 100644 --- a/server/routers/dry-wash/index.js +++ b/server/routers/dry-wash/index.js @@ -2,11 +2,13 @@ const router = require('express').Router() const armMasterRouter = require('./arm-master') const armOrdersRouter = require('./arm-orders') const orderRouter = require('./order') +const imageRouter = require('./image') router.use('/arm', armMasterRouter) router.use('/arm', armOrdersRouter) router.use('/order', orderRouter) +router.use('/image', imageRouter) module.exports = router