harrier / Dockerfile
lydgs's picture
Update Dockerfile
8e8da13 verified
Raw
History Blame Contribute Delete
2.09 kB
FROM python:3.11-slim
WORKDIR /app
# 1. 安装必要的 Python 库
RUN pip install fastapi uvicorn sentence-transformers torch --index-url https://pypi.tuna.tsinghua.edu.cn/simple
# 2. 创建一个稳健的后端服务 (app.py)
RUN echo "from fastapi import FastAPI, Request, HTTPException" > app.py && \
echo "from fastapi.responses import JSONResponse" >> app.py && \
echo "from sentence_transformers import SentenceTransformer" >> app.py && \
echo "import os, uvicorn" >> app.py && \
echo "MODEL_ID = os.getenv('MODEL_ID', 'microsoft/harrier-oss-v1-0.6b')" >> app.py && \
echo "print(f'正在加载模型: {MODEL_ID}')" >> app.py && \
echo "model = SentenceTransformer(MODEL_ID, device='cpu')" >> app.py && \
echo "print('模型加载完毕!准备接收请求...')" >> app.py && \
echo "app = FastAPI()" >> app.py && \
echo "@app.post('/v1/embeddings')" >> app.py && \
echo "async def create_embeddings(request: Request):" >> app.py && \
echo " try:" >> app.py && \
echo " body = await request.json()" >> app.py && \
echo " input_text = body.get('input', '')" >> app.py && \
echo " if not input_text:" >> app.py && \
echo " raise HTTPException(422, '缺少 input 字段')" >> app.py && \
echo " embeddings = model.encode(input_text).tolist()" >> app.py && \
echo " return JSONResponse({" >> app.py && \
echo " 'object': 'list'," >> app.py && \
echo " 'data': [{'object': 'embedding', 'embedding': embeddings, 'index': 0}]," >> app.py && \
echo " 'model': MODEL_ID" >> app.py && \
echo " })" >> app.py && \
echo " except HTTPException:" >> app.py && \
echo " raise" >> app.py && \
echo " except Exception as e:" >> app.py && \
echo " return JSONResponse({'error': str(e)}, status_code=500)" >> app.py && \
echo "if __name__ == '__main__':" >> app.py && \
echo " uvicorn.run(app, host='0.0.0.0', port=7860)" >> app.py
# 3. 启动服务
CMD ["python", "app.py"]