gRPC Server¶
Director-AI ships two gRPC surfaces:
DirectorService, the legacy Python transport implemented bydirector_ai.grpc_serverfromproto/director.proto.director.v1.CoherenceScoring, the gateway-facing scoring service implemented bydirector_ai.grpc_scoringfromschemas/proto/director/v1/director.proto.
Install the optional transport dependencies before using either service:
Legacy DirectorService¶
create_grpc_server() serves DirectorService on port 50051 by default.
Use it when an existing Python client already depends on the legacy proto.
DirectorService RPCs¶
| Method | Request | Response | Description |
|---|---|---|---|
Review |
ReviewRequest |
ReviewResponse |
Score a single prompt/response pair |
Process |
ProcessRequest |
ProcessResponse |
Generate and score one guarded response |
ReviewBatch |
BatchReviewRequest |
BatchReviewResponse |
Score a bounded batch of prompt/response pairs |
StreamTokens |
StreamRequest |
stream TokenEvent |
Stream generated tokens with coherence metadata |
service DirectorService {
rpc Review (ReviewRequest) returns (ReviewResponse);
rpc Process (ProcessRequest) returns (ProcessResponse);
rpc ReviewBatch (BatchReviewRequest) returns (BatchReviewResponse);
rpc StreamTokens (StreamRequest) returns (stream TokenEvent);
}
Legacy Python Client¶
import grpc
from director_ai import director_pb2, director_pb2_grpc
channel = grpc.insecure_channel("localhost:50051")
stub = director_pb2_grpc.DirectorServiceStub(channel)
response = stub.Review(
director_pb2.ReviewRequest(
prompt="What is the capital of France?",
response="Paris.",
)
)
print(f"Approved: {response.approved}, coherence: {response.coherence:.3f}")
CoherenceScoring¶
director_ai.grpc_scoring.serve() serves director.v1.CoherenceScoring on
port 50052 by default. This is the low-latency scoring contract used by the
gateway-facing protocol and preserves tenant/request metadata on the wire.
from director_ai.grpc_scoring import serve
server, port = serve(listen_addr="[::]:50052")
server.wait_for_termination()
CoherenceScoring RPCs¶
| Method | Request | Response | Description |
|---|---|---|---|
ScoreClaim |
ScoreClaimRequest |
ScoreClaimResponse |
Score one claim against optional supporting documents |
ScoreStream |
stream ScoreTokenRequest |
stream ScoreTokenResponse |
Score accumulated candidate output per token or chunk |
service CoherenceScoring {
rpc ScoreClaim(ScoreClaimRequest) returns (ScoreClaimResponse);
rpc ScoreStream(stream ScoreTokenRequest)
returns (stream ScoreTokenResponse);
}
create_grpc_server()¶
| Parameter | Type | Default | Description |
|---|---|---|---|
config |
DirectorConfig \| None |
None |
Configuration |
max_workers |
int |
4 |
Thread pool size |
port |
int |
50051 |
Listen port |
tls_cert_path |
str \| None |
None |
TLS certificate path |
tls_key_path |
str \| None |
None |
TLS key path |
Full API¶
director_ai.grpc_server.create_grpc_server
¶
create_grpc_server(config: DirectorConfig | None = None, max_workers: int = 4, port: int = 50051, tls_cert_path: str | None = None, tls_key_path: str | None = None) -> Any
Create and return a gRPC server (not yet started).
Raises ImportError with install instructions if grpcio is missing.
When tls_cert_path and tls_key_path are provided, the server binds a secure port with TLS. Otherwise it falls back to an insecure port.
director_ai.grpc_scoring.serve
¶
serve(*, listen_addr: str = '[::]:50052', max_workers: int = 8, service: CoherenceScoringService | None = None, stop_event: Event | None = None) -> tuple[grpc.Server, int]
Start a gRPC server on listen_addr and return (server, port).
The default port 50052 leaves 50051 free for the legacy
:mod:grpc_server (DirectorService). Tests typically pass
listen_addr="[::]:0" to get an ephemeral port and rely on the
returned port to dial the server.