mirror of https://github.com/xtekky/gpt4free
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
1.9 KiB
Python
66 lines
1.9 KiB
Python
has_module = False
|
|
try:
|
|
from hugchat.hugchat import ChatBot
|
|
except ImportError:
|
|
has_module = False
|
|
|
|
from .base_provider import BaseProvider, get_cookies
|
|
from g4f.typing import CreateResult
|
|
|
|
class Hugchat(BaseProvider):
|
|
url = "https://huggingface.co/chat/"
|
|
needs_auth = True
|
|
working = has_module
|
|
llms = ['OpenAssistant/oasst-sft-6-llama-30b-xor', 'meta-llama/Llama-2-70b-chat-hf']
|
|
|
|
@classmethod
|
|
def create_completion(
|
|
cls,
|
|
model: str,
|
|
messages: list[dict[str, str]],
|
|
stream: bool = False,
|
|
proxy: str = None,
|
|
cookies: str = get_cookies(".huggingface.co"), **kwargs) -> CreateResult:
|
|
|
|
bot = ChatBot(
|
|
cookies=cookies)
|
|
|
|
if proxy and "://" not in proxy:
|
|
proxy = f"http://{proxy}"
|
|
bot.session.proxies = {"http": proxy, "https": proxy}
|
|
|
|
if model:
|
|
try:
|
|
if not isinstance(model, int):
|
|
model = cls.llms.index(model)
|
|
bot.switch_llm(model)
|
|
except:
|
|
raise RuntimeError(f"Model are not supported: {model}")
|
|
|
|
if len(messages) > 1:
|
|
formatted = "\n".join(
|
|
["%s: %s" % (message["role"], message["content"]) for message in messages]
|
|
)
|
|
prompt = f"{formatted}\nAssistant:"
|
|
else:
|
|
prompt = messages.pop()["content"]
|
|
|
|
try:
|
|
yield bot.chat(prompt, **kwargs)
|
|
finally:
|
|
bot.delete_conversation(bot.current_conversation)
|
|
bot.current_conversation = ""
|
|
pass
|
|
|
|
@classmethod
|
|
@property
|
|
def params(cls):
|
|
params = [
|
|
("model", "str"),
|
|
("messages", "list[dict[str, str]]"),
|
|
("stream", "bool"),
|
|
("proxy", "str"),
|
|
]
|
|
param = ", ".join([": ".join(p) for p in params])
|
|
return f"g4f.provider.{cls.__name__} supports: ({param})"
|