Um Wrapper para https://venus.chub.ai para criar contas e acessar LLMs premium usando scripts Python locais.
O objetivo deste script é demonstrar os recursos de engenharia reversa com Python. Este projeto é puramente para fins educacionais e está sob a licença GPL-3. Para mais informações, você pode sempre entrar em contato comigo em [email protected]. Por motivos legais, leia atentamente a ficha jurídica
Este README é amigável para iniciantes e passo a passo. Leva o processo lentamente.
Este projeto simples utiliza módulos como selenium
, requests
e um pouco de exploração das vulnerabilidades e inconsistências de segurança do site. Adicionar Cloudflare também não vai ajudar - só terei que usar nodriver em vez de selenium
Execute git clone https://github.com/Recentaly/Venus-Chub-Wrapper.git
Instale as dependências abrindo um console no diretório Venus-Chub-Wrapper e executando pip install -r requirements.txt
Para contextualizar, é fornecido um script de exemplo . Este projeto envia apenas trechos de código individuais para registrar uma conta, buscar seu Mars Token , fazer login e assim por diante. Você precisará criar seu próprio main.py , mas este script irá guiá-lo no processo. (Atualização: o main.py foi enviado acidentalmente. É apenas o exemplo 2. Ele será excluído, mas fique à vontade para verificar os logs de commit se você não tiver noção)
Para começar, crie um main.py na raiz do projeto.
O registro requer apenas 2 importações. Veja abaixo e copie-os em seu main.py. O primeiro é necessário para obter um token de falsificação de solicitação entre sites da Cloudflare e o segundo é a própria função de registro.
from assets . scripts . webdriver . csrf_cookie import get_csrf_cookie
from assets . scripts . register import register
(Opcional)
from assets . scripts import make_fake_mail , make_fake_password , make_fake_username
make_fake_mail
: Retorna um UUIDv4 + "@gmail.com" no final.
make_fake_password
: Retorna um I maiúsculo + um UUIDv4 + "!" (para atender aos critérios de senha)
make_fake_username
: simplesmente retorna uma string UUIDv4.
Esta é a primeira falha de segurança: endereços de e-mail não verificados, mesmo aqueles completamente inventados (por exemplo: [email protected]) são permitidos e recebem créditos de API gratuitos.
Aqui está um exemplo de maneira de executar o código:
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 )
Isso registra uma conta gravadora e copia a resposta da API Chub. Aqui está um exemplo de formato de register_response
:
{
"git_id" : 73017801 ,
"samwise" : " 2949skqo-901d-4f87-b22b-7c9b03221baf " ,
"username" : " ihatechildren "
}
O único objeto realmente importante de que precisamos é o token samwise
. É usado para autenticação.
O login é relativamente fácil, mas geralmente não é necessário. Importe os seguintes módulos:
from assets . scripts . webdriver . csrf_cookie import get_csrf_cookie
from assets . scripts . login import login
Para fazer login, você precisa dos seguintes parâmetros prontos:
get_csrf_cookie()
Em seguida, chame a função de login
login_response = login ( csrf_cookie , email , password )
Este é o formato de saída resultante como exemplo:
{
"git_id" : 73017801 ,
"samwise" : " 2949skqo-901d-4f87-b22b-7c9b03221baf " ,
"subscription" : 0 ,
"username" : " guatemalafan45 "
}
Use-o para obter o token samwise
importante se você já tiver uma conta.
Agora precisamos configurar um bate-papo fictício. Já criei um bot para isso que será usado para iniciar um chat. Precisamos iniciar um chat porque a chave API não é inicializada até que o usuário inicie um chat. O código não funcionará se meu bot fictício no endpoint composed_view_3402/reference-endpoint-4dbc6dbef1b4
for excluído. No entanto, você pode colocar a rota de qualquer bot público aqui. Eu recomendo um bot leve para que o webdriver não precise lidar com muito tráfego de token. Um webdriver fará login, visitará o chat e buscará a chave API antes de fechar rapidamente.
Importações:
from assets . scripts . create_chat import create_chat
Execute a função. De preferência após o registro. Aqui está um trecho de exemplo:
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" ])
O método create_chat
requer um token samwise
que você obtém ao se registrar ou fazer login. A função create_chat
envia duas solicitações - uma para criar o recurso de chat e outra para a visualização de página.
Para conversar com os LLMs Mars ou Mercury com uma conta gravadora ou conta existente, ainda precisamos buscar nossa chave API. Felizmente, a função get_mars_token
faz isso por nós. É chamado de “get_mars_token”, mas o token pode ser usado para todos os modelos.
Primeiro, importe o módulo necessário
from assets . scripts . webdriver . mars_token import get_mars_token
Então, obtenha seu token chamando a função assim:
# get mars token for chat
MARS_TOKEN : str = get_mars_token ( fake_email , fake_password , chat_id )
O processo do webdriver continuará ativo se você não desligá-lo! Também existe uma função para isso.
Importe-o através de:
from assets . scripts . webdriver import close_driver
E então chame a função close_driver
. Faça isso DEPOIS de obter sua chave de API.
Aqui está um exemplo de código completo para obter sua chave de 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 )
Saída (Observação: o registro de selênio foi intencionalmente deixado de fora devido a inundações. Partes das informações confidenciais foram editadas usando "x".)
[...]
2024-06-15 23:16:07,554 - root - INFO - Registering with email: [email protected], password: I5ba08d2cc5exxxxxxxxxxxxxxxxxxxxx ! , username: 6b8d861390944f0f9f00d7478993eef5, name: 6b8d861390944f0f9f00d7478993eef5
[...]
CHK-2STMC397I00589C0Q5X6Uxxxxxxxxxxxxxxxxxxxxxxxxxx
Agora que temos nossa chave API (gravadora) com 60 solicitações gratuitas, podemos conversar com os LLMs hospedados.
As importações são:
from assets . scripts . API . Chat import chat
(Opcional – recomendado para streaming)
from assets . scripts . API . parse_helper import parse_for_content
O módulo opcional é capaz de extrair o token de um pedaço de fluxo de eventos. É bom sempre analisar palavras de um fluxo de entrada, em vez de ter que fazer isso manualmente.
Aqui está um exemplo de chamada de chat:
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 )
Saída:
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!
Pois é.. está falando um monte de besteira. Bem, esses modelos são ajustados para RP de qualquer maneira, então experimente suas solicitações. Pessoalmente, não posso ajudar, mas você só precisa colocar o modelo na personalidade de um assistente do tipo ChatGPT e espero que isso resolva o problema.
A função chat
utiliza os seguintes parâmetros:
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.
Aqui está o formato do pedaço se você não analisá-lo usando a função complementada:
data: {"id": "459e62e9-bb18-423f-9403-079cdd9c597a", "object": "chat.completion", "created": "26", "model": "mixtral", "choices": [{"delta": {"content": "<a token will appear here>"}
O último pedaço:
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 )