diff options
author | Tekky <98614666+xtekky@users.noreply.github.com> | 2023-11-20 19:27:38 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-20 19:27:38 +0100 |
commit | e8d88c955f75f539dd71bd4b713e90094751161c (patch) | |
tree | 6d1ad2636abfd7ad0b4f5a59aa4630cf2a29723e /etc/tool/translate_readme.py | |
parent | Merge pull request #1275 from egcash/patch-1 (diff) | |
parent | Merge branch 'main' into webdriver (diff) | |
download | gpt4free-e8d88c955f75f539dd71bd4b713e90094751161c.tar gpt4free-e8d88c955f75f539dd71bd4b713e90094751161c.tar.gz gpt4free-e8d88c955f75f539dd71bd4b713e90094751161c.tar.bz2 gpt4free-e8d88c955f75f539dd71bd4b713e90094751161c.tar.lz gpt4free-e8d88c955f75f539dd71bd4b713e90094751161c.tar.xz gpt4free-e8d88c955f75f539dd71bd4b713e90094751161c.tar.zst gpt4free-e8d88c955f75f539dd71bd4b713e90094751161c.zip |
Diffstat (limited to 'etc/tool/translate_readme.py')
-rw-r--r-- | etc/tool/translate_readme.py | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/etc/tool/translate_readme.py b/etc/tool/translate_readme.py new file mode 100644 index 00000000..43bfdcde --- /dev/null +++ b/etc/tool/translate_readme.py @@ -0,0 +1,88 @@ + +import sys +from pathlib import Path +import asyncio + +sys.path.append(str(Path(__file__).parent.parent.parent)) + +import g4f +g4f.debug.logging = True +from g4f.debug import access_token +provider = g4f.Provider.OpenaiChat + +iso = "GE" +language = "german" +translate_prompt = f""" +Translate this markdown document to {language}. +Don't translate or change inline code examples. +```md +""" +keep_note = "Keep this: [!Note] as [!Note].\n" +blacklist = [ + '## Šī¸ Copyright', + '## đ Providers and Models', + '## đ Related GPT4Free Projects' +] +whitelist = [ + "### Other", + "### Models" +] + +def read_text(text): + start = end = 0 + new = text.strip().split('\n') + for i, line in enumerate(new): + if line.startswith('```'): + if not start: + start = i + 1 + end = i + return '\n'.join(new[start:end]).strip() + +async def translate(text): + prompt = translate_prompt + text.strip() + '\n```' + if "[!Note]" in text: + prompt = keep_note + prompt + result = read_text(await provider.create_async( + model="", + messages=[{"role": "user", "content": prompt}], + access_token=access_token + )) + if text.endswith("```") and not result.endswith("```"): + result += "\n```" + return result + +async def translate_part(part, i): + blacklisted = False + for headline in blacklist: + if headline in part: + blacklisted = True + if blacklisted: + lines = part.split('\n') + lines[0] = await translate(lines[0]) + part = '\n'.join(lines) + for trans in whitelist: + if trans in part: + part = part.replace(trans, await translate(trans)) + else: + part = await translate(part) + print(f"[{i}] translated") + return part + +async def translate_readme(readme) -> str: + parts = readme.split('\n## ') + print(f"{len(parts)} parts...") + parts = await asyncio.gather( + *[translate_part("## " + part, i) for i, part in enumerate(parts)] + ) + return "\n\n".join(parts) + +with open("README.md", "r") as fp: + readme = fp.read() + +print("Translate readme...") +readme = asyncio.run(translate_readme(readme)) + +file = f"README-{iso}.md" +with open(file, "w") as fp: + fp.write(readme) +print(f'"{file}" saved')
\ No newline at end of file |