summaryrefslogtreecommitdiffstats
path: root/g4f/client/stubs.py
diff options
context:
space:
mode:
authorH Lohaus <hlohaus@users.noreply.github.com>2024-04-06 20:37:07 +0200
committerGitHub <noreply@github.com>2024-04-06 20:37:07 +0200
commit0c4a1d0bfa7806778a5f558a809d383e8beff786 (patch)
tree9adc69cfc0cd94f9ef80174ea06e2c0200b965cc /g4f/client/stubs.py
parentDelete g4f/client/typing.py (diff)
downloadgpt4free-0c4a1d0bfa7806778a5f558a809d383e8beff786.tar
gpt4free-0c4a1d0bfa7806778a5f558a809d383e8beff786.tar.gz
gpt4free-0c4a1d0bfa7806778a5f558a809d383e8beff786.tar.bz2
gpt4free-0c4a1d0bfa7806778a5f558a809d383e8beff786.tar.lz
gpt4free-0c4a1d0bfa7806778a5f558a809d383e8beff786.tar.xz
gpt4free-0c4a1d0bfa7806778a5f558a809d383e8beff786.tar.zst
gpt4free-0c4a1d0bfa7806778a5f558a809d383e8beff786.zip
Diffstat (limited to 'g4f/client/stubs.py')
-rw-r--r--g4f/client/stubs.py107
1 files changed, 106 insertions, 1 deletions
diff --git a/g4f/client/stubs.py b/g4f/client/stubs.py
index 4287ca86..2441e287 100644
--- a/g4f/client/stubs.py
+++ b/g4f/client/stubs.py
@@ -1 +1,106 @@
-# \ No newline at end of file
+from __future__ import annotations
+
+from typing import Union
+
+class Model():
+ ...
+
+class ChatCompletion(Model):
+ def __init__(
+ self,
+ content: str,
+ finish_reason: str,
+ completion_id: str = None,
+ created: int = None
+ ):
+ self.id: str = f"chatcmpl-{completion_id}" if completion_id else None
+ self.object: str = "chat.completion"
+ self.created: int = created
+ self.model: str = None
+ self.provider: str = None
+ self.choices = [ChatCompletionChoice(ChatCompletionMessage(content), finish_reason)]
+ self.usage: dict[str, int] = {
+ "prompt_tokens": 0, #prompt_tokens,
+ "completion_tokens": 0, #completion_tokens,
+ "total_tokens": 0, #prompt_tokens + completion_tokens,
+ }
+
+ def to_json(self):
+ return {
+ **self.__dict__,
+ "choices": [choice.to_json() for choice in self.choices]
+ }
+
+class ChatCompletionChunk(Model):
+ def __init__(
+ self,
+ content: str,
+ finish_reason: str,
+ completion_id: str = None,
+ created: int = None
+ ):
+ self.id: str = f"chatcmpl-{completion_id}" if completion_id else None
+ self.object: str = "chat.completion.chunk"
+ self.created: int = created
+ self.model: str = None
+ self.provider: str = None
+ self.choices = [ChatCompletionDeltaChoice(ChatCompletionDelta(content), finish_reason)]
+
+ def to_json(self):
+ return {
+ **self.__dict__,
+ "choices": [choice.to_json() for choice in self.choices]
+ }
+
+class ChatCompletionMessage(Model):
+ def __init__(self, content: Union[str, None]):
+ self.role = "assistant"
+ self.content = content
+
+ def to_json(self):
+ return self.__dict__
+
+class ChatCompletionChoice(Model):
+ def __init__(self, message: ChatCompletionMessage, finish_reason: str):
+ self.index = 0
+ self.message = message
+ self.finish_reason = finish_reason
+
+ def to_json(self):
+ return {
+ **self.__dict__,
+ "message": self.message.to_json()
+ }
+
+class ChatCompletionDelta(Model):
+ content: Union[str, None] = None
+
+ def __init__(self, content: Union[str, None]):
+ if content is not None:
+ self.content = content
+
+ def to_json(self):
+ return self.__dict__
+
+class ChatCompletionDeltaChoice(Model):
+ def __init__(self, delta: ChatCompletionDelta, finish_reason: Union[str, None]):
+ self.delta = delta
+ self.finish_reason = finish_reason
+
+ def to_json(self):
+ return {
+ **self.__dict__,
+ "delta": self.delta.to_json()
+ }
+
+class Image(Model):
+ url: str
+
+ def __init__(self, url: str) -> None:
+ self.url = url
+
+class ImagesResponse(Model):
+ data: list[Image]
+
+ def __init__(self, data: list) -> None:
+ self.data = data