summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSife-shuo <88375951+Sife-shuo@users.noreply.github.com>2023-05-19 17:01:57 +0200
committerSife-shuo <88375951+Sife-shuo@users.noreply.github.com>2023-05-19 17:01:57 +0200
commit053719847dc80a37007406c69bf7979c4ae697db (patch)
tree3ad931e4df6e920fd68c55010be28880a803da9e
parentMerge pull request #543 from mitchcapper/analytics_warning_pr (diff)
downloadgpt4free-053719847dc80a37007406c69bf7979c4ae697db.tar
gpt4free-053719847dc80a37007406c69bf7979c4ae697db.tar.gz
gpt4free-053719847dc80a37007406c69bf7979c4ae697db.tar.bz2
gpt4free-053719847dc80a37007406c69bf7979c4ae697db.tar.lz
gpt4free-053719847dc80a37007406c69bf7979c4ae697db.tar.xz
gpt4free-053719847dc80a37007406c69bf7979c4ae697db.tar.zst
gpt4free-053719847dc80a37007406c69bf7979c4ae697db.zip
-rw-r--r--gpt4free/italygpt2/README.md29
-rw-r--r--gpt4free/italygpt2/__init__.py70
-rw-r--r--testing/italygpt2_test.py4
3 files changed, 103 insertions, 0 deletions
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('<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() \ 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