4.7 KiB
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: Comprehensive underwriting and pricing estimation
- 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
- Clone both repositories:
git clone <talestorm-ai-repo-url> ../talestorm-ai
git clone <lolly-ai-repo-url> lolly-ai
cd lolly-ai
- Create a
.envfile with your configuration:
# 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-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
- Start the services:
docker compose up -d
- 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:
docker compose up -d
The source code is automatically mounted, so changes will be reflected immediately.
Stopping the services
docker compose down
To remove volumes as well:
docker compose down -v
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:
{
"session_id": "session-uuid"
}
/api/v1/sessions (GET)
List all available sessions.
Response:
{
"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:
{
"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:
{
"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:
{
"message": "What does my health insurance cover?",
"session_id": "optional-session-id"
}
Response:
{
"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:
{
"uid": "application-id",
"applicants": [
{
"firstName": "John",
"dob": "15/03/1985",
"weight": 70,
"heightFt": 5,
"heightIn": 10,
"applicant": 1
}
],
"plans": [
{
"coverage": 1
}
],
"phq": {
"effectiveDate": "01/01/2024",
"medications": [],
"conditions": [],
"issues": []
},
"income": 50000,
"address": {}
}
Response:
{
"uid": "application-id",
"status": "submitted",
"data": {
"results": [...],
"combined": {
"tier": 2.0,
"total_price": 243,
"dtq": false,
"message": "Final assigned tier is 2.0"
}
},
"external": {...}
}