Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
cba10f7
Using Pathfinder package with local sqlite files
mohsenht Jan 20, 2026
5539e3d
Using Pathfinder package with mysql server
mohsenht Jan 21, 2026
cf94d6d
Settings for arax pathfinder
mohsenht Jan 21, 2026
4999dff
Black style errors
mohsenht Jan 21, 2026
767e51b
Black style errors
mohsenht Jan 21, 2026
540f220
New pathfinder package release update.
mohsenht Jan 23, 2026
cd4cf5a
Inject shepherd-arax provenance in all edge sources field
mohsenht Jan 24, 2026
ce1a5e6
Temporary faster pathfinder by decreasing parameters
mohsenht Feb 4, 2026
7cd663a
Merge branch 'main' of github.com:BioPack-team/shepherd into arax-pat…
mohsenht Feb 11, 2026
8ec57a9
Arax Pathfinder tested with 4 hops
mohsenht Feb 11, 2026
82852c4
Async Arax Pathfinder
mohsenht Feb 18, 2026
6b537e5
Pathfinder package updated
mohsenht Mar 3, 2026
9919306
Pathfinder package updated
mohsenht Mar 4, 2026
ab7049e
Merge branch 'main' of github.com:BioPack-team/shepherd into arax-pat…
mohsenht Mar 11, 2026
4771f90
resolved conflicts
mohsenht Mar 11, 2026
107614b
resolved conflicts
mohsenht Mar 11, 2026
268d226
resolved conflicts
mohsenht Mar 11, 2026
c6b79c3
Update to latest main code
maximusunc Mar 11, 2026
f98c6e9
Run black
maximusunc Mar 11, 2026
298aee5
PloverDB url updated to point to CI
mohsenht Mar 11, 2026
17d4187
Merge remote-tracking branch 'origin/arax-pathfinder' into arax-pathf…
mohsenht Mar 11, 2026
70758cb
PRUNE more
mohsenht Mar 11, 2026
b048766
Merge branch 'main' of github.com:BioPack-team/shepherd into arax-pat…
mohsenht Apr 30, 2026
60b7d4a
Merge branch 'main' of github.com:BioPack-team/shepherd into arax-pat…
mohsenht Jul 6, 2026
a7ab6be
Async call
mohsenht Jul 16, 2026
d344b95
Merge branch 'main' of github.com:BioPack-team/shepherd into arax-pat…
mohsenht Jul 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,20 @@ services:
volumes:
- ./logs:/app/logs
- ./.env:/app/.env
arax_pathfinder:
container_name: arax_pathfinder
build:
context: .
dockerfile: workers/arax_pathfinder/Dockerfile
restart: unless-stopped
depends_on:
shepherd_db:
condition: service_healthy
shepherd_broker:
condition: service_healthy
volumes:
- ./logs:/app/logs
- ./.env:/app/.env

arax_rank:
container_name: arax_rank
Expand Down
16 changes: 16 additions & 0 deletions shepherd_utils/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,23 @@ class Settings(BaseSettings):
sync_kg_retrieval_url: str = "http://host.docker.internal:8080/query"
kg_rehydrate_url: str = "http://host.docker.internal:8080/rehydrate"
default_data_tier: int = 0


# ARAX configs
arax_url: str = "https://arax.ncats.io/shepherd/api/arax/v1.4/query"
plover_url: str = "https://kg2cploverdb.ci.transltr.io"
curie_ngd_addr: str = (
"mysql:arax-databases-mysql.rtx.ai:public_ro:curie_ngd_v1_0_kg2_10_2"
)
node_degree_addr: str = (
"mysql:arax-databases-mysql.rtx.ai:public_ro:kg2c_v1_0_kg2_10_2"
)
arax_biolink_version: str = "4.2.5"
arax_blocked_list_url: str = (
"https://raw.githubusercontent.com/RTXteam/RTX/master/"
"code/ARAX/KnowledgeSources/general_concepts.json"
)
# End of ARAX configs

pathfinder_redis_host: str = "host.docker.internal"
pathfinder_redis_port: int = 6383
Expand Down
66 changes: 41 additions & 25 deletions workers/arax/worker.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import json
import logging
import uuid

import httpx
from inject_shepherd_arax_provenance import add_shepherd_arax_to_edge_sources

Expand All @@ -21,33 +20,50 @@
tracer = setup_tracer(STREAM)


async def arax(task, logger: logging.Logger):
def is_pathfinder_query(message):
try:
query_id = task[1]["query_id"]
logger.info(f"Getting message from db for query id {query_id}")
message = await get_message(query_id, logger)
message["submitter"] = "Shepherd"
logger.info(f"Get the message from db {message}")

headers = {"Content-Type": "application/json"}
async with httpx.AsyncClient(timeout=270) as client:
response = await client.post(
settings.arax_url, json=message, headers=headers
)

logger.info(f"Status Code from ARAX response: {response.status_code}")
result = response.json()
result = add_shepherd_arax_to_edge_sources(result)

except Exception as e:
logger.error(f"Error occurred in ARAX entry module: {e}")
result = {"status": "error", "error": str(e)}

response_id = task[1]["response_id"]
# this can still fail if the input looks like e.g.:
# "query_graph": None
qedges = message.get("message", {}).get("query_graph", {}).get("edges", {})
except:
qedges = {}
try:
# this can still fail if the input looks like e.g.:
# "query_graph": None
qpaths = message.get("message", {}).get("query_graph", {}).get("paths", {})
except:
qpaths = {}
if len(qpaths) > 1:
raise Exception("Only a single path is supported", 400)
if (len(qpaths) > 0) and (len(qedges) > 0):
raise Exception("Mixed mode pathfinder queries are not supported", 400)
return len(qpaths) == 1

await save_message(response_id, result, logger)

task[1]["workflow"] = json.dumps([{"id": "arax"}])
async def arax(task, logger: logging.Logger):
query_id = task[1]["query_id"]
logger.info(f"Getting message from db for query id {query_id}")
message = await get_message(query_id, logger)
if is_pathfinder_query(message):
task[1]["workflow"] = json.dumps([{"id": "arax.pathfinder"}])
else:
try:
message["submitter"] = "Shepherd"
logger.info(f"Get the message from db {message}")
headers = {"Content-Type": "application/json"}
async with httpx.AsyncClient(timeout=270) as client:
response = await client.post(
settings.arax_url, json=message, headers=headers
)
logger.info(f"Status Code from ARAX response: {response.status_code}")
result = response.json()
result = add_shepherd_arax_to_edge_sources(result)
except Exception as e:
logger.error(f"Error occurred calling ARAX service: {e}")
result = {"status": "error", "error": str(e)}
response_id = task[1]["response_id"]
await save_message(response_id, result, logger)
task[1]["workflow"] = json.dumps([{"id": "arax"}])


async def process_task(task, parent_ctx, logger: logging.Logger, limiter):
Expand Down
34 changes: 34 additions & 0 deletions workers/arax_pathfinder/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# Use RENCI python base image
FROM ghcr.io/translatorsri/renci-python-image:3.11.5

# Add image info
LABEL org.opencontainers.image.source https://github.com/BioPack-team/shepherd

ENV PYTHONHASHSEED=0

# set up requirements
WORKDIR /app

# make sure all is writeable for the nru USER later on
RUN chmod -R 777 .

# Install requirements
COPY ./shepherd_utils ./shepherd_utils
COPY ./pyproject.toml .
RUN pip install .

COPY ./workers/arax_pathfinder/requirements.txt .
RUN pip install -r requirements.txt

# switch to the non-root user (nru). defined in the base image
USER nru

# Copy in files
COPY ./workers/arax_pathfinder ./

# Set up base for command and any variables
# that shouldn't be modified
# ENTRYPOINT ["uvicorn", "shepherd_server.server:APP"]

# Variables that can be overriden
CMD ["python", "worker.py"]
Empty file.
2 changes: 2 additions & 0 deletions workers/arax_pathfinder/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
catrax-pathfinder==1.2.2
biolink-helper-pkg==1.0.0
Loading
Loading