Python SDK (polylingo)

PolyLingo REST API の公式 Python クライアントです。httpx を使用し、同じメソッド名で 同期非同期 のクライアントを提供します。

生の HTTP 詳細については、API reference を参照してください。


インストール

pip install polylingo

Python: >= 3.9


同期クライアント

import os
import polylingo

client = polylingo.PolyLingo(
    api_key=os.environ["POLYLINGO_API_KEY"],
    base_url="https://api.usepolylingo.com/v1",  # オプション; デフォルト表示
    timeout=120.0,  # オプション; リクエストごとの秒数(デフォルト120)
)

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

client.close()

コンテキストマネージャー:

with polylingo.PolyLingo(api_key="...") as client:
    print(client.languages())
引数必須説明
api_keyはいAPIキー (Authorization: Bearer …)
base_urlいいえ/v1 を含む API プレフィックス。デフォルトは https://api.usepolylingo.com/v1
timeoutいいえhttpx のタイムアウト()。デフォルトは 120.0

非同期クライアント

import polylingo

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

async with を使わない場合は await client.aclose() を使用してください。

メソッド名は同期クライアントと同じで、すべてのネットワークメソッドは async def です。


メソッド(同期・非同期)

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",  # オプション
    source="en",        # オプション
    model="standard",   # オプション: "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()

ジョブ — client.jobs

create / await create

POST /jobs202 ボディを返します (job_id, status, …)。

job = client.jobs.create(content=long_md, targets=["de", "fr"], format="markdown")
# kwargs も受け付けます: client.jobs.create(**{"content": ..., "targets": [...]})

get(job_id) / await get(job_id)

GET /jobs/:idstatus == "completed" の場合、レスポンスにはトップレベルに translationsusage が含まれます。

translate(...) — 便利機能

completed または failed になるまで、またはタイムアウトまでポーリングします。

done = client.jobs.translate(
    content=long_md,
    targets=["de", "fr", "es"],
    format="markdown",
    poll_interval=10.0,   # ポーリング間隔(秒);デフォルト5.0
    timeout=600.0,        # **合計**秒数の予算;デフォルト1200(20分)
    on_progress=lambda pos: print(f"Queue: {pos}"),
)
done["translations"]["de"]

非同期:

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

API ステータス: pending, processing, completed, failed


例外

クラスいつ
polylingo.PolyLingoError基底 — status, error, args[0] メッセージ
polylingo.AuthErrorHTTP 401
polylingo.RateLimitErrorHTTP 429retry_after が設定されている場合あり(秒)
polylingo.JobFailedErrorジョブ失敗、完了ペイロード不正、またはポーリングタイムアウト — 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)

非同期ジョブパターン(概要)

  1. 手動: jobs.create → 終了状態になるまで jobs.get をループ。
  2. ヘルパー: jobs.translatepoll_intervaltimeout、オプションの on_progress を指定。

非常に大きなコンテンツの場合は、同期の translate がクライアントまたはサーバーのタイムアウトにかかる可能性があるため、ジョブを推奨します。


パッケージには py.typed が含まれています。レスポンスオブジェクトは API に沿った単純な dict 値です。必要に応じてコード内で TypedDict スタイルの注釈を使用してください。


変更履歴

0.1.0

  • 初期リリース: 同期 PolyLingo、非同期 AsyncPolyLingojobs.translate ポーリングヘルパーを含む完全なエンドポイントカバレッジ。
Python SDK | PolyLingoドキュメント | PolyLingo