Оболочка для https://venus.chub.ai для создания учетных записей и доступа к премиальным LLM с использованием локальных скриптов Python.
Цель этого сценария — продемонстрировать возможности обратного проектирования с помощью Python. Этот проект предназначен исключительно для образовательных целей и подпадает под лицензию GPL-3. Для получения дополнительной информации вы всегда можете связаться со мной по адресу [email protected]. По юридическим причинам, пожалуйста, внимательно прочтите юридический лист.
Этот файл README предназначен для начинающих и содержит пошаговые инструкции. Процесс идет медленно.
В этом простом проекте используются такие модули, как selenium
, requests
и немного уязвимостей и несоответствий безопасности сайта. Добавление Cloudflare тоже не поможет — мне придется использовать только nodriver вместо selenium.
Запустите git clone https://github.com/Recentaly/Venus-Chub-Wrapper.git
Установите зависимости, открыв консоль в каталоге Venus-Chub-Wrapper и запустив pip install -r requirements.txt
Для контекста предоставляется пример сценария . Этот проект предоставляет только отдельные фрагменты кода для регистрации учетной записи, получения токена Mars , входа в систему и т. д. Вам нужно будет создать свой собственный файл main.py , но этот скрипт поможет вам в этом процессе. (Обновление: файл main.py был случайно отправлен. Хотя это всего лишь пример 2. Он будет удален, но не стесняйтесь проверять журналы коммитов, если вы настолько невежественны)
Для начала создайте main.py в корне проекта.
Для регистрации требуется всего 2 импорта. Посмотрите ниже и скопируйте их в свой main.py. Первый необходим для получения токена подделки межсайтового запроса Cloudflare, а второй — это сама функция регистрации.
from assets . scripts . webdriver . csrf_cookie import get_csrf_cookie
from assets . scripts . register import register
(Необязательный)
from assets . scripts import make_fake_mail , make_fake_password , make_fake_username
make_fake_mail
: возвращает UUIDv4 + «@gmail.com» в конце.
make_fake_password
: Возвращает заглавную букву I + UUIDv4 + "!" (чтобы соответствовать критериям пароля)
make_fake_username
: просто возвращает строку UUIDv4.
Это первый недостаток безопасности: непроверенные адреса электронной почты, даже полностью выдуманные (например: [email protected]), разрешены и получают бесплатные кредиты API.
Вот пример способа запуска кода:
from assets . scripts . webdriver . csrf_cookie import get_csrf_cookie
from assets . scripts . register import register
# get csrf token
__csrf_token : str = get_csrf_cookie ()
# register
register_response = register ( fake_email , fake_password , fake_username , fake_username , __csrf_token )
При этом регистрируется записывающая учетная запись и копируется ответ от Chub API. Вот пример формата register_response
:
{
"git_id" : 73017801 ,
"samwise" : " 2949skqo-901d-4f87-b22b-7c9b03221baf " ,
"username" : " ihatechildren "
}
Единственный действительно важный объект, который нам нужен, — это токен samwise
. Он используется для аутентификации.
Войти в систему относительно легко, но в большинстве случаев это не требуется. Импортируйте следующие модули:
from assets . scripts . webdriver . csrf_cookie import get_csrf_cookie
from assets . scripts . login import login
Для входа в систему вам необходимо подготовить следующие параметры:
get_csrf_cookie()
Затем вызовите функцию входа в систему
login_response = login ( csrf_cookie , email , password )
Это полученный формат вывода в качестве примера:
{
"git_id" : 73017801 ,
"samwise" : " 2949skqo-901d-4f87-b22b-7c9b03221baf " ,
"subscription" : 0 ,
"username" : " guatemalafan45 "
}
Используйте это, чтобы получить важный токен samwise
если у вас есть существующая учетная запись.
Теперь нам нужно настроить фиктивный чат. Для этого я уже создал бота, с которым можно будет начать общение. Нам нужно запустить чат, потому что ключ API не инициализируется, пока пользователь не начнет чат. Код не будет работать, если мой фиктивный бот под конечной точкой composed_view_3402/reference-endpoint-4dbc6dbef1b4
будет удален. Однако вы можете разместить здесь маршрут любого общедоступного бота. Я рекомендую легкого бота, чтобы веб-драйверу не приходилось обрабатывать большой объем трафика токенов. Затем веб-драйвер войдет в систему, посетит чат и получит ключ API, а затем быстро закроется.
Импорт:
from assets . scripts . create_chat import create_chat
Запустите функцию. Желательно после регистрации. Вот пример фрагмента:
from assets . scripts . register import register
from assets . scripts . webdriver . csrf_cookie import get_csrf_cookie
from assets . scripts . create_chat import create_chat
__csrf_cookie = get_csrf_cookie ()
# register
register_response = register ( fake_email , fake_password , fake_username , fake_username , __csrf_cookie )
# make new chat
chat_id : int = create_chat ( register_response [ "samwise" ])
Для метода create_chat
требуется samwise
токен, который вы получаете при регистрации или входе в систему. Функция create_chat
отправляет два запроса: один для создания ресурса чата и один для просмотра страницы.
Чтобы общаться с LLM Mars или Mercury с помощью постоянной или существующей учетной записи, нам все равно необходимо получить наш ключ API. К счастью, функция get_mars_token
делает это за нас. Он называется «get_mars_token», но токен можно использовать для всех моделей.
Сначала импортируйте необходимый модуль
from assets . scripts . webdriver . mars_token import get_mars_token
Затем получите свой токен, вызвав функцию следующим образом:
# get mars token for chat
MARS_TOKEN : str = get_mars_token ( fake_email , fake_password , chat_id )
Процесс веб-драйвера будет продолжаться, если вы не закроете его! Для этого тоже есть функция.
Импортируйте его через:
from assets . scripts . webdriver import close_driver
А затем вызовите функцию close_driver
. Сделайте это ПОСЛЕ получения ключа API.
Вот полный пример кода для получения ключа API:
from assets . scripts . webdriver . mars_token import get_mars_token
from assets . scripts . webdriver . csrf_cookie import get_csrf_cookie
from assets . scripts . webdriver import close_driver
from assets . scripts . register import register
from assets . scripts . login import login
from assets . scripts . API . Chat import chat
from assets . scripts . API . parse_helper import parse_for_content
from assets . scripts . create_chat import create_chat
from assets . scripts import make_fake_mail , make_fake_password , make_fake_username
fake_username : str = make_fake_username ()
fake_email : str = make_fake_mail ()
fake_password : str = make_fake_password ()
# get csrf token
__csrf_token : str = get_csrf_cookie ()
# register
register_response = register ( fake_email , fake_password , fake_username , fake_username , __csrf_token )
# make new chat
chat_id : int = create_chat ( register_response [ "samwise" ])
# get mars token for chat
MARS_TOKEN : str = get_mars_token ( fake_email , fake_password , chat_id )
# close the webdriver
close_driver ()
print ( MARS_TOKEN )
Вывод (Примечание: журналирование селена было намеренно исключено для флудинга. Части конфиденциальной информации были отредактированы с использованием символов «x»).
[...]
2024-06-15 23:16:07,554 - root - INFO - Registering with email: [email protected], password: I5ba08d2cc5exxxxxxxxxxxxxxxxxxxxx ! , username: 6b8d861390944f0f9f00d7478993eef5, name: 6b8d861390944f0f9f00d7478993eef5
[...]
CHK-2STMC397I00589C0Q5X6Uxxxxxxxxxxxxxxxxxxxxxxxxxx
Теперь, когда у нас есть ключ API (записывающего устройства) с 60 бесплатными запросами, мы можем общаться с размещенными LLM.
Импорт – это:
from assets . scripts . API . Chat import chat
(Необязательно — рекомендуется для потоковой передачи)
from assets . scripts . API . parse_helper import parse_for_content
Дополнительный модуль может извлекать токен из фрагмента потока событий. Это полезно для того, чтобы всегда анализировать слова из входящего потока вместо того, чтобы делать это вручную.
Вот пример разговора в чате:
for chunk in chat (
MARS_TOKEN , # you need to get your API key first as well.
[
{
"role" : "system" ,
"content" : "You're a helpful assistant."
},
{
"role" : "user" ,
"content" : "Yo."
}
],
model = "mixtral" , # model choices: mixtral, mistral, mobile, asha, mythomax
max_tokens = 100 , # goes from 0 to 2048 -> 0 for unlimited.
):
print ( parse_for_content ( chunk ), end = '' , flush = True )
Выход:
I'm a web developer from the UK. I have recently got into Ruby on Rails and find it to be an excellent framework (which is why i am here!).
I don't really know what else to say but if there is anything in particular you would like to know about me then please just ask.
I look forward to getting to know some of you!
Да... это полная чушь. Что ж, эти модели в любом случае настроены на RP, так что экспериментируйте со своими подсказками. Лично я не могу помочь, но вам просто нужно превратить модель в помощника, похожего на ChatGPT, и, надеюсь, это сработает.
Функция chat
принимает следующие параметры:
CH_API_KEY : str , # your API key
messages : List [ Dict [ str , str ] ] , # A list of messages in OpenAI format.
model : str , # model choices: mixtral, mistral, mobile, asha, mythomax
max_tokens : int = 250 , # the maximum tokens to generate. Goes up to 2048 (Unconfirmed)
temperature : float = 0.8 , # the randomness of the generation. 0-2
top_p : float = 0.99 , # helps balance between being predictable and being creative by controlling how big a piece of the "word pie" I can choose from. (explained like a child)
frequency_penalty : float = 1 , # ranges from (-2) to (2)
presence_penalty : float = 1 , # ranges from (-2) to (2)
stream : bool = True , # recommended to keep it at True. False seems to be buggy mostly.
stop : List [ str ] = [ 'USER:' , '#' , '[' ] # stopping sequences. If you use this for RP, add your username as an element in the stopping sequences.
Вот формат фрагмента, если вы не анализируете его с помощью дополненной функции:
data: {"id": "459e62e9-bb18-423f-9403-079cdd9c597a", "object": "chat.completion", "created": "26", "model": "mixtral", "choices": [{"delta": {"content": "<a token will appear here>"}
Последний кусок:
data: [DONE]
from assets . scripts . webdriver . mars_token import get_mars_token
from assets . scripts . webdriver . csrf_cookie import get_csrf_cookie
from assets . scripts . webdriver import close_driver
from assets . scripts . register import register
from assets . scripts . API . Chat import chat
from assets . scripts . API . parse_helper import parse_for_content
from assets . scripts . create_chat import create_chat
from assets . scripts import make_fake_mail , make_fake_password , make_fake_username
fake_username : str = make_fake_username ()
fake_email : str = make_fake_mail ()
fake_password : str = make_fake_password ()
# get csrf token
__csrf_token : str = get_csrf_cookie ()
# register
register_response = register ( fake_email , fake_password , fake_username , fake_username , __csrf_token )
# make new chat
chat_id : int = create_chat ( register_response [ "samwise" ])
# get mars token for chat
MARS_TOKEN : str = get_mars_token ( fake_email , fake_password , chat_id )
# close the webdriver
close_driver ()
# chat with mars
for chunk in chat (
MARS_TOKEN ,
[
{
"role" : "system" ,
"content" : "You're a helpful assistant."
},
{
"role" : "user" ,
"content" : "Yo. Say hi please."
}
],
model = "mixtral" ,
max_tokens = 100 ,
):
print ( parse_for_content ( chunk ), end = '' , flush = True )