afb6d5185d
Feature/lesser table caching refactor hybrid * chore: Remove unused duplicate main.py from shared pipeline * fix: Correct crosswalk paths in aarete_derived.py * chore: Remove unused documentation files from fieldExtraction * docs: Add documentation files to documentation folder * docs: Update README with uv setup, expanded project structure, and branching conventions * docs: Add uv installation steps with Ubuntu/WSL emphasis * Enable prompt caching for all remaining LLM calls - Add _INSTRUCTION() functions for: EXHIBIT_HEADER, EXHIBIT_LINKAGE, EXHIBIT_TITLE_MATCH, DATE_FIX, DERIVED_TERM_DATE, CHECK_PROVIDER_NAME_MATCH, SPECIAL_CASE_ASSIGNMENT - Update all invoke_claude() calls in saas and clover pipelines to use cache=True with corresponding _INSTRUCTION() functions - Add new instructions to get_cacheable_instructions() for cache warming - Update tests for new instruction functions Functions now using caching: - prompt_exhibit_level - prompt_exhibit_lesser (EXHIBIT_LEVEL_LESSER_OF) - prompt_fee_schedule_breakout - prompt_grouper_breakout - prompt_special_case_assignment - prompt_exhibit_linkage - prompt_exhibit_header - prompt_smart_chunked (ONE_TO_ONE templates) - prompt_date_fix - prompt_derived_term_date - prompt_exhibit_title_match - provider_name_match_check 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Reorder * feat: Add bcbs_promise client pipeline with OFFSET_TERM extraction - Add new bcbs_promise client with HSC-based OFFSET_TERM field extraction - Extract full paragraph text of offset/recoupment provisions from contracts - Derive OFFSET_INDICATOR (Y/N) from OFFSET_TERM presence - Fix reorder_columns to preserve extra columns not in COLUMN_ORDER - Update QC/QA output path to outputs/qc_qa/ * fix: Update dev deps and test assertions for QC/QA output path - Add pytest/pytest-mock to dev dependencies for mypy type checking - Update test assertions to expect outputs/qc_qa instead of qa_qc_output * style: Apply black formatting to prompt_templates.py * Merge main, move scripts * Archive some scripts * update py version * remove .py version file * Remove ASCII characters * Restore testbed code * restore tracking * Update testbed metrics * Enable prompt caching for CODE_LAST_CHECK, FILL_BILL_TYPE, DUAL_LOB_CHECK, and GROUPER_BREAKOUT - Add CODE_LAST_CHECK_INSTRUCTION() for service specificity classification - Add FILL_BILL_TYPE_INSTRUCTION() for bill type code determination - Add DUAL_LOB_CHECK_INSTRUCTION() for Medicare/Medicaid classification - Update code_funcs.py to use caching for CODE_LAST_CHECK, FILL_BILL_TYPE, GROUPER_BREAKOUT - Update postprocessing_funcs.py to use caching for DUAL_LOB_CHECK - Add new instructions to get_cacheable_instructions() for cache warming - Add unit tests for new instruction functions 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Fix postprocessing_funcs to remove invalid columns * Merge branch 'main' into feature/lesser-table-caching-refactor-hybrid * Revert prompt caching changes from aed1b73c * update formatting * Update imports Approved-by: Sha Brown Approved-by: Praneel Panchigar
223 lines
6.8 KiB
Terraform
223 lines
6.8 KiB
Terraform
provider "aws" {
|
|
region = "us-east-2"
|
|
}
|
|
|
|
terraform {
|
|
required_providers {
|
|
aws = {
|
|
source = "hashicorp/aws"
|
|
version = "5.39.0"
|
|
}
|
|
}
|
|
|
|
backend "s3" {
|
|
encrypt = true
|
|
}
|
|
}
|
|
|
|
|
|
locals {
|
|
region_map = {
|
|
us-east-1 = "use1"
|
|
us-east-2 = "use2"
|
|
us-west-1 = "usw1"
|
|
us-west-2 = "usw2"
|
|
}
|
|
environment_map = {
|
|
prod = "p"
|
|
uat = "u"
|
|
qa = "q"
|
|
dev = "d"
|
|
}
|
|
|
|
# region abbreviation
|
|
region_short_name = local.region_map[var.aws_region]
|
|
|
|
# environment abbreviation
|
|
environment_short_name = local.environment_map[var.environment]
|
|
|
|
# global prefix
|
|
global_prefix = "${var.project_name}-${local.region_short_name}-${local.environment_short_name}"
|
|
|
|
# Resource prefix
|
|
iam_policy_prefix = "${local.global_prefix}-pol"
|
|
|
|
# # Resource prefix
|
|
iam_role_prefix = "${local.global_prefix}-rol"
|
|
|
|
# IAM role name
|
|
ec2_role_name = "${local.iam_role_prefix}-streamlit-server"
|
|
|
|
ec2_instance_name = "${local.global_prefix}-ec2-infra-streamlit-server"
|
|
|
|
}
|
|
|
|
|
|
# get the subnet id using data source
|
|
data "aws_subnets" "subnets" {
|
|
filter {
|
|
name = "vpc-id"
|
|
values = [var.vpc_id]
|
|
}
|
|
}
|
|
|
|
# vpc security groups
|
|
data "aws_security_groups" "security_groups" {
|
|
filter {
|
|
name = "group-name"
|
|
values = ["*default*"]
|
|
}
|
|
|
|
filter {
|
|
name = "vpc-id"
|
|
values = [var.vpc_id]
|
|
}
|
|
}
|
|
|
|
# instance profile for ec2 using the ec2_role
|
|
resource "aws_iam_instance_profile" "ec2_instance_profile" {
|
|
name = "${local.ec2_role_name}-instance-profile"
|
|
role = aws_iam_role.ec2_role.name
|
|
}
|
|
|
|
resource "aws_instance" "streamlit_server" {
|
|
ami = lookup(var.ubuntu_ami, var.environment)
|
|
instance_type = var.ec2_instance_type
|
|
subnet_id = data.aws_subnets.subnets.ids[0]
|
|
vpc_security_group_ids = data.aws_security_groups.security_groups.ids
|
|
iam_instance_profile = aws_iam_instance_profile.ec2_instance_profile.name
|
|
associate_public_ip_address = false
|
|
key_name = var.key_name
|
|
|
|
root_block_device {
|
|
volume_size = 30 # Variable
|
|
encrypted = true # Mandatory
|
|
}
|
|
# Setup SSH authentication for bitbucket access to pull code
|
|
# Setup SSL certificate for HTTPS access for SSO to work
|
|
user_data = <<-EOF
|
|
#!/bin/bash
|
|
echo '${file("${path.module}/requirements.txt")}' > /tmp/requirements.txt
|
|
apt-get update
|
|
apt-get install -y python3 python3-pip
|
|
sudo apt-get install libffi-dev
|
|
python3 -m pip install -r /tmp/requirements.txt
|
|
sudo apt install openssh-client
|
|
sudo apt install net-tools
|
|
|
|
export ENVIRONMENT=${var.environment}
|
|
|
|
# Create UI0 systemd service
|
|
cat <<EOT > /etc/systemd/system/streamlit-ui0.service
|
|
[Unit]
|
|
Description=Streamlit Server Service
|
|
|
|
[Service]
|
|
User=ubuntu
|
|
Type=simple
|
|
Restart=always
|
|
WorkingDirectory=/home/ubuntu/doczy.ai/streamlit
|
|
Environment="ENVIRONMENT=${upper(var.environment)}"
|
|
ExecStart=/home/ubuntu/.local/bin/streamlit run /home/ubuntu/doczy.ai/streamlit/interface_0.py --server.port 8500
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOT
|
|
|
|
# Enable and start the service
|
|
systemctl enable streamlit-ui0.service
|
|
systemctl start streamlit-ui0.service
|
|
|
|
# Create UI1 systemd service
|
|
cat <<EOT > /etc/systemd/system/streamlit-ui1.service
|
|
[Unit]
|
|
Description=Streamlit Server Service
|
|
|
|
[Service]
|
|
User=ubuntu
|
|
Type=simple
|
|
Restart=always
|
|
WorkingDirectory=/home/ubuntu/doczy.ai/streamlit
|
|
Environment="ENVIRONMENT=${upper(var.environment)}"
|
|
ExecStart=/home/ubuntu/.local/bin/streamlit run /home/ubuntu/doczy.ai/streamlit/interface_1.py --server.port 8501
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOT
|
|
# Enable and start the service
|
|
systemctl enable streamlit-ui1.service
|
|
systemctl start streamlit-ui1.service
|
|
|
|
# Create UI2 systemd service
|
|
cat <<EOT > /etc/systemd/system/streamlit-ui2.service
|
|
[Unit]
|
|
Description=Streamlit Server Service
|
|
|
|
[Service]
|
|
User=ubuntu
|
|
Type=simple
|
|
Restart=always
|
|
WorkingDirectory=/home/ubuntu/doczy.ai/streamlit
|
|
Environment="ENVIRONMENT=${upper(var.environment)}"
|
|
ExecStart=/home/ubuntu/.local/bin/streamlit run /home/ubuntu/doczy.ai/streamlit/interface_2.py --server.port 8502
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOT
|
|
# Enable and start the service
|
|
systemctl enable streamlit-ui2.service
|
|
systemctl start streamlit-ui2.service
|
|
|
|
# Create UI3 systemd service
|
|
cat <<EOT > /etc/systemd/system/streamlit-ui3.service
|
|
[Unit]
|
|
Description=Streamlit Server Service
|
|
|
|
[Service]
|
|
User=ubuntu
|
|
Type=simple
|
|
Restart=always
|
|
WorkingDirectory=/home/ubuntu/doczy.ai/streamlit
|
|
Environment="ENVIRONMENT=${upper(var.environment)}"
|
|
ExecStart=/home/ubuntu/.local/bin/streamlit run /home/ubuntu/doczy.ai/streamlit/interface_3.py --server.port 8503
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOT
|
|
# Enable and start the service
|
|
systemctl enable streamlit-ui3.service
|
|
systemctl start streamlit-ui3.service
|
|
|
|
cat <<EOT > /etc/systemd/system/streamlit-uifull.service
|
|
[Unit]
|
|
Description=Streamlit Server Service
|
|
|
|
[Service]
|
|
User=ubuntu
|
|
Type=simple
|
|
Restart=always
|
|
WorkingDirectory=/home/ubuntu/doczy.ai/streamlit/multipage
|
|
Environment="ENVIRONMENT=${upper(var.environment)}"
|
|
ExecStart=/home/ubuntu/.local/bin/streamlit run /home/ubuntu/doczy.ai/streamlit/multipage/Interface_0.py --server.port 8505
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOT
|
|
|
|
# Enable and start the service
|
|
systemctl enable streamlit-uifull.service
|
|
systemctl start streamlit-uifull.service
|
|
EOF
|
|
|
|
metadata_options {
|
|
http_endpoint = "enabled"
|
|
http_put_response_hop_limit = 2
|
|
http_tokens = "required"
|
|
}
|
|
|
|
tags = {
|
|
Terraform = "true"
|
|
Environment = var.environment
|
|
}
|
|
}
|