| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- from __future__ import annotations
- from sqlalchemy.orm import Session
- from app.db.repositories import diagnosis as diagnosis_repo
- from app.db.repositories import document as document_repo
- from app.db.repositories import evaluation as evaluation_repo
- from app.db.repositories import knowledge as knowledge_repo
- from app.db.repositories import monitoring as monitoring_repo
- from app.db.repositories import work_order as work_order_repo
- from app.services.mine_service import resolve_mine
- def build_mine_context(
- db: Session,
- mine_id: str | None,
- *,
- include_documents: bool = False,
- ) -> dict:
- mine = resolve_mine(db, mine_id)
- context = {
- "mine": {
- "id": mine.id,
- "code": mine.code,
- "name": mine.name,
- "ventilation_method": mine.ventilation_method,
- },
- "monitoring": monitoring_repo.monitoring_overview(db, mine.id),
- "diagnosis": diagnosis_repo.result_summary(db, mine.id),
- "work_orders": work_order_repo.status_summary(db, mine.id),
- }
- runs = evaluation_repo.list_runs(db, mine.id, limit=1)
- if runs:
- context["latest_evaluation"] = {
- "run_no": runs[0].run_no,
- "score": runs[0].total_score,
- "grade": runs[0].grade,
- "summary": runs[0].summary,
- }
- if include_documents:
- documents, total = document_repo.list_documents(
- db,
- mine_id=mine.id,
- page=1,
- page_size=10,
- )
- context["documents"] = {
- "total": total,
- "recent": [
- {
- "id": item.id,
- "title": item.title,
- "category": item.category,
- "parse_status": item.parse_status,
- }
- for item in documents
- ],
- }
- return context
- def build_knowledge_context(
- db: Session,
- mine_id: str | None,
- question: str,
- limit: int = 8,
- ) -> dict:
- items, total = knowledge_repo.list_knowledge(
- db,
- mine_id=mine_id,
- keyword=question,
- page=1,
- page_size=limit,
- )
- return {
- "total": total,
- "items": [
- {
- "id": item.id,
- "code": item.code,
- "title": item.title,
- "type": item.knowledge_type,
- "category": item.category,
- "summary": item.summary,
- "content": item.content[:1200],
- }
- for item in items
- ],
- }
|