Merge pull request #574 from Sife-shuo/main

ReWrite italygpt
This commit is contained in:
xtekky 2023-05-19 22:10:10 +01:00 committed by GitHub
commit 7fbe472b74
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 103 additions and 0 deletions

View File

@ -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()
```

View File

@ -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('<input type=\"hidden\" name=\"next_id\" id=\"next_id\" value=\"(\w+)\">',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()

View File

@ -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)