mirror of
https://github.com/katanemo/plano.git
synced 2026-05-07 14:52:42 +02:00
140 lines
4 KiB
Python
140 lines
4 KiB
Python
from fastapi import FastAPI, HTTPException
|
|
from pydantic import BaseModel, Field
|
|
|
|
app = FastAPI()
|
|
|
|
|
|
class Conversation(BaseModel):
|
|
arch_messages: list
|
|
|
|
|
|
class PolicyCoverageRequest(BaseModel):
|
|
policy_type: str = Field(
|
|
...,
|
|
description="The type of a policy held by the customer For, e.g. car, boat, house, motorcycle)",
|
|
)
|
|
|
|
|
|
class PolicyInitiateRequest(PolicyCoverageRequest):
|
|
deductible: float = Field(
|
|
..., description="The deductible amount set of the policy"
|
|
)
|
|
|
|
|
|
class ClaimUpdate(BaseModel):
|
|
claim_id: str
|
|
notes: str # Status or details of the claim
|
|
|
|
|
|
class DeductibleUpdate(BaseModel):
|
|
policy_id: str
|
|
deductible: float
|
|
|
|
|
|
class CoverageResponse(BaseModel):
|
|
policy_type: str
|
|
coverage: str # Description of coverage
|
|
premium: float # The premium cost
|
|
|
|
|
|
# Get information about policy coverage
|
|
@app.post("/policy/coverage", response_model=CoverageResponse)
|
|
async def get_policy_coverage(req: PolicyCoverageRequest):
|
|
"""
|
|
Retrieve the coverage details for a given policy type (car, boat, house, motorcycle).
|
|
"""
|
|
policy_coverage = {
|
|
"car": {
|
|
"coverage": "Full car coverage with collision, liability",
|
|
"premium": 500.0,
|
|
},
|
|
"boat": {
|
|
"coverage": "Full boat coverage including theft and storm damage",
|
|
"premium": 700.0,
|
|
},
|
|
"house": {
|
|
"coverage": "Full house coverage including fire, theft, flood",
|
|
"premium": 1000.0,
|
|
},
|
|
"motorcycle": {
|
|
"coverage": "Full motorcycle coverage with liability",
|
|
"premium": 400.0,
|
|
},
|
|
}
|
|
|
|
if req.policy_type not in policy_coverage:
|
|
raise HTTPException(status_code=404, detail="Policy type not found")
|
|
|
|
return CoverageResponse(
|
|
policy_type=req.policy_type,
|
|
coverage=policy_coverage[req.policy_type]["coverage"],
|
|
premium=policy_coverage[req.policy_type]["premium"],
|
|
)
|
|
|
|
|
|
# Initiate policy coverage
|
|
@app.post("/policy/initiate")
|
|
async def initiate_policy(policy_request: PolicyInitiateRequest):
|
|
"""
|
|
Initiate policy coverage for a car, boat, house, or motorcycle.
|
|
"""
|
|
if policy_request.policy_type not in ["car", "boat", "house", "motorcycle"]:
|
|
raise HTTPException(status_code=400, detail="Invalid policy type")
|
|
|
|
return {
|
|
"message": f"Policy initiated for {policy_request.policy_type}",
|
|
"deductible": policy_request.deductible,
|
|
}
|
|
|
|
|
|
# Update claim details
|
|
@app.post("/policy/claim")
|
|
async def update_claim(req: ClaimUpdate):
|
|
"""
|
|
Update the status or details of a claim.
|
|
"""
|
|
# For simplicity, this is a mock update response
|
|
return {
|
|
"message": f"Claim {claim_update.claim_id} for policy {claim_update.claim_id} has been updated",
|
|
"update": claim_update.notes,
|
|
}
|
|
|
|
|
|
# Update deductible amount
|
|
@app.post("/policy/deductible")
|
|
async def update_deductible(deductible_update: DeductibleUpdate):
|
|
"""
|
|
Update the deductible amount for a specific policy.
|
|
"""
|
|
# For simplicity, this is a mock update response
|
|
return {
|
|
"message": f"Deductible for policy {deductible_update.policy_id} has been updated",
|
|
"new_deductible": deductible_update.deductible,
|
|
}
|
|
|
|
|
|
# Post method for policy Q/A
|
|
@app.post("/policy/qa")
|
|
async def policy_qa(conversation: Conversation):
|
|
"""
|
|
This method handles Q/A related to general issues in insurance.
|
|
It forwards the conversation to the OpenAI client via a local proxy and returns the response.
|
|
"""
|
|
return {
|
|
"choices": [
|
|
{
|
|
"message": {
|
|
"role": "assistant",
|
|
"content": "I am a helpful insurance agent, and can only help with insurance things",
|
|
},
|
|
"finish_reason": "completed",
|
|
"index": 0,
|
|
}
|
|
],
|
|
"model": "insurance_agent",
|
|
"usage": {"completion_tokens": 0},
|
|
}
|
|
|
|
|
|
# Run the app using:
|
|
# uvicorn main:app --reload
|