Definition and tools for Open Imaging Finding Models
Project description
findingmodel
Core Python library for Open Imaging Finding Models - structured data models for describing medical imaging findings in radiology reports.
Installation
pip install findingmodel
Features
- Finding Model Management: Create and manage structured medical finding models with attributes
- Finding Model Index: Fast lookup and search across finding model definitions with DuckDB
- MCP Server: Model Context Protocol server for AI agent integration
- Medical Ontology Support: Index codes from RadLex, SNOMED-CT, and other vocabularies
Configuration
Create a .env file in your project root:
# Required for embedding-based search
OPENAI_API_KEY=your_key_here
# Optional: Custom database path
DUCKDB_INDEX_PATH=/mnt/data/finding_models.duckdb
The finding model database is automatically downloaded on first use.
CLI (findingmodel)
# View configuration
findingmodel config
# Show index statistics
findingmodel index stats
# Convert finding model to Markdown
findingmodel fm-to-markdown model.json
Models
FindingModelBase
Basic finding model structure with name, description, and attributes.
from findingmodel import FindingModelBase
model = FindingModelBase(
name="pneumothorax",
description="Presence of air in the pleural space",
attributes=[...]
)
# Export to Markdown
print(model.as_markdown())
FindingModelFull
Extended model with OIFM IDs, index codes, and contributor information.
from findingmodel import FindingModelFull
# Load from JSON
model = FindingModelFull.model_validate_json(json_content)
print(f"Model ID: {model.oifm_id}")
for attr in model.attributes:
print(f" {attr.name}: {attr.oifma_id}")
FindingInfo
Metadata about a finding including description, synonyms, and optional citations.
from findingmodel import FindingInfo
info = FindingInfo(
name="pneumothorax",
synonyms=["PTX", "collapsed lung"],
description="Presence of air in the pleural space"
)
Index API
The Index class provides async access to the finding model database.
import asyncio
from findingmodel import Index
async def main():
async with Index() as index:
# Count indexed models
count = await index.count()
print(f"Total models: {count}")
# Lookup by name or ID
model = await index.get("pneumothorax")
if model:
print(f"Found: {model.name} ({model.oifm_id})")
# Search for models
results = await index.search("lung nodule", limit=5)
for result in results:
print(f"- {result.name}: {result.description}")
# List all with pagination
models, total = await index.all(limit=20, offset=0)
asyncio.run(main())
MCP Server
The package includes an MCP server for AI agent integration.
Tools Provided
- search_finding_models: Hybrid search (FTS + semantic) for finding models
- get_finding_model: Retrieve specific models by ID, name, or synonym
- list_finding_model_tags: List all available tags
- count_finding_models: Get index statistics
Running the Server
# Run directly
python -m findingmodel.mcp_server
# Or use the CLI entry point
findingmodel-mcp
Claude Desktop Configuration
{
"mcpServers": {
"finding-model-search": {
"command": "python",
"args": ["-m", "findingmodel.mcp_server"],
"env": {
"OPENAI_API_KEY": "your-key-here"
}
}
}
}
See MCP Server Guide for complete documentation.
Related Packages
- findingmodel-ai: AI-powered tools for model authoring
- anatomic-locations: Anatomic location ontology queries
Documentation
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file findingmodel-1.0.0.tar.gz.
File metadata
- Download URL: findingmodel-1.0.0.tar.gz
- Upload date:
- Size: 27.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c64077f6156636b0f0245fd4ed1e55bef411910bd95aa917d504a60ff8c1cd4d
|
|
| MD5 |
a8a21410e63032a675044aa5064a5b57
|
|
| BLAKE2b-256 |
11171f82b08f40381fd6a71a064c958031388ff90259b8855db154765a7e6736
|
File details
Details for the file findingmodel-1.0.0-py3-none-any.whl.
File metadata
- Download URL: findingmodel-1.0.0-py3-none-any.whl
- Upload date:
- Size: 35.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9b66b10a039bf32bf440f798a9dfe656711c17b201f99aea5081d8d397c74dc4
|
|
| MD5 |
cf001f6c4820fb52204644c1e64e3ab4
|
|
| BLAKE2b-256 |
3c7330883f8b433bde7c50dea6b33a11426cbc703d507e9a91c900a05a95f9b6
|