File size: 3,231 Bytes
091451d cfba9db 8ba1afc 091451d cfba9db 091451d 3114f31 091451d cfba9db 091451d a7aa06f 091451d 2cfcd90 091451d 2cfcd90 deb315d 091451d deb315d 091451d deb315d 091451d 3114f31 091451d cfba9db 3114f31 8f95ed0 deb315d 091451d d2d0847 3114f31 8f95ed0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
import logging
import gradio as gr
from transformers import pipeline
import os
import torch
from huggingface_hub import login
from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse
import uvicorn
import threading
# Cấu hình logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
# Đăng nhập Hugging Face
try:
login(token=os.getenv("HF_TOKEN"))
logging.info("Logged in to Hugging Face Hub successfully")
except Exception as e:
logging.error(f"Failed to login to Hugging Face Hub: {e}")
raise
# Load mô hình
logging.info("Loading nguyenvulebinh/vi-mrc-base...")
try:
qa_pipeline = pipeline(
"question-answering",
model="nguyenvulebinh/vi-mrc-base",
device=0 if torch.cuda.is_available() else -1
)
logging.info("Model loaded successfully")
except Exception as e:
logging.error(f"Failed to load model: {e}")
raise
# Hàm xử lý cho Gradio và API
def gradio_answer(question, context):
result = qa_pipeline(question=question, context=context)
return result["answer"]
# Tạo FastAPI app
app = FastAPI()
@app.post("/api/answer")
async def api_answer(request: Request):
try:
data = await request.json()
question = data.get("question")
context = data.get("context", "Cây lúa là một loại cây trồng phổ biến ở Việt Nam, cần điều kiện đất và nước phù hợp.")
logging.info(f"Received request - Question: {question}, Context: {context[:200]}...")
if not question:
logging.error("Missing question")
return JSONResponse({"error": "Missing question"}, status_code=400)
result = qa_pipeline(question=question, context=context)
logging.info(f"Response - Answer: {result['answer']}")
return JSONResponse({"answer": result["answer"]})
except Exception as e:
logging.error(f"API error: {e}")
return JSONResponse({"error": str(e)}, status_code=500)
# Tạo Gradio Blocks
with gr.Blocks() as demo:
gr.Markdown("# AgriBot: Hỏi đáp nông nghiệp")
gr.Markdown("Nhập câu hỏi và ngữ cảnh để nhận câu trả lời về nông nghiệp.")
with gr.Row():
question_input = gr.Textbox(label="Câu hỏi", placeholder="Nhập câu hỏi của bạn...")
context_input = gr.Textbox(label="Ngữ cảnh", placeholder="Nhập ngữ cảnh liên quan...")
output = gr.Textbox(label="Câu trả lời")
submit_btn = gr.Button("Gửi")
submit_btn.click(fn=gradio_answer, inputs=[question_input, context_input], outputs=output)
# Hàm chạy Gradio
def run_gradio():
logging.info("Starting Gradio...")
demo.launch(server_name="0.0.0.0", server_port=7860, share=False, show_error=True, ssr_mode=False)
# Chạy ứng dụng
if __name__ == "__main__":
# Chạy Gradio trong một thread riêng
gradio_thread = threading.Thread(target=run_gradio)
gradio_thread.start()
# Chạy FastAPI (Hugging Face Spaces sẽ tự định nghĩa port)
logging.info("Starting FastAPI...")
uvicorn.run(app, host="0.0.0.0", port=80) # Port 80 sẽ được Spaces tự động xử lý |