LLMapi4free - это сервис, предоставляющий унифицированный доступ к различным LLM провайдерам через API. Сервис работает путем автоматизации действий в браузере, что позволяет получить бесплатный доступ к различным языковым моделям в виде API для ваших приложений.
Демонстрация работы (старая версия)
- Скачать OpenJDK минимум 17-ой версии
sudo apt install openjdk-17-jdk
- Установить xdotool
sudo apt install xdotool
- Установить браузер chrome
- Скачать и запустить .jar файл из раздела "Release":
java -jar bingchat4urapp_server-0.0.1-SNAPSHOT.jar
- Приложение будет запущено на порту 8080.
Если вы хотите запустить это приложение на сервере, то вам обязательно надо развернуть на нём VNC сервер с графическим окружением и менджером окон X11
Если вы хотите использовать прокси-сервер, вам необходимо передать адрес прокси-сервера в качестве параметра в файл .jar. Обратите внимание, что поддерживаются только прокси-серверы SOCKS5 без авторизации. Например, вы можете передать прокси-сервер приложению через консоль следующим образом:
java -jar bingchat4urapp_server-0.0.1-SNAPSHOT.jar --proxy 127.0.0.1:2080
Сервер работает по асинхронному принципу с использованием задач:
- Клиент создаёт задачу (авторизация, отправка промпта и т.д.) через соответствующий endpoint
- Сервер возвращает ID созданной задачи
- Клиент периодически опрашивает endpoint
/get/{id}
для получения статуса задачи, пока она не будет завершена (isFinished = true
)
Вам также доступен веб-интерфейс по пути 127.0.0.1:8080/
который позволит вам проверить работу приложения и разобраться в его работу
/api
Важно: авторизация в Copilot происходит по логину и паролю от вашего Microsoft аккаунта. На вашем аккаунте должна быть выключен двухфакторная авторизация.
Важно: авторизация в OpenAI(ChatGPT) происходит используя Google аккаунт. Вы должны самостоятельно войти в свой Google аккаунт в окне браузера, которое открывается при запуске сервера, и только потом использовать этот endpoint для создания задачи на авторизацию в OpenAI, передавая в качестве логина и пароля любые строки.
POST /auth
Request Body:
{
"login": "string",
"password": "string",
"provider": "enum(LLMproviders)"
}
Validation Rules:
login
: 6-50 символовpassword
: минимум 8 символов, максимум 50provider
: одно из значений enum LLMproviders
Response:
201 Created
: ID созданной задачи (целое число)
42
400 Bad Request
: ошибка валидации500 Internal Server Error
: внутренняя ошибка сервера
POST /createchat
Response:
201 Created
: ID созданной задачи на открытие нового чата
43
500 Internal Server Error
: внутренняя ошибка при создании задачи
POST /sendpromt
Request Body:
{
"promt": "string",
"timeOutForAnswer": "integer"
}
Validation Rules:
promt
: 4-4000 символовtimeOutForAnswer
: 30-300 секунд
Response:
201 Created
: ID созданной задачи
44
400 Bad Request
: ошибка валидации500 Internal Server Error
: внутренняя ошибка на стороне сервера
GET /getProvidersInfo
Response:
200 OK
: список доступных LLM провайдеров
[
{
"provider": "Copilot", // enum LLMproviders
"chat": {
"Copilot": "copilot"
},
"gotError": false, // была ли ошибка при использовании этого провайдера
"authDone": true, // была ли выполнена авторизация
"authRequired": true, // обязательна ли авторизация
"lastAnswer": "Последний ответ от модели"
},
{
"provider": "OpenAI",
"chat": {
"OpenAI": "openAI"
},
"gotError": false,
"authDone": false,
"authRequired": true,
"lastAnswer": ""
}
]
С помощью данного endpoint вы можете выбрать от какого провайдера вы предпочитаете получить ответ.
POST /setPreferedProvider
Request Body:
{
"provider": "enum(LLMproviders)"
}
Response:
200 OK
: "Done!"400 Bad Request
: ошибка валидации500 Internal Server Error
: Внутренняя ошибка сервера
Возращает информацию о провайдере, который будет использоваться для следующей обработки промта.
GET /getWorkingLLM
Response:
200 OK
: информация о текущем рабочем LLM провайдере, который используется программой для обработки промтов
{
"provider": "Copilot",
"chat": {
"type": "Copilot" // игнорируйте это поле
},
"gotError": false,
"authDone": true,
"authRequired": true,
"lastAnswer": "Последний ответ от модели"
}
GET /get/{id}
Parameters:
id
: ID задачи (integer)
Response:
200 OK
: информация о задаче
{
"id": 42,
"type": 1,
"data": {
"param1": "value1",
"param2": "value2"
},
"isFinished": true,
"gotError": false,
"result": "Текстовый результат выполнения задачи",
"htmlResult": "<div>HTML результат выполнения задачи</div>",
"imageResult": "имя_файла_изображения.png"
}
404 Not Found
: задача не найдена
GET /exit
Response:
200 OK
: "Server will be down in few seconds"
type = 0
: Системная задача завершения работыtype = 1
: Задача аутентификацииtype = 2
: Задача отправки промптаtype = 3
: Задача создания чата
При получении ответа от языковой модели, сервер всегда возвращает три поля:
result
: чистый текстовый ответhtmlResult
: ответ в формате HTML с форматированиемimageResult
: имя файла изображения, скриншота ответа от модели
В случае возникновения ошибки:
gotError
: становитсяtrue
result
: содержит описание ошибкиisFinished
: становитсяtrue
, указывая на завершение задачи с ошибкой
200 OK
: Успешное выполнение запроса201 Created
: Успешное создание ресурса400 Bad Request
: Ошибка в запросе (невалидные данные)404 Not Found
: Запрашиваемый ресурс не найден500 Internal Server Error
: Внутренняя ошибка сервера
- Все запросы, требующие тела, должны иметь Content-Type: application/json
- Таймаут ответа для промптов ограничен диапазоном 30-300 секунд
- При ошибках валидации сервер вернёт список конкретных ошибок валидации
- ID задач являются целыми числами и уникальны в рамках системы
- Все задачи выполняются асинхронно, клиент должен периодически проверять статус задачи
- Поля result, htmlResult и imageResult присутствуют в ответе всегда, даже если они пустые