summaryrefslogtreecommitdiffstats
path: root/g4f/Provider
diff options
context:
space:
mode:
Diffstat (limited to 'g4f/Provider')
-rw-r--r--g4f/Provider/MyShell.py18
-rw-r--r--g4f/Provider/unfinished/AiChatting.py66
-rw-r--r--g4f/Provider/unfinished/__init__.py3
3 files changed, 73 insertions, 14 deletions
diff --git a/g4f/Provider/MyShell.py b/g4f/Provider/MyShell.py
index 2ee94bb6..b0a01016 100644
--- a/g4f/Provider/MyShell.py
+++ b/g4f/Provider/MyShell.py
@@ -5,7 +5,7 @@ import time, json
from ..typing import CreateResult, Messages
from .base_provider import BaseProvider
from .helper import format_prompt
-from ..webdriver import WebDriver, WebDriverSession
+from ..webdriver import WebDriver, WebDriverSession, bypass_cloudflare
class MyShell(BaseProvider):
url = "https://app.myshell.ai/chat"
@@ -25,16 +25,8 @@ class MyShell(BaseProvider):
**kwargs
) -> CreateResult:
with WebDriverSession(webdriver, "", proxy=proxy) as driver:
- from selenium.webdriver.common.by import By
- from selenium.webdriver.support.ui import WebDriverWait
- from selenium.webdriver.support import expected_conditions as EC
-
- driver.get(cls.url)
-
- # Wait for page load and cloudflare validation
- WebDriverWait(driver, timeout).until(
- EC.presence_of_element_located((By.CSS_SELECTOR, "body:not(.no-js)"))
- )
+ bypass_cloudflare(driver, cls.url, timeout)
+
# Send request with message
data = {
"botId": "4738",
@@ -58,11 +50,11 @@ window._reader = response.body.pipeThrough(new TextDecoderStream()).getReader();
driver.execute_script(script.replace("{body}", json.dumps(data)))
script = """
chunk = await window._reader.read();
-if (chunk['done']) {
+if (chunk.done) {
return null;
}
content = '';
-chunk['value'].split('\\n').forEach((line, index) => {
+chunk.value.split('\\n').forEach((line, index) => {
if (line.startsWith('data: ')) {
try {
const data = JSON.parse(line.substring('data: '.length));
diff --git a/g4f/Provider/unfinished/AiChatting.py b/g4f/Provider/unfinished/AiChatting.py
new file mode 100644
index 00000000..a66921c1
--- /dev/null
+++ b/g4f/Provider/unfinished/AiChatting.py
@@ -0,0 +1,66 @@
+from __future__ import annotations
+
+from urllib.parse import unquote
+
+from ...typing import AsyncResult, Messages
+from ..base_provider import BaseProvider
+from ...webdriver import WebDriver
+from ...requests import Session, get_session_from_browser
+
+class AiChatting(BaseProvider):
+ url = "https://www.aichatting.net"
+ supports_gpt_35_turbo = True
+ _session: Session = None
+
+ @classmethod
+ def create_completion(
+ cls,
+ model: str,
+ messages: Messages,
+ stream: bool,
+ proxy: str = None,
+ timeout: int = 120,
+ webdriver: WebDriver = None,
+ **kwargs
+ ) -> AsyncResult:
+ if not cls._session:
+ cls._session = get_session_from_browser(cls.url, webdriver, proxy, timeout)
+ visitorId = unquote(cls._session.cookies.get("aichatting.website.visitorId"))
+
+ headers = {
+ "accept": "application/json, text/plain, */*",
+ "lang": "en",
+ "source": "web"
+ }
+ data = {
+ "roleId": 0,
+ }
+ try:
+ response = cls._session.post("https://aga-api.aichatting.net/aigc/chat/record/conversation/create", json=data, headers=headers)
+ response.raise_for_status()
+ conversation_id = response.json()["data"]["conversationId"]
+ except Exception as e:
+ cls.reset()
+ raise e
+ headers = {
+ "authority": "aga-api.aichatting.net",
+ "accept": "text/event-stream,application/json, text/event-stream",
+ "lang": "en",
+ "source": "web",
+ "vtoken": visitorId,
+ }
+ data = {
+ "spaceHandle": True,
+ "roleId": 0,
+ "messages": messages,
+ "conversationId": conversation_id,
+ }
+ response = cls._session.post("https://aga-api.aichatting.net/aigc/chat/v2/stream", json=data, headers=headers, stream=True)
+ response.raise_for_status()
+ for chunk in response.iter_lines():
+ if chunk.startswith(b"data:"):
+ yield chunk[5:].decode().replace("-=- --", " ").replace("-=-n--", "\n").replace("--@DONE@--", "")
+
+ @classmethod
+ def reset(cls):
+ cls._session = None \ No newline at end of file
diff --git a/g4f/Provider/unfinished/__init__.py b/g4f/Provider/unfinished/__init__.py
index 22e021be..eb5e8825 100644
--- a/g4f/Provider/unfinished/__init__.py
+++ b/g4f/Provider/unfinished/__init__.py
@@ -1,3 +1,4 @@
from .MikuChat import MikuChat
from .Komo import Komo
-from .ChatAiGpt import ChatAiGpt \ No newline at end of file
+from .ChatAiGpt import ChatAiGpt
+from .AiChatting import AiChatting \ No newline at end of file