DB_USERNAME= DB_PASSWORD= DB_HOST= DB_PORT= DB_NAME= EMAIL_URL= EMAIL_API_TOKEN= EMAIL_SYNC_FOLDER=inbox EMAIL_SYNC_SINCE= EMAIL_SYNC_CRON=* * * * * JWT_SECRET_KEY= JWT_ALGORITHM=HS256 JWT_ACCESS_TOKEN_EXPIRE_MINUTES=30 JWT_REFRESH_TOKEN_EXPIRE_DAYS=7 JWT_RESET_TOKEN_EXPIRE_MINUTES=10 TEAMS_MAIL_API_URL= TEAMS_API_TOKEN= RESET_CODE_TTL_SECONDS=60 RESET_CODE_RESEND_SECONDS=30 RESET_CODE_MAX_ATTEMPTS=5 FRONTEND_URL=http://localhost:5173 CONFIRM_EMAIL_PATH=/auth/confirm-email CONFIRM_TOKEN_TTL_SECONDS=86400 CONFIRM_TOKEN_RESEND_SECONDS=60 BUFFER_API= BUFFER_API_URL=https://api.buffer.com BUFFER_CHANNEL_ID= OPENAI_API_KEY= OPENAI_MODEL=gpt-5.4-mini # Blank omits the parameter, for reasoning models that reject it. OPENAI_TEMPERATURE=0 OPENAI_MAX_OUTPUT_TOKENS=4096 OPENAI_TIMEOUT=60 OPENAI_MAX_RETRIES=3 OPENAI_CONNECT_RETRIES=3 # Set only for Azure OpenAI or a gateway; blank uses api.openai.com. OPENAI_BASE_URL= OPENAI_ORGANIZATION= OPENAI_PROJECT= # ATS scoring (bulk-ats engine embedded via `pip install -e ..`). # OPENAI_API_KEY / OPENAI_MODEL / OPENAI_MAX_OUTPUT_TOKENS above are shared. OPENAI_EFFORT=low OPENAI_ENABLE_PROMPT_CACHE=true SCORING_CONCURRENCY=5 MAX_RESUMES_PER_REQUEST=50 MAX_PDF_SIZE_MB=10 MAX_JD_CHARS=30000 MAX_RESUME_CHARS=60000 # Inbox intake gate (inbox_classifier/): only mail judged to be a job application # gets an inbox_messages row; every verdict is logged to inbox_message_triage. # Model / token / effort / cache knobs are the OPENAI_* ones above. # false restores the pre-gate behaviour exactly — the rollback lever. INBOX_TRIAGE_ENABLED=true # true: a provider outage or missing key ingests the mail and marks the verdict # unclassified. false: skip it and leave it for a later /email/fetch. INBOX_TRIAGE_FAIL_OPEN=true INBOX_TRIAGE_CONCURRENCY=5 INBOX_TRIAGE_MAX_SUBJECT_CHARS=300 INBOX_TRIAGE_MAX_BODY_CHARS=4000 # 0 disables the uncertainty branch; >0 routes low-confidence verdicts to the # INBOX_TRIAGE_FAIL_OPEN policy. INBOX_TRIAGE_MIN_CONFIDENCE=0 REDIS_URL=redis://localhost:6379/0 TASKIQ_QUEUE_NAME=inbox TASKIQ_CV_QUEUE_NAME=cv_upload TASKIQ_MAX_RETRIES=3 TASKIQ_RETRY_DELAY=5 TASKIQ_MAX_DELAY=120 TASKIQ_DLQ_STREAM=taskiq:dlq TASKIQ_IDLE_TIMEOUT_MS=600000 MANUAL_UPLOAD_TO_ADDRESS=manual-cv-upload@hr-ats.local APP_VERSION=dev