26-7-31-1

This commit is contained in:
shuai
2026-07-31 12:27:41 +08:00
commit 9b8b8b57b3
142 changed files with 22408 additions and 0 deletions
+27
View File
@@ -0,0 +1,27 @@
from .models import (
Detection,
ImagingAnalyzeResponse,
ImagingReportRequest,
ImagingReportResponse,
DecisionRequest,
DecisionResponse,
RiskItem,
SourceRef,
RagQueryRequest,
RagQueryResponse,
HealthResponse,
)
__all__ = [
"Detection",
"ImagingAnalyzeResponse",
"ImagingReportRequest",
"ImagingReportResponse",
"DecisionRequest",
"DecisionResponse",
"RiskItem",
"SourceRef",
"RagQueryRequest",
"RagQueryResponse",
"HealthResponse",
]
+108
View File
@@ -0,0 +1,108 @@
from __future__ import annotations
from typing import Any, Literal, Optional
from pydantic import BaseModel, Field
class Detection(BaseModel):
label: str
confidence: float
bbox: list[float] = Field(description="[x1, y1, x2, y2] 像素坐标")
label_zh: Optional[str] = None
class ImagingAnalyzeResponse(BaseModel):
detections: list[Detection] = []
annotated_image_base64: Optional[str] = None
preliminary_diagnosis: str
findings: str
recommendations: str
confidence: float
model_version: str
mode: Literal["demo", "real"] = "demo"
full_report: Optional[str] = None
disclaimer: str = "本结果仅供辅助决策,不能替代执业医师诊断。"
class ImagingReportRequest(BaseModel):
study_type: str = "CT"
body_part: str = ""
patient_summary: str = ""
preliminary_diagnosis: str = ""
findings: str = ""
detections: list[Detection] = []
confidence: float = 0.85
class ImagingReportResponse(BaseModel):
findings: str
impression: str
recommendations: str
full_report: str
model_version: str = "report-v1"
class PatientInfo(BaseModel):
age: Optional[int] = None
gender: Optional[str] = None
name: Optional[str] = None
class DecisionRequest(BaseModel):
chief_complaint: str = ""
history: str = ""
exam_findings: str = ""
diagnosis: str = ""
medications: str = ""
imaging_summary: str = ""
patient: Optional[PatientInfo] = None
class RiskItem(BaseModel):
type: str
description: str
level: str = "中"
confidence: float = 0.8
class SourceRef(BaseModel):
title: str
snippet: str = ""
category: str = ""
score: float = 0.0
class DecisionResponse(BaseModel):
treatment_suggestions: list[dict[str, Any]] = []
medication_suggestions: list[dict[str, Any]] = []
nursing_advice: list[str] = []
follow_up_plan: list[str] = []
risks: list[RiskItem] = []
conflicts: list[str] = []
sources: list[SourceRef] = []
full_text: str = ""
engine: str = "fastapi-rag"
disclaimer: str = "本结果仅供辅助决策,不能替代执业医师诊断。"
class RagQueryRequest(BaseModel):
query: str
top_k: int = 4
context: str = ""
class RagQueryResponse(BaseModel):
answer: str
sources: list[SourceRef] = []
engine: str = "langchain-rag"
class HealthResponse(BaseModel):
status: str = "ok"
yolo_available: bool = False
monai_available: bool = False
langchain_available: bool = False
llm_configured: bool = False
demo_mode: str = "auto"
knowledge_docs: int = 0