Skip to content

Latest commit

 

History

History
160 lines (126 loc) · 6.12 KB

File metadata and controls

160 lines (126 loc) · 6.12 KB

LangFlow Multi-File Processing Pipeline for OpenWebUI

Что делает

Принимает сообщение с любым количеством прикреплённых файлов, загружает все в LangFlow параллельно и запускает workflow с передачей путей через tweaks.

Ключевые возможности

  • Неограниченное число файлов — 5, 10, 50 — всё загрузится
  • Параллельная загрузка — все файки уходят одновременно (asyncio.gather + semaphore)
  • Автообнаружение — сам находит File-компоненты в workflow
  • Разумный маппинг — файлы распределяются по компонентам
  • Streaming / blocking — потоковый или обычный вывод

Распределение файлов по компонентам

1 компонент, N файлов → {"File-abc": {"path": ["f1.pdf", "f2.pdf", ...]}}
N компонентов, N файлов → {"File-abc": {"path": "f1.pdf"}, "File-def": {"path": "f2.pdf"}}
M компонентов, N файлов (N>M) → первые M-1 получают по 1, последний — остаток

Запуск

docker compose up -d

Сервисы: OpenWebUI (3000), LangFlow (7860), Pipelines (9099)

Настройка в OpenWebUI

Admin Panel → Settings → Pipelines → «+» → Install from URL

Valves

Параметр Обязательный Описание
LANGFLOW_BASE_URL http://langflow:7860 (Docker network)
FLOW_ID UUID workflow из URL LangFlow
FILE_COMPONENT_IDS ID компонентов через запятую. Если пусто — автоопределение
LANGFLOW_API_KEY Ключ, если включена авторизация
LANGFLOW_USER_ID Для /v2/files. Пусто = /v1
TIMEOUT Таймаут, сек (по умолч. 120)
STREAM Потоковый вывод (по умолч. false)
AUTO_DISCOVER_COMPONENTS Автоиск File-компонентов (по умолч. true)
MAX_CONCURRENT_UPLOADS Параллельных загрузок (по умолч. 10)

Получение Flow ID и Component ID

Flow ID

URL в браузере: http://localhost:7860/flow/<FLOW_ID>

Component ID — вариант 1 (ручной)

Клик на компонент → правая панель → поле id

Component ID — вариант 2 (API)

curl http://localhost:7860/api/v1/flows/<FLOW_ID> | python3 -m json.tool | grep -B2 -A2 '"File"'

Component ID — вариант 3 (авто)

Просто оставьте FILE_COMPONENT_IDS пустым — pipeline сам найдёт все File-компоненты.

Примеры запросов к LangFlow API

Загрузка файла

curl -X POST "http://langflow:7860/api/v1/files/upload/<FLOW_ID>" \
  -F "file=@document.pdf"
# → {"file_path": "<FLOW_ID>/2025-01-01_12-00-00_document.pdf"}

Запуск с одним файлом

curl -X POST "http://langflow:7860/api/v1/run/<FLOW_ID>?stream=false" \
  -H "Content-Type: application/json" \
  -d '{
    "input_value": "Analyze this",
    "input_type": "chat",
    "output_type": "chat",
    "tweaks": {
      "File-abc123": {"path": "<FLOW_ID>/2025-01-01_12-00-00_document.pdf"}
    }
  }'

Запуск с несколькими файлами (один компонент)

curl -X POST "http://langflow:7860/api/v1/run/<FLOW_ID>?stream=false" \
  -H "Content-Type: application/json" \
  -d '{
    "input_value": "Compare these documents",
    "tweaks": {
      "File-abc123": {"path": ["path/to/f1.pdf", "path/to/f2.pdf", "path/to/f3.pdf"]}
    }
  }'

Запуск с несколькими компонентами

curl -X POST "http://langflow:7860/api/v1/run/<FLOW_ID>?stream=false" \
  -H "Content-Type: application/json" \
  -d '{
    "input_value": "Process these",
    "tweaks": {
      "File-abc123": {"path": "path/to/f1.pdf"},
      "File-def456": {"path": "path/to/f2.pdf"}
    }
  }'

Troubleshooting

Файлы не передаются

  1. Проверь логи: docker logs -f openwebui-pipelines
  2. Убедись что FILE_COMPONENT_IDS заполнен или AUTO_DISCOVER_COMPONENTS=true
  3. Проверь что файлы реально прикреплены (в чате видны 📎)

401 Unauthorized

  • С LANGFLOW_AUTO_LOGIN=true — не передавай пустой x-api-key
  • С авторизацией — создай API key в LangFlow → Settings → API

404 на /api/v1/files/upload

  • Проверь FLOW_ID — должен быть валидный UUID
  • Проверь что LangFlow жив: curl http://langflow:7860/api/v1/version

Файлы загружены, но workflow не видит

  • Убедись что File-компонент соединён с остальной цепочкой
  • Попробуй запустить workflow вручную через LangFlow UI с файлом

Медленная загрузка большого числа файлов

  • Увель MAX_CONCURRENT_UPLOADS (по умолч. 10)
  • Увеличь TIMEOUT для больших файлов

Полезные команды

# Логи
docker logs -f openwebui-pipelines
docker logs -f langflow

# Здоровье LangFlow
curl http://localhost:7860/api/v1/version

# Список файлов flow (v1)
curl http://localhost:7860/api/v1/files/<FLOW_ID>

# Структура flow (поиск File-компонентов)
curl -s http://localhost:7860/api/v1/flows/<FLOW_ID> | python3 -c "
import json, sys
d = json.load(sys.stdin)
nodes = d.get('data', {}).get('graph', {}).get('nodes', [])
for n in nodes:
    nd = n.get('data', {})
    if 'File' in nd.get('type', ''):
        print(f'  id={n.get(\"id\")}, type={nd.get(\"type\")}')
"