338 lines
No EOL
7 KiB
Markdown
338 lines
No EOL
7 KiB
Markdown
# Lolly AI
|
|
|
|
A FastAPI-based insurance AI assistant that integrates with talestorm-ai for chat capabilities and provides insurance estimation services.
|
|
|
|
## Features
|
|
|
|
- **Insurance Chat**: AI-powered chat interface for insurance-related questions
|
|
- **Insurance Estimation**: AI-powered estimation using TALESTORM API for comprehensive underwriting and pricing
|
|
- **Integration**: Seamless integration with talestorm-ai API
|
|
- **Modern API**: Built with FastAPI for high performance and automatic documentation
|
|
|
|
## Quick Start with Docker Compose
|
|
|
|
The easiest way to run lolly-ai is using Docker Compose, which will set up both lolly-ai and its dependency talestorm-ai.
|
|
|
|
### Prerequisites
|
|
|
|
- Docker and Docker Compose installed
|
|
- talestorm-ai repository cloned in the same parent directory as lolly-ai
|
|
|
|
### Setup
|
|
|
|
1. Clone both repositories:
|
|
```bash
|
|
git clone <talestorm-ai-repo-url> ../talestorm-ai
|
|
git clone <lolly-ai-repo-url> lolly-ai
|
|
cd lolly-ai
|
|
```
|
|
|
|
2. Create a `.env` file with your configuration:
|
|
```bash
|
|
# Database Configuration (for talestorm-ai)
|
|
POSTGRES_USER=postgres
|
|
POSTGRES_PASSWORD=password
|
|
POSTGRES_DB=talestorm
|
|
PUBLIC_POSTGRES_PORT=5432
|
|
|
|
# talestorm-ai Configuration
|
|
PUBLIC_TALESTORM_PORT=8000
|
|
ADMIN_API_KEY=changeme-admin-key
|
|
OPENAI_API_KEY=your-openai-api-key-here
|
|
|
|
# lolly-ai Configuration
|
|
PUBLIC_LOLLY_PORT=7310
|
|
TALESTORM_API_KEY=your-talestorm-api-key-here
|
|
TALESTORM_AGENT_ID=your-talestorm-chat-agent-id-here
|
|
TALESTORM_ESTIMATION_AGENT_ID=your-talestorm-estimation-agent-id-here
|
|
INSURANCE_API_BASE_URL=https://apilolly.cyberpug.ru
|
|
|
|
# Server Configuration
|
|
HOST=0.0.0.0
|
|
PORT=7310
|
|
DEBUG=false
|
|
|
|
# CORS Configuration
|
|
CORS_ORIGINS=*
|
|
|
|
# Logging
|
|
LOG_LEVEL=INFO
|
|
```
|
|
|
|
3. Start the services:
|
|
```bash
|
|
docker compose up -d
|
|
```
|
|
|
|
4. Access the services:
|
|
- **lolly-ai API**: http://localhost:7310
|
|
- **talestorm-ai API**: http://localhost:8000
|
|
- **lolly-ai docs**: http://localhost:7310/docs
|
|
- **talestorm-ai docs**: http://localhost:8000/docs
|
|
|
|
### Development with Docker Compose
|
|
|
|
For development, you can mount the source code:
|
|
|
|
```bash
|
|
docker compose up -d
|
|
```
|
|
|
|
The source code is automatically mounted, so changes will be reflected immediately.
|
|
|
|
### Stopping the services
|
|
|
|
```bash
|
|
docker compose down
|
|
```
|
|
|
|
To remove volumes as well:
|
|
```bash
|
|
docker compose down -v
|
|
```
|
|
|
|
## Agent Configuration
|
|
|
|
The system uses two different TALESTORM agents for different purposes:
|
|
|
|
- **TALESTORM_AGENT_ID**: Used for general insurance chat functionality
|
|
- **TALESTORM_ESTIMATION_AGENT_ID**: Used specifically for insurance estimation with structured output schema
|
|
|
|
This separation allows for specialized agents optimized for their respective tasks.
|
|
|
|
## Estimation Service
|
|
|
|
The estimation service has been refactored to use the TALESTORM API instead of local underwriting logic. This provides:
|
|
|
|
- **AI-Powered Analysis**: Uses advanced AI models for risk assessment and pricing
|
|
- **Comprehensive Evaluation**: Analyzes all health factors, medications, and conditions
|
|
- **Structured Output**: Returns detailed tier assignments and pricing for each applicant
|
|
- **Flexible Response**: Handles both accepted and rejected applications with detailed reasoning
|
|
|
|
### Estimation Request Format
|
|
|
|
The service accepts insurance application data and returns structured estimation results:
|
|
|
|
```json
|
|
{
|
|
"status": "accepted",
|
|
"details": {
|
|
"dtq": false,
|
|
"reason": "All applicants have manageable conditions...",
|
|
"tier": 3,
|
|
"total_price": 815.75
|
|
},
|
|
"results": [
|
|
{
|
|
"name": "Sarah Johnson",
|
|
"applicant_type": "primary",
|
|
"age": 39,
|
|
"bmi": 23.38,
|
|
"tier": 3,
|
|
"rx_spend": 40.0,
|
|
"message": "Type 2 diabetes well-controlled..."
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
## API Endpoints
|
|
|
|
All API endpoints are versioned under `/api/v1/`:
|
|
|
|
### `/api/v1/sessions` (POST)
|
|
Create a new chat session.
|
|
|
|
**Query Parameters:**
|
|
- `agent_id` (optional): Specific agent ID to use for the session
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"session_id": "session-uuid"
|
|
}
|
|
```
|
|
|
|
### `/api/v1/sessions` (GET)
|
|
List all available sessions.
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"sessions": [
|
|
{
|
|
"id": "session-uuid",
|
|
"organization_id": "org-uuid",
|
|
"agent_id": "agent-uuid",
|
|
"created_at": "2024-01-01T00:00:00Z"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### `/api/v1/sessions/{session_id}` (GET)
|
|
Get details of a specific session.
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"id": "session-uuid",
|
|
"organization_id": "org-uuid",
|
|
"agent_id": "agent-uuid",
|
|
"created_at": "2024-01-01T00:00:00Z"
|
|
}
|
|
```
|
|
|
|
### `/api/v1/agents` (GET)
|
|
List available AI agents.
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"agents": [
|
|
{
|
|
"id": "agent-uuid",
|
|
"name": "Insurance Assistant",
|
|
"model_name": "gpt-3.5-turbo",
|
|
"model_provider": "openai",
|
|
"enable_rag_search": true,
|
|
"instructions": "You are an insurance expert..."
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### `/api/v1/insurance_chat` (POST)
|
|
Handles insurance-related chat requests.
|
|
|
|
**Request Body:**
|
|
```json
|
|
{
|
|
"message": "What does my health insurance cover?",
|
|
"session_id": "optional-session-id"
|
|
}
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"session_id": "session-uuid",
|
|
"answer": "Your health insurance covers...",
|
|
"sources": [
|
|
{
|
|
"plan_name": "Cigna 1000 Classic",
|
|
"chunk_number": 0,
|
|
"content_chunk": "This plan covers preventive care, doctor visits, and prescription drugs..."
|
|
}
|
|
],
|
|
"history": [
|
|
{
|
|
"role": "user",
|
|
"message": "What does my health insurance cover?"
|
|
},
|
|
{
|
|
"role": "assistant",
|
|
"message": "Your health insurance covers..."
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### `/api/v1/estimation` (POST)
|
|
Handles insurance estimation and underwriting requests.
|
|
|
|
**Request Body:**
|
|
```json
|
|
{
|
|
"uid": "string",
|
|
"applicants": [
|
|
{
|
|
"applicant": 1,
|
|
"firstName": "string",
|
|
"lastName": "string",
|
|
"midName": "string",
|
|
"phone": "string",
|
|
"gender": "male",
|
|
"dob": "2025-07-25",
|
|
"nicotine": true,
|
|
"weight": 0,
|
|
"heightFt": 0,
|
|
"heightIn": 0
|
|
}
|
|
],
|
|
"plans": [
|
|
{
|
|
"id": 0,
|
|
"coverage": 1,
|
|
"tier": "string"
|
|
}
|
|
],
|
|
"phq": {
|
|
"treatment": true,
|
|
"invalid": true,
|
|
"pregnancy": true,
|
|
"effectiveDate": "2025-07-25",
|
|
"disclaimer": true,
|
|
"signature": "string",
|
|
"medications": [
|
|
{
|
|
"applicant": 0,
|
|
"name": "string",
|
|
"rxcui": "string",
|
|
"dosage": "string",
|
|
"frequency": "string",
|
|
"description": "string"
|
|
}
|
|
],
|
|
"issues": [
|
|
{
|
|
"key": "string",
|
|
"details": [
|
|
{
|
|
"key": "string",
|
|
"description": "string"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"conditions": [
|
|
{
|
|
"key": "string",
|
|
"description": "string"
|
|
}
|
|
]
|
|
},
|
|
"income": 0,
|
|
"address": {
|
|
"address1": "string",
|
|
"address2": "string",
|
|
"city": "string",
|
|
"state": "string",
|
|
"zipcode": "string"
|
|
}
|
|
}
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"status": "accepted",
|
|
"details": {
|
|
"dtq": true,
|
|
"reason": "string",
|
|
"tier": 0,
|
|
"total_price": 0
|
|
},
|
|
"results": [
|
|
{
|
|
"name": "string",
|
|
"applicant_type": "Primary",
|
|
"age": 0,
|
|
"bmi": 0,
|
|
"tier": 0,
|
|
"rx_spend": 0,
|
|
"message": "string"
|
|
}
|
|
]
|
|
}
|
|
``` |