2026-04-30 03:44:59,426 - main - INFO - === Logging system initialized ===
2026-04-30 03:44:59,426 - main - INFO - Log file: logs/app_20260430_034459.log
2026-04-30 03:44:59,426 - main - INFO - Log level: INFO
2026-04-30 03:44:59,426 - main - INFO - Timestamp: 20260430_034459
2026-04-30 03:44:59,522 - main - INFO - Included router: routers.agent_availability.router
2026-04-30 03:45:00,431 - main - INFO - Included router: routers.aihub.router
2026-04-30 03:45:00,450 - main - INFO - Included router: routers.auth.router
2026-04-30 03:45:00,501 - main - INFO - Included router: routers.chat_analytics_daily.router
2026-04-30 03:45:00,562 - main - INFO - Included router: routers.chat_attachments.router
2026-04-30 03:45:00,638 - main - INFO - Included router: routers.chat_conversations.router
2026-04-30 03:45:00,699 - main - INFO - Included router: routers.chat_messages.router
2026-04-30 03:45:00,760 - main - INFO - Included router: routers.chat_routing_rules.router
2026-04-30 03:45:00,788 - main - INFO - Included router: routers.contact.router
2026-04-30 03:45:00,790 - main - INFO - Included router: routers.health.router
2026-04-30 03:45:00,843 - main - INFO - Included router: routers.kb_articles.router
2026-04-30 03:45:00,995 - main - INFO - Included router: routers.plans.router
2026-04-30 03:45:01,062 - main - INFO - Included router: routers.settings.router
2026-04-30 03:45:01,116 - main - INFO - Included router: routers.smtp_settings.router
2026-04-30 03:45:01,158 - main - INFO - Included router: routers.storage.router
2026-04-30 03:45:01,270 - main - INFO - Included router: routers.support_chat.router
2026-04-30 03:45:01,308 - main - INFO - Included router: routers.support_departments.router
2026-04-30 03:45:01,351 - main - INFO - Included router: routers.support_seats.router
2026-04-30 03:45:01,362 - main - INFO - Included router: routers.user.router
2026-04-30 03:45:01,408 - main - INFO - Included router: routers.user_profiles.router
2026-04-30 03:45:01,503 - main - INFO - Included router: routers.whmcs.router
2026-04-30 03:45:01,536 - main - INFO - Included router: routers.whmcs_admin.router
2026-04-30 03:45:01,575 - main - INFO - Included router: routers.whmcs_extra.router
2026-04-30 03:45:01,577 - main - INFO - === Application startup initiated ===
2026-04-30 03:45:01,577 - services.database - INFO - Ignore creating tables
2026-04-30 03:45:01,577 - services.mock_data - INFO - Ignore initialize data
2026-04-30 03:45:01,577 - services.auth - INFO - Ignore initialize admin
2026-04-30 03:45:01,577 - main - INFO - === Application startup completed successfully ===
2026-04-30 03:45:16,628 - core.config - DEBUG - Read dynamic attribute jwt_secret_key from environment variable JWT_SECRET_KEY
2026-04-30 03:45:16,628 - core.config - DEBUG - Read dynamic attribute jwt_algorithm from environment variable JWT_ALGORITHM
2026-04-30 03:45:16,640 - core.auth - DEBUG - Authentication token validated for user hash: 8c5e6440
2026-04-30 03:45:16,920 - core.auth - DEBUG - Authentication token validated for user hash: 8c5e6440
2026-04-30 03:45:16,920 - core.config - DEBUG - Read dynamic attribute oss_service_url from environment variable OSS_SERVICE_URL
2026-04-30 03:45:16,920 - core.config - DEBUG - Read dynamic attribute oss_api_key from environment variable OSS_API_KEY
2026-04-30 03:45:17,096 - httpcore.connection - DEBUG - connect_tcp.started host='atoms.dev' port=443 local_address=None timeout=120.0 socket_options=None
2026-04-30 03:45:17,107 - httpcore.connection - DEBUG - connect_tcp.complete return_value=<httpcore._backends.anyio.AnyIOStream object at 0x7f084ec64d90>
2026-04-30 03:45:17,107 - httpcore.connection - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f084f5a6e40> server_hostname='atoms.dev' timeout=120.0
2026-04-30 03:45:17,115 - httpcore.connection - DEBUG - start_tls.complete return_value=<httpcore._backends.anyio.AnyIOStream object at 0x7f084ec64af0>
2026-04-30 03:45:17,115 - httpcore.http11 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-04-30 03:45:17,115 - httpcore.http11 - DEBUG - send_request_headers.complete
2026-04-30 03:45:17,115 - httpcore.http11 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-04-30 03:45:17,116 - httpcore.http11 - DEBUG - send_request_body.complete
2026-04-30 03:45:17,116 - httpcore.http11 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-04-30 03:45:17,248 - httpcore.http11 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Thu, 30 Apr 2026 10:45:17 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'Access-Control-Allow-Headers', b'Origin, Content-Type, Accept, Authorization'), (b'Access-Control-Allow-Methods', b'GET, POST, PUT, DELETE, OPTIONS'), (b'Access-Control-Allow-Origin', b'*'), (b'Access-Control-Max-Age', b'86400'), (b'X-Request-Id', b'36e074b68ecb1d82e31adeabcb3ef6fd'), (b'X-Trace-Id', b'3bf8295ce10049f9bf45fa0e03d11d88'), (b'Content-Security-Policy', b"frame-ancestors 'self' https://atoms.dev"), (b'Strict-Transport-Security', b'max-age=63072000; includeSubDomains; preload'), (b'X-Content-Type-Options', b'nosniff'), (b'X-XSS-Protection', b'1; mode=block'), (b'Referrer-Policy', b'strict-origin-when-cross-origin'), (b'cf-cache-status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (b'Server', b'cloudflare'), (b'CF-RAY', b'9f45f4bdfd32b7fd-LAX')])
2026-04-30 03:45:17,249 - httpx - INFO - HTTP Request: GET https://atoms.dev/api/v1/infra/client/oss/buckets/user-avatars/objects "HTTP/1.1 200 OK"
2026-04-30 03:45:17,249 - httpcore.http11 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-04-30 03:45:17,250 - httpcore.http11 - DEBUG - receive_response_body.complete
2026-04-30 03:45:17,250 - httpcore.http11 - DEBUG - response_closed.started
2026-04-30 03:45:17,250 - httpcore.http11 - DEBUG - response_closed.complete
2026-04-30 03:45:17,250 - httpcore.connection - DEBUG - close.started
2026-04-30 03:45:17,251 - httpcore.connection - DEBUG - close.complete
2026-04-30 03:48:05,687 - core.auth - DEBUG - Authentication token validated for user hash: 8c5e6440
2026-04-30 03:48:05,990 - core.auth - DEBUG - Authentication token validated for user hash: 8c5e6440
2026-04-30 03:48:06,063 - httpcore.connection - DEBUG - connect_tcp.started host='atoms.dev' port=443 local_address=None timeout=120.0 socket_options=None
2026-04-30 03:48:06,077 - httpcore.connection - DEBUG - connect_tcp.complete return_value=<httpcore._backends.anyio.AnyIOStream object at 0x7f084ec659c0>
2026-04-30 03:48:06,077 - httpcore.connection - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f084f5a6e40> server_hostname='atoms.dev' timeout=120.0
2026-04-30 03:48:06,088 - httpcore.connection - DEBUG - start_tls.complete return_value=<httpcore._backends.anyio.AnyIOStream object at 0x7f084ec649d0>
2026-04-30 03:48:06,089 - httpcore.http11 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-04-30 03:48:06,089 - httpcore.http11 - DEBUG - send_request_headers.complete
2026-04-30 03:48:06,089 - httpcore.http11 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-04-30 03:48:06,090 - httpcore.http11 - DEBUG - send_request_body.complete
2026-04-30 03:48:06,090 - httpcore.http11 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-04-30 03:48:06,245 - httpcore.http11 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Thu, 30 Apr 2026 10:48:06 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'Access-Control-Allow-Headers', b'Origin, Content-Type, Accept, Authorization'), (b'Access-Control-Allow-Methods', b'GET, POST, PUT, DELETE, OPTIONS'), (b'Access-Control-Allow-Origin', b'*'), (b'Access-Control-Max-Age', b'86400'), (b'X-Request-Id', b'984843d7e780ca5857eabe23476b06e0'), (b'X-Trace-Id', b'daa9bdd1c2de4474a1747d1f326a8a55'), (b'Content-Security-Policy', b"frame-ancestors 'self' https://atoms.dev"), (b'Strict-Transport-Security', b'max-age=63072000; includeSubDomains; preload'), (b'X-Content-Type-Options', b'nosniff'), (b'X-XSS-Protection', b'1; mode=block'), (b'Referrer-Policy', b'strict-origin-when-cross-origin'), (b'cf-cache-status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (b'Server', b'cloudflare'), (b'CF-RAY', b'9f45f8de08f22ed3-LAX')])
2026-04-30 03:48:06,246 - httpx - INFO - HTTP Request: GET https://atoms.dev/api/v1/infra/client/oss/buckets/user-avatars/objects "HTTP/1.1 200 OK"
2026-04-30 03:48:06,247 - httpcore.http11 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-04-30 03:48:06,248 - httpcore.http11 - DEBUG - receive_response_body.complete
2026-04-30 03:48:06,248 - httpcore.http11 - DEBUG - response_closed.started
2026-04-30 03:48:06,249 - httpcore.http11 - DEBUG - response_closed.complete
2026-04-30 03:48:06,249 - httpcore.connection - DEBUG - close.started
2026-04-30 03:48:06,250 - httpcore.connection - DEBUG - close.complete
2026-04-30 03:48:53,538 - core.database - DEBUG - [DB_OP] Starting get_db session creation
2026-04-30 03:48:53,539 - core.database - WARNING - Database session maker not available, attempting lazy initialization...
2026-04-30 03:48:53,539 - core.database - WARNING - Database not initialized, attempting lazy initialization...
2026-04-30 03:48:53,539 - core.database - INFO - Starting database initialization...
2026-04-30 03:48:53,539 - core.config - DEBUG - Read dynamic attribute database_url from environment variable DATABASE_URL
2026-04-30 03:48:53,539 - core.database - INFO - Normalizing database URL for async compatibility...
2026-04-30 03:48:53,541 - core.database - INFO - Creating async database engine...
2026-04-30 03:48:53,541 - core.database - INFO - Using QueuePool with connection pooling for non-Lambda environment
2026-04-30 03:48:53,593 - core.database - INFO - Database engine created successfully
2026-04-30 03:48:53,593 - core.database - INFO - Creating async session maker...
2026-04-30 03:48:53,593 - core.database - INFO - Async session maker created successfully
2026-04-30 03:48:53,593 - core.database - INFO - Database connection initialized successfully
2026-04-30 03:48:53,593 - core.database - DEBUG - [DB_OP] Starting create_tables
2026-04-30 03:48:53,593 - core.database - INFO - 🔧 Starting table creation...
2026-04-30 03:48:55,739 - core.database - INFO - Tables initialized successfully
2026-04-30 03:48:55,739 - core.database - DEBUG - [DB_OP] Create tables completed in 2.1457s
2026-04-30 03:48:55,802 - core.database - INFO - Lazy database initialization completed successfully
2026-04-30 03:48:55,803 - core.database - DEBUG - [DB_OP] Database session created successfully in 2.2642s
2026-04-30 03:48:56,522 - httpcore.connection - DEBUG - connect_tcp.started host='client.doiteasy.net' port=443 local_address=None timeout=10.0 socket_options=None
2026-04-30 03:48:56,865 - httpcore.connection - DEBUG - connect_tcp.complete return_value=<httpcore._backends.anyio.AnyIOStream object at 0x7f084cac6d40>
2026-04-30 03:48:56,865 - httpcore.connection - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f084cbc2440> server_hostname='client.doiteasy.net' timeout=10.0
2026-04-30 03:48:57,045 - httpcore.connection - DEBUG - start_tls.complete return_value=<httpcore._backends.anyio.AnyIOStream object at 0x7f084cac71f0>
2026-04-30 03:48:57,046 - httpcore.http11 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-04-30 03:48:57,046 - httpcore.http11 - DEBUG - send_request_headers.complete
2026-04-30 03:48:57,046 - httpcore.http11 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-04-30 03:48:57,046 - httpcore.http11 - DEBUG - send_request_body.complete
2026-04-30 03:48:57,046 - httpcore.http11 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-04-30 03:48:57,225 - httpcore.http11 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 500, b'Internal Server Error', [(b'Server', b'nginx'), (b'Date', b'Thu, 30 Apr 2026 10:48:57 GMT'), (b'Content-Type', b'text/html; charset=UTF-8'), (b'Content-Length', b'0'), (b'Connection', b'keep-alive'), (b'X-Content-Type-Options', b'nosniff'), (b'X-Frame-Options', b'SAMEORIGIN'), (b'Referrer-Policy', b'strict-origin-when-cross-origin'), (b'X-XSS-Protection', b'1; mode=block')])
2026-04-30 03:48:57,225 - httpx - INFO - HTTP Request: POST https://client.doiteasy.net/includes/api.php "HTTP/1.1 500 Internal Server Error"
2026-04-30 03:48:57,226 - httpcore.http11 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-04-30 03:48:57,226 - httpcore.http11 - DEBUG - receive_response_body.complete
2026-04-30 03:48:57,226 - httpcore.http11 - DEBUG - response_closed.started
2026-04-30 03:48:57,227 - httpcore.http11 - DEBUG - response_closed.complete
2026-04-30 03:48:57,228 - httpcore.connection - DEBUG - close.started
2026-04-30 03:48:57,228 - httpcore.connection - DEBUG - close.complete
2026-04-30 03:48:57,228 - routers.support_chat - DEBUG - WHMCS client lookup failed for toom3003@yahoo.com (non-fatal)
2026-04-30 03:48:57,760 - core.database - DEBUG - [DB_OP] Database session cleanup after 4.2219s
2026-04-30 03:48:58,016 - core.database - DEBUG - [DB_OP] Starting get_db session creation
2026-04-30 03:48:58,016 - core.database - DEBUG - [DB_OP] Database session created successfully in 0.0003s
2026-04-30 03:48:58,019 - core.database - DEBUG - [DB_OP] Starting get_db session creation
2026-04-30 03:48:58,019 - core.database - DEBUG - [DB_OP] Database session created successfully in 0.0003s
2026-04-30 03:48:58,524 - core.database - DEBUG - [DB_OP] Database session cleanup after 0.5080s
2026-04-30 03:48:58,642 - core.database - DEBUG - [DB_OP] Database session cleanup after 0.6233s
2026-04-30 03:48:58,896 - core.database - DEBUG - [DB_OP] Starting get_db session creation
2026-04-30 03:48:58,896 - core.database - DEBUG - [DB_OP] Database session created successfully in 0.0004s
2026-04-30 03:48:59,277 - core.config - DEBUG - Read dynamic attribute app_ai_base_url from environment variable APP_AI_BASE_URL
2026-04-30 03:48:59,278 - core.config - DEBUG - Read dynamic attribute app_ai_key from environment variable APP_AI_KEY
2026-04-30 03:49:12,074 - core.database - DEBUG - [DB_OP] Starting get_db session creation
2026-04-30 03:49:12,075 - core.database - DEBUG - [DB_OP] Database session created successfully in 0.0009s
2026-04-30 03:49:12,083 - core.database - DEBUG - [DB_OP] Starting get_db session creation
2026-04-30 03:49:12,083 - core.database - DEBUG - [DB_OP] Database session created successfully in 0.0007s
2026-04-30 03:49:12,087 - openai._base_client - DEBUG - Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'idempotency_key': 'stainless-python-retry-b2bbdf61-46c0-47ab-81d9-3801c9a178a0', 'content': None, 'json_data': {'messages': [{'role': 'system', 'content': 'You are DoitEasy\'s friendly support assistant.\n\nRules you MUST follow:\n1. Be concise and helpful. Prefer short paragraphs and bullet lists.\n2. Use ONLY the provided Knowledge Base context and the visitor\'s conversation\n   to answer. If the KB does not cover the question, say so honestly and\n   recommend handing off to a human agent.\n3. NEVER reveal or invent:\n   - WHMCS API identifiers or secrets\n   - API keys of any kind (OpenAI, Stripe, SMTP, etc.)\n   - Environment variable names or infrastructure details\n   - Internal logs, database schemas, or developer tooling\n4. For account-specific actions (change password, refund, cancel service,\n   access invoices, modify DNS, etc.) set escalate=true because those need\n   an authenticated support agent.\n5. If the visitor seems frustrated, their question is ambiguous, or you are\n   uncertain → ask ONE concise clarifying question OR set escalate=true.\n\nReturn STRICT JSON matching exactly this shape:\n{\n  "reply": "<string: your reply to the visitor, plain text>",\n  "confidence": <float 0.0-1.0>,\n  "escalate": <boolean>,\n  "reasoning": "<string: 1-2 sentence internal reason, never shown to visitor>"\n}\nDo not wrap the JSON in code fences.\n'}, {'role': 'system', 'content': 'No knowledge base articles matched this query.\n\nVisitor: name=hatem, not authenticated'}, {'role': 'assistant', 'content': "Hi hatem! I'm DoitEasy's support assistant. Tell me what you need help with and I'll do my best — if it's account-specific I'll hand you off to a human agent."}, {'role': 'user', 'content': 'hi'}], 'model': 'gpt-5.4', 'max_tokens': 4096, 'stream': False, 'temperature': 0.7}}
2026-04-30 03:49:12,088 - openai._base_client - DEBUG - Sending HTTP Request: POST https://llmapi-api.deepwisdom.ai/v1/chat/completions
2026-04-30 03:49:12,088 - httpcore.connection - DEBUG - connect_tcp.started host='llmapi-api.deepwisdom.ai' port=443 local_address=None timeout=5.0 socket_options=None
2026-04-30 03:49:12,103 - httpcore.connection - DEBUG - connect_tcp.complete return_value=<httpcore._backends.anyio.AnyIOStream object at 0x7f084c35d120>
2026-04-30 03:49:12,104 - httpcore.connection - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f084eca5bc0> server_hostname='llmapi-api.deepwisdom.ai' timeout=5.0
2026-04-30 03:49:12,112 - httpcore.connection - DEBUG - start_tls.complete return_value=<httpcore._backends.anyio.AnyIOStream object at 0x7f084c35e1a0>
2026-04-30 03:49:12,112 - httpcore.http11 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-04-30 03:49:12,113 - httpcore.http11 - DEBUG - send_request_headers.complete
2026-04-30 03:49:12,113 - httpcore.http11 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-04-30 03:49:12,115 - httpcore.http11 - DEBUG - send_request_body.complete
2026-04-30 03:49:12,115 - httpcore.http11 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-04-30 03:49:12,463 - core.database - DEBUG - [DB_OP] Database session cleanup after 0.3889s
2026-04-30 03:49:12,703 - core.database - DEBUG - [DB_OP] Starting get_db session creation
2026-04-30 03:49:12,704 - core.database - DEBUG - [DB_OP] Database session created successfully in 0.0004s
2026-04-30 03:49:12,832 - core.database - DEBUG - [DB_OP] Database session cleanup after 0.7496s
2026-04-30 03:49:13,022 - core.database - DEBUG - [DB_OP] Database session cleanup after 0.3189s
2026-04-30 03:49:13,093 - core.database - DEBUG - [DB_OP] Starting get_db session creation
2026-04-30 03:49:13,094 - core.database - DEBUG - [DB_OP] Database session created successfully in 0.0006s
2026-04-30 03:49:13,268 - core.database - DEBUG - [DB_OP] Starting get_db session creation
2026-04-30 03:49:13,269 - core.database - DEBUG - [DB_OP] Database session created successfully in 0.0006s
2026-04-30 03:49:13,538 - core.database - DEBUG - [DB_OP] Database session cleanup after 0.4454s
2026-04-30 03:49:13,587 - core.database - DEBUG - [DB_OP] Database session cleanup after 0.3194s
2026-04-30 03:49:13,784 - core.database - DEBUG - [DB_OP] Starting get_db session creation
2026-04-30 03:49:13,785 - core.database - DEBUG - [DB_OP] Database session created successfully in 0.0005s
2026-04-30 03:49:13,900 - httpcore.http11 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Thu, 30 Apr 2026 10:49:13 GMT'), (b'Content-Type', b'application/json'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'Apim-Request-Id', b'd956ebcd-5c35-4baf-a088-c973da7c37e3'), (b'Azureml-Model-Session', b'd20260429185251-bbc75a6d'), (b'Skip-Error-Remapping', b'true'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'X-Content-Type-Options', b'nosniff'), (b'X-Ms-Deployment-Name', b'gpt-5.4'), (b'X-Ms-Is-Spilled-Over', b'false'), (b'X-Ms-Rai-Invoked', b'true'), (b'X-Ms-Region', b'East US 2'), (b'X-Oneapi-Request-Id', b'2026043003491213641835567165275'), (b'X-Oneapi-Trans-Id', b'30650886686507350'), (b'X-Ratelimit-Abusepenalty-Active', b'False'), (b'X-Ratelimit-Key', b'gpt-5.4'), (b'X-Ratelimit-Limit-Requests', b'10'), (b'X-Ratelimit-Limit-Tokens', b'1000'), (b'X-Ratelimit-Remaining-Requests', b'9'), (b'X-Ratelimit-Remaining-Tokens', b'650'), (b'X-Ratelimit-Renewalperiod-Requests', b'60'), (b'X-Ratelimit-Renewalperiod-Tokens', b'60'), (b'X-Ratelimit-Reset-Requests', b'6000'), (b'X-Ratelimit-Reset-Tokens', b'21000'), (b'X-Request-Id', b'4abc053f-049f-4af8-8c2b-3446cd5403da'), (b'cf-cache-status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (b'Server', b'cloudflare'), (b'CF-RAY', b'9f45fa7abe51cc16-LAX')])
2026-04-30 03:49:13,901 - httpx - INFO - HTTP Request: POST https://llmapi-api.deepwisdom.ai/v1/chat/completions "HTTP/1.1 200 OK"
2026-04-30 03:49:13,901 - httpcore.http11 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-04-30 03:49:13,901 - httpcore.http11 - DEBUG - receive_response_body.complete
2026-04-30 03:49:13,902 - httpcore.http11 - DEBUG - response_closed.started
2026-04-30 03:49:13,902 - httpcore.http11 - DEBUG - response_closed.complete
2026-04-30 03:49:13,902 - openai._base_client - DEBUG - HTTP Response: POST https://llmapi-api.deepwisdom.ai/v1/chat/completions "200 OK" Headers({'date': 'Thu, 30 Apr 2026 10:49:13 GMT', 'content-type': 'application/json', 'transfer-encoding': 'chunked', 'connection': 'keep-alive', 'apim-request-id': 'd956ebcd-5c35-4baf-a088-c973da7c37e3', 'azureml-model-session': 'd20260429185251-bbc75a6d', 'skip-error-remapping': 'true', 'strict-transport-security': 'max-age=31536000; includeSubDomains; preload', 'x-content-type-options': 'nosniff', 'x-ms-deployment-name': 'gpt-5.4', 'x-ms-is-spilled-over': 'false', 'x-ms-rai-invoked': 'true', 'x-ms-region': 'East US 2', 'x-oneapi-request-id': '2026043003491213641835567165275', 'x-oneapi-trans-id': '30650886686507350', 'x-ratelimit-abusepenalty-active': 'False', 'x-ratelimit-key': 'gpt-5.4', 'x-ratelimit-limit-requests': '10', 'x-ratelimit-limit-tokens': '1000', 'x-ratelimit-remaining-requests': '9', 'x-ratelimit-remaining-tokens': '650', 'x-ratelimit-renewalperiod-requests': '60', 'x-ratelimit-renewalperiod-tokens': '60', 'x-ratelimit-reset-requests': '6000', 'x-ratelimit-reset-tokens': '21000', 'x-request-id': '4abc053f-049f-4af8-8c2b-3446cd5403da', 'cf-cache-status': 'DYNAMIC', 'content-encoding': 'gzip', 'server': 'cloudflare', 'cf-ray': '9f45fa7abe51cc16-LAX'})
2026-04-30 03:49:13,902 - openai._base_client - DEBUG - request_id: 4abc053f-049f-4af8-8c2b-3446cd5403da
2026-04-30 03:49:14,115 - core.database - DEBUG - [DB_OP] Database session cleanup after 15.2187s
2026-04-30 03:49:14,178 - core.database - DEBUG - [DB_OP] Database session cleanup after 0.3938s
2026-04-30 03:49:14,380 - core.database - DEBUG - [DB_OP] Starting get_db session creation
2026-04-30 03:49:14,381 - core.database - DEBUG - [DB_OP] Database session created successfully in 0.0006s
2026-04-30 03:49:14,426 - core.database - DEBUG - [DB_OP] Starting get_db session creation
2026-04-30 03:49:14,427 - core.database - DEBUG - [DB_OP] Database session created successfully in 0.0008s
2026-04-30 03:49:14,700 - core.database - DEBUG - [DB_OP] Database session cleanup after 0.3196s
2026-04-30 03:49:14,810 - core.database - DEBUG - [DB_OP] Database session cleanup after 0.3844s
2026-04-30 03:49:18,025 - core.database - DEBUG - [DB_OP] Starting get_db session creation
2026-04-30 03:49:18,026 - core.database - DEBUG - [DB_OP] Database session created successfully in 0.0005s
2026-04-30 03:49:18,027 - core.database - DEBUG - [DB_OP] Starting get_db session creation
2026-04-30 03:49:18,028 - core.database - DEBUG - [DB_OP] Database session created successfully in 0.0003s
2026-04-30 03:49:18,343 - core.database - DEBUG - [DB_OP] Database session cleanup after 0.3176s
2026-04-30 03:49:18,474 - core.database - DEBUG - [DB_OP] Database session cleanup after 0.4464s
2026-04-30 03:49:18,789 - core.database - DEBUG - [DB_OP] Starting get_db session creation
2026-04-30 03:49:18,789 - core.database - DEBUG - [DB_OP] Database session created successfully in 0.0004s
2026-04-30 03:49:19,296 - core.database - DEBUG - [DB_OP] Database session cleanup after 0.5075s
2026-04-30 03:49:19,543 - core.database - DEBUG - [DB_OP] Starting get_db session creation
2026-04-30 03:49:19,544 - core.database - DEBUG - [DB_OP] Database session created successfully in 0.0004s
2026-04-30 03:49:20,109 - openai._base_client - DEBUG - Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'idempotency_key': 'stainless-python-retry-44f1af25-bbb3-46d6-bb12-36ae5f3955a4', 'content': None, 'json_data': {'messages': [{'role': 'system', 'content': 'You are DoitEasy\'s friendly support assistant.\n\nRules you MUST follow:\n1. Be concise and helpful. Prefer short paragraphs and bullet lists.\n2. Use ONLY the provided Knowledge Base context and the visitor\'s conversation\n   to answer. If the KB does not cover the question, say so honestly and\n   recommend handing off to a human agent.\n3. NEVER reveal or invent:\n   - WHMCS API identifiers or secrets\n   - API keys of any kind (OpenAI, Stripe, SMTP, etc.)\n   - Environment variable names or infrastructure details\n   - Internal logs, database schemas, or developer tooling\n4. For account-specific actions (change password, refund, cancel service,\n   access invoices, modify DNS, etc.) set escalate=true because those need\n   an authenticated support agent.\n5. If the visitor seems frustrated, their question is ambiguous, or you are\n   uncertain → ask ONE concise clarifying question OR set escalate=true.\n\nReturn STRICT JSON matching exactly this shape:\n{\n  "reply": "<string: your reply to the visitor, plain text>",\n  "confidence": <float 0.0-1.0>,\n  "escalate": <boolean>,\n  "reasoning": "<string: 1-2 sentence internal reason, never shown to visitor>"\n}\nDo not wrap the JSON in code fences.\n'}, {'role': 'system', 'content': 'No knowledge base articles matched this query.\n\nVisitor: name=hatem, not authenticated'}, {'role': 'assistant', 'content': "Hi hatem! I'm DoitEasy's support assistant. Tell me what you need help with and I'll do my best — if it's account-specific I'll hand you off to a human agent."}, {'role': 'user', 'content': 'hi'}, {'role': 'assistant', 'content': 'Hi Hatem! How can I help you today?'}, {'role': 'user', 'content': 'I need to order server'}], 'model': 'gpt-5.4', 'max_tokens': 4096, 'stream': False, 'temperature': 0.7}}
2026-04-30 03:49:20,110 - openai._base_client - DEBUG - Sending HTTP Request: POST https://llmapi-api.deepwisdom.ai/v1/chat/completions
2026-04-30 03:49:20,111 - httpcore.connection - DEBUG - connect_tcp.started host='llmapi-api.deepwisdom.ai' port=443 local_address=None timeout=5.0 socket_options=None
2026-04-30 03:49:20,124 - httpcore.connection - DEBUG - connect_tcp.complete return_value=<httpcore._backends.anyio.AnyIOStream object at 0x7f084c347820>
2026-04-30 03:49:20,125 - httpcore.connection - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f084c8934c0> server_hostname='llmapi-api.deepwisdom.ai' timeout=5.0
2026-04-30 03:49:20,131 - httpcore.connection - DEBUG - start_tls.complete return_value=<httpcore._backends.anyio.AnyIOStream object at 0x7f084c345090>
2026-04-30 03:49:20,132 - httpcore.http11 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-04-30 03:49:20,133 - httpcore.http11 - DEBUG - send_request_headers.complete
2026-04-30 03:49:20,134 - httpcore.http11 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-04-30 03:49:20,135 - httpcore.http11 - DEBUG - send_request_body.complete
2026-04-30 03:49:20,135 - httpcore.http11 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-04-30 03:49:22,598 - httpcore.http11 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Thu, 30 Apr 2026 10:49:22 GMT'), (b'Content-Type', b'application/json'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'Apim-Request-Id', b'35138b91-0a83-4c87-a6a6-dfb3909b7b02'), (b'Azureml-Model-Session', b'd20260429185251-bbc75a6d'), (b'Skip-Error-Remapping', b'true'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'X-Content-Type-Options', b'nosniff'), (b'X-Ms-Deployment-Name', b'gpt-5.4'), (b'X-Ms-Is-Spilled-Over', b'false'), (b'X-Ms-Rai-Invoked', b'true'), (b'X-Ms-Region', b'East US 2'), (b'X-Oneapi-Request-Id', b'2026043003492015426377182411362'), (b'X-Oneapi-Trans-Id', b'30650900141834582'), (b'X-Ratelimit-Abusepenalty-Active', b'False'), (b'X-Ratelimit-Key', b'gpt-5.4'), (b'X-Ratelimit-Limit-Requests', b'10'), (b'X-Ratelimit-Limit-Tokens', b'1000'), (b'X-Ratelimit-Remaining-Requests', b'9'), (b'X-Ratelimit-Remaining-Tokens', b'407'), (b'X-Ratelimit-Renewalperiod-Requests', b'60'), (b'X-Ratelimit-Renewalperiod-Tokens', b'60'), (b'X-Ratelimit-Reset-Requests', b'6000'), (b'X-Ratelimit-Reset-Tokens', b'35609'), (b'X-Request-Id', b'07717365-f495-4d78-92ee-caea4c465301'), (b'cf-cache-status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (b'Server', b'cloudflare'), (b'CF-RAY', b'9f45faacd8ff5397-LAX')])
2026-04-30 03:49:22,599 - httpx - INFO - HTTP Request: POST https://llmapi-api.deepwisdom.ai/v1/chat/completions "HTTP/1.1 200 OK"
2026-04-30 03:49:22,600 - httpcore.http11 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-04-30 03:49:22,600 - httpcore.http11 - DEBUG - receive_response_body.complete
2026-04-30 03:49:22,602 - httpcore.http11 - DEBUG - response_closed.started
2026-04-30 03:49:22,602 - httpcore.http11 - DEBUG - response_closed.complete
2026-04-30 03:49:22,603 - openai._base_client - DEBUG - HTTP Response: POST https://llmapi-api.deepwisdom.ai/v1/chat/completions "200 OK" Headers({'date': 'Thu, 30 Apr 2026 10:49:22 GMT', 'content-type': 'application/json', 'transfer-encoding': 'chunked', 'connection': 'keep-alive', 'apim-request-id': '35138b91-0a83-4c87-a6a6-dfb3909b7b02', 'azureml-model-session': 'd20260429185251-bbc75a6d', 'skip-error-remapping': 'true', 'strict-transport-security': 'max-age=31536000; includeSubDomains; preload', 'x-content-type-options': 'nosniff', 'x-ms-deployment-name': 'gpt-5.4', 'x-ms-is-spilled-over': 'false', 'x-ms-rai-invoked': 'true', 'x-ms-region': 'East US 2', 'x-oneapi-request-id': '2026043003492015426377182411362', 'x-oneapi-trans-id': '30650900141834582', 'x-ratelimit-abusepenalty-active': 'False', 'x-ratelimit-key': 'gpt-5.4', 'x-ratelimit-limit-requests': '10', 'x-ratelimit-limit-tokens': '1000', 'x-ratelimit-remaining-requests': '9', 'x-ratelimit-remaining-tokens': '407', 'x-ratelimit-renewalperiod-requests': '60', 'x-ratelimit-renewalperiod-tokens': '60', 'x-ratelimit-reset-requests': '6000', 'x-ratelimit-reset-tokens': '35609', 'x-request-id': '07717365-f495-4d78-92ee-caea4c465301', 'cf-cache-status': 'DYNAMIC', 'content-encoding': 'gzip', 'server': 'cloudflare', 'cf-ray': '9f45faacd8ff5397-LAX'})
2026-04-30 03:49:22,604 - openai._base_client - DEBUG - request_id: 07717365-f495-4d78-92ee-caea4c465301
2026-04-30 03:49:22,908 - openai._base_client - DEBUG - Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'idempotency_key': 'stainless-python-retry-8e3144ed-bf31-4a25-aa62-b80a65b7a94e', 'content': None, 'json_data': {'messages': [{'role': 'system', 'content': "Summarize the conversation between a visitor and the\nsupport bot/agent in 4-8 bullet points for a human agent about to take over.\nInclude: (1) who the visitor is, (2) the problem, (3) what's already been\ntried, (4) any account identifiers the visitor mentioned, (5) what the agent\nshould do next.\nNever include credentials, API keys, or internal infrastructure details.\nReturn plain text bullets, no JSON."}, {'role': 'assistant', 'content': "Hi hatem! I'm DoitEasy's support assistant. Tell me what you need help with and I'll do my best — if it's account-specific I'll hand you off to a human agent."}, {'role': 'user', 'content': 'hi'}, {'role': 'assistant', 'content': 'Hi Hatem! How can I help you today?'}, {'role': 'user', 'content': 'I need to order server'}, {'role': 'assistant', 'content': 'I can help, but I don’t have the ordering options or server plans in the knowledge base right now. Please tell me what kind of server you need, or I can hand this to a human sales/support agent to help you place the order.'}], 'model': 'gpt-5.4', 'max_tokens': 4096, 'stream': False, 'temperature': 0.7}}
2026-04-30 03:49:22,909 - openai._base_client - DEBUG - Sending HTTP Request: POST https://llmapi-api.deepwisdom.ai/v1/chat/completions
2026-04-30 03:49:22,909 - httpcore.connection - DEBUG - connect_tcp.started host='llmapi-api.deepwisdom.ai' port=443 local_address=None timeout=5.0 socket_options=None
2026-04-30 03:49:22,928 - httpcore.connection - DEBUG - connect_tcp.complete return_value=<httpcore._backends.anyio.AnyIOStream object at 0x7f084c4e7940>
2026-04-30 03:49:22,929 - httpcore.connection - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f084c355640> server_hostname='llmapi-api.deepwisdom.ai' timeout=5.0
2026-04-30 03:49:22,937 - httpcore.connection - DEBUG - start_tls.complete return_value=<httpcore._backends.anyio.AnyIOStream object at 0x7f084c4e7c40>
2026-04-30 03:49:22,938 - httpcore.http11 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-04-30 03:49:22,939 - httpcore.http11 - DEBUG - send_request_headers.complete
2026-04-30 03:49:22,939 - httpcore.http11 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-04-30 03:49:22,939 - httpcore.http11 - DEBUG - send_request_body.complete
2026-04-30 03:49:22,939 - httpcore.http11 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-04-30 03:49:23,026 - core.database - DEBUG - [DB_OP] Starting get_db session creation
2026-04-30 03:49:23,026 - core.database - DEBUG - [DB_OP] Database session created successfully in 0.0004s
2026-04-30 03:49:23,029 - core.database - DEBUG - [DB_OP] Starting get_db session creation
2026-04-30 03:49:23,030 - core.database - DEBUG - [DB_OP] Database session created successfully in 0.0004s
2026-04-30 03:49:23,031 - httpcore.connection - DEBUG - close.started
2026-04-30 03:49:23,032 - httpcore.connection - DEBUG - close.complete
2026-04-30 03:49:23,347 - core.database - DEBUG - [DB_OP] Database session cleanup after 0.3174s
2026-04-30 03:49:23,412 - core.database - DEBUG - [DB_OP] Database session cleanup after 0.3867s
2026-04-30 03:49:25,763 - httpcore.http11 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Thu, 30 Apr 2026 10:49:25 GMT'), (b'Content-Type', b'application/json'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'Apim-Request-Id', b'718b0cfc-918a-4f53-98d0-39af8ca852c6'), (b'Azureml-Model-Session', b'd20260429185251-28caee1b'), (b'Skip-Error-Remapping', b'true'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'X-Content-Type-Options', b'nosniff'), (b'X-Ms-Deployment-Name', b'gpt-5.4'), (b'X-Ms-Is-Spilled-Over', b'false'), (b'X-Ms-Rai-Invoked', b'true'), (b'X-Ms-Region', b'East US 2'), (b'X-Oneapi-Request-Id', b'2026043003492295487150473578332'), (b'X-Oneapi-Trans-Id', b'30650904839455065'), (b'X-Ratelimit-Abusepenalty-Active', b'False'), (b'X-Ratelimit-Key', b'gpt-5.4'), (b'X-Ratelimit-Limit-Requests', b'10'), (b'X-Ratelimit-Limit-Tokens', b'1000'), (b'X-Ratelimit-Remaining-Requests', b'8'), (b'X-Ratelimit-Remaining-Tokens', b'218'), (b'X-Ratelimit-Renewalperiod-Requests', b'60'), (b'X-Ratelimit-Renewalperiod-Tokens', b'60'), (b'X-Ratelimit-Reset-Requests', b'9198'), (b'X-Ratelimit-Reset-Tokens', b'46906'), (b'X-Request-Id', b'b8a7dfce-6772-42a3-87ce-db751b00f124'), (b'cf-cache-status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (b'Server', b'cloudflare'), (b'CF-RAY', b'9f45fabe69eae66c-LAX')])
2026-04-30 03:49:25,763 - httpx - INFO - HTTP Request: POST https://llmapi-api.deepwisdom.ai/v1/chat/completions "HTTP/1.1 200 OK"
2026-04-30 03:49:25,763 - httpcore.http11 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-04-30 03:49:25,764 - httpcore.http11 - DEBUG - receive_response_body.complete
2026-04-30 03:49:25,764 - httpcore.http11 - DEBUG - response_closed.started
2026-04-30 03:49:25,764 - httpcore.http11 - DEBUG - response_closed.complete
2026-04-30 03:49:25,764 - openai._base_client - DEBUG - HTTP Response: POST https://llmapi-api.deepwisdom.ai/v1/chat/completions "200 OK" Headers({'date': 'Thu, 30 Apr 2026 10:49:25 GMT', 'content-type': 'application/json', 'transfer-encoding': 'chunked', 'connection': 'keep-alive', 'apim-request-id': '718b0cfc-918a-4f53-98d0-39af8ca852c6', 'azureml-model-session': 'd20260429185251-28caee1b', 'skip-error-remapping': 'true', 'strict-transport-security': 'max-age=31536000; includeSubDomains; preload', 'x-content-type-options': 'nosniff', 'x-ms-deployment-name': 'gpt-5.4', 'x-ms-is-spilled-over': 'false', 'x-ms-rai-invoked': 'true', 'x-ms-region': 'East US 2', 'x-oneapi-request-id': '2026043003492295487150473578332', 'x-oneapi-trans-id': '30650904839455065', 'x-ratelimit-abusepenalty-active': 'False', 'x-ratelimit-key': 'gpt-5.4', 'x-ratelimit-limit-requests': '10', 'x-ratelimit-limit-tokens': '1000', 'x-ratelimit-remaining-requests': '8', 'x-ratelimit-remaining-tokens': '218', 'x-ratelimit-renewalperiod-requests': '60', 'x-ratelimit-renewalperiod-tokens': '60', 'x-ratelimit-reset-requests': '9198', 'x-ratelimit-reset-tokens': '46906', 'x-request-id': 'b8a7dfce-6772-42a3-87ce-db751b00f124', 'cf-cache-status': 'DYNAMIC', 'content-encoding': 'gzip', 'server': 'cloudflare', 'cf-ray': '9f45fabe69eae66c-LAX'})
2026-04-30 03:49:25,765 - openai._base_client - DEBUG - request_id: b8a7dfce-6772-42a3-87ce-db751b00f124
2026-04-30 03:49:26,284 - core.database - DEBUG - [DB_OP] Database session cleanup after 6.7410s
2026-04-30 03:49:26,538 - core.database - DEBUG - [DB_OP] Starting get_db session creation
2026-04-30 03:49:26,538 - core.database - DEBUG - [DB_OP] Database session created successfully in 0.0004s
2026-04-30 03:49:26,544 - core.database - DEBUG - [DB_OP] Starting get_db session creation
2026-04-30 03:49:26,544 - core.database - DEBUG - [DB_OP] Database session created successfully in 0.0003s
2026-04-30 03:49:26,853 - core.database - DEBUG - [DB_OP] Database session cleanup after 0.3156s
2026-04-30 03:49:26,927 - core.database - DEBUG - [DB_OP] Database session cleanup after 0.3830s
2026-04-30 03:49:28,028 - core.database - DEBUG - [DB_OP] Starting get_db session creation
2026-04-30 03:49:28,028 - core.database - DEBUG - [DB_OP] Database session created successfully in 0.0003s
2026-04-30 03:49:28,029 - core.database - DEBUG - [DB_OP] Starting get_db session creation
2026-04-30 03:49:28,029 - core.database - DEBUG - [DB_OP] Database session created successfully in 0.0002s
2026-04-30 03:49:28,347 - core.database - DEBUG - [DB_OP] Database session cleanup after 0.3196s
2026-04-30 03:49:28,411 - core.database - DEBUG - [DB_OP] Database session cleanup after 0.3815s
2026-04-30 03:49:33,023 - core.database - DEBUG - [DB_OP] Starting get_db session creation
2026-04-30 03:49:33,024 - core.database - DEBUG - [DB_OP] Database session created successfully in 0.0004s
2026-04-30 03:49:33,029 - core.database - DEBUG - [DB_OP] Starting get_db session creation
2026-04-30 03:49:33,029 - core.database - DEBUG - [DB_OP] Database session created successfully in 0.0002s
2026-04-30 03:49:33,343 - core.database - DEBUG - [DB_OP] Database session cleanup after 0.3200s
2026-04-30 03:49:33,425 - core.database - DEBUG - [DB_OP] Database session cleanup after 0.3955s
2026-04-30 03:49:38,024 - core.database - DEBUG - [DB_OP] Starting get_db session creation
2026-04-30 03:49:38,024 - core.database - DEBUG - [DB_OP] Database session created successfully in 0.0005s
2026-04-30 03:49:38,026 - core.database - DEBUG - [DB_OP] Starting get_db session creation
2026-04-30 03:49:38,026 - core.database - DEBUG - [DB_OP] Database session created successfully in 0.0002s
2026-04-30 03:49:38,342 - core.database - DEBUG - [DB_OP] Database session cleanup after 0.3161s
2026-04-30 03:49:38,405 - core.database - DEBUG - [DB_OP] Database session cleanup after 0.3813s
2026-04-30 03:49:43,024 - core.database - DEBUG - [DB_OP] Starting get_db session creation
2026-04-30 03:49:43,025 - core.database - DEBUG - [DB_OP] Database session created successfully in 0.0004s
2026-04-30 03:49:43,029 - core.database - DEBUG - [DB_OP] Starting get_db session creation
2026-04-30 03:49:43,029 - core.database - DEBUG - [DB_OP] Database session created successfully in 0.0004s
2026-04-30 03:49:43,347 - core.database - DEBUG - [DB_OP] Database session cleanup after 0.3182s
2026-04-30 03:49:43,406 - core.database - DEBUG - [DB_OP] Database session cleanup after 0.3818s
2026-04-30 03:49:48,029 - core.database - DEBUG - [DB_OP] Starting get_db session creation
2026-04-30 03:49:48,029 - core.database - DEBUG - [DB_OP] Database session created successfully in 0.0004s
2026-04-30 03:49:48,033 - core.database - DEBUG - [DB_OP] Starting get_db session creation
2026-04-30 03:49:48,033 - core.database - DEBUG - [DB_OP] Database session created successfully in 0.0002s
2026-04-30 03:49:48,346 - core.database - DEBUG - [DB_OP] Database session cleanup after 0.3165s
2026-04-30 03:49:48,415 - core.database - DEBUG - [DB_OP] Database session cleanup after 0.3823s
2026-04-30 03:52:37,100 - core.auth - DEBUG - Authentication token validated for user hash: 8c5e6440
2026-04-30 03:52:37,661 - core.auth - DEBUG - Authentication token validated for user hash: 8c5e6440
2026-04-30 03:52:37,694 - httpcore.connection - DEBUG - connect_tcp.started host='atoms.dev' port=443 local_address=None timeout=120.0 socket_options=None
2026-04-30 03:52:37,705 - httpcore.connection - DEBUG - connect_tcp.complete return_value=<httpcore._backends.anyio.AnyIOStream object at 0x7f084c346680>
2026-04-30 03:52:37,706 - httpcore.connection - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f084c8938c0> server_hostname='atoms.dev' timeout=120.0
2026-04-30 03:52:37,716 - httpcore.connection - DEBUG - start_tls.complete return_value=<httpcore._backends.anyio.AnyIOStream object at 0x7f084c3474c0>
2026-04-30 03:52:37,716 - httpcore.http11 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-04-30 03:52:37,717 - httpcore.http11 - DEBUG - send_request_headers.complete
2026-04-30 03:52:37,717 - httpcore.http11 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-04-30 03:52:37,718 - httpcore.http11 - DEBUG - send_request_body.complete
2026-04-30 03:52:37,718 - httpcore.http11 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-04-30 03:52:37,856 - httpcore.http11 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Thu, 30 Apr 2026 10:52:37 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'Access-Control-Allow-Headers', b'Origin, Content-Type, Accept, Authorization'), (b'Access-Control-Allow-Methods', b'GET, POST, PUT, DELETE, OPTIONS'), (b'Access-Control-Allow-Origin', b'*'), (b'Access-Control-Max-Age', b'86400'), (b'X-Request-Id', b'e3377d18755772883618f021e684515e'), (b'X-Trace-Id', b'd6ca5807f0b54507a4d3e6df6cb7a9e5'), (b'Content-Security-Policy', b"frame-ancestors 'self' https://atoms.dev"), (b'Strict-Transport-Security', b'max-age=63072000; includeSubDomains; preload'), (b'X-Content-Type-Options', b'nosniff'), (b'X-XSS-Protection', b'1; mode=block'), (b'Referrer-Policy', b'strict-origin-when-cross-origin'), (b'cf-cache-status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (b'Server', b'cloudflare'), (b'CF-RAY', b'9f45ff7fbb4d6a2a-LAX')])
2026-04-30 03:52:37,857 - httpx - INFO - HTTP Request: GET https://atoms.dev/api/v1/infra/client/oss/buckets/user-avatars/objects "HTTP/1.1 200 OK"
2026-04-30 03:52:37,857 - httpcore.http11 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-04-30 03:52:37,858 - httpcore.http11 - DEBUG - receive_response_body.complete
2026-04-30 03:52:37,858 - httpcore.http11 - DEBUG - response_closed.started
2026-04-30 03:52:37,858 - httpcore.http11 - DEBUG - response_closed.complete
2026-04-30 03:52:37,859 - httpcore.connection - DEBUG - close.started
2026-04-30 03:52:37,859 - httpcore.connection - DEBUG - close.complete
2026-04-30 03:52:48,842 - services.database - DEBUG - [DB_OP] Starting database close
2026-04-30 03:52:49,043 - core.database - INFO - Database connection closed and engine disposed
2026-04-30 03:52:49,044 - services.database - INFO - Database connections closed
2026-04-30 03:52:49,044 - services.database - DEBUG - [DB_OP] Database close completed in 0.2016s
