50 lines
1.8 KiB
TypeScript
50 lines
1.8 KiB
TypeScript
import { GigaChat, detectImage } from 'gigachat';
|
||
import { Agent } from 'node:https';
|
||
|
||
const httpsAgent = new Agent({
|
||
rejectUnauthorized: false,
|
||
timeout: 60000
|
||
});
|
||
|
||
export const llm = new GigaChat({
|
||
credentials: process.env.GIGA_AUTH,
|
||
model: 'GigaChat-2',
|
||
httpsAgent,
|
||
});
|
||
|
||
export const generatePicture = async (prompt: string) => {
|
||
const resp = await llm.chat({
|
||
messages: [
|
||
{
|
||
"role": "system",
|
||
"content": "Ты — Василий Кандинский для жильцов многоквартирного дома"
|
||
},
|
||
{
|
||
role: "user",
|
||
content: `Старайся передать атмосферу уюта и безопасности.
|
||
Нарисуй картинку подходящую для такого события: ${prompt}
|
||
В картинке не должно быть текста, только изображение.`,
|
||
},
|
||
],
|
||
function_call: 'auto',
|
||
});
|
||
|
||
// Получение изображения по идентификатору
|
||
const detectedImage = detectImage(resp.choices[0]?.message.content ?? '');
|
||
|
||
if (!detectedImage?.uuid) {
|
||
throw new Error('Не удалось получить UUID изображения из ответа GigaChat');
|
||
}
|
||
|
||
const image = await llm.getImage(detectedImage.uuid);
|
||
|
||
// Возвращаем содержимое изображения, убеждаясь что это Buffer
|
||
if (Buffer.isBuffer(image.content)) {
|
||
return image.content;
|
||
} else if (typeof image.content === 'string') {
|
||
return Buffer.from(image.content, 'binary');
|
||
} else {
|
||
throw new Error('Unexpected image content type: ' + typeof image.content);
|
||
}
|
||
}
|