From e0f5e837299aab9a6b398aa498dee5baeb177d61 Mon Sep 17 00:00:00 2001 From: kqlio67 <166700875+kqlio67@users.noreply.github.com> Date: Sat, 28 Dec 2024 19:11:48 +0000 Subject: Update docs/. etc/. g4f/. README.md (#2515) Co-authored-by: kqlio67 <> --- etc/examples/api.py | 51 -------------------------- etc/examples/api_completions_copilot.py | 55 +++++++++++++++++++++++++++++ etc/examples/api_generations_image.py | 11 ++++++ etc/examples/image_api.py | 9 ----- etc/examples/image_chat_reka.py | 27 -------------- etc/examples/messages.py | 33 +++++++++++++++++ etc/examples/messages_stream.py | 25 +++++++++++++ etc/examples/openaichat.py | 0 etc/examples/text_completions_demo_async.py | 17 +++++++++ etc/examples/text_completions_demo_sync.py | 13 +++++++ etc/examples/text_completions_streaming.py | 49 +++++++++++++++++++++++++ etc/examples/vision_images.py | 36 +++++++++++++++++++ etc/examples/vision_images_reka.py | 27 ++++++++++++++ 13 files changed, 266 insertions(+), 87 deletions(-) delete mode 100644 etc/examples/api.py create mode 100755 etc/examples/api_completions_copilot.py create mode 100755 etc/examples/api_generations_image.py delete mode 100644 etc/examples/image_api.py delete mode 100644 etc/examples/image_chat_reka.py create mode 100755 etc/examples/messages.py create mode 100755 etc/examples/messages_stream.py mode change 100644 => 100755 etc/examples/openaichat.py create mode 100755 etc/examples/text_completions_demo_async.py create mode 100755 etc/examples/text_completions_demo_sync.py create mode 100755 etc/examples/text_completions_streaming.py create mode 100644 etc/examples/vision_images.py create mode 100755 etc/examples/vision_images_reka.py (limited to 'etc') diff --git a/etc/examples/api.py b/etc/examples/api.py deleted file mode 100644 index 2485bade..00000000 --- a/etc/examples/api.py +++ /dev/null @@ -1,51 +0,0 @@ -import requests -import json -import uuid - -url = "http://localhost:1337/v1/chat/completions" -conversation_id = str(uuid.uuid4()) -body = { - "model": "", - "provider": "Copilot", - "stream": True, - "messages": [ - {"role": "user", "content": "Hello, i am Heiner. How are you?"} - ], - "conversation_id": conversation_id -} -response = requests.post(url, json=body, stream=True) -response.raise_for_status() -for line in response.iter_lines(): - if line.startswith(b"data: "): - try: - json_data = json.loads(line[6:]) - if json_data.get("error"): - print(json_data) - break - print(json_data.get("choices", [{"delta": {}}])[0]["delta"].get("content", ""), end="") - except json.JSONDecodeError: - pass -print() -print() -print() -body = { - "model": "", - "provider": "Copilot", - "stream": True, - "messages": [ - {"role": "user", "content": "Tell me somethings about my name"} - ], - "conversation_id": conversation_id -} -response = requests.post(url, json=body, stream=True) -response.raise_for_status() -for line in response.iter_lines(): - if line.startswith(b"data: "): - try: - json_data = json.loads(line[6:]) - if json_data.get("error"): - print(json_data) - break - print(json_data.get("choices", [{"delta": {}}])[0]["delta"].get("content", ""), end="") - except json.JSONDecodeError: - pass \ No newline at end of file diff --git a/etc/examples/api_completions_copilot.py b/etc/examples/api_completions_copilot.py new file mode 100755 index 00000000..6c77f8e9 --- /dev/null +++ b/etc/examples/api_completions_copilot.py @@ -0,0 +1,55 @@ +import requests +import json +import uuid + +url = "http://localhost:1337/v1/chat/completions" +conversation_id = str(uuid.uuid4()) +body = { + "model": "", + "provider": "Copilot", + "stream": True, + "messages": [ + {"role": "user", "content": "Hello, i am Heiner. How are you?"} + ], + "conversation_id": conversation_id +} +response = requests.post(url, json=body, stream=True) +response.raise_for_status() +for line in response.iter_lines(): + if line.startswith(b"data: "): + try: + json_data = json.loads(line[6:]) + if json_data.get("error"): + print(json_data) + break + content = json_data.get("choices", [{"delta": {}}])[0]["delta"].get("content", "") + if content: + print(content, end="") + except json.JSONDecodeError: + pass +print() +print() +print() +body = { + "model": "", + "provider": "Copilot", + "stream": True, + "messages": [ + {"role": "user", "content": "Tell me somethings about my name"} + ], + "conversation_id": conversation_id +} +response = requests.post(url, json=body, stream=True) +response.raise_for_status() +for line in response.iter_lines(): + if line.startswith(b"data: "): + try: + json_data = json.loads(line[6:]) + if json_data.get("error"): + print(json_data) + break + content = json_data.get("choices", [{"delta": {}}])[0]["delta"].get("content", "") + if content: + print(content, end="") + except json.JSONDecodeError: + pass diff --git a/etc/examples/api_generations_image.py b/etc/examples/api_generations_image.py new file mode 100755 index 00000000..368d5acc --- /dev/null +++ b/etc/examples/api_generations_image.py @@ -0,0 +1,11 @@ +import requests +url = "http://localhost:1337/v1/images/generations" +body = { + "model": "flux", + "prompt": "hello world user", + "response_format": None, + #"response_format": "url", + #"response_format": "b64_json", +} +data = requests.post(url, json=body, stream=True).json() +print(data) diff --git a/etc/examples/image_api.py b/etc/examples/image_api.py deleted file mode 100644 index 9a438f9b..00000000 --- a/etc/examples/image_api.py +++ /dev/null @@ -1,9 +0,0 @@ -import requests -url = "http://localhost:1337/v1/images/generations" -body = { - "model": "dall-e", - "prompt": "hello world user", - #"response_format": "b64_json", -} -data = requests.post(url, json=body, stream=True).json() -print(data) \ No newline at end of file diff --git a/etc/examples/image_chat_reka.py b/etc/examples/image_chat_reka.py deleted file mode 100644 index 954960db..00000000 --- a/etc/examples/image_chat_reka.py +++ /dev/null @@ -1,27 +0,0 @@ -# Image Chat with Reca -# !! YOU NEED COOKIES / BE LOGGED IN TO chat.reka.ai -# download an image and save it as test.png in the same folder - -from g4f.client import Client -from g4f.Provider import Reka - -client = Client( - provider = Reka # Optional if you set model name to reka-core -) - -completion = client.chat.completions.create( - model = "reka-core", - messages = [ - { - "role": "user", - "content": "What can you see in the image ?" - } - ], - stream = True, - image = open("test.png", "rb") # open("path", "rb"), do not use .read(), etc. it must be a file object -) - -for message in completion: - print(message.choices[0].delta.content or "") - - # >>> In the image there is ... \ No newline at end of file diff --git a/etc/examples/messages.py b/etc/examples/messages.py new file mode 100755 index 00000000..32720c7c --- /dev/null +++ b/etc/examples/messages.py @@ -0,0 +1,33 @@ +from g4f.client import Client + +class ConversationHandler: + def __init__(self, model="gpt-4"): + self.client = Client() + self.model = model + self.conversation_history = [] + + def add_user_message(self, content): + self.conversation_history.append({ + "role": "user", + "content": content + }) + + def get_response(self): + response = self.client.chat.completions.create( + model=self.model, + messages=self.conversation_history + ) + assistant_message = { + "role": response.choices[0].message.role, + "content": response.choices[0].message.content + } + self.conversation_history.append(assistant_message) + return assistant_message["content"] + +# Usage example +conversation = ConversationHandler() +conversation.add_user_message("Hello!") +print("Assistant:", conversation.get_response()) + +conversation.add_user_message("How are you?") +print("Assistant:", conversation.get_response()) diff --git a/etc/examples/messages_stream.py b/etc/examples/messages_stream.py new file mode 100755 index 00000000..23779798 --- /dev/null +++ b/etc/examples/messages_stream.py @@ -0,0 +1,25 @@ +import asyncio +from g4f.client import AsyncClient + +async def main(): + client = AsyncClient() + + stream = client.chat.completions.create( + model="gpt-4", + messages=[{"role": "user", "content": "Say hello there!"}], + stream=True, + ) + + accumulated_text = "" + try: + async for chunk in stream: + if chunk.choices and chunk.choices[0].delta.content: + content = chunk.choices[0].delta.content + accumulated_text += content + print(content, end="", flush=True) + except Exception as e: + print(f"\nError occurred: {e}") + finally: + print("\n\nFinal accumulated text:", accumulated_text) + +asyncio.run(main()) diff --git a/etc/examples/openaichat.py b/etc/examples/openaichat.py old mode 100644 new mode 100755 diff --git a/etc/examples/text_completions_demo_async.py b/etc/examples/text_completions_demo_async.py new file mode 100755 index 00000000..09818590 --- /dev/null +++ b/etc/examples/text_completions_demo_async.py @@ -0,0 +1,17 @@ +import asyncio +from g4f.client import AsyncClient + +async def main(): + client = AsyncClient() + + response = await client.chat.completions.create( + model="gpt-4o", + messages=[ + {"role": "system", "content": "You are a helpful assistant."}, + {"role": "user", "content": "how does a court case get to the Supreme Court?"} + ] + ) + + print(response.choices[0].message.content) + +asyncio.run(main()) diff --git a/etc/examples/text_completions_demo_sync.py b/etc/examples/text_completions_demo_sync.py new file mode 100755 index 00000000..2ed41b32 --- /dev/null +++ b/etc/examples/text_completions_demo_sync.py @@ -0,0 +1,13 @@ +from g4f.client import Client + +client = Client() + +response = client.chat.completions.create( + model="gpt-4o", + messages=[ + {"role": "system", "content": "You are a helpful assistant."}, + {"role": "user", "content": "how does a court case get to the Supreme Court?"} + ], +) + +print(response.choices[0].message.content) diff --git a/etc/examples/text_completions_streaming.py b/etc/examples/text_completions_streaming.py new file mode 100755 index 00000000..fff27d77 --- /dev/null +++ b/etc/examples/text_completions_streaming.py @@ -0,0 +1,49 @@ +import asyncio +from g4f.client import Client, AsyncClient + +question = """ +Hey! How can I recursively list all files in a directory in Python? +""" + +# Synchronous streaming function +def sync_stream(): + client = Client() + stream = client.chat.completions.create( + model="gpt-4", + messages=[ + {"role": "user", "content": question} + ], + stream=True, + ) + + for chunk in stream: + if chunk.choices[0].delta.content: + print(chunk.choices[0].delta.content or "", end="") + +# Asynchronous streaming function +async def async_stream(): + client = AsyncClient() + stream = client.chat.completions.create( + model="gpt-4", + messages=[ + {"role": "user", "content": question} + ], + stream=True, + ) + + async for chunk in stream: + if chunk.choices and chunk.choices[0].delta.content: + print(chunk.choices[0].delta.content, end="") + +# Main function to run both streams +def main(): + print("Synchronous Stream:") + sync_stream() + print("\n\nAsynchronous Stream:") + asyncio.run(async_stream()) + +if __name__ == "__main__": + try: + main() + except Exception as e: + print(f"An error occurred: {str(e)}") diff --git a/etc/examples/vision_images.py b/etc/examples/vision_images.py new file mode 100644 index 00000000..99780b6f --- /dev/null +++ b/etc/examples/vision_images.py @@ -0,0 +1,36 @@ +import g4f +import requests + +from g4f.client import Client +from g4f.Provider.Blackbox import Blackbox + +client = Client( + provider=Blackbox +) + +# Processing remote image +remote_image = requests.get("https://raw.githubusercontent.com/xtekky/gpt4free/refs/heads/main/docs/images/cat.jpeg", stream=True).content +response_remote = client.chat.completions.create( + model=g4f.models.default, + messages=[ + {"role": "user", "content": "What are on this image?"} + ], + image=remote_image +) +print("Response for remote image:") +print(response_remote.choices[0].message.content) + +print("\n" + "-"*50 + "\n") # Separator + +# Processing local image +local_image = open("docs/images/cat.jpeg", "rb") +response_local = client.chat.completions.create( + model=g4f.models.default, + messages=[ + {"role": "user", "content": "What are on this image?"} + ], + image=local_image +) +print("Response for local image:") +print(response_local.choices[0].message.content) +local_image.close() # Close file after use diff --git a/etc/examples/vision_images_reka.py b/etc/examples/vision_images_reka.py new file mode 100755 index 00000000..6b3a88ab --- /dev/null +++ b/etc/examples/vision_images_reka.py @@ -0,0 +1,27 @@ +# Image Chat with Reca +# !! YOU NEED COOKIES / BE LOGGED IN TO chat.reka.ai +# download an image and save it as test.png in the same folder + +from g4f.client import Client +from g4f.Provider import Reka + +client = Client( + provider = Reka # Optional if you set model name to reka-core +) + +completion = client.chat.completions.create( + model = "reka-core", + messages = [ + { + "role": "user", + "content": "What can you see in the image ?" + } + ], + stream = True, + image = open("docs/images/cat.jpeg", "rb") # open("path", "rb"), do not use .read(), etc. it must be a file object +) + +for message in completion: + print(message.choices[0].delta.content or "") + + # >>> In the image there is ... -- cgit v1.2.3