返回提交历史
Deleted
g4f/Provider/Llama.py
+0
-91
Modified
g4f/Provider/__init__.py
+0
-1
Deleted
g4f/Provider/selenium/AItianhuSpace.py
+0
-116
XFEstudio/gpt4free
Removed g4f/Provider/selenium/AItianhuSpace.py g4f/Provider/Llama.py | Updated g4f/Provider/__init__.py
a4f75407
代码差异
3 个文件
+0
-208
@@ -1,91 +0,0 @@
1
from __future__ import annotations
2
3
from aiohttp import ClientSession
4
5
from ..typing import AsyncResult, Messages
6
from ..requests.raise_for_status import raise_for_status
7
from .base_provider import AsyncGeneratorProvider, ProviderModelMixin
8
9
10
class Llama(AsyncGeneratorProvider, ProviderModelMixin):
11
url = "https://www.llama2.ai"
12
working = False
13
supports_message_history = True
14
default_model = "meta/meta-llama-3-70b-instruct"
15
models = [
16
"meta/llama-2-7b-chat",
17
"meta/llama-2-13b-chat",
18
"meta/llama-2-70b-chat",
19
"meta/meta-llama-3-8b-instruct",
20
"meta/meta-llama-3-70b-instruct",
21
]
22
model_aliases = {
23
"meta-llama/Meta-Llama-3-8B-Instruct": "meta/meta-llama-3-8b-instruct",
24
"meta-llama/Meta-Llama-3-70B-Instruct": "meta/meta-llama-3-70b-instruct",
25
"meta-llama/Llama-2-7b-chat-hf": "meta/llama-2-7b-chat",
26
"meta-llama/Llama-2-13b-chat-hf": "meta/llama-2-13b-chat",
27
"meta-llama/Llama-2-70b-chat-hf": "meta/llama-2-70b-chat",
28
}
29
30
@classmethod
31
async def create_async_generator(
32
cls,
33
model: str,
34
messages: Messages,
35
proxy: str = None,
36
system_message: str = "You are a helpful assistant.",
37
temperature: float = 0.75,
38
top_p: float = 0.9,
39
max_tokens: int = 8000,
40
**kwargs
41
) -> AsyncResult:
42
headers = {
43
"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/118.0",
44
"Accept": "*/*",
45
"Accept-Language": "de,en-US;q=0.7,en;q=0.3",
46
"Accept-Encoding": "gzip, deflate, br",
47
"Referer": f"{cls.url}/",
48
"Content-Type": "text/plain;charset=UTF-8",
49
"Origin": cls.url,
50
"Connection": "keep-alive",
51
"Sec-Fetch-Dest": "empty",
52
"Sec-Fetch-Mode": "cors",
53
"Sec-Fetch-Site": "same-origin",
54
"Pragma": "no-cache",
55
"Cache-Control": "no-cache",
56
"TE": "trailers"
57
}
58
async with ClientSession(headers=headers) as session:
59
system_messages = [message["content"] for message in messages if message["role"] == "system"]
60
if system_messages:
61
system_message = "\n".join(system_messages)
62
messages = [message for message in messages if message["role"] != "system"]
63
prompt = format_prompt(messages)
64
data = {
65
"prompt": prompt,
66
"model": cls.get_model(model),
67
"systemPrompt": system_message,
68
"temperature": temperature,
69
"topP": top_p,
70
"maxTokens": max_tokens,
71
"image": None
72
}
73
started = False
74
async with session.post(f"{cls.url}/api", json=data, proxy=proxy) as response:
75
await raise_for_status(response)
76
async for chunk in response.content.iter_any():
77
if not chunk:
78
continue
79
if not started:
80
chunk = chunk.lstrip()
81
started = True
82
yield chunk.decode(errors="ignore")
83
84
def format_prompt(messages: Messages):
85
messages = [
86
f"[INST] {message['content']} [/INST]"
87
if message["role"] == "user"
88
else message["content"]
89
for message in messages
90
]
91
return "\n".join(messages) + "\n"
@@ -41,7 +41,6 @@ from .HuggingFace import HuggingFace
41
41
from .Koala import Koala
42
42
from .Liaobots import Liaobots
43
43
from .LiteIcoding import LiteIcoding
44
from .Llama import Llama
45
44
from .Local import Local
46
45
from .MagickPen import MagickPen
47
46
from .MetaAI import MetaAI
@@ -1,116 +0,0 @@
1
from __future__ import annotations
2
3
import time
4
import random
5
6
from ...typing import CreateResult, Messages
7
from ..base_provider import AbstractProvider
8
from ..helper import format_prompt, get_random_string
9
from ...webdriver import WebDriver, WebDriverSession, element_send_text
10
from ... import debug
11
12
class AItianhuSpace(AbstractProvider):
13
url = "https://chat3.aiyunos.top/"
14
working = True
15
supports_stream = True
16
supports_gpt_35_turbo = True
17
_domains = ["aitianhu.com", "aitianhu1.top"]
18
19
@classmethod
20
def create_completion(
21
cls,
22
model: str,
23
messages: Messages,
24
stream: bool,
25
domain: str = None,
26
proxy: str = None,
27
timeout: int = 120,
28
webdriver: WebDriver = None,
29
headless: bool = True,
30
**kwargs
31
) -> CreateResult:
32
if not model:
33
model = "gpt-3.5-turbo"
34
if not domain:
35
rand = get_random_string(6)
36
domain = random.choice(cls._domains)
37
domain = f"{rand}.{domain}"
38
if debug.logging:
39
print(f"AItianhuSpace | using domain: {domain}")
40
url = f"https://{domain}"
41
prompt = format_prompt(messages)
42
43
with WebDriverSession(webdriver, "", headless=headless, proxy=proxy) as driver:
44
from selenium.webdriver.common.by import By
45
from selenium.webdriver.support.ui import WebDriverWait
46
from selenium.webdriver.support import expected_conditions as EC
47
48
wait = WebDriverWait(driver, timeout)
49
50
# Bypass devtools detection
51
driver.get("https://blank.page/")
52
wait.until(EC.visibility_of_element_located((By.ID, "sheet")))
53
driver.execute_script(f"""
54
document.getElementById('sheet').addEventListener('click', () => {{
55
window.open(arguments[0]);
56
}});
57
""", url)
58
driver.find_element(By.ID, "sheet").click()
59
time.sleep(10)
60
61
original_window = driver.current_window_handle
62
for window_handle in driver.window_handles:
63
if window_handle != original_window:
64
driver.close()
65
driver.switch_to.window(window_handle)
66
break
67
68
# Wait for page load
69
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "textarea.n-input__textarea-el")))
70
71
# Register hook in XMLHttpRequest
72
script = """
73
const _http_request_open = XMLHttpRequest.prototype.open;
74
window._last_message = window._message = "";
75
window._loadend = false;
76
XMLHttpRequest.prototype.open = function(method, url) {
77
if (url == "/api/chat-process") {
78
this.addEventListener("progress", (event) => {
79
const lines = this.responseText.split("\\n");
80
try {
81
window._message = JSON.parse(lines[lines.length-1])["text"];
82
} catch(e) { }
83
});
84
this.addEventListener("loadend", (event) => {
85
window._loadend = true;
86
});
87
}
88
return _http_request_open.call(this, method, url);
89
}
90
"""
91
driver.execute_script(script)
92
93
# Submit prompt
94
element_send_text(driver.find_element(By.CSS_SELECTOR, "textarea.n-input__textarea-el"), prompt)
95
96
# Read response
97
while True:
98
chunk = driver.execute_script("""
99
if (window._message && window._message != window._last_message) {
100
try {
101
return window._message.substring(window._last_message.length);
102
} finally {
103
window._last_message = window._message;
104
}
105
}
106
if (window._loadend) {
107
return null;
108
}
109
return "";
110
""")
111
if chunk:
112
yield chunk
113
elif chunk != "":
114
break
115
else:
116
time.sleep(0.1)