internlm/SWE-Fixer-Train-110K huggingface dataset:
Repository: alltheplaces/alltheplaces

Issue:
ARB 4×4 Accessories (shop/car_parts) (AU)
### Brand name

ARB 4×4 Accessories

### Wikidata ID

Q126166453

### Store finder url(s)

https://www.arb.com.au/wp-content/themes/arb_2017/assets/inc/json/stores.json

Note: Many locations are resellers. Filter on `"title"` starting with `"ARB 4×4 Accessories"` to find exclusively ARB branded stores.


Discussion:

Resolving patch:
diff --git a/locations/spiders/arb_4x4_accessories.py b/locations/spiders/arb_4x4_accessories.py
new file mode 100644
--- /dev/null
+++ b/locations/spiders/arb_4x4_accessories.py
@@ -0,0 +1,50 @@
+from scrapy import Selector, Spider
+from scrapy.http import JsonRequest
+
+from locations.categories import Categories
+from locations.dict_parser import DictParser
+from locations.hours import OpeningHours
+
+
+class ARB4x4AccessoriesSpider(Spider):
+    name = "arb_4x4_accessories"
+    item_attributes = {
+        "brand": "ARB 4×4 Accessories",
+        "brand_wikidata": "Q126166453",
+        "extras": Categories.SHOP_CAR_PARTS.value,
+    }
+    allowed_domains = ["www.arb.com.au"]
+    start_urls = ["https://www.arb.com.au/wp-content/themes/arb_2017/assets/inc/json/stores.json"]
+
+    def start_requests(self):
+        for url in self.start_urls:
+            yield JsonRequest(url=url)
+
+    def parse(self, response):
+        for location in response.json():
+            if not location.get("is_arb_store") and not location.get("is_arb_corporate_store"):
+                continue  # Ignore resellers.
+
+            item = DictParser.parse(location)
+            item["street_address"] = item.pop("addr_full", None)
+
+            if (
+                item["website"]
+                and not item["website"].startswith("www.")
+                and not item["website"].startswith("https://")
+                and not item["website"].startswith("http://")
+            ):
+                item["website"] = "https://www.arb.com.au" + item["website"]
+            elif item["website"].startswith("www."):
+                item["website"] = "https://" + item["website"]
+
+            if item["name"].startswith("ARB 4×4 Accessories "):
+                item["branch"] = item["name"].replace("ARB 4×4 Accessories ", "")
+
+            hours_string = " ".join(
+                filter(None, map(str.strip, Selector(text=location.get("opening_hours")).xpath("//text()").getall()))
+            )
+            item["opening_hours"] = OpeningHours()
+            item["opening_hours"].add_ranges_from_string(hours_string)
+
+            yield item


Test patch:
Repository: alltheplaces/alltheplaces

Issue:
Sushi Sushi (amenity/restaurant) (AU) (151 locations)
### Brand name

Sushi Sushi

### Wikidata ID

Q122915060

### Store finder url(s)

https://kwefa302.api.sanity.io/v2021-08-31/data/query/production?query=*[_type == "storeData"]

Perhaps this URL should be extracted from https://www.sushisushi.com.au/our-stores as it contains a server ID and date in the URL. However the date is very old and maybe this indicates a lack of regular changes, so we may not need to go to this additional effort.


Discussion:

Resolving patch:
diff --git a/locations/spiders/sushi_sushi_au.py b/locations/spiders/sushi_sushi_au.py
new file mode 100644
--- /dev/null
+++ b/locations/spiders/sushi_sushi_au.py
@@ -0,0 +1,33 @@
+from scrapy import Spider
+from scrapy.http import JsonRequest
+
+from locations.categories import Categories
+from locations.dict_parser import DictParser
+from locations.pipelines.address_clean_up import clean_address
+
+
+class SushiSushiAUSpider(Spider):
+    name = "sushi_sushi_au"
+    item_attributes = {"brand": "Sushi Sushi", "brand_wikidata": "Q122915060", "extras": Categories.RESTAURANT.value}
+    allowed_domains = ["kwefa302.api.sanity.io"]
+    start_urls = ['https://kwefa302.api.sanity.io/v2021-08-31/data/query/production?query=*[_type == "storeData"]']
+
+    def start_requests(self):
+        for url in self.start_urls:
+            yield JsonRequest(url=url)
+
+    def parse(self, response):
+        for location in response.json()["result"]:
+            if not location["enabled"]:
+                continue
+            item = DictParser.parse(location)
+            item["ref"] = location.get("store_id", location.get("_id"))
+            item["branch"] = item["name"]
+            item["street_address"] = clean_address([location.get("address_line_01"), location.get("address_line_02")])
+            if item["state"]:
+                item["state"] = item["state"].upper()
+            if item["postcode"]:
+                item["postcode"] = str(item["postcode"])
+            if item["phone"] and "CALL ME" in item["phone"]:
+                item.pop("phone", None)
+            yield item


Test patch:
Repository: alltheplaces/alltheplaces

Issue:
TML Pathology (healthcare/sample_collection) (AU) (19 locations)
### Brand name

TML Pathology

### Wikidata ID

Q126165745

### Store finder url(s)

```curl 'https://www.healius.com.au/structr/rest/Location/fetchLocationFromFindUsAPI' -X POST -H 'Content-Type: text/plain;charset=UTF-8' --data-raw '{"companyCode":"tml","all":true}'```


Discussion:

Resolving patch:
diff --git a/locations/spiders/tml_pathology_au.py b/locations/spiders/tml_pathology_au.py
new file mode 100644
--- /dev/null
+++ b/locations/spiders/tml_pathology_au.py
@@ -0,0 +1,12 @@
+from locations.categories import Categories
+from locations.spiders.dorevitch_pathology_au import DorevitchPathologyAUSpider
+
+
+class TMLPathologyAUSpider(DorevitchPathologyAUSpider):
+    name = "tml_pathology_au"
+    item_attributes = {
+        "brand": "TML Pathology",
+        "brand_wikidata": "Q126165745",
+        "extras": Categories.SAMPLE_COLLECTION.value,
+    }
+    company_code = "tml"


Test patch:
Repository: alltheplaces/alltheplaces

Issue:
TAB (shop/bookmaker) (AU) (1995 locations)
### Brand name

TAB

### Wikidata ID

Q110288149

### Store finder url(s)

https://api.beta.tab.com.au/v1/venue-locator-service/public-venue-search?zoomLevel=19&topLeftLon=0&bottomRightLat=-90&bottomRightLon=-180&topLeftLat=0


Discussion:

Resolving patch:
diff --git a/locations/spiders/tab_au.py b/locations/spiders/tab_au.py
new file mode 100644
--- /dev/null
+++ b/locations/spiders/tab_au.py
@@ -0,0 +1,33 @@
+import re
+
+from scrapy import Spider
+
+from locations.categories import Categories
+from locations.dict_parser import DictParser
+from locations.user_agents import FIREFOX_LATEST
+
+
+class TABAUSpider(Spider):
+    name = "tab_au"
+    item_attributes = {"brand": "TAB", "brand_wikidata": "Q110288149", "extras": Categories.SHOP_BOOKMAKER.value}
+    allowed_domains = ["api.beta.tab.com.au"]
+    start_urls = [
+        "https://api.beta.tab.com.au/v1/venue-locator-service/public-venue-search?zoomLevel=19&topLeftLon=0&bottomRightLat=-90&bottomRightLon=-180&topLeftLat=0"
+    ]
+    user_agent = FIREFOX_LATEST  # Old user agent versions are blocked by the API (timeout).
+    requires_proxy = "AU"
+
+    def parse(self, response):
+        for location in response.json()["venues"]:
+            if location["status"] != "Active":
+                continue
+            item = DictParser.parse(location)
+            item["street_address"] = item.pop("street", None)
+            if item["street_address"]:
+                item["street_address"] = item["street_address"].strip()
+            if item["postcode"]:
+                item["postcode"] = str(item["postcode"])
+            if item["phone"]:
+                if re.match(r"^\d+\.\d+$", item["phone"]):
+                    item.pop("phone", None)  # Invalid phone number.
+            yield item
diff --git a/locations/user_agents.py b/locations/user_agents.py
--- a/locations/user_agents.py
+++ b/locations/user_agents.py
@@ -1,11 +1,10 @@
 FIREFOX_ESR_115 = "Mozilla/5.0 (Linux x86_64; rv:115.0) Gecko/20100101 Firefox/115.0"
 FIREFOX_ESR_LATEST = FIREFOX_ESR_115
 
-FIREFOX_124 = "Mozilla/5.0 (X11; Linux x86_64; rv:124.0) Gecko/20100101 Firefox/124.0"
-FIREFOX_LATEST = FIREFOX_124
+FIREFOX_127 = "Mozilla/5.0 (X11; Linux x86_64; rv:124.0) Gecko/20100101 Firefox/127.0"
+FIREFOX_LATEST = FIREFOX_127
 
-CHROME_120 = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
-CHROME_123 = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"
-CHROME_LATEST = CHROME_123
+CHROME_125 = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
+CHROME_LATEST = CHROME_125
 
 BROWSER_DEFAULT = FIREFOX_ESR_LATEST


Test patch:
Repository: kserve/kserve

Issue:
Support insecure minio connections
/kind feature
For local deployments (e.g. with Kubeflow), TLS is not configured for minio. When trying to deploy a model stored there, kfserving issues SSLError messages.

```Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1056)')```

This is due to a hard-coded setting in [storage.py](https://github.com/kubeflow/kfserving/blob/master/python/kfserving/kfserving/storage.py#L194), with no way to override it.

**Describe the solution you'd like**
It should be possible to allow insecure connections to minio, having secure connection as default. The user should be able to do this either by specifying an S3_ENDPOINT with http scheme or by using a flag explicitly.



Discussion:

Resolving patch:
diff --git a/python/kfserving/kfserving/storage.py b/python/kfserving/kfserving/storage.py
--- a/python/kfserving/kfserving/storage.py
+++ b/python/kfserving/kfserving/storage.py
@@ -17,6 +17,7 @@
 import tempfile
 import os
 import re
+from urllib.parse import urlparse
 from azure.common import AzureMissingResourceHttpError
 from azure.storage.blob import BlockBlobService
 from google.auth import exceptions
@@ -193,9 +194,9 @@ def _download_local(uri, out_dir=None):
     @staticmethod
     def _create_minio_client():
         # Remove possible http scheme for Minio
-        url = re.compile(r"https?://")
-        minioClient = Minio(url.sub("", os.getenv("S3_ENDPOINT", "")),
-                            access_key=os.getenv("AWS_ACCESS_KEY_ID", ""),
-                            secret_key=os.getenv("AWS_SECRET_ACCESS_KEY", ""),
-                            secure=True)
-        return minioClient
+        url = urlparse(os.getenv("AWS_ENDPOINT_URL", ""))
+        use_ssl = url.scheme == 'https' if url.scheme else bool(os.getenv("S3_USE_HTTPS", "true"))
+        return Minio(url.netloc,
+                     access_key=os.getenv("AWS_ACCESS_KEY_ID", ""),
+                     secret_key=os.getenv("AWS_SECRET_ACCESS_KEY", ""),
+                     secure=use_ssl)


Test patch:
Repository: kserve/kserve

Issue:
Sample of image_transformer does not work
/kind bug
Sample under docs/samples/transformer/image_transformer is broken, there's python error in it.

**What steps did you take and what happened:**
[A clear and concise description of what the bug is.]
It's due to PR #492, kfmodel and kfserver is refactored now but the sample still inherit from transformer which does not exist now. Also some other symbols need be renamed.

**What did you expect to happen:**
Sample still works



Discussion:
/assign 

Resolving patch:
diff --git a/docs/samples/transformer/image_transformer/image_transformer/__main__.py b/docs/samples/transformer/image_transformer/image_transformer/__main__.py
--- a/docs/samples/transformer/image_transformer/image_transformer/__main__.py
+++ b/docs/samples/transformer/image_transformer/image_transformer/__main__.py
@@ -18,7 +18,7 @@
 
 DEFAULT_MODEL_NAME = "model"
 
-parser = argparse.ArgumentParser(parents=[kfserving.server.parser])
+parser = argparse.ArgumentParser(parents=[kfserving.kfserver.parser])
 parser.add_argument('--model_name', default=DEFAULT_MODEL_NAME,
                     help='The name that the model is served under.')
 parser.add_argument('--predictor_host', help='The URL for the model predict function', required=True)
@@ -26,7 +26,6 @@
 args, _ = parser.parse_known_args()
 
 if __name__ == "__main__":
-    transformer = ImageTransformer(args.model_name, predictor_host=args.predictor_host,
-                                   protocol=args.protocol)
+    transformer = ImageTransformer(args.model_name, predictor_host=args.predictor_host)
     kfserver = kfserving.KFServer()
     kfserver.start(models=[transformer])
diff --git a/docs/samples/transformer/image_transformer/image_transformer/image_transformer.py b/docs/samples/transformer/image_transformer/image_transformer/image_transformer.py
--- a/docs/samples/transformer/image_transformer/image_transformer/image_transformer.py
+++ b/docs/samples/transformer/image_transformer/image_transformer/image_transformer.py
@@ -14,7 +14,6 @@
 
 import kfserving
 from typing import List, Dict
-from kfserving.transformer import Transformer
 from PIL import Image
 import torchvision.transforms as transforms
 import logging
@@ -39,7 +38,10 @@ def image_transform(instance):
     return res.tolist()
 
 
-class ImageTransformer(Transformer):
+class ImageTransformer(kfserving.KFModel):
+    def __init__(self, name: str, predictor_host: str):
+        super().__init__(name)
+        self.predictor_host = predictor_host
 
     def preprocess(self, inputs: Dict) -> Dict:
         return {'instances': [image_transform(instance) for instance in inputs['instances']]}


Test patch:
Repository: kserve/kserve

Issue:
Log format is not properly setup for KFServer
/kind bug

**What steps did you take and what happened:**
Log format is not properly setup

```
INFO:root:Copying contents of /mnt/models to local
INFO:root:Registering model:cifar10
INFO:root:Listening on port 8080
INFO:tornado.general:Starting 40 processes
INFO:tornado.access:200 POST /v1/models/cifar10:predict (127.0.0.1) 11488.05ms
INFO:tornado.access:200 POST /v1/models/cifar10:predict (127.0.0.1) 22800.67ms
INFO:tornado.access:200 POST /v1/models/cifar10:predict (127.0.0.1) 24200.31ms
INFO:tornado.access:200 POST /v1/models/cifar10:predict (127.0.0.1) 8301.00ms
INFO:tornado.access:200 POST /v1/models/cifar10:predict (127.0.0.1) 38398.63ms
INFO:tornado.access:200 POST /v1/models/cifar10:predict (127.0.0.1) 38799.67ms
INFO:tornado.access:200 POST /v1/models/cifar10:predict (127.0.0.1) 7599.63ms
INFO:tornado.access:200 POST /v1/models/cifar10:predict (127.0.0.1) 39800.00ms
INFO:tornado.access:200 POST /v1/models/cifar10:predict (127.0.0.1) 32200.33ms
```

**What did you expect to happen:**
The log format should include timestamp.

**Anything else you would like to add:**
[Miscellaneous information that will assist in solving the issue.]


**Environment:**

- Istio Version:
- Knative Version:
- KFServing Version: 0.2.0
- Kubeflow version:
- Minikube version:
- Kubernetes version: (use `kubectl version`):
- OS (e.g. from `/etc/os-release`):



Discussion:

Resolving patch:
diff --git a/python/kfserving/kfserving/kfserver.py b/python/kfserving/kfserving/kfserver.py
--- a/python/kfserving/kfserving/kfserver.py
+++ b/python/kfserving/kfserving/kfserver.py
@@ -12,16 +12,16 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import tornado.ioloop
-import tornado.web
-import tornado.httpserver
 import argparse
 import logging
 import json
 from typing import List, Dict
+import tornado.ioloop
+import tornado.web
+import tornado.httpserver
+import tornado.log
 from kfserving.handlers.http import PredictHandler, ExplainHandler
 from kfserving import KFModel
-from kfserving.constants import constants
 
 DEFAULT_HTTP_PORT = 8080
 DEFAULT_GRPC_PORT = 8081
@@ -35,8 +35,7 @@
                     help='The number of works to fork')
 args, _ = parser.parse_known_args()
 
-logging.basicConfig(level=constants.KFSERVING_LOGLEVEL)
-
+tornado.log.enable_pretty_logging()
 
 class KFServer():
     def __init__(self, http_port: int = args.http_port,


Test patch:
Repository: kserve/kserve

Issue:
KFServing Transformer does not work with onnxruntime and trtis model server
/kind bug

**What steps did you take and what happened:**
Currently kfserving transformer does not work with onnxruntime and trtis model server due to following validation because their data plane do not support `instances` key in JSON.
https://github.com/kubeflow/kfserving/blob/master/python/kfserving/kfserving/handlers/http.py#L24 



**What did you expect to happen:**
Before we get to V2 data plane with agreed protocol across model servers, we should relax this validation.

**Anything else you would like to add:**
[Miscellaneous information that will assist in solving the issue.]


**Environment:**

- Istio Version:
- Knative Version:
- KFServing Version: 0.2.2
- Kubeflow version:
- Minikube version:
- Kubernetes version: (use `kubectl version`):
- OS (e.g. from `/etc/os-release`):



Discussion:
Issue-Label Bot is automatically applying the labels:

| Label  | Probability |
| ------------- | ------------- |
| bug | 0.98 |

Please mark this comment with :thumbsup: or :thumbsdown: to give our bot feedback! 
Links: [app homepage](https://github.com/marketplace/issue-label-bot), [dashboard](https://github.com/marketplace/issue-label-botdata/kubeflow/kfserving) and [code](https://github.com/hamelsmu/MLapp) for this bot.

Resolving patch:
diff --git a/python/kfserving/kfserving/handlers/http.py b/python/kfserving/kfserving/handlers/http.py
--- a/python/kfserving/kfserving/handlers/http.py
+++ b/python/kfserving/kfserving/handlers/http.py
@@ -21,13 +21,7 @@ def get_model(self, name: str):
         return model
 
     def validate(self, request):
-        if "instances" not in request:
-            raise tornado.web.HTTPError(
-                status_code=HTTPStatus.BAD_REQUEST,
-                reason="Expected key \"instances\" in request body"
-            )
-
-        if not isinstance(request["instances"], list):
+        if "instances" in request and not isinstance(request["instances"], list):
             raise tornado.web.HTTPError(
                 status_code=HTTPStatus.BAD_REQUEST,
                 reason="Expected \"instances\" to be a list"


Test patch:
Repository: kserve/kserve

Issue:
Improve custom image sample documentation. 
/kind feature

Add an example using a prebuilt existing container with a model wrapped inside it. 

Add another example that extends the KFServing SDK to create a container compatible with KFServing client format, so that all the functionalities of KFServing can be leveraged


Discussion:
Issue-Label Bot is automatically applying the labels:

| Label  | Probability |
| ------------- | ------------- |
| feature | 0.99 |

Please mark this comment with :thumbsup: or :thumbsdown: to give our bot feedback! 
Links: [app homepage](https://github.com/marketplace/issue-label-bot), [dashboard](https://github.com/marketplace/issue-label-botdata/kubeflow/kfserving) and [code](https://github.com/hamelsmu/MLapp) for this bot.
/assign @tomcli
/assign @rzgry 
As per @yuzisun - 

this can be a good example for kfserving custom https://github.com/SeldonIO/seldon-models/blob/master/pytorch/moviesentiment_roberta/inference/kfserving/model.py

Resolving patch:
diff --git a/docs/samples/custom/kfserving-custom-model/model.py b/docs/samples/custom/kfserving-custom-model/model-server/model.py
similarity index 100%
rename from docs/samples/custom/kfserving-custom-model/model.py
rename to docs/samples/custom/kfserving-custom-model/model-server/model.py


Test patch:
Repository: kserve/kserve

Issue:
SDK promote method miss annotations
https://github.com/kubeflow/kfserving/blob/8c261457b3ec8017736b882c4ffd3379914471ac/python/kfserving/kfserving/api/kf_serving_client.py#L295-L297


Discussion:
Issue-Label Bot is automatically applying the labels:

| Label  | Probability |
| ------------- | ------------- |
| bug | 0.74 |

Please mark this comment with :thumbsup: or :thumbsdown: to give our bot feedback! 
Links: [app homepage](https://github.com/marketplace/issue-label-bot), [dashboard](https://github.com/marketplace/issue-label-botdata/kubeflow/kfserving) and [code](https://github.com/hamelsmu/MLapp) for this bot.

Resolving patch:
diff --git a/python/kfserving/kfserving/api/kf_serving_client.py b/python/kfserving/kfserving/api/kf_serving_client.py
--- a/python/kfserving/kfserving/api/kf_serving_client.py
+++ b/python/kfserving/kfserving/api/kf_serving_client.py
@@ -289,12 +289,18 @@ def promote(self, name, namespace=None, watch=False, timeout_seconds=600): # pyl
         except KeyError:
             raise RuntimeError("Cannot promote a InferenceService that has no Canary Spec.")
 
+        try:
+            annotations = current_isvc['metadata']['annotations']
+        except KeyError:
+            annotations = dict()
+
         inferenceservice = V1alpha2InferenceService(
             api_version=api_version,
             kind=constants.KFSERVING_KIND,
             metadata=client.V1ObjectMeta(
                 name=name,
-                namespace=namespace),
+                namespace=namespace,
+                annotations=annotations),
             spec=V1alpha2InferenceServiceSpec(
                 default=current_canary_spec,
                 canary=None,


Test patch:
Repository: kserve/kserve

Issue:
Missing requirements.txt in the Pypi source code
**What steps did you take and what happened:**
The requirements.txt file is missing in the source code on Pypi so setuptools will not work.

```
Executing setuptoolsBuildPhase
Traceback (most recent call last):
  File "nix_run_setup", line 8, in <module>
    exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\\r\\n', '\\n'), __file__, 'exec'))
  File "setup.py", line 23, in <module>
    with open('requirements.txt') as f:
FileNotFoundError: [Errno 2] No such file or directory: 'requirements.txt'
builder for '/nix/store/z8sh0v4cji9aq9v02865273xvmhcwzgh-python3.8-kfserving-0.3.0.1.drv' failed with exit code 1
cannot build derivation '/nix/store/75ihn4avq52qdpavs0s8c1y0nj0wjfdx-python3-3.8.2-env.drv': 1 dependencies couldn't be built
```

**What did you expect to happen:**
requirements.txt in the tar.gz archive

**Environment:**

- Istio Version:
- Knative Version:
- KFServing Version: 0.3.0.1
- Kubeflow version:
- Kfdef:[k8s_istio/istio_dex/gcp_basic_auth/gcp_iap/aws/aws_cognito/ibm]
- Minikube version:
- Kubernetes version: (use `kubectl version`):
- OS (e.g. from `/etc/os-release`): NixOS 20.03 (Markhor) x86_64



Discussion:
Issue-Label Bot is automatically applying the labels:

| Label  | Probability |
| ------------- | ------------- |
| kind/bug | 0.93 |

Please mark this comment with :thumbsup: or :thumbsdown: to give our bot feedback! 
Links: [app homepage](https://github.com/marketplace/issue-label-bot), [dashboard](https://github.com/marketplace/issue-label-botdata/kubeflow/kfserving) and [code](https://github.com/hamelsmu/MLapp) for this bot.
/cc @jinchihe 
@nphilou what were you doing when this problem occurred? install kfserving sdk from pypi? Thanks.
@jinchihe I was installing kfserving from Pypi sources (kfserving-0.3.0.1.tar.gz) and more precisely, `nix-build` of https://gist.github.com/nphilou/5c9fe0715c94b51f8d1f24e557d3c90a.

It should be equivalent to `python setup.py install` of kfserving-0.3.0.1.tar.gz (https://pypi.org/project/kfserving/#files).
OK, got that, thanks. @nphilou 

/assign 

Resolving patch:
diff --git a/python/kfserving/setup.py b/python/kfserving/setup.py
--- a/python/kfserving/setup.py
+++ b/python/kfserving/setup.py
@@ -25,7 +25,7 @@
 
 setuptools.setup(
     name='kfserving',
-    version='0.3.0.1',
+    version='0.3.0.2',
     author="Kubeflow Authors",
     author_email='ellisbigelow@google.com, hejinchi@cn.ibm.com',
     license="Apache License Version 2.0",
@@ -41,8 +41,8 @@
         'kfserving.handlers',
         'kfserving.utils',
     ],
-    package_data={},
-    include_package_data=False,
+    package_data={'': ['requirements.txt']},
+    include_package_data=True,
     zip_safe=False,
     classifiers=[
         'Intended Audience :: Developers',


Test patch: