OmopGraph Adapter
OmopGraphAdapter wraps omop-graph as the backend runtime for graph-backed concept operations. It owns the dependency-shaped interface to omop-graph; caller-facing graph workflows live one layer up in GraphService and ConceptGroundingService.
What it owns
The adapter is responsible for:
- building and probing the
omop-graphruntime lazily - normalizing raw concept and graph results into plain Python dicts and tuples
- translating backend failures into
GroundworkersError - exposing one-operation primitives that services can compose into higher-level workflows
It does not own caller-facing policy such as hierarchy-walk packaging, grounding tier selection, or REST/MCP response shaping.
Primitive surface
| Method | Used by service(s) |
|---|---|
get_concept(concept_id) |
GraphService |
get_concept_by_code(vocab, code) |
GraphService |
concept_views(concept_ids) |
GraphService |
parents(concept_id) / children(concept_id) |
GraphService |
edges(concept_id, ...) |
GraphService |
shortest_paths(source_id, target_id, ...) |
GraphService |
traverse_neighborhood(concept_id, ...) |
GraphService |
run_ground_tier(resolvers, query, ...) |
GraphService grounding orchestration |
get_vocabulary_catalogue() |
system_vocabulary_catalogue |
canonicalize_domain(domain) |
ConceptGroundingService |
embedding_resolver_active |
ConceptGroundingService |
is_available() |
system_status |
probe() |
system_status |
VocabService uses CDMAdapter for lexical search operations and is separate from the omop-graph-backed graph service surface.
Concept response shape
All methods that return concept data use a consistent dict shape:
{
"concept_id": 4119419,
"concept_name": "Malignant neoplasm of bronchus and lung",
"concept_code": "363358000",
"vocabulary_id": "SNOMED",
"domain_id": "Condition",
"concept_class_id": "Clinical Finding",
"standard_concept": true,
"valid_start_date": "2002-01-31",
"valid_end_date": "2099-12-31",
"invalid_reason": null
}
standard_concept is a boolean (true/false), not the raw "S" / null string stored in the OMOP CDM.
Full-text search
ConceptGroundingService runs a tiered resolver pipeline through this adapter. The FullText tier uses PostgreSQL tsvector sidecar columns (concept_name_tsvector, concept_synonym_name_tsvector) when they are present on the vocabulary tables. Detection is automatic. When the sidecar columns are absent, the FullText tier returns no results and the pipeline falls through to later tiers.
concept_search_fulltext (via VocabService) uses the same sidecar columns and exposes tsvector_available so callers can detect degraded mode.
Error handling
Adapter methods raise GroundworkersError on failure. Services propagate those errors unchanged; tools and REST routes translate them into transport-level responses.
The underlying KnowledgeGraph is built lazily on first use rather than at server startup. If the database or graph layer is unavailable, callers receive a clear GroundworkersError instead of an opaque lower-level exception.