mirror of
https://github.com/xtekky/gpt4free.git
synced 2025-12-10 04:20:19 -08:00
Improve CreateImagesBing
Sort providers by category
This commit is contained in:
parent
04a5e33ebe
commit
38dbe4b8e5
14 changed files with 68 additions and 83 deletions
76
g4f/Provider/selenium/MyShell.py
Normal file
76
g4f/Provider/selenium/MyShell.py
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
from __future__ import annotations
|
||||
|
||||
import time, json
|
||||
|
||||
from ...typing import CreateResult, Messages
|
||||
from ..base_provider import AbstractProvider
|
||||
from ..helper import format_prompt
|
||||
from ...webdriver import WebDriver, WebDriverSession, bypass_cloudflare
|
||||
|
||||
class MyShell(AbstractProvider):
|
||||
url = "https://app.myshell.ai/chat"
|
||||
working = True
|
||||
supports_gpt_35_turbo = True
|
||||
supports_stream = True
|
||||
|
||||
@classmethod
|
||||
def create_completion(
|
||||
cls,
|
||||
model: str,
|
||||
messages: Messages,
|
||||
stream: bool,
|
||||
proxy: str = None,
|
||||
timeout: int = 120,
|
||||
webdriver: WebDriver = None,
|
||||
**kwargs
|
||||
) -> CreateResult:
|
||||
with WebDriverSession(webdriver, "", proxy=proxy) as driver:
|
||||
bypass_cloudflare(driver, cls.url, timeout)
|
||||
|
||||
# Send request with message
|
||||
data = {
|
||||
"botId": "4738",
|
||||
"conversation_scenario": 3,
|
||||
"message": format_prompt(messages),
|
||||
"messageType": 1
|
||||
}
|
||||
script = """
|
||||
response = await fetch("https://api.myshell.ai/v1/bot/chat/send_message", {
|
||||
"headers": {
|
||||
"accept": "application/json",
|
||||
"content-type": "application/json",
|
||||
"myshell-service-name": "organics-api",
|
||||
"visitor-id": localStorage.getItem("mix_visitorId")
|
||||
},
|
||||
"body": '{body}',
|
||||
"method": "POST"
|
||||
})
|
||||
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) {
|
||||
return null;
|
||||
}
|
||||
content = '';
|
||||
chunk.value.split('\\n').forEach((line, index) => {
|
||||
if (line.startsWith('data: ')) {
|
||||
try {
|
||||
const data = JSON.parse(line.substring('data: '.length));
|
||||
if ('content' in data) {
|
||||
content += data['content'];
|
||||
}
|
||||
} catch(e) {}
|
||||
}
|
||||
});
|
||||
return content;
|
||||
"""
|
||||
while True:
|
||||
chunk = driver.execute_script(script)
|
||||
if chunk:
|
||||
yield chunk
|
||||
elif chunk != "":
|
||||
break
|
||||
else:
|
||||
time.sleep(0.1)
|
||||
Loading…
Add table
Add a link
Reference in a new issue