User: async function sendApiRequest(url, mess, inputPrompt, model) {
    try {
		// Добавляем текст к `content` последнего объекта (вопрос пользователя)
		if (mess.length > 0) {
			let lastIndex = mess.length - 1; // Индекс последнего элемента
			mess[lastIndex].content += '. Начни ответ с 10 пробелов.'; // Добавляем текст
		}
		console.log(messages);
        // Отправка POST-запроса
        const result = await axios.post(url, { 
            messages: mess,
            websearch: false,
            conversation_style: "Balanced",
            prompt: inputPrompt,
            stream: false,
            model: model,
            markdown: false
        }, {
            headers: {
                'Content-Type': 'application/json'//,
				//"x-nexra-user": "user-1Q337r10v1q",
				//"x-nexra-secret": "nx-x76u1lQED10b83Z2q297j6w3e30nfDP2o134e191Yb4Ry5Mh70q5"
            }
        });

        // Получаем ID для последующего запроса
        let id = result.data.id;
        let response = null;
        let data = true;
		console.log(`Пауза в 1,5 секунды`);
        // Цикл для проверки статуса задачи
        while (data) {
			await new Promise(resolve => setTimeout(resolve, 1500));
            response = await axios.get('https://nexra.aryahcr.cc/api/chat/task/' + encodeURIComponent(id));
            response = response.data;

            switch (response.status) {
                case "pending":
                    data = true;
                    break;
                case "error":
                case "completed":
                case "not_found":
                    data = false;
                    break;
            }
            console.log(response);
        }
		//console.log(response);
        return { code: 1, data: response }; // Возвращаем успешный ответ

    } catch (error) {
        console.error('Error:', error);
        return { code: 2, data: error }; // Возвращаем ошибку
    }
}
let response = await sendApiRequest(url, messages, inputPrompt, model);

Почему в результате меняется сама глобальная переменная messages, а не только переменная mess?
Assistant: В JavaScript, когда вы передаете объекты (включая массивы, такие как `mess`) в функции, вы передаете их по ссылке, а не по значению. Это означает, что когда вы изменяете содержимое объекта внутри функции, вы также изменяете его в том контексте, где он был создан.

В вашем коде переменные `messages` и `mess` указывают на один и тот же массив, поскольку вы передаете ссылку на массив `messages` в качестве аргумента функции `sendApiRequest`. Если вы затем модифицируете `mess` внутри функции, это также повлияет на оригинальный массив `messages`, потому что они оба ссылаются на одно и то же место в памяти.

Чтобы избежать изменения глобальной переменной `messages`, вы можете создать глубокую копию массива перед передачей его в функцию. Вот пример, как это можно сделать:

1. **Использование `slice()`**:
   ```javascript
   let response = await sendApiRequest(url, messages.slice(), inputPrompt, model);
   ```

2. **Использование оператора расширения (`...`) для создания копии**:
   ```javascript
   let response = await sendApiRequest(url, [...messages], inputPrompt, model);
   ```

3. **Использование `JSON.parse()` и `JSON.stringify()` для глубокого копирования** (если в массиве нет функций или специальных объектов):
   ```javascript
   let response = await sendApiRequest(url, JSON.parse(JSON.stringify(messages)), inputPrompt, model);
   ```

Применив один из этих способов, вы создадите независимую копию массива `messages`, и изменения в `mess` не будут затрагивать первоначальный массив.
User: первые два способа не работают, только третий
Assistant: