From dc1d9834f97bc5044c6417aeb44b9ca84bd18118 Mon Sep 17 00:00:00 2001 From: Raju Komati Date: Fri, 28 Apr 2023 02:58:12 +0530 Subject: added theb to openai_rev module --- openai_rev/forefront/__init__.py | 1 - openai_rev/openai_rev.py | 8 +++++++ openai_rev/theb/README.md | 10 ++++++++ openai_rev/theb/__init__.py | 52 ++++++++++++++++++++++++++++++++++++++++ openai_rev/theb/theb_test.py | 4 ++++ 5 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 openai_rev/theb/README.md create mode 100644 openai_rev/theb/__init__.py create mode 100644 openai_rev/theb/theb_test.py (limited to 'openai_rev') diff --git a/openai_rev/forefront/__init__.py b/openai_rev/forefront/__init__.py index 10202615..6fece65a 100644 --- a/openai_rev/forefront/__init__.py +++ b/openai_rev/forefront/__init__.py @@ -169,7 +169,6 @@ class Completion: ) -> ForeFrontResponse: text = '' final_response = None - res = list(StreamingCompletion.create(token=token, prompt=prompt)) for response in StreamingCompletion.create( token=token, chat_id=chat_id, diff --git a/openai_rev/openai_rev.py b/openai_rev/openai_rev.py index 7d483c01..6b88298b 100644 --- a/openai_rev/openai_rev.py +++ b/openai_rev/openai_rev.py @@ -2,6 +2,7 @@ from enum import Enum from openai_rev import forefront from openai_rev import quora +from openai_rev import theb from openai_rev import you @@ -9,6 +10,7 @@ class Provider(Enum): You = 'you' Poe = 'poe' ForeFront = 'fore_front' + Theb = 'theb' class Completion: @@ -20,6 +22,8 @@ class Completion: return Completion.__you_service(prompt, **kwargs) elif provider == Provider.ForeFront: return Completion.__fore_front_service(prompt, **kwargs) + elif provider == Provider.Theb: + return Completion.__theb_service(prompt, **kwargs) @classmethod def __you_service(cls, prompt: str, **kwargs) -> str: @@ -32,3 +36,7 @@ class Completion: @classmethod def __fore_front_service(cls, prompt: str, **kwargs) -> str: return forefront.Completion.create(prompt=prompt, **kwargs).text + + @classmethod + def __theb_service(cls, prompt: str, **kwargs): + return ''.join(theb.Completion.create(prompt=prompt)) diff --git a/openai_rev/theb/README.md b/openai_rev/theb/README.md new file mode 100644 index 00000000..bd37ba3f --- /dev/null +++ b/openai_rev/theb/README.md @@ -0,0 +1,10 @@ +### Example: `theb` (use like openai pypi package) + +```python +# import library +from openai_rev import theb + +# simple streaming completion +for token in theb.Completion.create('hello world'): + print(token, end='', flush=True) +``` \ No newline at end of file diff --git a/openai_rev/theb/__init__.py b/openai_rev/theb/__init__.py new file mode 100644 index 00000000..fa79fdd9 --- /dev/null +++ b/openai_rev/theb/__init__.py @@ -0,0 +1,52 @@ +from json import loads +from queue import Queue, Empty +from re import findall +from threading import Thread + +from curl_cffi import requests + + +class Completion: + # experimental + part1 = '{"role":"assistant","id":"chatcmpl' + part2 = '"},"index":0,"finish_reason":null}]}}' + regex = rf'{part1}(.*){part2}' + + timer = None + message_queue = Queue() + stream_completed = False + + @classmethod + def request(cls, prompt: str): + headers = { + 'authority': 'chatbot.theb.ai', + 'content-type': 'application/json', + 'origin': 'https://chatbot.theb.ai', + 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36', + } + + requests.post( + 'https://chatbot.theb.ai/api/chat-process', + headers=headers, + content_callback=Completion.handle_stream_response, + json={'prompt': prompt, 'options': {}}, + ) + + Completion.stream_completed = True + + @staticmethod + def create(prompt: str): + Thread(target=Completion.request, args=[prompt]).start() + + while not Completion.stream_completed or not Completion.message_queue.empty(): + try: + message = Completion.message_queue.get(timeout=0.01) + for message in findall(Completion.regex, message): + yield loads(Completion.part1 + message + Completion.part2)['delta'] + + except Empty: + pass + + @staticmethod + def handle_stream_response(response): + Completion.message_queue.put(response.decode()) diff --git a/openai_rev/theb/theb_test.py b/openai_rev/theb/theb_test.py new file mode 100644 index 00000000..805ef094 --- /dev/null +++ b/openai_rev/theb/theb_test.py @@ -0,0 +1,4 @@ +from openai_rev import theb + +for token in theb.Completion.create('hello world'): + print(token, end='', flush=True) -- cgit v1.2.3