Basaran é uma alternativa de código aberto à API de preenchimento de texto OpenAI. Ele fornece uma API de streaming compatível para seus modelos de geração de texto baseados em Hugging Face Transformers.
A comunidade de código aberto eventualmente testemunhará o momento de difusão estável para grandes modelos de linguagem (LLMs), e Basaran permite que você substitua o serviço OpenAI pelo modelo de código aberto mais recente para potencializar seu aplicativo sem modificar uma única linha de código.
Os principais recursos do Basaran são:
Substitua user/repo
pelo modelo selecionado e XYZ
pela versão mais recente e execute:
docker run -p 80:80 -e MODEL=user/repo hyperonym/basaran:X.Y.Z
E você está pronto para ir!
Playground: http://127.0.0.1/
API: http://127.0.0.1/v1/completions
As imagens do Docker estão disponíveis nos pacotes Docker Hub e GitHub.
Para aceleração de GPU, você também precisa instalar o driver NVIDIA e o NVIDIA Container Runtime. A imagem do Basaran já vem com bibliotecas relacionadas como CUDA e cuDNN, portanto não há necessidade de instalá-las manualmente.
A imagem de Basaran pode ser usada de três maneiras:
MODEL="user/repo"
, o modelo correspondente pode ser baixado do Hugging Face Hub durante a primeira inicialização.MODEL
para o caminho correspondente.Para os casos de uso acima, você pode encontrar exemplos de Dockerfiles e arquivos docker-compose no diretório de implantações.
Basaran é testado em Python 3.8+ e PyTorch 1.13+. Você deve criar um ambiente virtual com a versão do Python que deseja usar e ativá-lo antes de continuar.
pip
: pip install basaran
pip install accelerate bitsandbytes
user/repo
pelo modelo selecionado e execute Basaran: MODEL=user/repo PORT=80 python -m basaran
Para obter uma lista completa de variáveis de ambiente, consulte __init__.py
.
Se quiser acessar os recursos mais recentes ou hackear você mesmo, você pode optar por executar a partir do código-fonte usando git
.
git clone https://github.com/hyperonym/basaran.git && cd basaran
pip install -r requirements.txt
user/repo
pelo modelo selecionado e execute Basaran: MODEL=user/repo PORT=80 python -m basaran
Os formatos de solicitação e resposta HTTP de Basaran são consistentes com a API OpenAI.
Tomando a conclusão do texto como exemplo:
curl http://127.0.0.1/v1/completions
-H ' Content-Type: application/json '
-d ' { "prompt": "once upon a time,", "echo": true } '
{
"id" : " cmpl-e08c701b4ba032c09ef080e1 " ,
"object" : " text_completion " ,
"created" : 1678003509 ,
"model" : " bigscience/bloomz-560m " ,
"choices" : [
{
"text" : " once upon a time, the human being faces a complicated situation and he needs to find a new life. " ,
"index" : 0 ,
"logprobs" : null ,
"finish_reason" : " length "
}
],
"usage" : {
"prompt_tokens" : 5 ,
"completion_tokens" : 21 ,
"total_tokens" : 26
}
}
Se seu aplicativo usa bibliotecas de cliente fornecidas pela OpenAI, você só precisa modificar a variável de ambiente OPENAI_API_BASE
para corresponder ao endpoint de Basaran:
OPENAI_API_BASE= " http://127.0.0.1/v1 " python your_app.py
O diretório de exemplos contém exemplos de uso da biblioteca OpenAI Python.
Basaran também está disponível como uma biblioteca no PyPI. Ele pode ser usado diretamente em Python sem a necessidade de iniciar um servidor API separado.
pip
: pip install basaran
load_model
para carregar um modelo: from basaran . model import load_model
model = load_model ( "user/repo" )
for choice in model ( "once upon a time" ):
print ( choice )
O diretório de exemplos contém exemplos de uso de Basaran como biblioteca.
O formato da API do Basaran é consistente com o do OpenAI, com diferenças de compatibilidade principalmente em termos de suporte de parâmetros e campos de resposta. As seções a seguir fornecem informações detalhadas sobre a compatibilidade de cada endpoint.
Cada processo Basaran atende apenas a um modelo, portanto o resultado conterá apenas esse modelo.
Embora Basaran não suporte o parâmetro model
, a biblioteca cliente OpenAI exige que ele esteja presente. Portanto, você pode inserir qualquer nome de modelo aleatório.
Parâmetro | Basaran | OpenAI | Valor padrão | Valor Máximo |
---|---|---|---|---|
model | ○ | ● | - | - |
prompt | ● | ● | "" | COMPLETION_MAX_PROMPT |
suffix | ○ | ● | - | - |
min_tokens | ● | ○ | 0 | COMPLETION_MAX_TOKENS |
max_tokens | ● | ● | 16 | COMPLETION_MAX_TOKENS |
temperature | ● | ● | 1.0 | - |
top_p | ● | ● | 1.0 | - |
n | ● | ● | 1 | COMPLETION_MAX_N |
stream | ● | ● | false | - |
logprobs | ● | ● | 0 | COMPLETION_MAX_LOGPROBS |
echo | ● | ● | false | - |
stop | ○ | ● | - | - |
presence_penalty | ○ | ● | - | - |
frequency_penalty | ○ | ● | - | - |
best_of | ○ | ● | - | - |
logit_bias | ○ | ● | - | - |
user | ○ | ● | - | - |
Fornecer uma API de chat unificada atualmente é difícil porque cada modelo tem um formato diferente para o histórico de chat.
Portanto, é recomendável pré-formatar o histórico de chat com base nos requisitos do modelo específico e usá-lo como prompt para a API de conclusão.
**Summarize a long document into a single sentence and ...**
<human>: Last year, the travel industry saw a big ...
<bot>: If you're traveling this spring break, ...
<human>: But ...
<bot>:
[Round 0]
问:你好
答:你好!有什么我可以帮助你的吗?
[Round 1]
问:你是谁?
答:
Consulte as questões em aberto para obter uma lista completa dos recursos propostos.
Este projeto é de código aberto. Se você tiver alguma ideia ou dúvida, sinta-se à vontade para entrar em contato criando um problema!
As contribuições são muito apreciadas, consulte CONTRIBUTING.md para obter mais informações.
Basaran está disponível sob a licença do MIT.
© 2023 Hiperônimo