
O supaseqs é uma ferramenta que pode ser usada para gerenciar bancos de dados de sequências de DNA localmente, graças à implementação do PostGresql oferecida pela Supabase .
Ele aproveita o PostGresQL como gerenciador de banco de dados de back-end, vetorização baseada em KMER e pesquisa de vetor para imitar as funcionalidades do BLAST.
Se você estiver trabalhando em um ambiente Linux, convém apenas baixar/copiar setup.sh e iniciá -lo:
# Linux
wget https://raw.githubusercontent.com/AstraBert/SupaSeqs/main/scripts/setup.sh
bash setup.shCertifique -se de que seu ambiente tenha:
gitNode v18 ou seguintenpm e npxpython 3.10 ou seguindo o processo de instalação deve funcionar no Windows e no Linux. Primeiro de tudo, clone este repositório:
# BOTH Windows and Linux
git clone https://github.com/AstraBert/SupaSeqs
cd SupaSeqs Obtenha os executáveis da linha de comando supabase :
# BOTH Windows and Linux
npm install supabaseCrie e inicie uma instância Supabase:
# BOTH Windows and Linux
npx supabase init
npx supabase start Recupere a sequência de conexão do DB URL que será impresso após este comando:
# BOTH Windows and Linux
npx supabase statusCrie um ambiente virtual, ative -o e instale as dependências necessárias:
# Linux
python3 -m venv apienv
source apienv/bin/activate
python3 -m pip install -r requirements.txtOu
# Windows
python3 - m venv .apienv
.apienvScriptsactivate # For Command Prompt
# or
.apienvActivate.ps1 # For PowerShell
python3 - m pip install - r .requirements.txtDentro do ambiente virtual, execute:
# BOTH Windows and Linux
cd scripts
python3 -m fastapi dev Se houver problemas com a conexão com o Supabase Client, substitua a sequência de conexão na linha de 16 main.py pelo que você encontrou executando supabase status .
O aplicativo funciona como um serviço de API, alavancando o FASTAPI. A conexão com supabase é tratada por meio de uma implementação de um cliente sqlalchemy de um cliente, semelhante ao da biblioteca vecs .
O aplicativo aceita dois tipos de solicitação:
1- Post - Carregue uma sequência ou um arquivo fasta :
# Single sequence
curl -X POST " http://127.0.0.1:8000/seqs/ " -H " accept: application/json " -H " Content-Type: application/json " -d " { " sequence " : " GGCAGAACCCAGGGCACCAGCACGCCGAAGGACCACCGCAGGCTGGCCAGCGCTCCACCCTCCCTGCACCACACCCTGCGAGCAAAAGGCAGCAGAAATGAAGAGCATTTACTTTGTGGCTGGATTGTTTGTAATGCTGGTACAAGGCAGCTGGCAACACCCACTTCAAGACACAGAGGAAAAACCCAGGTCTTTCTCAACTTCTCAAACAGACTTGCTTGATGATCCGGATCAGATGAATGAAGACAAGCGTCATTCACAGGGTACATTCACCAGTGACTACAGCAAGTTCCTCGACACCAGGCGTGCTCAAGACTTCTTGGATTGGCTGAAGAACACCAAGAGGAACAGGAATGAAAT " , " description " : " M57688.1 Octodon degus glucagon mRNA, complete cds " } "
# FASTA file
curl -X POST " http://127.0.0.1:8000/seqs/ " -H " accept: application/json " -H " Content-Type: application/json " -d " { " sequence " : " sequence.fasta " } " Cada sequência é vetorizada com uma representação baseada em 5-mer (uma matriz 1024-DIM), que é enviada para a tabela de sequences em supabase, juntamente com uma descrição (se fornecido no caso da sequência única, os cabeçalhos das seqüências para aqueles em um arquivo fasta) e a sequência original.
2- Get - Pesquise no banco de dados de sequência
curl -X ' GET ' ' http://localhost:8000/seqs/AACTTCTCAAACAGACTTGCTTGATGATCCGGATCAGATGAATGAAGACAAGCGTCATTCACAGGGTACATTCACCAGTGACTACAGCAAGTTCCTCGACACCAGGCGTGCTCAAGACTTCTTGGATTGGCTGAAGAACACCAAGAGGAACAGGAATGAAAT?limit=100&threshold=75 ' -H ' accept: application/json 'A sequência de consulta é vetorizada e o banco de dados é pesquisado: várias sequências (especificadas com a chave limitada , o máximo é 1000) é retornado se elas forem compatíveis com um limiar de similaridade (especificado como um valor percentual com a chave do limite ); A resposta típica se parece com a seguinte:
{ "1" :{ "sequence" : " GGCAGAACCCAGGGCACCAGCACGCCGAAGGACCACCGCAGGCTGGCCAGCGCTCCACCCTCCCTGCACCACACCCTGCGAGCAAAAGGCAGCAGAAATGAAGAGCATTTACTTTGTGGCTGGATTGTTTGTAATGCTGGTACAAGGCAGCTGGCAACACCCACTTCAAGACACAGAGGAAAAACCCAGGTCTTTCTCAACTTCTCAAACAGACTTGCTTGATGATCCGGATCAGATGAATGAAGACAAGCGTCATTCACAGGGTACATTCACCAGTGACTACAGCAAGTTCCTCGACACCAGGCGTGCTCAAGACTTCTTGGATTGGCTGAAGAACACCAAGAGGAACAGGAATGAAAT " , "description" : " M57688.1 Octodon degus glucagon mRNA, complete cds " , "cos_dist" : 0.23987939711631145 }} Isso é realizado graças a uma função chamada match_page_sections e definida da seguinte maneira:
create or replace function public .match_page_sections (
embedding vector( 1024 ),
match_threshold float,
match_count int
)
returns setof public . sequences
language sql
as $$
select *
from public . sequences
where public . sequences .embedding <=> embedding < 1 - match_threshold
order by public . sequences .embedding <=> embedding asc
limit least(match_count, 1000 );
$$;As contribuições são mais do que bem -vindas! Consulte Diretrizes de contribuição para obter mais informações :)
Se você achou esse projeto útil, considere financiá-lo e fazê-lo crescer: vamos apoiar a fonte aberta juntos!?
Este projeto é fornecido sob a licença do MIT: ele sempre será de código aberto e gratuito.
Se você usar este projeto, cite o autor: Astra Clelia Bertelli