понял. спасибо. А вы можете дать полный код. Как вам передать в тексте код функции. Надо его как то заэкранировать. Но ваш предыдущий вариант не сработал
Если стандартное экранирование (три обратных кавычки) не срабатывает, самый простой и надежный способ — **сохраните код функции в текстовый файл (например, `pipe.txt`) и прикрепите его сюда**, как вы делали с логами. Я его скачаю и сразу увижу все отступы и символы.
Но, основываясь на вашем скриншоте, я подготовил **исправленную версию кода**. Я переписал логику так, чтобы она не искала только картинки, а собирала весь текст и информацию о прикрепленных файлах.
### Исправленный код функции (универсальный)
Замените содержимое вашей функции `pipe` на этот вариант. Он более надежен для работы с n8n:
«`python
import requests
import json
from typing import List, Union, Generator
class Pipe:
def __init__(self):
pass
def pipe(self, body: dict, __user__: dict) -> Union[str, Generator]:
# 1. Получаем URL из настроек (Valves)
n8n_url = «ВАШ_URL_ИЗ_НАСТРОЕК» # Или self.val.n8n_url, если используете Valves
# 2. Извлекаем последнее сообщение
messages = body.get(«messages», [])
if not messages:
return «Ошибка: нет сообщений»
last_message = messages[-1]
# 3. Собираем текст (обрабатываем и строку, и список объектов)
user_text = «»
content = last_message.get(«content», «»)
if isinstance(content, list):
for item in content:
if item.get(«type») == «text»:
user_text += item.get(«text», «»)
elif item.get(«type») == «image_url»:
user_text += f»\n[Изображение: {item[‘image_url’][‘url’][:50]}…]»
else:
user_text = content
# 4. ИЗВЛЕКАЕМ ФАЙЛЫ (Это то, чего не было в вашем коде)
# Open WebUI передает файлы в поле ‘files’ внутри сообщения
files_data = []
if «files» in last_message:
files_data = last_message[«files»]
# 5. Формируем пакет для n8n
payload = {
«text»: user_text,
«chatId»: body.get(«chat_id»),
«user_email»: __user__.get(«email»),
«user_name»: __user__.get(«name»),
«files»: files_data # Отправляем массив файлов в n8n
}
try:
# 6. Отправляем запрос в n8n
response = requests.post(n8n_url, json=payload)
response.raise_for_status()
# Возвращаем ответ от n8n обратно в чат
return response.text
except Exception as e:
return f»Ошибка связи с n8n: {str(e)}»
«`
### Что изменилось и почему это важно:
1. **Универсальный сбор текста:** Теперь код корректно обрабатывает `content`, даже если это просто текст, а не список.
2. **Поле `files`:** Я добавил сбор данных из `last_message[«files»]`. Теперь, когда вы прикрепляете лог-файл, информация о нем (ID файла в Open WebUI) уйдет в n8n.
3. **Обработка ошибок (`try…except`):** Если n8n «отвалится» или будет долго думать, функция не просто выдаст пустой экран, а напишет текст ошибки. Это поможет вам понять, что происходит.
### Как проверить в n8n:
Когда вы отправите файл с этим кодом, в n8n в ноде **Webhook** (входящие данные) вы увидите структуру:
«`json
{
«text»: «ваш текст»,
«files»: [
{
«id»: «идентификатор_файла»,
«name»: «logs.txt»,
«type»: «text/plain»
}
]
}
«`
После этого в n8n вы сможете использовать ноду **Open WebUI** (если она установлена) или обычный **HTTP Request**, чтобы скачать содержимое файла по его `id`.
**Если вы хотите, чтобы я проверил именно ваш текущий файл целиком — присылайте его текстом или файлом!**
🤖 | 📅 | 🧠 CTX 6