fireplay-translation
可复用的 Python 翻译路由包,支持同步和原生异步调用。调用方只依赖路由接口;默认实现以
qwen-mt-flash 为主模型,仅在主模型返回 429/RPM 限流时使用
qwen3.8-flash,并短暂熔断主模型,避免限流期间反复发送必然失败的请求。
安装与使用
从公司包仓安装构建后的 wheel,或在源码仓内执行:
uv build
pip install fireplay-translation
import os
from fireplay_translation import QwenConfig, create_qwen_translator
translator = create_qwen_translator(
QwenConfig(
api_key=os.environ["DASHSCOPE_API_KEY"],
# 推荐换成与 API Key 同地域的 Model Studio 工作空间地址。
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
)
result = translator.translate(
"Hello, world",
source_language="auto",
target_language="zh-CN",
)
print(result.text)
print(result.model, result.fallback_used)
异步服务(FastAPI、Starlette、aiohttp 等)使用原生 httpx.AsyncClient,不会阻塞事件循环:
import os
from fireplay_translation import QwenConfig, create_async_qwen_translator
async def main() -> None:
async with create_async_qwen_translator(
QwenConfig(api_key=os.environ["DASHSCOPE_API_KEY"])
) as translator:
result = await translator.translate(
"Hello, world",
source_language="auto",
target_language="zh-CN",
)
print(result.text)
长生命周期 Web 服务应在启动时创建一个异步 translator,在应用关闭时调用
await translator.aclose(),以复用连接池并正确释放资源。
路由语义
qwen-mt-flash正常、超时、鉴权错误或服务异常时,错误原样返回,不静默换模型。- 只有 429 限流会触发
qwen3.8-flash,因此调用方能区分容量问题和配置/服务故障。 - 收到 429 后按
max(Retry-After, rate_limit_cooldown_seconds)暂停主路由,默认 60 秒。 - Qwen3.8 回退请求关闭 thinking,并要求只返回译文。
TranslationResult.fallback_used、model和 token 字段可用于监控成本与回退率。
扩展其他模型或厂商
同步后端实现 TranslationBackend,异步后端实现 AsyncTranslationBackend;分别注入
Translator 或 AsyncTranslator 即可,业务项目无需了解供应商协议:
from fireplay_translation import Translator
translator = Translator(
MyPrimaryBackend(...),
rate_limit_fallback=MyFallbackBackend(...),
)
异步扩展的 translate(TranslationRequest) 方法定义为 async def,路由调用方式为
await translator.translate(...)。
发布前建议依次执行:
uv run pytest
uv build
发布到公司包仓后,业务项目按普通版本依赖安装:
uv add fireplay-translation
Metadata
Release files for fireplay-translation 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| fireplay_translation-0.2.0.tar.gz | 35.2 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| fireplay_translation-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 45.2 kB
Release files / fireplay_translation-0.2.0.tar.gz
| Download URL | fireplay_translation-0.2.0.tar.gz |
|---|---|
| Size | 35.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
888e3640e98299181c75f32e3f90d9fbbb8109dce9bbfb520ac1450a9013c551
|
|
BLAKE2b-256 checksum How to use checksums |
7a3e68081d7b6e90948d2c0a72b898b625a8c22e5475b517b3c2e6a5be413f09
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.10 {"installer":{"name":"uv","version":"0.9.10"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / fireplay_translation-0.2.0-py3-none-any.whl
| Download URL | fireplay_translation-0.2.0-py3-none-any.whl |
|---|---|
| Size | 10.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6b2148c726f3a8b0bdbea7dd95ff6df97f4e88cbaa20a52640eb81e90b18237d
|
|
BLAKE2b-256 checksum How to use checksums |
d4a97871babb1f338f2351816fbecd02835fb2b65b2406b87cf12431b31813b7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.10 {"installer":{"name":"uv","version":"0.9.10"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for fireplay-translation 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.