
SupaseQS - это инструмент, который можно использовать для управления базами данных последовательностей ДНК локально благодаря реализации PostgreSQL, предлагаемой Supabase .
Он использует PostgreSQL в качестве менеджера базы данных бэкэнд, векторизации на основе KMER и вектора, чтобы имитировать функциональные возможности взрыва.
Если вы работаете в среде Linux, вы можете просто загрузить/копировать setup.sh и запустить его:
# Linux
wget https://raw.githubusercontent.com/AstraBert/SupaSeqs/main/scripts/setup.sh
bash setup.shУбедитесь, что в вашей среде есть:
gitNode v18 или следующееnpm и npxpython 3.10 или после процесса установки должны работать как на Windows, так и на Linux. Прежде всего, клонировать этот репозиторий:
# BOTH Windows and Linux
git clone https://github.com/AstraBert/SupaSeqs
cd SupaSeqs Получите исполнительные файлы командной строки supabase :
# BOTH Windows and Linux
npm install supabaseСоздайте и запустите экземпляр Supabase:
# BOTH Windows and Linux
npx supabase init
npx supabase start Получите строку подключения из DB URL , который будет напечатан после этой команды:
# BOTH Windows and Linux
npx supabase statusСоздайте виртуальную среду, активируйте ее и установите необходимые зависимости:
# Linux
python3 -m venv apienv
source apienv/bin/activate
python3 -m pip install -r requirements.txtИли
# Windows
python3 - m venv .apienv
.apienvScriptsactivate # For Command Prompt
# or
.apienvActivate.ps1 # For PowerShell
python3 - m pip install - r .requirements.txtВ виртуальной среде запустите:
# BOTH Windows and Linux
cd scripts
python3 -m fastapi dev Если есть проблемы с подключением к клиенту Supabase, обязательно замените строку подключения в строке 16 main.py на тот, который вы обнаружили, запускающую supabase status .
Приложение работает в качестве сервиса API, используя FastAPI. Соединение с супабазой обрабатывается с помощью реализации клиента sqlalchemy которая аналогична той, которая построена в библиотеке vecs .
Приложение принимает два типа запросов:
1- Post - загрузите последовательность или файл 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 " } " Каждая последовательность векторизуется с 5-мерным представлением (массив 1024-DIM), которое затем загружается в таблицу sequences на супабазе вместе с описанием (если в случае отдельной последовательности, заголовки последовательностей для последовательностей в файле FASTA) и исходной последовательности.
2- GET - Поиск через базу данных последовательности
curl -X ' GET ' ' http://localhost:8000/seqs/AACTTCTCAAACAGACTTGCTTGATGATCCGGATCAGATGAATGAAGACAAGCGTCATTCACAGGGTACATTCACCAGTGACTACAGCAAGTTCCTCGACACCAGGCGTGCTCAAGACTTCTTGGATTGGCTGAAGAACACCAAGAGGAACAGGAATGAAAT?limit=100&threshold=75 ' -H ' accept: application/json 'Последовательность запроса становится вектором, и поиск базы данных ищет: возвращается ряд последовательностей (указанных с ограниченным ключом, максимум 1000) возвращается, если они соответствуют порогу сходства (указано в процентном значении с ключом по пороге ); Типичный ответ выглядит так:
{ "1" :{ "sequence" : " GGCAGAACCCAGGGCACCAGCACGCCGAAGGACCACCGCAGGCTGGCCAGCGCTCCACCCTCCCTGCACCACACCCTGCGAGCAAAAGGCAGCAGAAATGAAGAGCATTTACTTTGTGGCTGGATTGTTTGTAATGCTGGTACAAGGCAGCTGGCAACACCCACTTCAAGACACAGAGGAAAAACCCAGGTCTTTCTCAACTTCTCAAACAGACTTGCTTGATGATCCGGATCAGATGAATGAAGACAAGCGTCATTCACAGGGTACATTCACCAGTGACTACAGCAAGTTCCTCGACACCAGGCGTGCTCAAGACTTCTTGGATTGGCTGAAGAACACCAAGAGGAACAGGAATGAAAT " , "description" : " M57688.1 Octodon degus glucagon mRNA, complete cds " , "cos_dist" : 0.23987939711631145 }} Это достигается благодаря функции, называемой match_page_sections и определено следующим образом:
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 );
$$;Взносы более чем приветствуются! См. Руководство по взносу для получения дополнительной информации :)
Если вы нашли этот проект полезным, пожалуйста, рассмотрите возможность финансировать его и заставить его расти: давайте поддерживать открытый источник вместе!?
Этот проект представлен по лицензии MIT: он всегда будет открытым исходным кодом и бесплатно использовать.
Если вы используете этот проект, сообщите о авторе: Astra Clelia Bertelli