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

XFEstudio/gpt4free

Removed g4f/Provider/selenium/AItianhuSpace.py g4f/Provider/Llama.py | Updated g4f/Provider/__init__.py

a4f75407
kqlio67 <kqlio67@users.noreply.github.com>
提交于

代码差异

3 个文件 +0 -208
Deleted g4f/Provider/Llama.py +0 -91
@@ -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"
Modified g4f/Provider/__init__.py +0 -1
@@ -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
Deleted g4f/Provider/selenium/AItianhuSpace.py +0 -116
@@ -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)