mirror of
https://github.com/xtekky/gpt4free.git
synced 2024-11-09 01:10:34 +00:00
106 lines
3.8 KiB
Python
106 lines
3.8 KiB
Python
|
from __future__ import annotations
|
||
|
|
||
|
import json, random, requests, threading
|
||
|
from aiohttp import ClientSession
|
||
|
|
||
|
from ..typing import CreateResult, Messages
|
||
|
from .base_provider import AbstractProvider
|
||
|
from .helper import format_prompt
|
||
|
|
||
|
class Cohere(AbstractProvider):
|
||
|
url = "https://cohereforai-c4ai-command-r-plus.hf.space"
|
||
|
working = True
|
||
|
supports_gpt_35_turbo = False
|
||
|
supports_gpt_4 = False
|
||
|
supports_stream = True
|
||
|
|
||
|
@staticmethod
|
||
|
def create_completion(
|
||
|
model: str,
|
||
|
messages: Messages,
|
||
|
stream: bool,
|
||
|
proxy: str = None,
|
||
|
max_retries: int = 6,
|
||
|
**kwargs
|
||
|
) -> CreateResult:
|
||
|
|
||
|
prompt = format_prompt(messages)
|
||
|
|
||
|
headers = {
|
||
|
'accept': 'text/event-stream',
|
||
|
'accept-language': 'en,fr-FR;q=0.9,fr;q=0.8,es-ES;q=0.7,es;q=0.6,en-US;q=0.5,am;q=0.4,de;q=0.3',
|
||
|
'cache-control': 'no-cache',
|
||
|
'pragma': 'no-cache',
|
||
|
'referer': 'https://cohereforai-c4ai-command-r-plus.hf.space/?__theme=light',
|
||
|
'sec-ch-ua': '"Google Chrome";v="123", "Not:A-Brand";v="8", "Chromium";v="123"',
|
||
|
'sec-ch-ua-mobile': '?0',
|
||
|
'sec-ch-ua-platform': '"macOS"',
|
||
|
'sec-fetch-dest': 'empty',
|
||
|
'sec-fetch-mode': 'cors',
|
||
|
'sec-fetch-site': 'same-origin',
|
||
|
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36',
|
||
|
}
|
||
|
|
||
|
session_hash = ''.join(random.choices("abcdefghijklmnopqrstuvwxyz0123456789", k=11))
|
||
|
|
||
|
params = {
|
||
|
'fn_index': '1',
|
||
|
'session_hash': session_hash,
|
||
|
}
|
||
|
|
||
|
response = requests.get(
|
||
|
'https://cohereforai-c4ai-command-r-plus.hf.space/queue/join',
|
||
|
params=params,
|
||
|
headers=headers,
|
||
|
stream=True
|
||
|
)
|
||
|
|
||
|
completion = ''
|
||
|
|
||
|
for line in response.iter_lines():
|
||
|
if line:
|
||
|
json_data = json.loads(line[6:])
|
||
|
|
||
|
if b"send_data" in (line):
|
||
|
event_id = json_data["event_id"]
|
||
|
|
||
|
threading.Thread(target=send_data, args=[session_hash, event_id, prompt]).start()
|
||
|
|
||
|
if b"process_generating" in line or b"process_completed" in line:
|
||
|
token = (json_data['output']['data'][0][0][1])
|
||
|
|
||
|
yield (token.replace(completion, ""))
|
||
|
completion = token
|
||
|
|
||
|
def send_data(session_hash, event_id, prompt):
|
||
|
headers = {
|
||
|
'accept': '*/*',
|
||
|
'accept-language': 'en,fr-FR;q=0.9,fr;q=0.8,es-ES;q=0.7,es;q=0.6,en-US;q=0.5,am;q=0.4,de;q=0.3',
|
||
|
'cache-control': 'no-cache',
|
||
|
'content-type': 'application/json',
|
||
|
'origin': 'https://cohereforai-c4ai-command-r-plus.hf.space',
|
||
|
'pragma': 'no-cache',
|
||
|
'referer': 'https://cohereforai-c4ai-command-r-plus.hf.space/?__theme=light',
|
||
|
'sec-ch-ua': '"Google Chrome";v="123", "Not:A-Brand";v="8", "Chromium";v="123"',
|
||
|
'sec-ch-ua-mobile': '?0',
|
||
|
'sec-ch-ua-platform': '"macOS"',
|
||
|
'sec-fetch-dest': 'empty',
|
||
|
'sec-fetch-mode': 'cors',
|
||
|
'sec-fetch-site': 'same-origin',
|
||
|
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36',
|
||
|
}
|
||
|
|
||
|
json_data = {
|
||
|
'data': [
|
||
|
prompt,
|
||
|
'',
|
||
|
[],
|
||
|
],
|
||
|
'event_data': None,
|
||
|
'fn_index': 1,
|
||
|
'session_hash': session_hash,
|
||
|
'event_id': event_id
|
||
|
}
|
||
|
|
||
|
requests.post('https://cohereforai-c4ai-command-r-plus.hf.space/queue/data',
|
||
|
json = json_data, headers=headers)
|