84 lines
3.0 KiB
JavaScript
84 lines
3.0 KiB
JavaScript
|
const { v4: uuidv4 } = require('uuid');
|
||
|
const axios = require('axios');
|
||
|
const https = require('https');
|
||
|
|
||
|
process.env.GIGACHAT_AUTH =
|
||
|
'YzA2ODg0NTYtYzE3Yi00OGJkLTkyY2MtMzdkM2U0YjE4ZmQ5Ojc0ZWVhN2YxLTI5MWYtNDNiZS05MTY2LWIyZjg5MGY2YWQ3Ng==';
|
||
|
|
||
|
const agent = new https.Agent({
|
||
|
rejectUnauthorized: false
|
||
|
});
|
||
|
|
||
|
class controller {
|
||
|
async getText(req, res) {
|
||
|
try {
|
||
|
const { text } = req.body;
|
||
|
|
||
|
const headers = {
|
||
|
Authorization: `Basic ${process.env.GIGACHAT_AUTH}`,
|
||
|
RqUID: uuidv4(),
|
||
|
'Content-Type': 'application/x-www-form-urlencoded',
|
||
|
Accept: 'application/json'
|
||
|
};
|
||
|
|
||
|
const access_token = await axios
|
||
|
.post('https://ngw.devices.sberbank.ru:9443/api/v2/oauth', encodeURI(`scope=GIGACHAT_API_PERS`), {
|
||
|
headers: headers,
|
||
|
httpsAgent: agent
|
||
|
})
|
||
|
.then((response) => {
|
||
|
return response.data.access_token;
|
||
|
})
|
||
|
.catch((error) => {
|
||
|
return error;
|
||
|
});
|
||
|
|
||
|
const systemMessage = ` Создай анализ совместимости между двумя людьми и отобрази результат исключительно в формате JSON, который будет результатом работы 'JSON.stringify()'. Он должен состоять из следующих частей:
|
||
|
|
||
|
1. **Совместимость** в процентах.
|
||
|
2. **Список точек соприкосновения**. Перечисли их через запятую.
|
||
|
3. **Список потенциальных различий**. Перечисли через запятую.
|
||
|
|
||
|
Результат должен быть строкой JSON, полученной через 'JSON.stringify()', и не содержать дополнительных пояснений или текста.
|
||
|
|
||
|
Пример:
|
||
|
{"compatibility": 70, "pointsOfContact": ["общие интересы", "совместные увлечения", "взаимное уважение"], "potentialDifferences": ["различные жизненные цели", "противоположные характеры", "несовпадающие ценности"]}
|
||
|
`;
|
||
|
|
||
|
const textAI = await axios
|
||
|
.post(
|
||
|
'https://gigachat.devices.sberbank.ru/api/v1/chat/completions',
|
||
|
JSON.stringify({
|
||
|
model: 'GigaChat:latest',
|
||
|
messages: [
|
||
|
{
|
||
|
role: 'user',
|
||
|
content: systemMessage + text
|
||
|
}
|
||
|
],
|
||
|
profanity_check: true
|
||
|
}),
|
||
|
{
|
||
|
headers: {
|
||
|
'Content-Type': 'application/json',
|
||
|
Authorization: `Bearer ${access_token}`
|
||
|
},
|
||
|
httpsAgent: agent
|
||
|
}
|
||
|
)
|
||
|
.then((response) => {
|
||
|
return response.data.choices[0].message.content;
|
||
|
})
|
||
|
.catch((error) => {
|
||
|
return error;
|
||
|
});
|
||
|
|
||
|
res.status(200).json({ text: textAI });
|
||
|
} catch (e) {
|
||
|
res.status(400).json({ message: e });
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = new controller();
|