XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 1
返回提交历史

XFEstudio/gpt4free

Add translate readme module Translate readme to german

ba9d5ed6
Heiner Lohaus <hlohaus@users.noreply.github.com>
提交于

代码差异

3 个文件 +826 -13
Modified README.md +12 -13
@@ -1,3 +1,7 @@
1 <a href="./README-DE.md">
2 <img src="https://img.shields.io/badge/öffnen in-🇩🇪 deutsch-bleu.svg" alt="Öffnen en DE">
3 </a>
4
1 5 ![248433934-7886223b-c1d1-4260-82aa-da5741f303bb](https://github.com/xtekky/gpt4free/assets/98614666/ea012c87-76e0-496a-8ac4-e2de090cc6c9)
2 6
3 7 <a href='https://ko-fi.com/xtekky' target='_blank'><img height='35' style='border:0px;height:46px;' src='https://az743702.vo.msecnd.net/cdn/kofi3.png?v=0' border='0' alt='Buy Me a Coffee at ko-fi.com' />
@@ -245,12 +249,7 @@ for message in response:
245 249
246 250 ##### Using Browser
247 251
248 Some providers using a browser to bypass the bot protection.
249 They using the selenium webdriver to control the browser.
250 The browser settings and the login data are saved in a custom directory.
251 If the headless mode is enabled, the browser windows are loaded invisibly.
252 For performance reasons, it is recommended to reuse the browser instances
253 and close them yourself at the end:
252 Some providers using a a browser to bypass the bot protection. They using the selenium webdriver to control the browser. The browser settings and the login data are saved in a custom directory. If the headless mode is enabled, the browser windows are loaded invisibly. For performance reasons, it is recommended to reuse the browser instances and close them yourself at the end:
254 253
255 254 ```python
256 255 import g4f
@@ -266,16 +265,16 @@ from g4f.Provider import (
266 265
267 266 options = ChromeOptions()
268 267 options.add_argument("--incognito");
269 browser = Chrome(options=options, headless=True)
268 webdriver = Chrome(options=options, headless=True)
270 269 for idx in range(10):
271 270 response = g4f.ChatCompletion.create(
272 271 model=g4f.models.default,
273 272 provider=g4f.Provider.Phind,
274 273 messages=[{"role": "user", "content": "Suggest me a name."}],
275 browser=browser
274 webdriver=webdriver
276 275 )
277 276 print(f"{idx}:", response)
278 browser.quit()
277 webdriver.quit()
279 278 ```
280 279
281 280 ##### Cookies Required
@@ -605,7 +604,7 @@ if __name__ == "__main__":
605 604
606 605 #### Create Provider with AI Tool
607 606
608 Call in your terminal the "create_provider" script:
607 Call in your terminal the `create_provider.py` script:
609 608 ```bash
610 609 python etc/tool/create_provider.py
611 610 ```
@@ -628,8 +627,8 @@ from .base_provider import AsyncGeneratorProvider
628 627
629 628 class HogeService(AsyncGeneratorProvider):
630 629 url = "https://chat-gpt.com"
631 supports_gpt_35_turbo = True
632 630 working = True
631 supports_gpt_35_turbo = True
633 632
634 633 @classmethod
635 634 async def create_async_generator(
@@ -644,7 +643,7 @@ class HogeService(AsyncGeneratorProvider):
644 643
645 644 4. Here, you can adjust the settings, for example, if the website does support streaming, set `supports_stream` to `True`...
646 645 5. Write code to request the provider in `create_async_generator` and `yield` the response, _even if_ it's a one-time response, do not hesitate to look at other providers for inspiration
647 6. Add the Provider Name in [g4f/Provider/**init**.py](./g4f/Provider/__init__.py)
646 6. Add the Provider Name in [`g4f/Provider/__init__.py`](./g4f/Provider/__init__.py)
648 647
649 648 ```py
650 649 from .HogeService import HogeService
@@ -708,7 +707,7 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
708 707 </td>
709 708 <td>
710 709 <img src="https://img.shields.io/badge/License-GNU_GPL_v3.0-red.svg"/> <br>
711 This project is licensed under <a href="./LICENSE">GNU_GPL_v3.0</a>. <img width=2300/>
710 This project is licensed under <a href="./LICENSE">GNU_GPL_v3.0</a>.
712 711 </td>
713 712 </tr>
714 713 </table>
Added etc/tool/translate_readme.py +88 -0
@@ -0,0 +1,88 @@
1
2 import sys
3 from pathlib import Path
4 import asyncio
5
6 sys.path.append(str(Path(__file__).parent.parent.parent))
7
8 import g4f
9 g4f.debug.logging = True
10 from g4f.debug import access_token
11 provider = g4f.Provider.OpenaiChat
12
13 iso = "GE"
14 language = "german"
15 translate_prompt = f"""
16 Translate this markdown document to {language}.
17 Don't translate or change inline code examples.
18 ```md
19 """
20 keep_note = "Keep this: [!Note] as [!Note].\n"
21 blacklist = [
22 '## ©️ Copyright',
23 '## 🚀 Providers and Models',
24 '## 🔗 Related GPT4Free Projects'
25 ]
26 whitelist = [
27 "### Other",
28 "### Models"
29 ]
30
31 def read_text(text):
32 start = end = 0
33 new = text.strip().split('\n')
34 for i, line in enumerate(new):
35 if line.startswith('```'):
36 if not start:
37 start = i + 1
38 end = i
39 return '\n'.join(new[start:end]).strip()
40
41 async def translate(text):
42 prompt = translate_prompt + text.strip() + '\n```'
43 if "[!Note]" in text:
44 prompt = keep_note + prompt
45 result = read_text(await provider.create_async(
46 model="",
47 messages=[{"role": "user", "content": prompt}],
48 access_token=access_token
49 ))
50 if text.endswith("```") and not result.endswith("```"):
51 result += "\n```"
52 return result
53
54 async def translate_part(part, i):
55 blacklisted = False
56 for headline in blacklist:
57 if headline in part:
58 blacklisted = True
59 if blacklisted:
60 lines = part.split('\n')
61 lines[0] = await translate(lines[0])
62 part = '\n'.join(lines)
63 for trans in whitelist:
64 if trans in part:
65 part = part.replace(trans, await translate(trans))
66 else:
67 part = await translate(part)
68 print(f"[{i}] translated")
69 return part
70
71 async def translate_readme(readme) -> str:
72 parts = readme.split('\n## ')
73 print(f"{len(parts)} parts...")
74 parts = await asyncio.gather(
75 *[translate_part("## " + part, i) for i, part in enumerate(parts)]
76 )
77 return "\n\n".join(parts)
78
79 with open("README.md", "r") as fp:
80 readme = fp.read()
81
82 print("Translate readme...")
83 readme = asyncio.run(translate_readme(readme))
84
85 file = f"README-{iso}.md"
86 with open(file, "w") as fp:
87 fp.write(readme)
88 print(f'"{file}" saved')