
SUPASEQS es una herramienta que se puede utilizar para administrar bases de datos de secuencias de ADN localmente, gracias a la implementación de PostgreSQL ofrecida por Supabase .
Aprovecha PostgreSQL como administrador de bases de datos de backend, vectorización basada en KMER y búsqueda de vectores para imitar las funcionalidades de BLAST.
Si está trabajando en un entorno de Linux, es posible que desee descargar/copiar Setup.sh y iniciarlo:
# Linux
wget https://raw.githubusercontent.com/AstraBert/SupaSeqs/main/scripts/setup.sh
bash setup.shAsegúrese de que su entorno tenga:
gitNode v18 o siguientesnpm y npxpython 3.10 o después del proceso de instalación debe funcionar tanto en Windows como en Linux. En primer lugar, clone este repositorio:
# BOTH Windows and Linux
git clone https://github.com/AstraBert/SupaSeqs
cd SupaSeqs Obtenga los ejecutables de la línea de comandos supabase :
# BOTH Windows and Linux
npm install supabaseCrear e iniciar una instancia de Supabase:
# BOTH Windows and Linux
npx supabase init
npx supabase start Recupere la cadena de conexión de la DB URL que se imprimirá después de este comando:
# BOTH Windows and Linux
npx supabase statusCree un entorno virtual, activelo e instale las dependencias necesarias:
# Linux
python3 -m venv apienv
source apienv/bin/activate
python3 -m pip install -r requirements.txtO
# Windows
python3 - m venv .apienv
.apienvScriptsactivate # For Command Prompt
# or
.apienvActivate.ps1 # For PowerShell
python3 - m pip install - r .requirements.txtDentro del entorno virtual, ejecute:
# BOTH Windows and Linux
cd scripts
python3 -m fastapi dev Si hay problemas con la conexión al cliente Supabase, asegúrese de reemplazar la cadena de conexión en línea de 16 main.py con la que encontró con supabase status .
La aplicación funciona como un servicio API, aprovechando Fastapi. La conexión con Supabase se maneja a través de una implementación sqlalchemy de un cliente que es similar al construido en la biblioteca vecs .
La aplicación acepta dos tipos de solicitud:
1- Publicar : cargue una secuencia o un archivo 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 secuencia se vectoriza con una representación basada en 5 mer (una matriz de 1024 dim), que luego se carga en la tabla sequences en Supabase junto con una descripción (si se proporciona en el caso de la secuencia única, los encabezados de las secuencias para aquellos en un archivo FASTA) y la secuencia original.
2- Get - Busque a través de la base de datos de secuencia
curl -X ' GET ' ' http://localhost:8000/seqs/AACTTCTCAAACAGACTTGCTTGATGATCCGGATCAGATGAATGAAGACAAGCGTCATTCACAGGGTACATTCACCAGTGACTACAGCAAGTTCCTCGACACCAGGCGTGCTCAAGACTTCTTGGATTGGCTGAAGAACACCAAGAGGAACAGGAATGAAAT?limit=100&threshold=75 ' -H ' accept: application/json 'La secuencia de consulta se vectoriza y se busca la base de datos: una serie de secuencias (especificadas con la clave de límite , el máximo es 1000) se devuelve si cumplen con un umbral de similitud (especificado como un valor porcentual con la clave de umbral ); La respuesta típica se ve así:
{ "1" :{ "sequence" : " GGCAGAACCCAGGGCACCAGCACGCCGAAGGACCACCGCAGGCTGGCCAGCGCTCCACCCTCCCTGCACCACACCCTGCGAGCAAAAGGCAGCAGAAATGAAGAGCATTTACTTTGTGGCTGGATTGTTTGTAATGCTGGTACAAGGCAGCTGGCAACACCCACTTCAAGACACAGAGGAAAAACCCAGGTCTTTCTCAACTTCTCAAACAGACTTGCTTGATGATCCGGATCAGATGAATGAAGACAAGCGTCATTCACAGGGTACATTCACCAGTGACTACAGCAAGTTCCTCGACACCAGGCGTGCTCAAGACTTCTTGGATTGGCTGAAGAACACCAAGAGGAACAGGAATGAAAT " , "description" : " M57688.1 Octodon degus glucagon mRNA, complete cds " , "cos_dist" : 0.23987939711631145 }} Esto se logra gracias a una función llamada match_page_sections y se define de la siguiente manera:
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 );
$$;¡Las contribuciones son más que bienvenidas! Consulte las pautas de contribución para obtener más información :)
Si encontró este proyecto útil, considere para financiarlo y hacer que crezca: ¡apoyemos el código abierto juntos?
Este proyecto se proporciona bajo la licencia MIT: siempre será de código abierto y de forma gratuita.
Si usa este proyecto, cite al autor: Astra Clelia Bertelli