Skip to content

Commit d49cf47

Browse files
Copilotwemoveon2
andauthored
Load model proto with secrets once at server initialization (#837)
* Initial plan * Load model proto with secrets and inject into servicer requests Co-authored-by: wemoveon2 <86081107+wemoveon2@users.noreply.github.com> * Fix: Use append() for additional_fields repeated field in GetModelRequest Co-authored-by: wemoveon2 <86081107+wemoveon2@users.noreply.github.com> * Remove test file per reviewer feedback Co-authored-by: wemoveon2 <86081107+wemoveon2@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: wemoveon2 <86081107+wemoveon2@users.noreply.github.com>
1 parent 872d39f commit d49cf47

3 files changed

Lines changed: 20 additions & 3 deletions

File tree

clarifai/runners/models/model_builder.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,8 @@ def get_model_proto(self) -> resources_pb2.Model:
225225
user_app_id=self.client.user_app_id,
226226
model_id=self.model_id,
227227
)
228+
# Add secrets to additional_fields to get request-type secrets
229+
request.additional_fields.append("secrets")
228230
if self.model_version_id is not None:
229231
request.version_id = self.model_version_id
230232
resp: service_pb2.SingleModelResponse = self.client.STUB.GetModel(request)

clarifai/runners/models/model_servicer.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,15 @@ class ModelServicer(service_pb2_grpc.V2Servicer):
1818
This is the servicer that will handle the gRPC requests from either the dev server or runner loop.
1919
"""
2020

21-
def __init__(self, model):
21+
def __init__(self, model, model_proto=None):
2222
"""
2323
Args:
2424
model: The class that will handle the model logic. Must implement predict(),
2525
generate(), stream().
26+
model_proto: The model proto containing model configuration including secrets.
2627
"""
2728
self.model = model
29+
self.model_proto = model_proto
2830

2931
# Try to create auth helper from environment variables if available
3032
self._auth_helper = None
@@ -55,6 +57,10 @@ def PostModelOutputs(
5557
returns an output.
5658
"""
5759

60+
# Inject model proto if available and not already in request
61+
if self.model_proto is not None and not request.HasField("model"):
62+
request.model.CopyFrom(self.model_proto)
63+
5864
# Download any urls that are not already bytes.
5965
ensure_urls_downloaded(request, auth_helper=self._auth_helper)
6066
inject_secrets(request)
@@ -80,6 +86,10 @@ def GenerateModelOutputs(
8086
This is the method that will be called when the servicer is run. It takes in an input and
8187
returns an output.
8288
"""
89+
# Inject model proto if available and not already in request
90+
if self.model_proto is not None and not request.HasField("model"):
91+
request.model.CopyFrom(self.model_proto)
92+
8393
# Download any urls that are not already bytes.
8494
ensure_urls_downloaded(request, auth_helper=self._auth_helper)
8595
inject_secrets(request)
@@ -108,8 +118,11 @@ def StreamModelOutputs(
108118
# Duplicate the iterator
109119
request, request_copy = tee(request)
110120

111-
# Download any urls that are not already bytes.
121+
# Download any urls that are not already bytes and inject model proto
112122
for req in request:
123+
# Inject model proto if available and not already in request
124+
if self.model_proto is not None and not req.HasField("model"):
125+
req.model.CopyFrom(self.model_proto)
113126
ensure_urls_downloaded(req, auth_helper=self._auth_helper)
114127
inject_secrets(req)
115128

clarifai/runners/server.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,9 @@ def serve(
232232

233233
def start_servicer(self, port, pool_size, max_queue_size, max_msg_length, enable_tls):
234234
# initialize the servicer with the runner so that it gets the predict(), generate(), stream() classes.
235-
self._servicer = ModelServicer(self._current_model)
235+
self._servicer = ModelServicer(
236+
self._current_model, model_proto=self._builder.get_model_proto()
237+
)
236238

237239
server = GRPCServer(
238240
futures.ThreadPoolExecutor(

0 commit comments

Comments
 (0)