Skip to content

Commit

Permalink
document V2
Browse files Browse the repository at this point in the history
  • Loading branch information
Antonio Cheong committed Mar 9, 2023
1 parent eb368b1 commit 4e2894f
Show file tree
Hide file tree
Showing 6 changed files with 198 additions and 383 deletions.
39 changes: 39 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,45 @@ for data in chatbot.ask("Hello world"):

</details>

<details>

<summary>

# V2 Free GPT-3 Chatbot
> Unofficial by third party
</summary>
## Command line
```bash
$ python3 -m revChatGPT.V2 -h

ChatGPT - A command-line interface to OpenAI's ChatGPT (https://chat.openai.com/chat)
Repo: github.com/acheong08/ChatGPT
usage: V2.py [-h] [--proxy PROXY] --api_key API_KEY
options:
-h, --help show this help message and exit
--proxy PROXY Use a proxy
--api_key API_KEY Pawans API key (Optional. Do not set)
```
## Developer API
```python
from revChatGPT.V2 import Chatbot
async def main():
async for line in chatbot.ask(prompt="Hello world"):
print(line["choices"][0]["text"], flush=True)
import asyncio
asyncio.run(main())
```
More details in wiki.
</details>
# Awesome ChatGPT
Expand Down
4 changes: 3 additions & 1 deletion src/revChatGPT/V2.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@
import httpx
import tiktoken

from .utils import create_completer, create_session, get_input_async
from .utils import create_completer
from .utils import create_session
from .utils import get_input_async

ENCODER = tiktoken.get_encoding("gpt2")

Expand Down
15 changes: 10 additions & 5 deletions src/revChatGPT/V3.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@
import requests
import tiktoken

from .utils import create_completer, create_keybindings
from .utils import create_completer
from .utils import create_keybindings
from .utils import create_session
from .utils import get_input

Expand Down Expand Up @@ -148,10 +149,12 @@ def ask_stream(
"temperature": kwargs.get("temperature", self.temperature),
"top_p": kwargs.get("top_p", self.top_p),
"presence_penalty": kwargs.get(
"presence_penalty", self.presence_penalty
"presence_penalty",
self.presence_penalty,
),
"frequency_penalty": kwargs.get(
"frequency_penalty", self.frequency_penalty
"frequency_penalty",
self.frequency_penalty,
),
"n": kwargs.get("n", self.reply_count),
"user": role,
Expand Down Expand Up @@ -476,7 +479,7 @@ def main() -> NoReturn:
else:
if args.api_key is None:
print(
"Add a config.v3.json and add the path using --config or add an api_key using --api_key"
"Add a config.v3.json and add the path using --config or add an api_key using --api_key",
)
# raising at top level is messy and can confuse some people
return
Expand Down Expand Up @@ -523,7 +526,9 @@ def main() -> NoReturn:
try:
print("User: ")
prompt = get_input(
session=session, completer=completer, key_bindings=key_bindings
session=session,
completer=completer,
key_bindings=key_bindings,
)
except KeyboardInterrupt:
print("\nExiting...")
Expand Down
12 changes: 10 additions & 2 deletions src/revChatGPT/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,20 @@

bindings = KeyBindings()


def create_keybindings(key: str = "c-@") -> KeyBindings:
"""
Create keybindings for prompt_toolkit. Default key is ctrl+space.
For possible keybindings, see: https://python-prompt-toolkit.readthedocs.io/en/stable/pages/advanced_topics/key_bindings.html#list-of-special-keys
"""

@bindings.add(key)
def _(event):
event.app.exit(result=event.app.current_buffer.text)

return bindings


def create_session() -> PromptSession:
return PromptSession(history=InMemoryHistory())

Expand All @@ -28,7 +31,11 @@ def create_completer(commands: list, pattern_str: str = "$") -> WordCompleter:
return WordCompleter(words=commands, pattern=re.compile(pattern_str))


def get_input(session: PromptSession = None, completer: WordCompleter = None, key_bindings = None) -> str:
def get_input(
session: PromptSession = None,
completer: WordCompleter = None,
key_bindings=None,
) -> str:
"""
Multiline input function.
"""
Expand All @@ -45,7 +52,8 @@ def get_input(session: PromptSession = None, completer: WordCompleter = None, ke


async def get_input_async(
session: PromptSession = None, completer: WordCompleter = None
session: PromptSession = None,
completer: WordCompleter = None,
) -> str:
"""
Multiline input function.
Expand Down
Loading

0 comments on commit 4e2894f

Please sign in to comment.