clarifai 10.5.2__py3-none-any.whl → 10.5.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- clarifai/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/__pycache__/errors.cpython-310.pyc +0 -0
- clarifai/__pycache__/versions.cpython-310.pyc +0 -0
- clarifai/client/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/client/__pycache__/app.cpython-310.pyc +0 -0
- clarifai/client/__pycache__/base.cpython-310.pyc +0 -0
- clarifai/client/__pycache__/dataset.cpython-310.pyc +0 -0
- clarifai/client/__pycache__/input.cpython-310.pyc +0 -0
- clarifai/client/__pycache__/lister.cpython-310.pyc +0 -0
- clarifai/client/__pycache__/model.cpython-310.pyc +0 -0
- clarifai/client/__pycache__/module.cpython-310.pyc +0 -0
- clarifai/client/__pycache__/runner.cpython-310.pyc +0 -0
- clarifai/client/__pycache__/search.cpython-310.pyc +0 -0
- clarifai/client/__pycache__/user.cpython-310.pyc +0 -0
- clarifai/client/__pycache__/workflow.cpython-310.pyc +0 -0
- clarifai/client/auth/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/client/auth/__pycache__/helper.cpython-310.pyc +0 -0
- clarifai/client/auth/__pycache__/register.cpython-310.pyc +0 -0
- clarifai/client/auth/__pycache__/stub.cpython-310.pyc +0 -0
- clarifai/client/auth/helper.py +3 -2
- clarifai/constants/__pycache__/dataset.cpython-310.pyc +0 -0
- clarifai/constants/__pycache__/model.cpython-310.pyc +0 -0
- clarifai/constants/__pycache__/search.cpython-310.pyc +0 -0
- clarifai/datasets/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/datasets/export/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/datasets/export/__pycache__/inputs_annotations.cpython-310.pyc +0 -0
- clarifai/datasets/upload/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/datasets/upload/__pycache__/base.cpython-310.pyc +0 -0
- clarifai/datasets/upload/__pycache__/features.cpython-310.pyc +0 -0
- clarifai/datasets/upload/__pycache__/image.cpython-310.pyc +0 -0
- clarifai/datasets/upload/__pycache__/text.cpython-310.pyc +0 -0
- clarifai/datasets/upload/__pycache__/utils.cpython-310.pyc +0 -0
- clarifai/models/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/models/model_serving/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/models/model_serving/__pycache__/constants.cpython-310.pyc +0 -0
- clarifai/models/model_serving/cli/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/models/model_serving/cli/__pycache__/_utils.cpython-310.pyc +0 -0
- clarifai/models/model_serving/cli/__pycache__/base.cpython-310.pyc +0 -0
- clarifai/models/model_serving/cli/__pycache__/build.cpython-310.pyc +0 -0
- clarifai/models/model_serving/cli/__pycache__/create.cpython-310.pyc +0 -0
- clarifai/models/model_serving/cli/login.py +1 -1
- clarifai/models/model_serving/constants.py +9 -2
- clarifai/models/model_serving/model_config/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/models/model_serving/model_config/__pycache__/base.cpython-310.pyc +0 -0
- clarifai/models/model_serving/model_config/__pycache__/config.cpython-310.pyc +0 -0
- clarifai/models/model_serving/model_config/__pycache__/inference_parameter.cpython-310.pyc +0 -0
- clarifai/models/model_serving/model_config/__pycache__/output.cpython-310.pyc +0 -0
- clarifai/models/model_serving/model_config/triton/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/models/model_serving/model_config/triton/__pycache__/serializer.cpython-310.pyc +0 -0
- clarifai/models/model_serving/model_config/triton/__pycache__/triton_config.cpython-310.pyc +0 -0
- clarifai/models/model_serving/model_config/triton/__pycache__/wrappers.cpython-310.pyc +0 -0
- clarifai/models/model_serving/repo_build/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/models/model_serving/repo_build/__pycache__/build.cpython-310.pyc +0 -0
- clarifai/models/model_serving/repo_build/static_files/__pycache__/base_test.cpython-310-pytest-7.2.0.pyc +0 -0
- clarifai/models/model_serving/utils.py +2 -1
- clarifai/rag/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/rag/__pycache__/rag.cpython-310.pyc +0 -0
- clarifai/rag/__pycache__/utils.cpython-310.pyc +0 -0
- clarifai/runners/deepgram_live_transcribe.py +98 -0
- clarifai/runners/deepgram_live_transcribe.py~ +98 -0
- clarifai/runners/deepgram_runner.py +131 -0
- clarifai/runners/deepgram_runner.py~ +130 -0
- clarifai/runners/example_llama2.py~ +72 -0
- clarifai/runners/matt_example.py +89 -0
- clarifai/runners/matt_example.py~ +87 -0
- clarifai/runners/matt_llm_example.py +129 -0
- clarifai/runners/matt_llm_example.py~ +128 -0
- clarifai/schema/__pycache__/search.cpython-310.pyc +0 -0
- clarifai/urls/__pycache__/helper.cpython-310.pyc +0 -0
- clarifai/utils/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/utils/__pycache__/logging.cpython-310.pyc +0 -0
- clarifai/utils/__pycache__/misc.cpython-310.pyc +0 -0
- clarifai/utils/__pycache__/model_train.cpython-310.pyc +0 -0
- clarifai/utils/constants.py +0 -10
- clarifai/versions.py +1 -1
- clarifai/workflows/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/workflows/__pycache__/export.cpython-310.pyc +0 -0
- clarifai/workflows/__pycache__/utils.cpython-310.pyc +0 -0
- clarifai/workflows/__pycache__/validate.cpython-310.pyc +0 -0
- {clarifai-10.5.2.dist-info → clarifai-10.5.3.dist-info}/METADATA +1 -1
- {clarifai-10.5.2.dist-info → clarifai-10.5.3.dist-info}/RECORD +85 -12
- {clarifai-10.5.2.dist-info → clarifai-10.5.3.dist-info}/WHEEL +1 -1
- {clarifai-10.5.2.dist-info → clarifai-10.5.3.dist-info}/LICENSE +0 -0
- {clarifai-10.5.2.dist-info → clarifai-10.5.3.dist-info}/entry_points.txt +0 -0
- {clarifai-10.5.2.dist-info → clarifai-10.5.3.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,72 @@
|
|
1
|
+
from clarifai.client.runner import Runner
|
2
|
+
from clarifai_grpc.grpc.api import resources_pb2
|
3
|
+
|
4
|
+
# This example requires to run the following before running this example:
|
5
|
+
# pip install transformers
|
6
|
+
|
7
|
+
# https://huggingface.co/TheBloke/Llama-2-70B-chat-GPTQ
|
8
|
+
model_name_or_path = "TheBloke/Llama-2-7B-chat-GPTQ"
|
9
|
+
model_basename = "model"
|
10
|
+
|
11
|
+
use_triton = False
|
12
|
+
|
13
|
+
|
14
|
+
class Llama2Runner(Runner):
|
15
|
+
"""A custom runner that runs the LLama2 LLM.
|
16
|
+
"""
|
17
|
+
|
18
|
+
def __init__(self, *args, **kwargs):
|
19
|
+
print("Starting to load the model...")
|
20
|
+
st = time.time()
|
21
|
+
self.tokenizer = AutoTokenizer.from_pretrained(model_name_or_path, use_fast=True)
|
22
|
+
self.model = AutoModelForCausalLM.from_pretrained(model_name_or_path, device_map='auto')
|
23
|
+
|
24
|
+
self.logger.info("Loading model complete in (%f seconds), ready to loop for requests." %
|
25
|
+
(time.time() - st))
|
26
|
+
super(MyRunner, self).__init__(*args, **kwargs)
|
27
|
+
|
28
|
+
def run_input(self, input: resources_pb2.Input,
|
29
|
+
output_info: resources_pb2.OutputInfo) -> resources_pb2.Output:
|
30
|
+
"""This is the method that will be called when the runner is run. It takes in an input and
|
31
|
+
returns an output.
|
32
|
+
"""
|
33
|
+
|
34
|
+
output = resources_pb2.Output()
|
35
|
+
data = input.data
|
36
|
+
if data.text.raw != "":
|
37
|
+
input_text = data.text.raw
|
38
|
+
elif data.text.url != "":
|
39
|
+
input_text = str(requests.get(data.text.url).text)
|
40
|
+
else:
|
41
|
+
raise Exception("Need to include data.text.raw or data.text.url in your inputs.")
|
42
|
+
|
43
|
+
st = time.time()
|
44
|
+
max_tokens = 4096
|
45
|
+
# # Method 1
|
46
|
+
# input_ids = self.tokenizer(input_text, return_tensors='pt').input_ids.cuda()
|
47
|
+
# out = self.model.generate(inputs=input_ids, temperature=0.7, max_new_tokens=max_tokens)
|
48
|
+
# out_text = self.tokenizer.decode(out[0], skip_special_tokens=True)
|
49
|
+
# output.data.text.raw = out_text.replace(input_text, '')
|
50
|
+
|
51
|
+
# # Method 2
|
52
|
+
pipe = pipeline(
|
53
|
+
"text-generation",
|
54
|
+
model=self.model,
|
55
|
+
tokenizer=self.tokenizer,
|
56
|
+
max_new_tokens=max_tokens,
|
57
|
+
temperature=0.7,
|
58
|
+
top_p=0.95,
|
59
|
+
repetition_penalty=1.15,
|
60
|
+
return_full_text=False)
|
61
|
+
a = pipe(input_text)
|
62
|
+
output.data.text.raw = a[0]['generated_text']
|
63
|
+
return output
|
64
|
+
|
65
|
+
|
66
|
+
if __name__ == '__main__':
|
67
|
+
# Make sure you set these env vars before running the example.
|
68
|
+
# CLARIFAI_PAT
|
69
|
+
# CLARIFAI_USER_ID
|
70
|
+
|
71
|
+
# You need to first create a runner in the Clarifai API and then use the ID here.
|
72
|
+
Llama2Runner(runner_id="sdk-llama2-runner").start()
|
@@ -0,0 +1,89 @@
|
|
1
|
+
from clarifai_grpc.grpc.api import resources_pb2, service_pb2
|
2
|
+
from collections.abc import Iterator
|
3
|
+
from google.protobuf import json_format
|
4
|
+
|
5
|
+
from clarifai.client.runner import Runner
|
6
|
+
|
7
|
+
|
8
|
+
class MyRunner(Runner):
|
9
|
+
"""A custom runner that adds "Hello World" to the end of the text and replaces the domain of the
|
10
|
+
image URL as an example.
|
11
|
+
"""
|
12
|
+
|
13
|
+
def run_input(self, input: resources_pb2.Input, output_info: resources_pb2.OutputInfo,
|
14
|
+
**kwargs) -> resources_pb2.Output:
|
15
|
+
"""This is the method that will be called when the runner is run. It takes in an input and
|
16
|
+
returns an output.
|
17
|
+
"""
|
18
|
+
|
19
|
+
output = resources_pb2.Output()
|
20
|
+
|
21
|
+
data = input.data
|
22
|
+
|
23
|
+
# Optional use of output_info
|
24
|
+
params_dict = {}
|
25
|
+
if "params" in output_info:
|
26
|
+
params_dict = output_info["params"]
|
27
|
+
|
28
|
+
if data.text.raw != "":
|
29
|
+
output.data.text.raw = data.text.raw + "Hello World" + params_dict.get(
|
30
|
+
"hello", "") + kwargs.get("extra", "")
|
31
|
+
if data.image.url != "":
|
32
|
+
output.data.text.raw = data.image.url.replace("samples.clarifai.com",
|
33
|
+
"newdomain.com" + params_dict.get("domain",))
|
34
|
+
return output
|
35
|
+
|
36
|
+
def generate(self, request: service_pb2.PostModelOutputsRequest
|
37
|
+
) -> Iterator[service_pb2.MultiOutputResponse]:
|
38
|
+
"""Example yielding a whole batch of streamed stuff back.
|
39
|
+
"""
|
40
|
+
|
41
|
+
model = request.model
|
42
|
+
output_info = None
|
43
|
+
if request.model.model_version.id != "":
|
44
|
+
output_info = json_format.MessageToDict(
|
45
|
+
model.model_version.output_info, preserving_proto_field_name=True)
|
46
|
+
|
47
|
+
for i in range(10): # fake something iterating generating 10 times.
|
48
|
+
|
49
|
+
outputs = []
|
50
|
+
for input in request.inputs:
|
51
|
+
# output = self.run_input(input, output_info, extra=f" {i}")
|
52
|
+
output = resources_pb2.Output()
|
53
|
+
output.data.text.raw = f"Generate Hello World {i}"
|
54
|
+
outputs.append(output)
|
55
|
+
resp = service_pb2.MultiOutputResponse(outputs=outputs,)
|
56
|
+
yield resp
|
57
|
+
|
58
|
+
def stream(self, request: service_pb2.PostModelOutputsRequest
|
59
|
+
) -> Iterator[service_pb2.MultiOutputResponse]:
|
60
|
+
"""Example yielding a whole batch of streamed stuff back.
|
61
|
+
"""
|
62
|
+
|
63
|
+
model = request.model
|
64
|
+
output_info = None
|
65
|
+
if request.model.model_version.id != "":
|
66
|
+
output_info = json_format.MessageToDict(
|
67
|
+
model.model_version.output_info, preserving_proto_field_name=True)
|
68
|
+
|
69
|
+
for i in range(10): # fake something iterating generating 10 times.
|
70
|
+
|
71
|
+
outputs = []
|
72
|
+
for input in request.inputs:
|
73
|
+
# output = self.run_input(input, output_info, extra=f" {i}")
|
74
|
+
output = resources_pb2.Output()
|
75
|
+
out_text = input.data.text.raw + f"Stream Hello World {i}"
|
76
|
+
print(out_text)
|
77
|
+
output.data.text.raw = out_text
|
78
|
+
outputs.append(output)
|
79
|
+
resp = service_pb2.MultiOutputResponse(outputs=outputs,)
|
80
|
+
yield resp
|
81
|
+
|
82
|
+
|
83
|
+
if __name__ == '__main__':
|
84
|
+
# Make sure you set these env vars before running the example.
|
85
|
+
# CLARIFAI_PAT
|
86
|
+
# CLARIFAI_USER_ID
|
87
|
+
|
88
|
+
# You need to first create a runner in the Clarifai API and then use the ID here.
|
89
|
+
MyRunner(runner_id="matt-test-runner", base_url="http://q6:32013", num_parallel_polls=1).start()
|
@@ -0,0 +1,87 @@
|
|
1
|
+
from clarifai_grpc.grpc.api import resources_pb2, service_pb2
|
2
|
+
from collections.abc import Iterator
|
3
|
+
from google.protobuf import json_format
|
4
|
+
|
5
|
+
from clarifai.client.runner import Runner
|
6
|
+
|
7
|
+
|
8
|
+
class MyRunner(Runner):
|
9
|
+
"""A custom runner that adds "Hello World" to the end of the text and replaces the domain of the
|
10
|
+
image URL as an example.
|
11
|
+
"""
|
12
|
+
|
13
|
+
def run_input(self, input: resources_pb2.Input, output_info: resources_pb2.OutputInfo,
|
14
|
+
**kwargs) -> resources_pb2.Output:
|
15
|
+
"""This is the method that will be called when the runner is run. It takes in an input and
|
16
|
+
returns an output.
|
17
|
+
"""
|
18
|
+
|
19
|
+
output = resources_pb2.Output()
|
20
|
+
|
21
|
+
data = input.data
|
22
|
+
|
23
|
+
# Optional use of output_info
|
24
|
+
params_dict = {}
|
25
|
+
if "params" in output_info:
|
26
|
+
params_dict = output_info["params"]
|
27
|
+
|
28
|
+
if data.text.raw != "":
|
29
|
+
output.data.text.raw = data.text.raw + "Hello World" + params_dict.get(
|
30
|
+
"hello", "") + kwargs.get("extra", "")
|
31
|
+
if data.image.url != "":
|
32
|
+
output.data.text.raw = data.image.url.replace("samples.clarifai.com",
|
33
|
+
"newdomain.com" + params_dict.get("domain",))
|
34
|
+
return output
|
35
|
+
|
36
|
+
def generate(self, request: service_pb2.PostModelOutputsRequest
|
37
|
+
) -> Iterator[service_pb2.MultiOutputResponse]:
|
38
|
+
"""Example yielding a whole batch of streamed stuff back.
|
39
|
+
"""
|
40
|
+
|
41
|
+
model = request.model
|
42
|
+
output_info = None
|
43
|
+
if request.model.model_version.id != "":
|
44
|
+
output_info = json_format.MessageToDict(
|
45
|
+
model.model_version.output_info, preserving_proto_field_name=True)
|
46
|
+
|
47
|
+
for i in range(10): # fake something iterating generating 10 times.
|
48
|
+
|
49
|
+
outputs = []
|
50
|
+
for input in request.inputs:
|
51
|
+
# output = self.run_input(input, output_info, extra=f" {i}")
|
52
|
+
output = resources_pb2.Output()
|
53
|
+
output.data.text.raw = f"Generate Hello World {i}"
|
54
|
+
outputs.append(output)
|
55
|
+
resp = service_pb2.MultiOutputResponse(outputs=outputs,)
|
56
|
+
yield resp
|
57
|
+
|
58
|
+
def stream(self, request: service_pb2.PostModelOutputsRequest
|
59
|
+
) -> Iterator[service_pb2.MultiOutputResponse]:
|
60
|
+
"""Example yielding a whole batch of streamed stuff back.
|
61
|
+
"""
|
62
|
+
|
63
|
+
model = request.model
|
64
|
+
output_info = None
|
65
|
+
if request.model.model_version.id != "":
|
66
|
+
output_info = json_format.MessageToDict(
|
67
|
+
model.model_version.output_info, preserving_proto_field_name=True)
|
68
|
+
|
69
|
+
for i in range(10): # fake something iterating generating 10 times.
|
70
|
+
|
71
|
+
outputs = []
|
72
|
+
for input in request.inputs:
|
73
|
+
# output = self.run_input(input, output_info, extra=f" {i}")
|
74
|
+
output = resources_pb2.Output()
|
75
|
+
output.data.text.raw = input.data.text.raw + f"Stream Hello World {i}"
|
76
|
+
outputs.append(output)
|
77
|
+
resp = service_pb2.MultiOutputResponse(outputs=outputs,)
|
78
|
+
yield resp
|
79
|
+
|
80
|
+
|
81
|
+
if __name__ == '__main__':
|
82
|
+
# Make sure you set these env vars before running the example.
|
83
|
+
# CLARIFAI_PAT
|
84
|
+
# CLARIFAI_USER_ID
|
85
|
+
|
86
|
+
# You need to first create a runner in the Clarifai API and then use the ID here.
|
87
|
+
MyRunner(runner_id="matt-test-runner", base_url="http://q6:32013", num_parallel_polls=1).start()
|
@@ -0,0 +1,129 @@
|
|
1
|
+
from clarifai_grpc.grpc.api import resources_pb2, service_pb2
|
2
|
+
from clarifai_grpc.grpc.api.status import status_code_pb2, status_pb2
|
3
|
+
from collections.abc import Iterator
|
4
|
+
from google.protobuf import json_format
|
5
|
+
|
6
|
+
from clarifai.client.runner import Runner
|
7
|
+
import time
|
8
|
+
from threading import Thread
|
9
|
+
|
10
|
+
import grpc
|
11
|
+
import requests
|
12
|
+
|
13
|
+
from transformers import (AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer)
|
14
|
+
|
15
|
+
model_name_or_path = "TheBloke/Llama-2-7B-chat-GPTQ"
|
16
|
+
model_basename = "model"
|
17
|
+
use_triton = False
|
18
|
+
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path, use_fast=True)
|
19
|
+
model = AutoModelForCausalLM.from_pretrained(model_name_or_path, device_map='auto')
|
20
|
+
streamer = TextIteratorStreamer(tokenizer)
|
21
|
+
print("Model loaded")
|
22
|
+
|
23
|
+
|
24
|
+
class MyRunner(Runner):
|
25
|
+
"""A custom runner that adds "Hello World" to the end of the text and replaces the domain of the
|
26
|
+
image URL as an example.
|
27
|
+
"""
|
28
|
+
|
29
|
+
def run_input(self, input: resources_pb2.Input, output_info: resources_pb2.OutputInfo,
|
30
|
+
**kwargs) -> resources_pb2.Output:
|
31
|
+
"""This is the method that will be called when the runner is run. It takes in an input and
|
32
|
+
returns an output.
|
33
|
+
"""
|
34
|
+
|
35
|
+
output = resources_pb2.Output()
|
36
|
+
|
37
|
+
data = input.data
|
38
|
+
|
39
|
+
# Optional use of output_info
|
40
|
+
params_dict = {}
|
41
|
+
if "params" in output_info:
|
42
|
+
params_dict = output_info["params"]
|
43
|
+
|
44
|
+
if data.text.raw != "":
|
45
|
+
output.data.text.raw = data.text.raw + "Hello World" + params_dict.get(
|
46
|
+
"hello", "") + kwargs.get("extra", "")
|
47
|
+
if data.image.url != "":
|
48
|
+
output.data.text.raw = data.image.url.replace("samples.clarifai.com",
|
49
|
+
"newdomain.com" + params_dict.get("domain",))
|
50
|
+
return output
|
51
|
+
|
52
|
+
def generate(self, request: service_pb2.PostModelOutputsRequest
|
53
|
+
) -> Iterator[service_pb2.MultiOutputResponse]:
|
54
|
+
"""Example yielding a whole batch of streamed stuff back.
|
55
|
+
"""
|
56
|
+
|
57
|
+
output_info = None
|
58
|
+
if request.model.model_version.id != "":
|
59
|
+
output_info = json_format.MessageToDict(
|
60
|
+
request.model.model_version.output_info, preserving_proto_field_name=True)
|
61
|
+
|
62
|
+
for inp in request.inputs:
|
63
|
+
data = inp.data
|
64
|
+
print('start')
|
65
|
+
if data.text.raw != "":
|
66
|
+
input_text = data.text.raw
|
67
|
+
elif data.text.url != "":
|
68
|
+
input_text = str(requests.get(data.text.url).text)
|
69
|
+
else:
|
70
|
+
raise Exception("Need to include data.text.raw or data.text.url in your inputs.")
|
71
|
+
|
72
|
+
st = time.time()
|
73
|
+
max_tokens = 1024
|
74
|
+
# # Method 1
|
75
|
+
inputs = tokenizer(input_text, return_tensors='pt') #.input_ids.cuda()
|
76
|
+
generation_kwargs = dict(inputs, streamer=streamer, max_new_tokens=max_tokens)
|
77
|
+
thread = Thread(target=model.generate, kwargs=generation_kwargs)
|
78
|
+
thread.start()
|
79
|
+
times = []
|
80
|
+
st = time.time()
|
81
|
+
total_start = st
|
82
|
+
for new_text in streamer:
|
83
|
+
duration = time.time() - st
|
84
|
+
st = time.time()
|
85
|
+
print(f"Duration: {duration}")
|
86
|
+
times.append(duration)
|
87
|
+
# for new_text in ["hello", "world", "i'm", "streaming"]:
|
88
|
+
|
89
|
+
# out = model.generate(inputs=input_ids, temperature=0.7, max_new_tokens=max_tokens)
|
90
|
+
# out_text = tokenizer.decode(out[0], skip_special_tokens=True)
|
91
|
+
# output.data.text.raw = out_text.replace(input_text, '')
|
92
|
+
|
93
|
+
# # # Method 2
|
94
|
+
# print('before')
|
95
|
+
# pipe = pipeline(
|
96
|
+
# "text-generation",
|
97
|
+
# model=model,
|
98
|
+
# tokenizer=tokenizer,
|
99
|
+
# streamer=streamer,
|
100
|
+
# max_new_tokens=max_tokens,
|
101
|
+
# temperature=0.7,
|
102
|
+
# top_p=0.95,
|
103
|
+
# repetition_penalty=1.15,
|
104
|
+
# return_full_text=False)
|
105
|
+
# print('pipe')
|
106
|
+
# a = pipe(input_text)
|
107
|
+
# print(a)
|
108
|
+
print("Posting: ", new_text)
|
109
|
+
output = resources_pb2.Output()
|
110
|
+
output.data.text.raw = new_text
|
111
|
+
result = service_pb2.MultiOutputResponse(
|
112
|
+
status=status_pb2.Status(
|
113
|
+
code=status_code_pb2.SUCCESS,
|
114
|
+
description="Success",
|
115
|
+
),
|
116
|
+
outputs=[output],
|
117
|
+
)
|
118
|
+
yield result
|
119
|
+
print(f"Total time: {time.time() - total_start}")
|
120
|
+
print(f"Average time: {sum(times) / len(times)}")
|
121
|
+
|
122
|
+
|
123
|
+
if __name__ == '__main__':
|
124
|
+
# Make sure you set these env vars before running the example.
|
125
|
+
# CLARIFAI_PAT
|
126
|
+
# CLARIFAI_USER_ID
|
127
|
+
|
128
|
+
# You need to first create a runner in the Clarifai API and then use the ID here.
|
129
|
+
MyRunner(runner_id="matt-test-runner", base_url="http://q6:32013", num_parallel_polls=1).start()
|
@@ -0,0 +1,128 @@
|
|
1
|
+
from clarifai_grpc.grpc.api import resources_pb2, service_pb2
|
2
|
+
from clarifai_grpc.grpc.api.status import status_code_pb2, status_pb2
|
3
|
+
from collections.abc import Iterator
|
4
|
+
from google.protobuf import json_format
|
5
|
+
|
6
|
+
from clarifai.client.runner import Runner
|
7
|
+
import time
|
8
|
+
from threading import Thread
|
9
|
+
|
10
|
+
import grpc
|
11
|
+
import requests
|
12
|
+
|
13
|
+
from transformers import (AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer)
|
14
|
+
|
15
|
+
model_name_or_path = "TheBloke/Llama-2-7B-chat-GPTQ"
|
16
|
+
model_basename = "model"
|
17
|
+
use_triton = False
|
18
|
+
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path, use_fast=True)
|
19
|
+
model = AutoModelForCausalLM.from_pretrained(model_name_or_path, device_map='auto')
|
20
|
+
streamer = TextIteratorStreamer(tokenizer)
|
21
|
+
print("Model loaded")
|
22
|
+
|
23
|
+
|
24
|
+
class MyRunner(Runner):
|
25
|
+
"""A custom runner that adds "Hello World" to the end of the text and replaces the domain of the
|
26
|
+
image URL as an example.
|
27
|
+
"""
|
28
|
+
|
29
|
+
def run_input(self, input: resources_pb2.Input, output_info: resources_pb2.OutputInfo,
|
30
|
+
**kwargs) -> resources_pb2.Output:
|
31
|
+
"""This is the method that will be called when the runner is run. It takes in an input and
|
32
|
+
returns an output.
|
33
|
+
"""
|
34
|
+
|
35
|
+
output = resources_pb2.Output()
|
36
|
+
|
37
|
+
data = input.data
|
38
|
+
|
39
|
+
# Optional use of output_info
|
40
|
+
params_dict = {}
|
41
|
+
if "params" in output_info:
|
42
|
+
params_dict = output_info["params"]
|
43
|
+
|
44
|
+
if data.text.raw != "":
|
45
|
+
output.data.text.raw = data.text.raw + "Hello World" + params_dict.get(
|
46
|
+
"hello", "") + kwargs.get("extra", "")
|
47
|
+
if data.image.url != "":
|
48
|
+
output.data.text.raw = data.image.url.replace("samples.clarifai.com",
|
49
|
+
"newdomain.com" + params_dict.get("domain",))
|
50
|
+
return output
|
51
|
+
|
52
|
+
def generate(self, request: service_pb2.PostModelOutputsRequest
|
53
|
+
) -> Iterator[service_pb2.MultiOutputResponse]:
|
54
|
+
"""Example yielding a whole batch of streamed stuff back.
|
55
|
+
"""
|
56
|
+
|
57
|
+
output_info = None
|
58
|
+
if request.model.model_version.id != "":
|
59
|
+
output_info = json_format.MessageToDict(
|
60
|
+
request.model.model_version.output_info, preserving_proto_field_name=True)
|
61
|
+
|
62
|
+
for inp in request.inputs:
|
63
|
+
data = inp.data
|
64
|
+
print('start')
|
65
|
+
if data.text.raw != "":
|
66
|
+
input_text = data.text.raw
|
67
|
+
elif data.text.url != "":
|
68
|
+
input_text = str(requests.get(data.text.url).text)
|
69
|
+
else:
|
70
|
+
raise Exception("Need to include data.text.raw or data.text.url in your inputs.")
|
71
|
+
|
72
|
+
st = time.time()
|
73
|
+
max_tokens = 1024
|
74
|
+
# # Method 1
|
75
|
+
inputs = tokenizer(input_text, return_tensors='pt') #.input_ids.cuda()
|
76
|
+
generation_kwargs = dict(inputs, streamer=streamer, max_new_tokens=max_tokens)
|
77
|
+
thread = Thread(target=model.generate, kwargs=generation_kwargs)
|
78
|
+
thread.start()
|
79
|
+
times = []
|
80
|
+
st = time.time()
|
81
|
+
for new_text in streamer:
|
82
|
+
duration = time.time() - st
|
83
|
+
st = time.time()
|
84
|
+
print(f"Duration: {duration}")
|
85
|
+
times.append(duration)
|
86
|
+
# for new_text in ["hello", "world", "i'm", "streaming"]:
|
87
|
+
|
88
|
+
# out = model.generate(inputs=input_ids, temperature=0.7, max_new_tokens=max_tokens)
|
89
|
+
# out_text = tokenizer.decode(out[0], skip_special_tokens=True)
|
90
|
+
# output.data.text.raw = out_text.replace(input_text, '')
|
91
|
+
|
92
|
+
# # # Method 2
|
93
|
+
# print('before')
|
94
|
+
# pipe = pipeline(
|
95
|
+
# "text-generation",
|
96
|
+
# model=model,
|
97
|
+
# tokenizer=tokenizer,
|
98
|
+
# streamer=streamer,
|
99
|
+
# max_new_tokens=max_tokens,
|
100
|
+
# temperature=0.7,
|
101
|
+
# top_p=0.95,
|
102
|
+
# repetition_penalty=1.15,
|
103
|
+
# return_full_text=False)
|
104
|
+
# print('pipe')
|
105
|
+
# a = pipe(input_text)
|
106
|
+
# print(a)
|
107
|
+
print("Posting: ", new_text)
|
108
|
+
output = resources_pb2.Output()
|
109
|
+
output.data.text.raw = new_text
|
110
|
+
result = service_pb2.MultiOutputResponse(
|
111
|
+
status=status_pb2.Status(
|
112
|
+
code=status_code_pb2.SUCCESS,
|
113
|
+
description="Success",
|
114
|
+
),
|
115
|
+
outputs=[output],
|
116
|
+
)
|
117
|
+
yield result
|
118
|
+
print(f"Total time: {time.time() - st}")
|
119
|
+
print(f"Average time: {sum(times) / len(times)}")
|
120
|
+
|
121
|
+
|
122
|
+
if __name__ == '__main__':
|
123
|
+
# Make sure you set these env vars before running the example.
|
124
|
+
# CLARIFAI_PAT
|
125
|
+
# CLARIFAI_USER_ID
|
126
|
+
|
127
|
+
# You need to first create a runner in the Clarifai API and then use the ID here.
|
128
|
+
MyRunner(runner_id="matt-test-runner", base_url="http://q6:32013", num_parallel_polls=1).start()
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
clarifai/utils/constants.py
CHANGED
@@ -1,12 +1,2 @@
|
|
1
|
-
import os
|
2
|
-
|
3
|
-
USER_CACHE_DIR = os.path.join(os.path.expanduser("~"), ".cache")
|
4
|
-
CLARIFAI_HOME = os.path.expanduser(
|
5
|
-
os.getenv(
|
6
|
-
"CLARIFAI_HOME",
|
7
|
-
os.path.join(os.getenv("XDG_CACHE_HOME", USER_CACHE_DIR), "clarifai"),
|
8
|
-
))
|
9
|
-
os.makedirs(CLARIFAI_HOME, exist_ok=True)
|
10
|
-
CLARIFAI_PAT_PATH = os.path.join(CLARIFAI_HOME, "pat")
|
11
1
|
CLARIFAI_PAT_ENV_VAR = "CLARIFAI_PAT"
|
12
2
|
CLARIFAI_SESSION_TOKEN_ENV_VAR = "CLARIFAI_SESSION_TOKEN"
|
clarifai/versions.py
CHANGED
Binary file
|
Binary file
|
Binary file
|
Binary file
|