| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- """
- NLP microservice for labor arbitration element extraction.
- Serves the fine-tuned Chinese RoBERTa multi-task model.
- """
- from fastapi import FastAPI
- from app.schemas import ExtractRequest
- from app.services.extractor import ChineseLegalElementExtractor
- app = FastAPI(title="Labor NLP Service", version="0.2.0")
- # Initialize extractor (loads model on first use)
- _extractor: ChineseLegalElementExtractor | None = None
- _model_available: bool | None = None
- def get_extractor() -> ChineseLegalElementExtractor:
- global _extractor
- if _extractor is None:
- _extractor = ChineseLegalElementExtractor()
- return _extractor
- @app.get("/health")
- def health():
- global _model_available
- ext = get_extractor()
- if _model_available is None:
- _model_available = ext._use_model
- return {
- "status": "ok",
- "model_available": _model_available,
- "mode": "bert_multi_task" if _model_available else "rule_fallback",
- }
- @app.post("/extract")
- def extract_elements(payload: ExtractRequest):
- ext = get_extractor()
- result = ext.extract(payload.text)
- return result
- @app.post("/extract/compare")
- def extract_compare(payload: ExtractRequest):
- """Return extraction results with both model and rule-based methods."""
- ext = get_extractor()
- model_result = None
- rule_result = None
- # Try model extraction
- if ext._use_model:
- try:
- model_result = ext._extract_with_model(payload.text)
- except Exception:
- pass
- # Rule-based extraction
- rule_result = ext._extract_with_rules(payload.text)
- return {
- "model_result": model_result,
- "rule_result": rule_result,
- "model_available": ext._use_model,
- }
|