diff --git a/gpt4free/italygpt2/README.md b/gpt4free/italygpt2/README.md new file mode 100644 index 00000000..0845e89a --- /dev/null +++ b/gpt4free/italygpt2/README.md @@ -0,0 +1,29 @@ +# Itagpt2(Rewrite) +Written by [sife-shuo](https://github.com/sife-shuo/). + +## Description +Unlike gpt4free. italygpt in the pypi package, italygpt2 supports stream calls and has changed the request sending method to enable continuous and logical conversations. + +The speed will increase when calling the conversation multiple times. + +### Completion: +```python +account_data=italygpt2.Account.create() +for chunk in italygpt2.Completion.create(account_data=account_data,prompt="Who are you?"): + print(chunk, end="", flush=True) +print() +``` + +### Chat +Like most chatgpt projects, format is supported. +Use the same format for the messages as you would for the [official OpenAI API](https://platform.openai.com/docs/guides/chat/introduction). +```python +messages = [ + {"role": "system", "content": ""},#... + {"role": "user", "content": ""}#.... +] +account_data=italygpt2.Account.create() +for chunk in italygpt2.Completion.create(account_data=account_data,prompt="Who are you?",message=messages): + print(chunk, end="", flush=True) +print() +``` \ No newline at end of file diff --git a/gpt4free/italygpt2/__init__.py b/gpt4free/italygpt2/__init__.py new file mode 100644 index 00000000..1eb191c0 --- /dev/null +++ b/gpt4free/italygpt2/__init__.py @@ -0,0 +1,70 @@ +import re +import requests +import hashlib +from fake_useragent import UserAgent +class Account: + @staticmethod + def create(): + r=requests.get("https://italygpt.it/",headers=Account._header) + f=r.text + tid=re.search('',f).group(1) + if len(tid)==0: + raise RuntimeError("NetWorkError:failed to get id.") + else: + Account._tid=tid + Account._raw="[]" + return Account + def next(next_id:str)->str: + Account._tid=next_id + return Account._tid + def get()->str: + return Account._tid + _header={ + "Host": "italygpt.it", + "Referer":"https://italygpt.it/", + "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36",#UserAgent().random, + "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", + "Accept-Language":"zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2", + "Upgrade-Insecure-Requests":"1", + "Sec-Fetch-Dest":"document", + "Sec-Fetch-Mode":"navigate", + "Sec-Fetch-Site":"none", + "Sec-Fetch-User":"?1", + "Connection":"keep-alive", + "Alt-Used":"italygpt.it", + "Pragma":"no-cache", + "Cache-Control":"no-cache", + "TE": "trailers" + } + def settraw(raws:str): + Account._raw=raws + return Account._raw + def gettraw(): + return Account._raw + +class Completion: + @staticmethod + def create( + account_data, + prompt: str, + message=False + ): + param={ + "prompt":prompt.replace(" ","+"), + "creative":"off", + "internet":"false", + "detailed":"off", + "current_id":"0", + "code":"", + "gpt4":"false", + "raw_messages":account_data.gettraw(), + "hash":hashlib.sha256(account_data.get().encode()).hexdigest() + } + if(message): + param["raw_messages"]=str(message) + r = requests.get("https://italygpt.it/question",headers=account_data._header,params=param,stream=True) + account_data.next(r.headers["Next_id"]) + account_data.settraw(r.headers["Raw_messages"]) + for chunk in r.iter_content(chunk_size=None): + r.raise_for_status() + yield chunk.decode() \ No newline at end of file diff --git a/testing/italygpt2_test.py b/testing/italygpt2_test.py new file mode 100644 index 00000000..0494c8a2 --- /dev/null +++ b/testing/italygpt2_test.py @@ -0,0 +1,4 @@ +from gpt4free import italygpt2 +account_data=italygpt2.Account.create() +for chunk in italygpt2.Completion.create(account_data=account_data,prompt="Who are you?"): + print(chunk, end="", flush=True) \ No newline at end of file