A Python gRPC server that serves SentenceTransformer models for generating embeddings. It provides:
- Inference APIs for sentence, token, and offset-span embeddings
- Admin APIs to load/unload models at runtime
- Configurable via
config.properties
- gRPC only (no HTTP). Protobufs under
protos/transformer.protowith Python stubs generated at build time - Core components:
graphwise_transformer/model.py: wraps SentenceTransformer and implements three embedding modes (SENTENCE, TOKEN, OFFSET)graphwise_transformer/registry.py: thread-safe registry for loading/unloading modelsgraphwise_transformer/server.py: gRPC services using generated stubsgraphwise_transformer/config.py: simple properties loader (GRAPHWISE_CONFIGenv var overrides path)
- Build-time proto generation wired in
setup.py(runs automatically onbuild)
config.properties (defaults provided):
port=5050
log_level=INFO
default_model=sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2
max_workers=8
Override with env var GRAPHWISE_CONFIG=/path/to/config.properties.
- Package:
graphwise_transformer - InferenceService
EmbedSentence(SentenceRequest) -> SentenceResponseEmbedTokens(TokenRequest) -> TokenResponseEmbedWithOffsets(OffsetRequest) -> OffsetResponse
- AdminService
LoadModel(LoadModelRequest) -> LoadModelResponseUnloadModel(UnloadModelRequest) -> UnloadModelResponseListModels(ListModelsRequest) -> ListModelsResponse
Key messages (see proto for full details):
SentenceRequest { string model_name; repeated string texts; }TokenRequest { string model_name; repeated string texts; }TextWithOffsets { string text; int32 start; int32 end; }OffsetRequest { string model_name; repeated TextWithOffsets inputs; }Embedding { string string; repeated float embedding; }TokenEmbeddings { repeated Embedding tokens; }
- Python 3.10+
pip
pip install -r requirements.txt
python setup.py build
This will generate Python gRPC stubs into graphwise_transformer/proto.
python -m graphwise_transformer.server
The server listens on the configured port.
pytest -q
An image is provided. It uses a slim Python base, installs dependencies, generates gRPC stubs at build time, and runs the server as a non-root user.
docker build -t graphwise-transformer:$(git rev-parse --short HEAD) .
docker run --rm -p 5050:5050 \
-e GRAPHWISE_CONFIG=/app/config.properties \
graphwise-transformer:$(git rev-parse --short HEAD)
Mount or bake your own config.properties if you need different settings; the default inside the image is suitable for local runs.
- Project version is defined in
pyproject.tomland exposed asgraphwise_transformer.__version__.
- Tomas Kovachev - tomas.kovachev@graphwise.ai
- GPU: If CUDA is available, unloading a model clears the CUDA cache to release VRAM.
- Offsets: Offset requests expect one
(start,end)span per input text.