Python SDK (polylingo)
PolyLingo REST API の公式 Python クライアントです。httpx を使用し、同じメソッド名で 同期 と 非同期 のクライアントを提供します。
- PyPI:
polylingo - ソース: UsePolyLingo/polylingo-python
生の 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 /jobs — 202 ボディを返します (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/:id。status == "completed" の場合、レスポンスにはトップレベルに translations と usage が含まれます。
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.AuthError | HTTP 401 |
polylingo.RateLimitError | HTTP 429 — retry_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)
非同期ジョブパターン(概要)
- 手動:
jobs.create→ 終了状態になるまでjobs.getをループ。 - ヘルパー:
jobs.translateにpoll_interval、timeout、オプションのon_progressを指定。
非常に大きなコンテンツの場合は、同期の translate がクライアントまたはサーバーのタイムアウトにかかる可能性があるため、ジョブを推奨します。
型
パッケージには py.typed が含まれています。レスポンスオブジェクトは API に沿った単純な dict 値です。必要に応じてコード内で TypedDict スタイルの注釈を使用してください。
変更履歴
0.1.0
- 初期リリース: 同期
PolyLingo、非同期AsyncPolyLingo、jobs.translateポーリングヘルパーを含む完全なエンドポイントカバレッジ。