
SupaseQs est un outil qui peut être utilisé pour gérer localement les bases de données de séquences d'ADN, grâce à l'implémentation PostgreSQL offerte par Supabase .
Il tire parti de PostgreSQL en tant que gestionnaire de base de données backend, vectorisation basée sur KMER et recherche de vecteurs pour imiter les fonctionnalités de l'explosion.
Si vous travaillez dans un environnement Linux, vous voudrez peut-être simplement télécharger / copier setup.sh et le lancer:
# Linux
wget https://raw.githubusercontent.com/AstraBert/SupaSeqs/main/scripts/setup.sh
bash setup.shAssurez-vous que votre environnement a:
gitNode v18 ou suivantnpm et npxpython 3.10 ou suivre le processus d'installation devrait fonctionner à la fois sur Windows et sur Linux. Tout d'abord, clone ce référentiel:
# BOTH Windows and Linux
git clone https://github.com/AstraBert/SupaSeqs
cd SupaSeqs Obtenez les exécutables de la ligne de commande supabase :
# BOTH Windows and Linux
npm install supabaseCréer et démarrer une instance Supabase:
# BOTH Windows and Linux
npx supabase init
npx supabase start Récupérez la chaîne de connexion à partir de l' DB URL qui sera imprimée après cette commande:
# BOTH Windows and Linux
npx supabase statusCréez un environnement virtuel, activez-le et installez les dépendances nécessaires:
# 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.txtDans l'environnement virtuel, exécutez:
# BOTH Windows and Linux
cd scripts
python3 -m fastapi dev S'il y a des problèmes avec la connexion au client Supabase, assurez-vous de remplacer la chaîne de connexion à la ligne de 16 main.py avec celle que vous avez trouvée exécutant supabase status .
L'application fonctionne comme un service API, tirant parti de FastAPI. La connexion à Supabase est gérée via une implémentation sqlalchemy d'un client similaire à celle construite dans la bibliothèque vecs .
La demande accepte deux types de demandes:
1- Post - Téléchargez une séquence ou un fichier 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 " } " Chaque séquence est vectorisée avec une représentation basée sur 5 mères (un tableau 1024-DIM), qui est ensuite téléchargée sur le tableau des sequences sur Supabase avec une description (si elle est fournie dans le cas de la séquence unique, les en-têtes des séquences pour ceux d'un fichier FastA) et la séquence d'origine.
2- Get - Rechercher dans la base de données de séquences
curl -X ' GET ' ' http://localhost:8000/seqs/AACTTCTCAAACAGACTTGCTTGATGATCCGGATCAGATGAATGAAGACAAGCGTCATTCACAGGGTACATTCACCAGTGACTACAGCAAGTTCCTCGACACCAGGCGTGCTCAAGACTTCTTGGATTGGCTGAAGAACACCAAGAGGAACAGGAATGAAAT?limit=100&threshold=75 ' -H ' accept: application/json 'La séquence de requête est vectorisée et la base de données est recherchée: un certain nombre de séquences (spécifiées avec la touche limite , le maximum est 1000) est renvoyé s'ils sont conformes à un seuil de similitude (spécifié en pourcentage de valeur avec la touche de seuil ); La réponse typique ressemble à ceci:
{ "1" :{ "sequence" : " GGCAGAACCCAGGGCACCAGCACGCCGAAGGACCACCGCAGGCTGGCCAGCGCTCCACCCTCCCTGCACCACACCCTGCGAGCAAAAGGCAGCAGAAATGAAGAGCATTTACTTTGTGGCTGGATTGTTTGTAATGCTGGTACAAGGCAGCTGGCAACACCCACTTCAAGACACAGAGGAAAAACCCAGGTCTTTCTCAACTTCTCAAACAGACTTGCTTGATGATCCGGATCAGATGAATGAAGACAAGCGTCATTCACAGGGTACATTCACCAGTGACTACAGCAAGTTCCTCGACACCAGGCGTGCTCAAGACTTCTTGGATTGGCTGAAGAACACCAAGAGGAACAGGAATGAAAT " , "description" : " M57688.1 Octodon degus glucagon mRNA, complete cds " , "cos_dist" : 0.23987939711631145 }} Ceci est accompli grâce à une fonction appelée match_page_sections et définie comme suit:
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 );
$$;Les contributions sont plus que les bienvenues! Voir les directives de contribution pour plus d'informations :)
Si vous avez trouvé ce projet utile, veuillez considérer le financer et le faire grandir: soutenons les open source ensemble !?
Ce projet est fourni sous la licence MIT: il sera toujours open-source et gratuit.
Si vous utilisez ce projet, veuillez citer l'auteur: Astra Clelia Bertelli