Python SDK (polylingo)

Mteja rasmi wa Python kwa PolyLingo REST API. Inatumia httpx na hutoa wateja wa sync na async wenye majina sawa ya njia.

Kwa maelezo ya HTTP ghafi, angalia marejeleo ya API.


Ufungaji

pip install polylingo

Python: >= 3.9


Mteja wa Sync

import os
import polylingo

client = polylingo.PolyLingo(
    api_key=os.environ["POLYLINGO_API_KEY"],
    base_url="https://api.usepolylingo.com/v1",  # hiari; chaguo-msingi kinaonyeshwa
    timeout=120.0,  # hiari; sekunde kwa kila ombi (chaguo-msingi 120)
)

result = client.translate(content="# Hello", targets=["es", "fr"], format="markdown")
print(result["translations"]["es"])

client.close()

Msimamizi wa muktadha:

with polylingo.PolyLingo(api_key="...") as client:
    print(client.languages())
HojaInahitajikaMaelezo
api_keyNdiyoFunguo ya API (Authorization: Bearer …).
base_urlHapanaKiambatanisho cha API kinachojumuisha /v1. Chaguo-msingi https://api.usepolylingo.com/v1.
timeoutHapanaMuda wa kusubiri wa httpx kwa sekunde. Chaguo-msingi 120.0.

Mteja wa Async

import polylingo

async with polylingo.AsyncPolyLingo(api_key="...") as client:
    r = await client.translate(content="Hi", targets=["de"])

Tumia await client.aclose() ikiwa hutumi async with.

Majina ya njia yanalingana na mteja wa sync; njia zote za mtandao ni async def.


Njia (sync na async)

health() / await health()

GET /health

h = client.health()
# async: h = await client.health()

languages() / await languages()

GET /languages

data = client.languages()
langs = data["languages"]

translate(...)

POST /translate

r = client.translate(
    content="# Hello",
    targets=["es", "fr"],
    format="markdown",  # hiari
    source="en",        # hiari
    model="standard",   # hiari: "standard" | "advanced"
)
r["translations"]["es"]
r["usage"]["total_tokens"]

batch(...)

POST /translate/batch

b = client.batch(
    items=[
        {"id": "a", "content": "Hello"},
        {"id": "b", "content": "## Title", "format": "markdown"},
    ],
    targets=["de"],
)
b["results"][0]["translations"]["de"]

usage() / await usage()

GET /usage

u = client.usage()

Jobs — client.jobs

create / await create

POST /jobs — hurudisha mwili wa 202 (job_id, status, …).

job = client.jobs.create(content=long_md, targets=["de", "fr"], format="markdown")
# kwargs pia zinakubaliwa: client.jobs.create(**{"content": ..., "targets": [...]})

get(job_id) / await get(job_id)

GET /jobs/:id. Wakati status == "completed", majibu yanajumuisha translations na usage kwenye ngazi ya juu.

translate(...) — urahisi

Huchunguza hadi completed au failed, au hadi muda umalizike.

done = client.jobs.translate(
    content=long_md,
    targets=["de", "fr", "es"],
    format="markdown",
    poll_interval=10.0,   # sekunde kati ya uchunguzi; chaguo-msingi 5.0
    timeout=600.0,        # muda wa jumla kwa sekunde; chaguo-msingi 1200 (dakika 20)
    on_progress=lambda pos: print(f"Queue: {pos}"),
)
done["translations"]["de"]

Async:

done = await client.jobs.translate(
    content=long_md,
    targets=["de"],
    poll_interval=2.0,
    timeout=300.0,
)

Hali za API: pending, processing, completed, failed.


Makosa

DarasaWakati
polylingo.PolyLingoErrorMsingi — status, error, ujumbe katika args[0].
polylingo.AuthErrorHTTP 401.
polylingo.RateLimitErrorHTTP 429retry_after inaweza kuwekwa (sekunde).
polylingo.JobFailedErrorKazi imeshindikana, payload mbaya iliyokamilika, au muda wa polling umekwisha — job_id.
import polylingo

try:
    client.translate(content="x", targets=["es"])
except polylingo.AuthError as e:
    print(e.status, e.error)
except polylingo.RateLimitError as e:
    print(e.retry_after)
except polylingo.JobFailedError as e:
    print(e.job_id)
except polylingo.PolyLingoError as e:
    print(e.status, e.error)

Mfano wa kazi za async (muhtasari)

  1. Mikono: jobs.create → mzunguko wa jobs.get hadi hali ya mwisho.
  2. Msaidizi: jobs.translate na poll_interval, timeout, na hiari on_progress.

Tumia jobs kwa maudhui makubwa sana ambapo translate ya sinkroni inaweza kufikia muda wa kusubiri wa mteja au seva.


Aina

Kifurushi kina py.typed. Vitu vya majibu ni thamani za kawaida za dict zinazolingana na API; tumia maelezo ya aina ya TypedDict katika msimbo wako ikiwa unataka.


Mabadiliko

0.1.0

  • Toleo la awali: sync PolyLingo, async AsyncPolyLingo, kufunika kamili kwa endpoints ikijumuisha msaidizi wa polling jobs.translate.
Python SDK | Nyaraka za PolyLingo | PolyLingo