Dmitry Afanasyev a95403f594
Feat/fix start (#1)
format code
2023-09-16 20:09:40 +03:00

116 lines
4.2 KiB
Python

import os
from json import loads
from uuid import uuid4
from requests import Session
from ...typing import get_type_hints
url = "https://gpt-gm.h2o.ai"
model = ["falcon-40b", "falcon-7b", "llama-13b"]
supports_stream = True
needs_auth = False
models = {
"falcon-7b": "h2oai/h2ogpt-gm-oasst1-en-2048-falcon-7b-v3",
"falcon-40b": "h2oai/h2ogpt-gm-oasst1-en-2048-falcon-40b-v1",
"llama-13b": "h2oai/h2ogpt-gm-oasst1-en-2048-open-llama-13b",
}
def _create_completion(model: str, messages: list, stream: bool, **kwargs):
conversation = "instruction: this is a conversation beween, a user and an AI assistant, respond to the latest message, referring to the conversation if needed\n"
for message in messages:
conversation += "%s: %s\n" % (message["role"], message["content"])
conversation += "assistant:"
client = Session()
client.headers = {
"authority": "gpt-gm.h2o.ai",
"origin": "https://gpt-gm.h2o.ai",
"referer": "https://gpt-gm.h2o.ai/",
"sec-ch-ua": '"Not.A/Brand";v="8", "Chromium";v="114", "Google Chrome";v="114"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"Windows"',
"sec-fetch-dest": "document",
"sec-fetch-mode": "navigate",
"sec-fetch-site": "same-origin",
"sec-fetch-user": "?1",
"upgrade-insecure-requests": "1",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
}
client.get("https://gpt-gm.h2o.ai/")
response = client.post(
"https://gpt-gm.h2o.ai/settings",
data={
"ethicsModalAccepted": "true",
"shareConversationsWithModelAuthors": "true",
"ethicsModalAcceptedAt": "",
"activeModel": "h2oai/h2ogpt-gm-oasst1-en-2048-falcon-40b-v1",
"searchEnabled": "true",
},
)
headers = {
"authority": "gpt-gm.h2o.ai",
"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",
"origin": "https://gpt-gm.h2o.ai",
"referer": "https://gpt-gm.h2o.ai/",
"sec-ch-ua": '"Not.A/Brand";v="8", "Chromium";v="114", "Google Chrome";v="114"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"Windows"',
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
}
json_data = {"model": models[model]}
response = client.post("https://gpt-gm.h2o.ai/conversation", headers=headers, json=json_data)
conversationId = response.json()["conversationId"]
completion = client.post(
f"https://gpt-gm.h2o.ai/conversation/{conversationId}",
stream=True,
json={
"inputs": conversation,
"parameters": {
"temperature": kwargs.get("temperature", 0.4),
"truncate": kwargs.get("truncate", 2048),
"max_new_tokens": kwargs.get("max_new_tokens", 1024),
"do_sample": kwargs.get("do_sample", True),
"repetition_penalty": kwargs.get("repetition_penalty", 1.2),
"return_full_text": kwargs.get("return_full_text", False),
},
"stream": True,
"options": {
"id": kwargs.get("id", str(uuid4())),
"response_id": kwargs.get("response_id", str(uuid4())),
"is_retry": False,
"use_cache": False,
"web_search_id": "",
},
},
)
for line in completion.iter_lines():
if b"data" in line:
line = loads(line.decode("utf-8").replace("data:", ""))
token = line["token"]["text"]
if token == "<|endoftext|>":
break
else:
yield (token)
params = f"g4f.Providers.{os.path.basename(__file__)[:-3]} supports: " + "(%s)" % ", ".join(
[
f"{name}: {get_type_hints(_create_completion)[name].__name__}"
for name in _create_completion.__code__.co_varnames[: _create_completion.__code__.co_argcount]
]
)