Generated Python code from caraml-dev/universal-prediction-interface
Project description
CaraML UPI Protos
Generated Python code from caraml-dev/universal-prediction-interface. The intent of this package is to ease creation of Python server / client compatible with CaraML dataplane.
Example Usage
Creating Server
- Create
server.py
containing following dummy server code
from concurrent import futures
import grpc
import random
from caraml.upi.v1 import upi_pb2_grpc, upi_pb2, value_pb2
import caraml.upi.v1.upi_pb2 as upiv1
class Model(upi_pb2_grpc.UniversalPredictionServiceServicer):
def PredictValues(self, request: upi_pb2.PredictValuesRequest, context: grpc.ServicerContext) -> upi_pb2.PredictValuesResponse:
print(f"request: {request}")
# Return random integer for each rows
result_rows = []
for row in request.prediction_rows:
result_row = upi_pb2.PredictionResultRow(row_id=row.row_id, values=[value_pb2.NamedValue(name="result", type = value_pb2.NamedValue.INTEGER_VALUE_FIELD_NUMBER, integer_value=random.randint(0, 100))])
result_rows.append(result_row)
return upi_pb2.PredictValuesResponse(
prediction_result_rows=result_rows,
)
if __name__ == "__main__":
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
upi_pb2_grpc.add_UniversalPredictionServiceServicer_to_server(Model(), server)
port = 9000
print(f"Running upi server at port {port}")
server.add_insecure_port(f"[::]:{port}")
server.start()
server.wait_for_termination()
- Start the server
python server.py
> Running upi server at port 9000
Creating Client
- Create
client.py
containing following client code
from caraml.upi.v1 import upi_pb2_grpc, upi_pb2
from caraml.upi.v1 import value_pb2
import grpc
import time
def run(server_port: 9000):
with grpc.insecure_channel(f"localhost:{server_port}") as channel:
stub = upi_pb2_grpc.UniversalPredictionServiceStub(channel)
while True:
response = stub.PredictValues(upi_pb2.PredictValuesRequest(
prediction_rows=[
upi_pb2.PredictionRow(row_id="1", model_inputs=[
value_pb2.NamedValue(name="feature1", type=value_pb2.NamedValue.DOUBLE_VALUE_FIELD_NUMBER, double_value=1.1),
value_pb2.NamedValue(name="feature2", type=value_pb2.NamedValue.DOUBLE_VALUE_FIELD_NUMBER, double_value=2.2),
value_pb2.NamedValue(name="feature3", type=value_pb2.NamedValue.DOUBLE_VALUE_FIELD_NUMBER, double_value=3.3),
value_pb2.NamedValue(name="feature4", type=value_pb2.NamedValue.DOUBLE_VALUE_FIELD_NUMBER, double_value=4.4),
]),
upi_pb2.PredictionRow(row_id="2", model_inputs=[
value_pb2.NamedValue(name="feature1", type=value_pb2.NamedValue.DOUBLE_VALUE_FIELD_NUMBER, double_value=1.1),
value_pb2.NamedValue(name="feature2", type=value_pb2.NamedValue.DOUBLE_VALUE_FIELD_NUMBER, double_value=2.2),
value_pb2.NamedValue(name="feature3", type=value_pb2.NamedValue.DOUBLE_VALUE_FIELD_NUMBER, double_value=3.3),
value_pb2.NamedValue(name="feature4", type=value_pb2.NamedValue.DOUBLE_VALUE_FIELD_NUMBER, double_value=4.4),
]),
]
))
print(response)
time.sleep(1)
if __name__ == "__main__":
run(9000)
- Start client in separate shell as the server
python client.py
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
caraml-upi-protos-1.0.0.tar.gz
(17.8 kB
view details)
Built Distribution
File details
Details for the file caraml-upi-protos-1.0.0.tar.gz
.
File metadata
- Download URL: caraml-upi-protos-1.0.0.tar.gz
- Upload date:
- Size: 17.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.7.17
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ae9a742c872eedd51caedc5579e2722968e980e0b23ebb66e594cd7ad3473dc1 |
|
MD5 | b657cba7366b3a3435e9d6e433830855 |
|
BLAKE2b-256 | 143d84dd2069b6d86464b90a1e55b7118fc3ff142e7abb483abcfdd8e1c885cc |
File details
Details for the file caraml_upi_protos-1.0.0-py3-none-any.whl
.
File metadata
- Download URL: caraml_upi_protos-1.0.0-py3-none-any.whl
- Upload date:
- Size: 37.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.7.17
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 540489791683aa4db174f4eb298f02e17a2b2250fb930077f39b6dc78df8a677 |
|
MD5 | d7bf05d2741d3e21fd7f40d93decc79d |
|
BLAKE2b-256 | 3650dc0a942d48effa2de08c28e82e3426ff5b9141527620f0ecc8197f625349 |