# HBV AI Assistant - API Documentation for Frontend Engineers ## Table of Contents - [Overview](#overview) - [Base URL](#base-url) - [Core Endpoints](#core-endpoints) - [1. POST /assess](#1-post-assess) - [2. POST /assess/text](#2-post-assesstext) - [3. POST /ask](#3-post-ask) - [4. POST /ask/stream](#4-post-askstream) - [5. GET /health](#5-get-health) - [Additional Endpoints](#additional-endpoints) - [Error Handling](#error-handling) - [Code Examples](#code-examples) --- ## Overview The HBV AI Assistant API provides endpoints for evaluating patient eligibility for HBV (Hepatitis B Virus) treatment according to SASLT 2021 guidelines. The API supports both structured data input and free-form text parsing, along with an interactive AI chat for guideline exploration. **API Version:** 1.0.0 --- ## Base URL ``` Development: http://127.0.0.1:8000 Production: https://moazx-hbv-ai-assistant.hf.space/ ``` --- ## Core Endpoints ### 1. POST /assess **Primary endpoint for HBV patient eligibility assessment with structured data input.** #### Request **URL:** `/assess` **Method:** `POST` **Content-Type:** `application/json` **Request Body Schema:** ```json { "sex": "Male", // Required: "Male" or "Female" "age": 45, // Required: 0-120 "pregnancy_status": "Not pregnant", // Required: "Not pregnant" or "Pregnant" "hbsag_status": "Positive", // Required: "Positive" or "Negative" "duration_hbsag_months": 12, // Required: Duration in months (≥0) "hbv_dna_level": 5000, // Required: HBV DNA in IU/mL (≥0) "hbeag_status": "Positive", // Required: "Positive" or "Negative" "alt_level": 80, // Required: ALT in U/L (≥0) "fibrosis_stage": "F2-F3", // Required: "F0-F1", "F2-F3", or "F4" "necroinflammatory_activity": "A2", // Required: "A0", "A1", "A2", or "A3" "extrahepatic_manifestations": false, // Required: true or false "immunosuppression_status": "None", // Optional: "None", "Chemotherapy", "Other" "coinfections": [], // Optional: Array of "HIV", "HCV", "HDV" "family_history_cirrhosis_hcc": false, // Required: true or false "other_comorbidities": [] // Optional: Array of strings } ``` #### Response **Status Code:** `200 OK` **Response Body:** ```json { "eligible": true, "recommendations": "Based on SASLT 2021 guidelines, this patient IS ELIGIBLE for HBV antiviral treatment.\n\n**Eligibility Criteria Met:**\n- HBeAg-positive chronic hepatitis B with HBV DNA >2,000 IU/mL and ALT elevation (80 U/L) [SASLT 2021, Page 15]\n- Significant fibrosis (F2-F3) with moderate necroinflammatory activity (A2) [SASLT 2021, Page 18]\n\n**Treatment Recommendations:**\n1. **First-line therapy:** Entecavir (ETV) 0.5mg daily or Tenofovir Disoproxil Fumarate (TDF) 300mg daily [SASLT 2021, Page 22]\n2. **Alternative:** Tenofovir Alafenamide (TAF) 25mg daily for patients with renal concerns [SASLT 2021, Page 23]\n\n**Monitoring:**\n- HBV DNA every 3 months during first year\n- ALT and complete blood count every 3-6 months\n- HBeAg/anti-HBe every 6-12 months [SASLT 2021, Page 28]" } ``` #### Field Descriptions | Field | Type | Description | Validation | |-------|------|-------------|------------| | `sex` | string | Patient's biological sex | "Male" or "Female" | | `age` | integer | Patient's age in years | 0-120 | | `pregnancy_status` | string | Current pregnancy status | "Not pregnant" or "Pregnant" | | `hbsag_status` | string | Hepatitis B surface antigen status | "Positive" or "Negative" | | `duration_hbsag_months` | integer | How long HBsAg has been positive | ≥0 | | `hbv_dna_level` | float | HBV DNA viral load | ≥0 IU/mL | | `hbeag_status` | string | Hepatitis B e-antigen status | "Positive" or "Negative" | | `alt_level` | float | Alanine aminotransferase level | ≥0 U/L | | `fibrosis_stage` | string | Liver fibrosis/cirrhosis stage | "F0-F1", "F2-F3", or "F4" | | `necroinflammatory_activity` | string | Degree of liver inflammation | "A0", "A1", "A2", or "A3" | | `extrahepatic_manifestations` | boolean | Presence of HBV-related conditions outside liver | true/false | | `immunosuppression_status` | string | Current immunosuppression | "None", "Chemotherapy", "Other" | | `coinfections` | array | Other viral infections | ["HIV", "HCV", "HDV"] or [] | | `family_history_cirrhosis_hcc` | boolean | First-degree relative with cirrhosis/HCC | true/false | | `other_comorbidities` | array | Additional medical conditions | Array of strings or [] | --- ### 2. POST /assess/text **Text-based HBV patient eligibility assessment - parses free-form clinical text.** #### Request **URL:** `/assess/text` **Method:** `POST` **Content-Type:** `application/json` **Request Body Schema:** ```json { "text_input": "45-year-old male patient\nHBsAg: Positive for 12 months\nHBV DNA: 5000 IU/mL\nHBeAg: Positive\nALT: 80 U/L\nFibrosis stage: F2-F3\nNecroinflammatory activity: A2\nNo extrahepatic manifestations\nNo immunosuppression\nNo coinfections (HIV, HCV, HDV)\nNo family history of cirrhosis or HCC" } ``` **Field:** - `text_input` (string, required): Free-form text containing patient clinical data. Minimum 10 characters. #### Response **Status Code:** `200 OK` **Response Body:** Same as `/assess` endpoint ```json { "eligible": true, "recommendations": "Based on SASLT 2021 guidelines, this patient IS ELIGIBLE for HBV antiviral treatment..." } ``` #### How It Works 1. **LLM-based parsing:** The API uses an AI model to extract structured patient data from the free-form text 2. **Validation:** Extracted data is validated against the same schema as `/assess` 3. **Assessment:** Performs identical assessment logic as the structured endpoint 4. **Response:** Returns the same structured response format #### Text Input Tips - Include all relevant clinical parameters - Use clear labels (e.g., "HBV DNA:", "ALT:", "Age:") - Can use natural language or structured format - The AI will extract and interpret the data intelligently --- ### 3. POST /ask **Interactive AI chat for exploring HBV treatment guidelines.** #### Request **URL:** `/ask` **Method:** `POST` **Content-Type:** `application/json` **Request Body Schema:** ```json { "query": "What are the first-line treatment options for HBeAg-positive chronic hepatitis B?", "session_id": "doctor_123_session_1", "patient_context": { // Optional: Include HBVPatientInput object for context "age": 45, "sex": "Male", "hbv_dna_level": 5000, // ... other patient fields }, "assessment_result": { // Optional: Include prior assessment result for context "eligible": true, "recommendations": "..." } } ``` **Fields:** - `query` (string, required): Doctor's question about HBV guidelines. Max 2000 characters. - `session_id` (string, optional): Session identifier for conversation continuity. Default: "default" - `patient_context` (object, optional): Patient data from a prior assessment to provide context - `assessment_result` (object, optional): Assessment result to provide context #### Response **Status Code:** `200 OK` **Response Body:** ```json { "response": "According to SASLT 2021 guidelines, the first-line treatment options for HBeAg-positive chronic hepatitis B are:\n\n1. **Entecavir (ETV)** - 0.5mg once daily [SASLT 2021, Page 22]\n2. **Tenofovir Disoproxil Fumarate (TDF)** - 300mg once daily [SASLT 2021, Page 22]\n\nBoth medications have:\n- High barrier to resistance\n- Excellent efficacy in viral suppression\n- Well-established safety profiles\n\n**Alternative option:**\n- **Tenofovir Alafenamide (TAF)** - 25mg once daily, particularly for patients with renal concerns or bone disease [SASLT 2021, Page 23]", "session_id": "doctor_123_session_1" } ``` #### Session Management - **Conversation continuity:** Use the same `session_id` to maintain conversation context across multiple questions - **New conversation:** Use a different `session_id` or omit it for a fresh conversation - **Clear session:** Use `DELETE /session/{session_id}` to clear conversation history --- ### 4. POST /ask/stream **Streaming version of the AI chat endpoint for real-time responses.** #### Request **URL:** `/ask/stream` **Method:** `POST` **Content-Type:** `application/json` **Request Body:** Same as `/ask` endpoint ```json { "query": "What monitoring is required during HBV treatment?", "session_id": "doctor_123_session_1" } ``` #### Response **Status Code:** `200 OK` **Content-Type:** `text/markdown` **Transfer-Encoding:** `chunked` **Response:** Streaming text/markdown chunks The response streams in real-time as the AI generates the answer. This provides a better user experience for longer responses. --- ### 5. GET /health **Simple health check endpoint to verify API is running.** #### Request **URL:** `/health` **Method:** `GET` #### Response **Status Code:** `200 OK` **Response Body:** ```json { "status": "healthy", "version": "1.0.0", "timestamp": "2024-01-15T10:30:00.123456" } ``` **Fields:** - `status` (string): API health status ("healthy") - `version` (string): API version - `timestamp` (string): Current server timestamp in ISO format #### Use Case Use this endpoint to: - Verify the API is running and accessible - Monitor API availability - Check server time for debugging --- ## Additional Endpoints ### API Information **GET** `/` **Response:** ```json { "name": "HBV AI Assistant API", "version": "1.0.0", "description": "HBV Patient Selection System - Evaluates patient eligibility for HBV treatment according to SASLT 2021 guidelines", "docs": "/docs", "endpoints": { "assess": "/assess (POST) - Primary endpoint for HBV patient eligibility assessment", "assess_text": "/assess/text (POST) - Text-based HBV patient eligibility assessment", "ask": "/ask (POST) - Optional AI chat for guideline exploration", "ask_stream": "/ask/stream (POST) - Streaming AI chat responses", "health": "/health (GET) - Simple health check" } } ``` --- ## Error Handling ### HTTP Status Codes | Code | Description | |------|-------------| | 200 | Success | | 400 | Bad Request - Invalid input data | | 422 | Validation Error - Request body doesn't match schema | | 429 | Too Many Requests - Rate limit exceeded | | 500 | Internal Server Error | ### Error Response Format ```json { "detail": "Error message describing what went wrong" } ``` ### Validation Error Example **Request with invalid data:** ```json { "sex": "Unknown", // Invalid: must be "Male" or "Female" "age": 150 // Invalid: must be 0-120 } ``` **Response (422):** ```json { "detail": [ { "loc": ["body", "sex"], "msg": "Sex must be either Male or Female", "type": "value_error" }, { "loc": ["body", "age"], "msg": "ensure this value is less than or equal to 120", "type": "value_error.number.not_le" } ] } ``` --- ## Interactive API Documentation For interactive API documentation with a built-in testing interface, visit: **Swagger UI:** `http://127.0.0.1:8000/docs` **ReDoc:** `http://127.0.0.1:8000/redoc` These interfaces allow you to: - View all endpoints and their schemas - Test endpoints directly from the browser - See example requests and responses - Understand validation rules --- ## Rate Limiting The API implements rate limiting: - **Default limit:** 100 requests per minute per IP address - **Response header:** `X-RateLimit-Remaining` shows remaining requests - **Status code:** 429 when limit exceeded --- ## Best Practices 1. **Error Handling:** - Always check `response.ok` before parsing JSON - Display validation errors to users clearly - Implement retry logic for 500 errors 2. **Session Management:** - Use unique session IDs for different patient conversations - Clear sessions when switching patients - Consider using user ID + timestamp for session IDs 3. **Performance:** - Use `/ask/stream` for better UX on longer responses - Cache assessment results when appropriate - Consider debouncing text input for `/assess/text` endpoint 4. **Data Validation:** - Validate input on frontend before sending to API - Use the exact enum values specified in the documentation - Handle validation errors gracefully --- ## Support For questions or issues: - Check the interactive documentation at `/docs` - Review error messages carefully - they indicate what's wrong - Ensure all required fields are provided with correct data types --- **Last Updated:** 2024-01-15 **API Version:** 1.0.0