Skip to content

Commit

Permalink
feat(file): support custom mime type for file proto (#3095)
Browse files Browse the repository at this point in the history
Bumping releases version to v1.
  • Loading branch information
aarnphm authored Nov 16, 2022
1 parent 2c7b197 commit f782cb6
Show file tree
Hide file tree
Showing 74 changed files with 2,464 additions and 284 deletions.
14 changes: 12 additions & 2 deletions BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package(default_visibility = ["//visibility:public"])

load("@com_github_bazelbuild_buildtools//buildifier:def.bzl", "buildifier")
load("@rules_proto//proto:defs.bzl", "proto_library")

package(default_visibility = ["//visibility:public"])

filegroup(
name = "pyproject",
srcs = ["pyproject.toml"],
Expand All @@ -21,3 +21,13 @@ proto_library(
"@com_google_protobuf//:wrappers_proto",
],
)

proto_library(
name = "service_v1_proto",
srcs = ["src/bentoml/grpc/v1/service.proto"],
visibility = ["//grpc-client:__subpackages__"],
deps = [
"@com_google_protobuf//:struct_proto",
"@com_google_protobuf//:wrappers_proto",
],
)
70 changes: 56 additions & 14 deletions docs/source/guides/grpc.rst
Original file line number Diff line number Diff line change
Expand Up @@ -156,9 +156,9 @@ gRPC server:

.. code-block:: go
require github.com/bentoml/bentoml/grpc/v1alpha1 v0.0.0-unpublished
require github.com/bentoml/bentoml/grpc/v1 v0.0.0-unpublished
replace github.com/bentoml/bentoml/grpc/v1alpha1 v0.0.0-unpublished => ./github.com/bentoml/bentoml/grpc/v1alpha1
replace github.com/bentoml/bentoml/grpc/v1 v0.0.0-unpublished => ./github.com/bentoml/bentoml/grpc/v1
By using `replace directive <https://go.dev/ref/mod#go-mod-file-replace>`_, we
ensure that Go will know where our generated stubs to be imported from. (since we don't host the generate gRPC stubs on `pkg.go.dev` 😄)
Expand All @@ -172,14 +172,14 @@ gRPC server:
» protoc -I. -I thirdparty/protobuf/src \
--go_out=. --go_opt=paths=import \
--go-grpc_out=. --go-grpc_opt=paths=import \
bentoml/grpc/v1alpha1/service.proto
bentoml/grpc/v1/service.proto
Then run the following to make sure the generated stubs are importable:

.. code-block:: bash
» pushd github.com/bentoml/bentoml/grpc/v1alpha1
» go mod init v1alpha1 && go mod tidy
» pushd github.com/bentoml/bentoml/grpc/v1
» go mod init v1 && go mod tidy
» popd
Create a ``client.go`` file with the following content:
Expand Down Expand Up @@ -233,7 +233,7 @@ gRPC server:
» protoc -I . -I ./thirdparty/protobuf/src \
--cpp_out=. --grpc_out=. \
--plugin=protoc-gen-grpc=$(which grpc_cpp_plugin) \
bentoml/grpc/v1alpha1/service.proto
bentoml/grpc/v1/service.proto
Create a ``client.cpp`` file with the following content:

Expand Down Expand Up @@ -331,7 +331,7 @@ gRPC server:
-I ./thirdparty/protobuf/src \
--java_out=./src/main/java \
--grpc-java_out=./src/main/java \
bentoml/grpc/v1alpha1/service.proto
bentoml/grpc/v1/service.proto
.. tab-item:: Kotlin
:sync: kotlin
Expand Down Expand Up @@ -414,7 +414,7 @@ gRPC server:
--kotlin_out ./kotlin/src/main/kotlin/ \
--grpc-kotlin_out ./kotlin/src/main/kotlin \
--plugin=protoc-gen-grpc-kotlin=$(which protoc-gen-grpc-kotlin) \
bentoml/grpc/v1alpha1/service.proto
bentoml/grpc/v1/service.proto
.. tab-item:: Node.js
:sync: nodejs
Expand Down Expand Up @@ -459,7 +459,7 @@ gRPC server:
-I . -I ./thirdparty/protobuf/src \
--js_out=import_style=commonjs,binary:. \
--grpc_out=grpc_js:js \
bentoml/grpc/v1alpha1/service.proto
bentoml/grpc/v1/service.proto
Proceed to create a ``client.js`` file with the following content:

Expand Down Expand Up @@ -501,7 +501,7 @@ gRPC server:
--swift_out=Sources --swift_opt=Visibility=Public \
--grpc-swift_out=Sources --grpc-swift_opt=Visibility=Public \
--plugin=protoc-gen-grpc-swift=$(which protoc-gen-grpc-swift) \
bentoml/grpc/v1alpha1/service.proto
bentoml/grpc/v1/service.proto
Proceed to create a ``Sources/BentoServiceClient/main.swift`` file with the following content:

Expand Down Expand Up @@ -549,7 +549,7 @@ gRPC server:
--php_out=. \
--grpc_out=. \
--plugin=protoc-gen-grpc=$(which grpc_php_plugin) \
bentoml/grpc/v1alpha1/service.proto
bentoml/grpc/v1/service.proto
Proceed to create a ``BentoServiceClient.php`` file with the following content:

Expand Down Expand Up @@ -773,6 +773,11 @@ Let's take a quick look at `protobuf <https://developers.google.com/protocol-buf

.. tab-set::

.. tab-item:: v1

.. literalinclude:: ../../../src/bentoml/grpc/v1/service.proto
:language: protobuf

.. tab-item:: v1alpha1

.. literalinclude:: ../../../src/bentoml/grpc/v1alpha1/service.proto
Expand Down Expand Up @@ -1102,10 +1107,47 @@ It accepts the following fields:

A `bytes` field that represents the content of the file.

.. TODO::
* `kind`

An optional `string` field that represents the file type. If specified, it will raise an error if
``mime_type`` specified in :ref:`bentoml.io.File <reference/api_io_descriptors:Files>` is not matched.

.. grid:: 2

.. grid-item-card:: ``Python API``

.. code-block:: python
Image(mime_type="application/pdf")
.. grid-item-card:: ``pb.File``

.. code-block:: none
- Document ``kind`` once enum was dropped.
- Demonstrate python API to protobuf representation
file {
kind: "application/pdf"
content: <bytes>
}
:ref:`bentoml.io.Image <reference/api_io_descriptors:Images>` will also be using ``pb.File``.

.. grid:: 2

.. grid-item-card:: ``Python API``

.. code-block:: python
File(mime_type="image/png")
.. grid-item-card:: ``pb.File``

.. code-block:: none
file {
kind: "image/png"
content: <bytes>
}
Complex payload via ``Multipart``
Expand Down
2 changes: 1 addition & 1 deletion docs/source/guides/metrics.rst
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ invocation for ``analysis`` by polarity scores.

.. code-block:: bash
» grpcurl -d @ -plaintext 0.0.0.0:3000 bentoml.grpc.v1alpha1.BentoService/Call <<EOT
» grpcurl -d @ -plaintext 0.0.0.0:3000 bentoml.grpc.v1.BentoService/Call <<EOT
{
"apiName": "predict",
"serializedBytes": "..."
Expand Down
8 changes: 4 additions & 4 deletions docs/source/guides/snippets/grpc/cpp/BUILD.snippet.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,19 @@ load("@rules_proto//proto:defs.bzl", "proto_library")
load("@rules_proto_grpc//cpp:defs.bzl", "cc_grpc_library", "cc_proto_library")

proto_library(
name = "service_v1alpha1_proto",
srcs = ["bentoml/grpc/v1alpha1/service.proto"],
name = "service_v1_proto",
srcs = ["bentoml/grpc/v1/service.proto"],
deps = ["@com_google_protobuf//:struct_proto", "@com_google_protobuf//:wrappers_proto"],
)

cc_proto_library(
name = "service_cc",
protos = [":service_v1alpha1_proto"],
protos = [":service_v1_proto"],
)

cc_grpc_library(
name = "service_cc_grpc",
protos = [":service_v1alpha1_proto"],
protos = [":service_v1_proto"],
deps = [":service_cc"],
)

Expand Down
8 changes: 4 additions & 4 deletions docs/source/guides/snippets/grpc/cpp/request.cc
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#include "bentoml/grpc/v1alpha1/service.pb.h"
#include "bentoml/grpc/v1/service.pb.h"

using bentoml::grpc::v1alpha1::BentoService;
using bentoml::grpc::v1alpha1::NDArray;
using bentoml::grpc::v1alpha1::Request;
using bentoml::grpc::v1::BentoService;
using bentoml::grpc::v1::NDArray;
using bentoml::grpc::v1::Request;

std::vector<float> data = {3.5, 2.4, 7.8, 5.1};
std::vector<int> shape = {1, 4};
Expand Down
10 changes: 5 additions & 5 deletions docs/source/guides/snippets/grpc/go/BUILD.snippet.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,21 @@ load("@rules_proto_grpc//go:defs.bzl", "go_grpc_library")
load("@io_bazel_rules_go//go:def.bzl", "go_binary")

proto_library(
name = "service_v1alpha1_proto",
srcs = ["bentoml/grpc/v1alpha1/service.proto"],
name = "service_v1_proto",
srcs = ["bentoml/grpc/v1/service.proto"],
deps = ["@com_google_protobuf//:struct_proto", "@com_google_protobuf//:wrappers_proto"],
)

go_grpc_library(
name = "service_go",
importpath = "github.com/bentoml/bentoml/grpc/v1alpha1",
protos = [":service_v1alpha1_proto"],
importpath = "github.com/bentoml/bentoml/grpc/v1",
protos = [":service_v1_proto"],
)

go_binary(
name = "client_go",
srcs = ["client.go"],
importpath = "github.com/bentoml/bentoml/grpc/v1alpha1",
importpath = "github.com/bentoml/bentoml/grpc/v1",
deps = [
":service_go",
"@com_github_golang_protobuf//proto:go_default_library",
Expand Down
2 changes: 1 addition & 1 deletion docs/source/guides/snippets/grpc/go/request.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package main

import (
pb "github.com/bentoml/bentoml/grpc/v1alpha1"
pb "github.com/bentoml/bentoml/grpc/v1"
)

var req = &pb.Request{
Expand Down
4 changes: 2 additions & 2 deletions docs/source/guides/snippets/grpc/grpc_tools.rst
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
» docker run -i --rm \
fullstorydev/grpcurl -d @ -plaintext host.docker.internal:3000 \
bentoml.grpc.v1alpha1.BentoService/Call <<EOT
bentoml.grpc.v1.BentoService/Call <<EOT
{
"apiName": "classify",
"ndarray": {
Expand All @@ -33,7 +33,7 @@
» docker run -i --rm \
--network=host \
fullstorydev/grpcurl -d @ -plaintext 0.0.0.0:3000 \
bentoml.grpc.v1alpha1.BentoService/Call <<EOT
bentoml.grpc.v1.BentoService/Call <<EOT
{
"apiName": "classify",
"ndarray": {
Expand Down
8 changes: 4 additions & 4 deletions docs/source/guides/snippets/grpc/java/BUILD.snippet.bzl
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
load("@rules_proto//proto:defs.bzl", "proto_library")

proto_library(
name = "service_v1alpha1_proto",
srcs = ["bentoml/grpc/v1alpha1/service.proto"],
name = "service_v1_proto",
srcs = ["bentoml/grpc/v1/service.proto"],
deps = [
"@com_google_protobuf//:struct_proto",
"@com_google_protobuf//:wrappers_proto",
Expand All @@ -13,12 +13,12 @@ load("@io_grpc_grpc_java//:java_grpc_library.bzl", "java_grpc_library")

java_proto_library(
name = "service_java",
deps = [":service_v1alpha1_proto"],
deps = [":service_v1_proto"],
)

java_grpc_library(
name = "service_java_grpc",
srcs = [":service_v1alpha1_proto"],
srcs = [":service_v1_proto"],
deps = [":service_java"],
)

Expand Down
6 changes: 3 additions & 3 deletions docs/source/guides/snippets/grpc/kotlin/BUILD.snippet.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,17 @@ load("@com_github_grpc_grpc_kotlin//:kt_jvm_grpc.bzl", "kt_jvm_grpc_library", "k

java_proto_library(
name = "service_java",
deps = ["//:service_v1alpha1_proto"],
deps = ["//:service_v1_proto"],
)

kt_jvm_proto_library(
name = "service_kt",
deps = ["//:service_v1alpha1_proto"],
deps = ["//:service_v1_proto"],
)

kt_jvm_grpc_library(
name = "service_grpc_kt",
srcs = ["//:service_v1alpha1_proto"],
srcs = ["//:service_v1_proto"],
deps = [":service_java"],
)

Expand Down
2 changes: 1 addition & 1 deletion docs/source/guides/snippets/grpc/node/request.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const pb = require("./bentoml/grpc/v1alpha1/service_pb");
const pb = require("./bentoml/grpc/v1/service_pb");

var ndarray = new pb.NDArray();
ndarray
Expand Down
2 changes: 1 addition & 1 deletion docs/source/guides/snippets/grpc/python/request.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from bentoml.grpc.v1alpha1 import service_pb2 as pb
from bentoml.grpc.v1 import service_pb2 as pb

req = pb.Request(
api_name="classify",
Expand Down
6 changes: 3 additions & 3 deletions docs/source/guides/snippets/grpc/swift/Request.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ import BentoServiceModel
var shape: [Int32] = [1, 4]
var data: [Float] = [3.5, 2.4, 7.8, 5.1]

let ndarray: Bentoml_Grpc_V1alpha1_NDArray = .with {
let ndarray: Bentoml_Grpc_v1_NDArray = .with {
$0.shape = shape
$0.floatValues = data
$0.dtype = Bentoml_Grpc_V1alpha1_NDArray.DType.float
$0.dtype = Bentoml_Grpc_v1_NDArray.DType.float
}

let request: Bentoml_Grpc_V1alpha1_Request = .with {
let request: Bentoml_Grpc_v1_Request = .with {
$0.apiName = apiName
$0.ndarray = ndarray
}
Expand Down
4 changes: 2 additions & 2 deletions docs/source/tutorial.rst
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,7 @@ Send prediction request to the service:

.. code-block:: bash
» docker run -i --rm fullstorydev/grpcurl -d @ -plaintext host.docker.internal:3000 bentoml.grpc.v1alpha1.BentoService/Call <<EOM
» docker run -i --rm fullstorydev/grpcurl -d @ -plaintext host.docker.internal:3000 bentoml.grpc.v1.BentoService/Call <<EOM
{
"apiName": "classify",
"ndarray": {
Expand All @@ -283,7 +283,7 @@ Send prediction request to the service:
.. code-block:: bash
» docker run -i --rm --network=host fullstorydev/grpcurl -d @ -plaintext 0.0.0.0:3000 bentoml.grpc.v1alpha1.BentoService/Call <<EOM
» docker run -i --rm --network=host fullstorydev/grpcurl -d @ -plaintext 0.0.0.0:3000 bentoml.grpc.v1.BentoService/Call <<EOM
{
"apiName": "classify",
"ndarray": {
Expand Down
2 changes: 1 addition & 1 deletion examples/custom_model_runner/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ curl -F 'image=@mnist_png/testing/8/1007.png' http://127.0.0.1:3000/predict
<td>

```bash
grpcurl -d @ -plaintext 0.0.0.0:3000 bentoml.grpc.v1alpha1.BentoService/Call <<EOM
grpcurl -d @ -plaintext 0.0.0.0:3000 bentoml.grpc.v1.BentoService/Call <<EOM
{
"apiName": "classify",
"file": {
Expand Down
2 changes: 1 addition & 1 deletion examples/custom_runner/nltk_pretrained_model/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ curl -X POST -H "content-type: application/text" --data "BentoML is great" http:
<td>

```bash
grpcurl -d @ -plaintext 0.0.0.0:3000 bentoml.grpc.v1alpha1.BentoService/Call <<EOM
grpcurl -d @ -plaintext 0.0.0.0:3000 bentoml.grpc.v1.BentoService/Call <<EOM
{
"apiName": "classify",
"text": "BentoML is great"
Expand Down
Loading

0 comments on commit f782cb6

Please sign in to comment.