add training configuration APIs
This commit is contained in:
@@ -89,18 +89,46 @@ def run_api_contract_tests() -> None:
|
||||
assert "/api/v1/imports/case-sql/apply" not in openapi_payload["paths"]
|
||||
assert "/api/v1/cases/{case_id}/delete-preview" not in openapi_payload["paths"]
|
||||
assert "delete" not in openapi_payload["paths"]["/api/v1/cases/{case_id}"]
|
||||
assert "/api/v1/training-config/recommended" in openapi_payload["paths"]
|
||||
assert "/api/v1/training-config/options" in openapi_payload["paths"]
|
||||
assert "/api/v1/sessions/{session_id}/hints/stream" in openapi_payload["paths"]
|
||||
assert "/api/v1/sessions/{session_id}/physical-exams" in openapi_payload["paths"]
|
||||
assert "/api/v1/sessions/{session_id}/auxiliary-exams" in openapi_payload["paths"]
|
||||
assert "/api/v1/sessions/{session_id}/physical-exams/{item_code}" in openapi_payload["paths"]
|
||||
assert "/api/v1/sessions/{session_id}/auxiliary-exams/{item_code}" in openapi_payload["paths"]
|
||||
|
||||
cases = client.get("/api/v1/cases", headers=headers)
|
||||
assert cases.status_code == 200
|
||||
case_id = cases.json()["data"]["items"][0]["id"]
|
||||
|
||||
recommended_config = client.get(f"/api/v1/training-config/recommended?case_id={case_id}", headers=headers)
|
||||
assert recommended_config.status_code == 200
|
||||
assert recommended_config.json()["data"]["recommended"]["visit_environment"] == "outpatient"
|
||||
assert recommended_config.json()["data"]["recommended_labels"]["visit_environment"] == "门诊"
|
||||
|
||||
config_options = client.get(f"/api/v1/training-config/options?case_id={case_id}", headers=headers)
|
||||
assert config_options.status_code == 200
|
||||
assert config_options.json()["data"]["options"]["personality"]
|
||||
|
||||
created = client.post(
|
||||
"/api/v1/sessions",
|
||||
headers=headers,
|
||||
json={"case_id": case_id, "training_type": "diagnosis_treatment", "mode": "practice", "score_type": "percentage"},
|
||||
json={
|
||||
"case_id": case_id,
|
||||
"training_type": "diagnosis_treatment",
|
||||
"mode": "practice",
|
||||
"score_type": "percentage",
|
||||
"patient_config": {
|
||||
"visit_environment": "outpatient",
|
||||
"age_group": "youth",
|
||||
"education_level": "higher",
|
||||
"personality": "calm",
|
||||
},
|
||||
},
|
||||
)
|
||||
assert created.status_code == 200
|
||||
session_id = created.json()["data"]["session_id"]
|
||||
assert created.json()["data"]["patient_config"]["labels"]["personality"] == "平和"
|
||||
|
||||
cross_user = client.get(
|
||||
f"/api/v1/sessions/{session_id}/order-items",
|
||||
@@ -120,6 +148,18 @@ def run_api_contract_tests() -> None:
|
||||
assert order_two.status_code == 200
|
||||
assert order_two.json()["data"]["already_ordered"] is True
|
||||
|
||||
physical_list = client.get(f"/api/v1/sessions/{session_id}/physical-exams", headers=headers)
|
||||
assert physical_list.status_code == 200
|
||||
assert "items" in physical_list.json()["data"]
|
||||
|
||||
auxiliary_list = client.get(f"/api/v1/sessions/{session_id}/auxiliary-exams", headers=headers)
|
||||
assert auxiliary_list.status_code == 200
|
||||
assert any(item["item_code"] == "blood_routine" for item in auxiliary_list.json()["data"]["items"])
|
||||
|
||||
auxiliary_result = client.post(f"/api/v1/sessions/{session_id}/auxiliary-exams/blood_routine", headers=headers)
|
||||
assert auxiliary_result.status_code == 200
|
||||
assert auxiliary_result.json()["data"]["already_ordered"] is True
|
||||
|
||||
practice_hint_session = client.post(
|
||||
"/api/v1/sessions",
|
||||
headers=headers,
|
||||
@@ -136,6 +176,17 @@ def run_api_contract_tests() -> None:
|
||||
assert hint.json()["data"]["hints"]
|
||||
assert "recommended_orders" in hint.json()["data"]
|
||||
|
||||
with client.stream(
|
||||
"POST",
|
||||
f"/api/v1/sessions/{practice_hint_session_id}/hints/stream",
|
||||
headers=headers,
|
||||
json={"scope": "current_conversation"},
|
||||
) as hint_stream:
|
||||
assert hint_stream.status_code == 200
|
||||
hint_stream_text = "".join(hint_stream.iter_text())
|
||||
assert "event: hint_delta" in hint_stream_text
|
||||
assert "event: hint_done" in hint_stream_text
|
||||
|
||||
teaching = client.post(
|
||||
"/api/v1/sessions",
|
||||
headers=headers,
|
||||
|
||||
@@ -28,6 +28,7 @@ from app.schemas.session import (
|
||||
SubmitDiagnosisRequest,
|
||||
SubmitTreatmentRequest,
|
||||
)
|
||||
from app.schemas.training_config import PatientConfig
|
||||
from app.services.evaluation_service import EvaluationService
|
||||
from app.services.order_service import OrderService
|
||||
from app.services.pdf_export_service import PdfExportService
|
||||
@@ -56,10 +57,17 @@ async def run_demo_flow() -> None:
|
||||
training_type="diagnosis_treatment",
|
||||
mode="practice",
|
||||
score_type="percentage",
|
||||
patient_config=PatientConfig(
|
||||
visit_environment="outpatient",
|
||||
age_group="youth",
|
||||
education_level="higher",
|
||||
personality="calm",
|
||||
),
|
||||
),
|
||||
)
|
||||
db.commit()
|
||||
assert created.status == "inquiry"
|
||||
assert created.patient_config["labels"]["visit_environment"] == "门诊"
|
||||
|
||||
chat = await session_service.chat(ctx, created.session_id, ChatRequest(message="孩子最高体温多少?").message)
|
||||
db.commit()
|
||||
@@ -68,6 +76,10 @@ async def run_demo_flow() -> None:
|
||||
order = order_service.create_order(created.session_id, ctx.user_id, CreateOrderRequest(item_code="chest_xray").item_code)
|
||||
db.commit()
|
||||
assert order.is_key is True
|
||||
auxiliary_items = order_service.list_auxiliary_exam_items(created.session_id, ctx.user_id)
|
||||
assert any(item.item_code == "chest_xray" for item in auxiliary_items.items)
|
||||
physical_items = order_service.list_physical_exam_items(created.session_id, ctx.user_id)
|
||||
assert physical_items.items == [] or all(item.item_code != "chest_xray" for item in physical_items.items)
|
||||
tool_count_before = len([item for item in runtime_memory.get_messages(f"mem:{created.session_code}") if item.get("role") == "tool"])
|
||||
|
||||
duplicate_order = order_service.create_order(created.session_id, ctx.user_id, "chest_xray")
|
||||
|
||||
Reference in New Issue
Block a user