Commit
·
3cbb767
1
Parent(s):
39a447b
Add application file
Browse files- Dockerfile +16 -0
- README.md +1 -0
- app.py +37 -0
- requirements.txt +5 -0
Dockerfile
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Read the doc: https://huggingface.co/docs/hub/spaces-sdks-docker
|
| 2 |
+
# you will also find guides on how best to write your Dockerfile
|
| 3 |
+
|
| 4 |
+
FROM python:3.9
|
| 5 |
+
|
| 6 |
+
RUN useradd -m -u 1000 user
|
| 7 |
+
USER user
|
| 8 |
+
ENV PATH="/home/user/.local/bin:$PATH"
|
| 9 |
+
|
| 10 |
+
WORKDIR /app
|
| 11 |
+
|
| 12 |
+
COPY --chown=user ./requirements.txt requirements.txt
|
| 13 |
+
RUN pip install --no-cache-dir --upgrade -r requirements.txt
|
| 14 |
+
|
| 15 |
+
COPY --chown=user . /app
|
| 16 |
+
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]
|
README.md
CHANGED
|
@@ -5,6 +5,7 @@ colorFrom: pink
|
|
| 5 |
colorTo: indigo
|
| 6 |
sdk: docker
|
| 7 |
pinned: false
|
|
|
|
| 8 |
---
|
| 9 |
|
| 10 |
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
|
|
|
| 5 |
colorTo: indigo
|
| 6 |
sdk: docker
|
| 7 |
pinned: false
|
| 8 |
+
app_port: 7860
|
| 9 |
---
|
| 10 |
|
| 11 |
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
app.py
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from fastapi import FastAPI
|
| 2 |
+
from pydantic import BaseModel, Field
|
| 3 |
+
from typing import Optional
|
| 4 |
+
from transformers import MarianMTModel, MarianTokenizer
|
| 5 |
+
import datetime
|
| 6 |
+
import logging
|
| 7 |
+
|
| 8 |
+
logger = logging.getLogger("translate")
|
| 9 |
+
logger.setLevel(logging.INFO)
|
| 10 |
+
|
| 11 |
+
app = FastAPI(title="翻译服务")
|
| 12 |
+
|
| 13 |
+
# 加载翻译模型
|
| 14 |
+
MODEL_NAME = "Helsinki-NLP/opus-mt-tc-bible-big-zhx-en"
|
| 15 |
+
logger.info(f"{datetime.datetime.now()} Loading model {MODEL_NAME}...")
|
| 16 |
+
tokenizer = MarianTokenizer.from_pretrained(MODEL_NAME)
|
| 17 |
+
model = MarianMTModel.from_pretrained(MODEL_NAME)
|
| 18 |
+
logger.info(f"{datetime.datetime.now()} Model loaded.")
|
| 19 |
+
|
| 20 |
+
class TranslateRequest(BaseModel):
|
| 21 |
+
text: str = Field(..., description="待翻译的中文文本")
|
| 22 |
+
|
| 23 |
+
class TranslateResponse(BaseModel):
|
| 24 |
+
translated_text: str
|
| 25 |
+
detected_lang: Optional[str] = None
|
| 26 |
+
|
| 27 |
+
@app.post("/api/translate", response_model=TranslateResponse)
|
| 28 |
+
async def translate(req: TranslateRequest):
|
| 29 |
+
# tokenizer 会处理编码
|
| 30 |
+
batch = tokenizer([req.text], return_tensors="pt", padding=True)
|
| 31 |
+
translated = model.generate(**batch)
|
| 32 |
+
output = tokenizer.decode(translated[0], skip_special_tokens=True)
|
| 33 |
+
|
| 34 |
+
return TranslateResponse(
|
| 35 |
+
translated_text=output,
|
| 36 |
+
detected_lang=None # 简单翻译版暂不返回检测语言
|
| 37 |
+
)
|
requirements.txt
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
fastapi
|
| 2 |
+
uvicorn[standard]
|
| 3 |
+
transformers
|
| 4 |
+
torch
|
| 5 |
+
|