XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 1
返回提交历史

XFEstudio/gpt4free

updated query methods in streamlit

afcaf7b7
Raju Komati <komatiraju032@gmail.com>
提交于

代码差异

3 个文件 +54 -60
Modified gpt4free/theb/__init__.py +14 -10
@@ -1,8 +1,12 @@
1 from re import findall
2 1 from json import loads
3 2 from queue import Queue, Empty
3 from re import findall
4 4 from threading import Thread
5 from typing import Generator
6
5 7 from curl_cffi import requests
8 from fake_useragent import UserAgent
9
6 10
7 11 class Completion:
8 12 # experimental
@@ -14,29 +18,29 @@ class Completion:
14 18 message_queue = Queue()
15 19 stream_completed = False
16 20
21 @staticmethod
17 22 def request(prompt: str):
18 23 headers = {
19 24 'authority': 'chatbot.theb.ai',
20 25 'content-type': 'application/json',
21 26 'origin': 'https://chatbot.theb.ai',
22 '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',
27 'user-agent': UserAgent().random,
23 28 }
24 29
25 requests.post('https://chatbot.theb.ai/api/chat-process', headers=headers,
26 content_callback = Completion.handle_stream_response,
27 json = {
28 'prompt': prompt,
29 'options': {}
30 }
30 requests.post(
31 'https://chatbot.theb.ai/api/chat-process',
32 headers=headers,
33 content_callback=Completion.handle_stream_response,
34 json={'prompt': prompt, 'options': {}},
31 35 )
32 36
33 37 Completion.stream_completed = True
34 38
35 39 @staticmethod
36 def create(prompt: str):
40 def create(prompt: str) -> Generator[str, None, None]:
37 41 Thread(target=Completion.request, args=[prompt]).start()
38 42
39 while Completion.stream_completed != True or not Completion.message_queue.empty():
43 while not Completion.stream_completed or not Completion.message_queue.empty():
40 44 try:
41 45 message = Completion.message_queue.get(timeout=0.01)
42 46 for message in findall(Completion.regex, message):
Modified gui/query_methods.py +26 -34
@@ -7,7 +7,6 @@ from gpt4free import quora, forefront, theb, you
7 7 import random
8 8
9 9
10
11 10 def query_forefront(question: str) -> str:
12 11 # create an account
13 12 token = forefront.Account.create(logging=False)
@@ -15,65 +14,59 @@ def query_forefront(question: str) -> str:
15 14 response = ""
16 15 # get a response
17 16 try:
18 for i in forefront.StreamingCompletion.create(token = token, prompt ='hello world', model='gpt-4'):
19 response += i.completion.choices[0].text
20
21 return response
22
17 return forefront.Completion.create(token=token, prompt='hello world', model='gpt-4').text
23 18 except Exception as e:
24 19 # Return error message if an exception occurs
25 return f'An error occurred: {e}. Please make sure you are using a valid cloudflare clearance token and user agent.'
20 return (
21 f'An error occurred: {e}. Please make sure you are using a valid cloudflare clearance token and user agent.'
22 )
26 23
27 24
28 25 def query_quora(question: str) -> str:
29 26 token = quora.Account.create(logging=False, enable_bot_creation=True)
30 response = quora.Completion.create(
31 model='gpt-4',
32 prompt=question,
33 token=token
34 )
35
36 return response.completion.choices[0].tex
27 return quora.Completion.create(model='gpt-4', prompt=question, token=token).text
37 28
38 29
39 30 def query_theb(question: str) -> str:
40 31 # Set cloudflare clearance cookie and get answer from GPT-4 model
41 32 response = ""
42 33 try:
43 result = theb.Completion.create(
44 prompt = question)
45 return result
46
34 return ''.join(theb.Completion.create(prompt=question))
35
47 36 except Exception as e:
48 37 # Return error message if an exception occurs
49 return f'An error occurred: {e}. Please make sure you are using a valid cloudflare clearance token and user agent.'
38 return (
39 f'An error occurred: {e}. Please make sure you are using a valid cloudflare clearance token and user agent.'
40 )
50 41
51 42
52 43 def query_you(question: str) -> str:
53 44 # Set cloudflare clearance cookie and get answer from GPT-4 model
54 45 try:
55 result = you.Completion.create(
56 prompt = question)
46 result = you.Completion.create(prompt=question)
57 47 return result["response"]
58
48
59 49 except Exception as e:
60 50 # Return error message if an exception occurs
61 return f'An error occurred: {e}. Please make sure you are using a valid cloudflare clearance token and user agent.'
51 return (
52 f'An error occurred: {e}. Please make sure you are using a valid cloudflare clearance token and user agent.'
53 )
54
62 55
63 56 # Define a dictionary containing all query methods
64 57 avail_query_methods = {
65 "Forefront": query_forefront,
66 "Poe": query_quora,
67 "Theb": query_theb,
68 "You": query_you,
69 # "Writesonic": query_writesonic,
70 # "T3nsor": query_t3nsor,
71 # "Phind": query_phind,
72 # "Ora": query_ora,
73 }
58 "Forefront": query_forefront,
59 "Poe": query_quora,
60 "Theb": query_theb,
61 "You": query_you,
62 # "Writesonic": query_writesonic,
63 # "T3nsor": query_t3nsor,
64 # "Phind": query_phind,
65 # "Ora": query_ora,
66 }
74 67
75 def query(user_input: str, selected_method: str = "Random") -> str:
76 68
69 def query(user_input: str, selected_method: str = "Random") -> str:
77 70 # If a specific query method is selected (not "Random") and the method is in the dictionary, try to call it
78 71 if selected_method != "Random" and selected_method in avail_query_methods:
79 72 try:
@@ -104,4 +97,3 @@ def query(user_input: str, selected_method: str = "Random") -> str:
104 97 query_methods_list.remove(chosen_query)
105 98
106 99 return result
107
Modified gui/streamlit_chat_app.py +14 -16
@@ -1,6 +1,6 @@
1 import atexit
1 2 import os
2 3 import sys
3 import atexit
4 4
5 5 sys.path.append(os.path.join(os.path.dirname(__file__), os.path.pardir))
6 6
@@ -9,9 +9,9 @@ from streamlit_chat import message
9 9 from query_methods import query, avail_query_methods
10 10 import pickle
11 11
12
13 12 conversations_file = "conversations.pkl"
14 13
14
15 15 def load_conversations():
16 16 try:
17 17 with open(conversations_file, "rb") as f:
@@ -31,11 +31,11 @@ def save_conversations(conversations, current_conversation):
31 31 break
32 32 if not updated:
33 33 conversations.append(current_conversation)
34
34
35 35 temp_conversations_file = "temp_" + conversations_file
36 36 with open(temp_conversations_file, "wb") as f:
37 37 pickle.dump(conversations, f)
38
38
39 39 os.replace(temp_conversations_file, conversations_file)
40 40
41 41
@@ -44,10 +44,10 @@ def exit_handler():
44 44 # Perform cleanup operations here, like saving data or closing open files.
45 45 save_conversations(st.session_state.conversations, st.session_state.current_conversation)
46 46
47
47 48 # Register the exit_handler function to be called when the program is closing.
48 49 atexit.register(exit_handler)
49 50
50
51 51 st.header("Chat Placeholder")
52 52
53 53 if 'conversations' not in st.session_state:
@@ -61,7 +61,7 @@ if 'selected_conversation' not in st.session_state:
61 61
62 62 if 'input_field_key' not in st.session_state:
63 63 st.session_state['input_field_key'] = 0
64
64
65 65 if 'query_method' not in st.session_state:
66 66 st.session_state['query_method'] = query
67 67
@@ -69,20 +69,22 @@ if 'query_method' not in st.session_state:
69 69 if 'current_conversation' not in st.session_state or st.session_state['current_conversation'] is None:
70 70 st.session_state['current_conversation'] = {'user_inputs': [], 'generated_responses': []}
71 71
72
73 72 input_placeholder = st.empty()
74 user_input = input_placeholder.text_input('You:', key=f'input_text_{len(st.session_state["current_conversation"]["user_inputs"])}')
73 user_input = input_placeholder.text_input(
74 'You:', key=f'input_text_{len(st.session_state["current_conversation"]["user_inputs"])}'
75 )
75 76 submit_button = st.button("Submit")
76 77
77 78 if user_input or submit_button:
78 79 output = query(user_input, st.session_state['query_method'])
79 80 escaped_output = output.encode('utf-8').decode('unicode-escape')
80
81
81 82 st.session_state.current_conversation['user_inputs'].append(user_input)
82 83 st.session_state.current_conversation['generated_responses'].append(escaped_output)
83 84 save_conversations(st.session_state.conversations, st.session_state.current_conversation)
84 user_input = input_placeholder.text_input('You:', value='', key=f'input_text_{len(st.session_state["current_conversation"]["user_inputs"])}') # Clear the input field
85
85 user_input = input_placeholder.text_input(
86 'You:', value='', key=f'input_text_{len(st.session_state["current_conversation"]["user_inputs"])}'
87 ) # Clear the input field
86 88
87 89 # Add a button to create a new conversation
88 90 if st.sidebar.button("New Conversation"):
@@ -90,11 +92,7 @@ if st.sidebar.button("New Conversation"):
90 92 st.session_state['current_conversation'] = {'user_inputs': [], 'generated_responses': []}
91 93 st.session_state['input_field_key'] += 1
92 94
93 st.session_state['query_method'] = st.sidebar.selectbox(
94 "Select API:",
95 options=avail_query_methods,
96 index=0
97 )
95 st.session_state['query_method'] = st.sidebar.selectbox("Select API:", options=avail_query_methods, index=0)
98 96
99 97 # Sidebar
100 98 st.sidebar.header("Conversation History")