2026-08-10 09:15:41 [scrapy.utils.log] INFO: Scrapy 2.11.1 started (bot: news_scraper) 2026-08-10 09:15:41 [scrapy.utils.log] INFO: Versions: lxml 6.0.2.0, libxml2 2.14.6, cssselect 1.3.0, parsel 1.10.0, w3lib 2.3.1, Twisted 25.5.0, Python 3.11.13 (main, Aug 12 2025, 22:39:41) [GCC 14.2.0], pyOpenSSL 25.3.0 (OpenSSL 3.5.3 16 Sep 2025), cryptography 46.0.1, Platform Linux-5.15.0-186-generic-x86_64-with 2026-08-10 09:15:41 [scrapy.addons] INFO: Enabled addons: [] 2026-08-10 09:15:41 [asyncio] DEBUG: Using selector: EpollSelector 2026-08-10 09:15:41 [scrapy.utils.log] DEBUG: Using reactor: twisted.internet.asyncioreactor.AsyncioSelectorReactor 2026-08-10 09:15:41 [scrapy.utils.log] DEBUG: Using asyncio event loop: asyncio.unix_events._UnixSelectorEventLoop 2026-08-10 09:15:41 [scrapy.extensions.telnet] INFO: Telnet Password: 36e97163aee4e914 2026-08-10 09:15:41 [botocore.hooks] DEBUG: Changing event name from creating-client-class.iot-data to creating-client-class.iot-data-plane 2026-08-10 09:15:41 [botocore.hooks] DEBUG: Changing event name from before-call.apigateway to before-call.api-gateway 2026-08-10 09:15:41 [botocore.hooks] DEBUG: Changing event name from request-created.machinelearning.Predict to request-created.machine-learning.Predict 2026-08-10 09:15:41 [botocore.hooks] DEBUG: Changing event name from before-parameter-build.autoscaling.CreateLaunchConfiguration to before-parameter-build.auto-scaling.CreateLaunchConfiguration 2026-08-10 09:15:41 [botocore.hooks] DEBUG: Changing event name from before-parameter-build.route53 to before-parameter-build.route-53 2026-08-10 09:15:41 [botocore.hooks] DEBUG: Changing event name from request-created.cloudsearchdomain.Search to request-created.cloudsearch-domain.Search 2026-08-10 09:15:41 [botocore.hooks] DEBUG: Changing event name from docs.*.autoscaling.CreateLaunchConfiguration.complete-section to docs.*.auto-scaling.CreateLaunchConfiguration.complete-section 2026-08-10 09:15:41 [botocore.hooks] DEBUG: Changing event name from before-parameter-build.logs.CreateExportTask to before-parameter-build.cloudwatch-logs.CreateExportTask 2026-08-10 09:15:41 [botocore.hooks] DEBUG: Changing event name from docs.*.logs.CreateExportTask.complete-section to docs.*.cloudwatch-logs.CreateExportTask.complete-section 2026-08-10 09:15:41 [botocore.hooks] DEBUG: Changing event name from before-parameter-build.cloudsearchdomain.Search to before-parameter-build.cloudsearch-domain.Search 2026-08-10 09:15:41 [botocore.hooks] DEBUG: Changing event name from docs.*.cloudsearchdomain.Search.complete-section to docs.*.cloudsearch-domain.Search.complete-section 2026-08-10 09:15:41 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/endpoints.json 2026-08-10 09:15:41 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/sdk-default-configuration.json 2026-08-10 09:15:41 [botocore.hooks] DEBUG: Event choose-service-name: calling handler 2026-08-10 09:15:41 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/s3/2006-03-01/service-2.json.gz 2026-08-10 09:15:41 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/s3/2006-03-01/endpoint-rule-set-1.json.gz 2026-08-10 09:15:41 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/partitions.json 2026-08-10 09:15:41 [botocore.hooks] DEBUG: Event creating-client-class.s3: calling handler 2026-08-10 09:15:41 [botocore.hooks] DEBUG: Event creating-client-class.s3: calling handler ._handler at 0x7fe6e5368860> 2026-08-10 09:15:41 [botocore.hooks] DEBUG: Event creating-client-class.s3: calling handler 2026-08-10 09:15:41 [botocore.endpoint] DEBUG: Setting s3 timeout as (60, 60) 2026-08-10 09:15:41 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/_retry.json 2026-08-10 09:15:41 [botocore.client] DEBUG: Registering retry handlers for service: s3 2026-08-10 09:15:41 [botocore.utils] DEBUG: Registering S3 region redirector handler 2026-08-10 09:15:41 [botocore.utils] DEBUG: Registering S3Express Identity Resolver 2026-08-10 09:15:41 [scrapy.middleware] INFO: Enabled extensions: ['scrapy.extensions.corestats.CoreStats', 'scrapy.extensions.telnet.TelnetConsole', 'scrapy.extensions.memusage.MemoryUsage', 'scrapy.extensions.closespider.CloseSpider', 'scrapy.extensions.feedexport.FeedExporter', 'scrapy.extensions.logstats.LogStats', 'scrapy.extensions.throttle.AutoThrottle'] 2026-08-10 09:15:41 [scrapy.crawler] INFO: Overridden settings: {'AUTOTHROTTLE_ENABLED': True, 'BOT_NAME': 'news_scraper', 'CLOSESPIDER_TIMEOUT': 1800, 'CONCURRENT_REQUESTS': 4, 'DOWNLOAD_DELAY': 2, 'FEED_EXPORT_ENCODING': 'utf-8', 'LOG_FILE': '/opt/scrapyd/logs/news_scraper/thanhnien_timestamp/0150446e949c11f1b41882b496cd12ce.log', 'NEWSPIDER_MODULE': 'news_scraper.spiders', 'REQUEST_FINGERPRINTER_IMPLEMENTATION': '2.7', 'ROBOTSTXT_OBEY': True, 'SPIDER_MODULES': ['news_scraper.spiders'], 'TWISTED_REACTOR': 'twisted.internet.asyncioreactor.AsyncioSelectorReactor'} 2026-08-10 09:15:41 [scrapy.middleware] INFO: Enabled downloader middlewares: ['scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware', 'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware', 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware', 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware', 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware', 'news_scraper.middlewares.NewsScraperDownloaderMiddleware', 'scrapy.downloadermiddlewares.retry.RetryMiddleware', 'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware', 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware', 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware', 'scrapy.downloadermiddlewares.cookies.CookiesMiddleware', 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware', 'scrapy.downloadermiddlewares.stats.DownloaderStats'] 2026-08-10 09:15:41 [scrapy.middleware] INFO: Enabled spider middlewares: ['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware', 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware', 'scrapy.spidermiddlewares.referer.RefererMiddleware', 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware', 'scrapy.spidermiddlewares.depth.DepthMiddleware'] 2026-08-10 09:15:41 [scrapy.middleware] INFO: Enabled item pipelines: [] 2026-08-10 09:15:41 [scrapy.core.engine] INFO: Spider opened 2026-08-10 09:15:41 [botocore.hooks] DEBUG: Changing event name from creating-client-class.iot-data to creating-client-class.iot-data-plane 2026-08-10 09:15:41 [botocore.hooks] DEBUG: Changing event name from before-call.apigateway to before-call.api-gateway 2026-08-10 09:15:41 [botocore.hooks] DEBUG: Changing event name from request-created.machinelearning.Predict to request-created.machine-learning.Predict 2026-08-10 09:15:41 [botocore.hooks] DEBUG: Changing event name from before-parameter-build.autoscaling.CreateLaunchConfiguration to before-parameter-build.auto-scaling.CreateLaunchConfiguration 2026-08-10 09:15:41 [botocore.hooks] DEBUG: Changing event name from before-parameter-build.route53 to before-parameter-build.route-53 2026-08-10 09:15:41 [botocore.hooks] DEBUG: Changing event name from request-created.cloudsearchdomain.Search to request-created.cloudsearch-domain.Search 2026-08-10 09:15:41 [botocore.hooks] DEBUG: Changing event name from docs.*.autoscaling.CreateLaunchConfiguration.complete-section to docs.*.auto-scaling.CreateLaunchConfiguration.complete-section 2026-08-10 09:15:41 [botocore.hooks] DEBUG: Changing event name from before-parameter-build.logs.CreateExportTask to before-parameter-build.cloudwatch-logs.CreateExportTask 2026-08-10 09:15:41 [botocore.hooks] DEBUG: Changing event name from docs.*.logs.CreateExportTask.complete-section to docs.*.cloudwatch-logs.CreateExportTask.complete-section 2026-08-10 09:15:41 [botocore.hooks] DEBUG: Changing event name from before-parameter-build.cloudsearchdomain.Search to before-parameter-build.cloudsearch-domain.Search 2026-08-10 09:15:41 [botocore.hooks] DEBUG: Changing event name from docs.*.cloudsearchdomain.Search.complete-section to docs.*.cloudsearch-domain.Search.complete-section 2026-08-10 09:15:41 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/endpoints.json 2026-08-10 09:15:41 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/sdk-default-configuration.json 2026-08-10 09:15:41 [botocore.hooks] DEBUG: Event choose-service-name: calling handler 2026-08-10 09:15:41 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/s3/2006-03-01/service-2.json.gz 2026-08-10 09:15:41 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/s3/2006-03-01/endpoint-rule-set-1.json.gz 2026-08-10 09:15:41 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/partitions.json 2026-08-10 09:15:41 [botocore.hooks] DEBUG: Event creating-client-class.s3: calling handler 2026-08-10 09:15:41 [botocore.hooks] DEBUG: Event creating-client-class.s3: calling handler ._handler at 0x7fe6e43d1940> 2026-08-10 09:15:41 [botocore.hooks] DEBUG: Event creating-client-class.s3: calling handler 2026-08-10 09:15:41 [botocore.endpoint] DEBUG: Setting s3 timeout as (60, 60) 2026-08-10 09:15:41 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/_retry.json 2026-08-10 09:15:41 [botocore.client] DEBUG: Registering retry handlers for service: s3 2026-08-10 09:15:41 [botocore.utils] DEBUG: Registering S3 region redirector handler 2026-08-10 09:15:41 [botocore.utils] DEBUG: Registering S3Express Identity Resolver 2026-08-10 09:15:41 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 2026-08-10 09:15:41 [thanhnien_timestamp] INFO: Spider opened: thanhnien_timestamp 2026-08-10 09:15:41 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6026 2026-08-10 09:15:42 [scrapy.core.engine] DEBUG: Crawled (200) (referer: None) 2026-08-10 09:15:46 [scrapy.core.engine] DEBUG: Crawled (200) (referer: None) 2026-08-10 09:15:48 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://thanhnien.vn/) 2026-08-10 09:15:51 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://thanhnien.vn/tin-moi.htm) 2026-08-10 09:15:51 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': 'Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., \'the\', \'and\', \'is\') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: New Straits Times cho biết, chắc chắn đội tuyển Malaysia sẽ tiếp tục sử dụng sân Kuala Lumpur như các trận vòng bảng để tiếp đội tuyển Việt Nam tại bán kết lượt đi ASEAN Cup 2026 lúc 20 giờ ngày 16.8 tới đây. Lý do sân Bukit Jalil, sân chính của đội tuyển nước này thi đấu từ trước nay, hiện không thể sử dụng do đang quá trình thay thế đường chạy để chuẩn bị cho SEA Games vào năm sau. Trên các tài khoản chính thức mạng xã hội của đội tuyển Malaysia (Malaysia NT) cũng xác nhận địa điểm thi đấu ở bán kết, đó là sân Kuala Lumpur. "Tiến vào bán kết. Trận lượt đi trên sân nhà (Kuala Lumpur), sau đó chúng tôi sẽ thi đấu trận lượt về trên sân khách", trang Malaysia NT viết trên mạng xã hội X và facebook ngày 9.8. Đội tuyển Malaysia sẽ tiếp đón các nhà đương kim vô địch ASEAN Cup, đội tuyển Việt Nam trong trận bán kết lượt đi vào ngày 16.8, trước khi hành quân đến Hà Nội thi đấu trận lượt về vào ngày 19.8 trên Mỹ Đình (cùng 20 giờ, giờ Việt Nam). Việc đội tuyển Việt Nam thi đấu trên sân Kuala Lumpur (có sức chứa 18.000 khán giả), và có mặt sân là cỏ lá gừng khá dày, nên chắc chắn sẽ bị ảnh hưởng không ít đến lối chơi kỹ thuật vốn quen thuộc trên các mặt sân cỏ chỉ và được chăm sóc đạt yêu cầu chất lượng. Như sân Mỹ Đình hiện đã cải tạo mặt sân mới, và được xem đáp ứng mọi yêu cầu về lối chơi kỹ thuật và tốc độ nhanh mà HLV Kim Sang-sik đã áp dụng cho các học trò của mình. Theo New Straits Times , trước đó Tập đoàn sân vận động Malaysia (MSC) đã xác nhận với Timesport rằng, sân Bukit Jalil sẽ đóng cửa từ tháng 6 đến tháng 9 để thực hiện công tác cải tạo đường chạy, khiến sân không thể phục vụ cho đội tuyển Malaysia tại ASEAN Cup 2026. Bạn có thể chọn 1 mục. Bình chọn của bạn sẽ được công khai. Việt Nam thắng Malaysia thắng Tỷ số hòa "Công việc cải tạo đường chạy đã bắt đầu, với các phần bề mặt cũ đã được dỡ bỏ trong quá trình chuẩn bị cho việc Malaysia đăng cai SEA Games vào năm tới", New Straits Times cho biết thêm. Trong khi đó, đội tuyển Malaysia thi đấu trên sân Kuala Lumpur ở hai trận vòng bảng, gồm trận thắng đội Lào tỷ số 4-0 có 10.044 khán giả đến xem vào ngày 28.7. Còn trận gặp Philippines mới đây thắng tỷ số 1-0 để vào bán kết có 12.734 người xem. Mặc dù vậy, ở trận bán kết dư luận Malaysia vẫn thắc mắc vì sao FAM không sử dụng sân Bukit Jalil để thi đấu với đội tuyển Việt Nam, vì đây là trận đấu quan trọng và có sức hút lớn. Hơn nữa, họ cho rằng sân này chỉ thay thế đường chạy, vẫn có thể sử dụng thi đấu được. Tuy nhiên, FAM đã không phản hồi các câu hỏi của Timesport về việc bình luận thêm liên quan đến địa điểm thi đấu tại bán kết ASEAN Cup mà người hâm mộ nước này thắc mắc. Xem ASEAN Hyundai Cup 2026 trực tiếp và trọn vẹn trên FPT Play, tại: http://fptplay.vn'}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2026-08-10 09:15:51 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2026-08-10 09:15:51 [httpcore.connection] DEBUG: connect_tcp.started host='api.openai.com' port=443 local_address=None timeout=900 socket_options=None 2026-08-10 09:15:51 [httpcore.connection] DEBUG: connect_tcp.complete return_value= 2026-08-10 09:15:51 [httpcore.connection] DEBUG: start_tls.started ssl_context= server_hostname='api.openai.com' timeout=900 2026-08-10 09:15:51 [httpcore.connection] DEBUG: start_tls.complete return_value= 2026-08-10 09:15:51 [httpcore.http11] DEBUG: send_request_headers.started request= 2026-08-10 09:15:51 [httpcore.http11] DEBUG: send_request_headers.complete 2026-08-10 09:15:51 [httpcore.http11] DEBUG: send_request_body.started request= 2026-08-10 09:15:51 [httpcore.http11] DEBUG: send_request_body.complete 2026-08-10 09:15:51 [httpcore.http11] DEBUG: receive_response_headers.started request= 2026-08-10 09:15:52 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 429, b'Too Many Requests', [(b'Date', b'Mon, 10 Aug 2026 09:15:52 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Content-Length', b'283'), (b'Connection', b'keep-alive'), (b'CF-Ray', b'a28de5febd3a09bc-HKG'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Origin'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'X-Content-Type-Options', b'nosniff'), (b'x-openai-proxy-wasm', b'v0.1'), (b'x-request-id', b'req_fe1dbbff662f461f92a3e20964982e05'), (b'set-cookie', b'__cf_bm=ccZmKUofh4yD._OaiZY0tsTACh7undTq3MvJGIF5Otg-1786353351.4764957-1.0.1.1-voYfLQZwX8P6XK_.tqFFF..kKeqUu89AxIKemTj8j6XSX8TJ1WIyDNUAZ41ZwAhlIjCqnOlozUxrf28jtT75zvRvnV4KlrbALhVoXgDB_8swmkTpCbu0nSLjbVnThx6C; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 10 Aug 2026 09:45:52 GMT'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2026-08-10 09:15:52 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 429 Too Many Requests" 2026-08-10 09:15:52 [httpcore.http11] DEBUG: receive_response_body.started request= 2026-08-10 09:15:52 [httpcore.http11] DEBUG: receive_response_body.complete 2026-08-10 09:15:52 [httpcore.http11] DEBUG: response_closed.started 2026-08-10 09:15:52 [httpcore.http11] DEBUG: response_closed.complete 2026-08-10 09:15:52 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "429 Too Many Requests" Headers([('date', 'Mon, 10 Aug 2026 09:15:52 GMT'), ('content-type', 'application/json; charset=utf-8'), ('content-length', '283'), ('connection', 'keep-alive'), ('cf-ray', 'a28de5febd3a09bc-HKG'), ('cf-cache-status', 'DYNAMIC'), ('server', 'cloudflare'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('vary', 'Origin'), ('access-control-expose-headers', 'CF-Ray'), ('access-control-expose-headers', 'CF-Ray'), ('x-content-type-options', 'nosniff'), ('x-openai-proxy-wasm', 'v0.1'), ('x-request-id', 'req_fe1dbbff662f461f92a3e20964982e05'), ('set-cookie', '__cf_bm=ccZmKUofh4yD._OaiZY0tsTACh7undTq3MvJGIF5Otg-1786353351.4764957-1.0.1.1-voYfLQZwX8P6XK_.tqFFF..kKeqUu89AxIKemTj8j6XSX8TJ1WIyDNUAZ41ZwAhlIjCqnOlozUxrf28jtT75zvRvnV4KlrbALhVoXgDB_8swmkTpCbu0nSLjbVnThx6C; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 10 Aug 2026 09:45:52 GMT'), ('alt-svc', 'h3=":443"; ma=86400')]) 2026-08-10 09:15:52 [openai._base_client] DEBUG: request_id: req_fe1dbbff662f461f92a3e20964982e05 2026-08-10 09:15:52 [openai._base_client] DEBUG: Encountered httpx.HTTPStatusError Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 2026-08-10 09:15:52 [openai._base_client] DEBUG: Retrying due to status code 429 2026-08-10 09:15:52 [openai._base_client] DEBUG: 2 retries left 2026-08-10 09:15:52 [openai._base_client] INFO: Retrying request to /chat/completions in 0.382418 seconds 2026-08-10 09:15:52 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': 'Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., \'the\', \'and\', \'is\') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: New Straits Times cho biết, chắc chắn đội tuyển Malaysia sẽ tiếp tục sử dụng sân Kuala Lumpur như các trận vòng bảng để tiếp đội tuyển Việt Nam tại bán kết lượt đi ASEAN Cup 2026 lúc 20 giờ ngày 16.8 tới đây. Lý do sân Bukit Jalil, sân chính của đội tuyển nước này thi đấu từ trước nay, hiện không thể sử dụng do đang quá trình thay thế đường chạy để chuẩn bị cho SEA Games vào năm sau. Trên các tài khoản chính thức mạng xã hội của đội tuyển Malaysia (Malaysia NT) cũng xác nhận địa điểm thi đấu ở bán kết, đó là sân Kuala Lumpur. "Tiến vào bán kết. Trận lượt đi trên sân nhà (Kuala Lumpur), sau đó chúng tôi sẽ thi đấu trận lượt về trên sân khách", trang Malaysia NT viết trên mạng xã hội X và facebook ngày 9.8. Đội tuyển Malaysia sẽ tiếp đón các nhà đương kim vô địch ASEAN Cup, đội tuyển Việt Nam trong trận bán kết lượt đi vào ngày 16.8, trước khi hành quân đến Hà Nội thi đấu trận lượt về vào ngày 19.8 trên Mỹ Đình (cùng 20 giờ, giờ Việt Nam). Việc đội tuyển Việt Nam thi đấu trên sân Kuala Lumpur (có sức chứa 18.000 khán giả), và có mặt sân là cỏ lá gừng khá dày, nên chắc chắn sẽ bị ảnh hưởng không ít đến lối chơi kỹ thuật vốn quen thuộc trên các mặt sân cỏ chỉ và được chăm sóc đạt yêu cầu chất lượng. Như sân Mỹ Đình hiện đã cải tạo mặt sân mới, và được xem đáp ứng mọi yêu cầu về lối chơi kỹ thuật và tốc độ nhanh mà HLV Kim Sang-sik đã áp dụng cho các học trò của mình. Theo New Straits Times , trước đó Tập đoàn sân vận động Malaysia (MSC) đã xác nhận với Timesport rằng, sân Bukit Jalil sẽ đóng cửa từ tháng 6 đến tháng 9 để thực hiện công tác cải tạo đường chạy, khiến sân không thể phục vụ cho đội tuyển Malaysia tại ASEAN Cup 2026. Bạn có thể chọn 1 mục. Bình chọn của bạn sẽ được công khai. Việt Nam thắng Malaysia thắng Tỷ số hòa "Công việc cải tạo đường chạy đã bắt đầu, với các phần bề mặt cũ đã được dỡ bỏ trong quá trình chuẩn bị cho việc Malaysia đăng cai SEA Games vào năm tới", New Straits Times cho biết thêm. Trong khi đó, đội tuyển Malaysia thi đấu trên sân Kuala Lumpur ở hai trận vòng bảng, gồm trận thắng đội Lào tỷ số 4-0 có 10.044 khán giả đến xem vào ngày 28.7. Còn trận gặp Philippines mới đây thắng tỷ số 1-0 để vào bán kết có 12.734 người xem. Mặc dù vậy, ở trận bán kết dư luận Malaysia vẫn thắc mắc vì sao FAM không sử dụng sân Bukit Jalil để thi đấu với đội tuyển Việt Nam, vì đây là trận đấu quan trọng và có sức hút lớn. Hơn nữa, họ cho rằng sân này chỉ thay thế đường chạy, vẫn có thể sử dụng thi đấu được. Tuy nhiên, FAM đã không phản hồi các câu hỏi của Timesport về việc bình luận thêm liên quan đến địa điểm thi đấu tại bán kết ASEAN Cup mà người hâm mộ nước này thắc mắc. Xem ASEAN Hyundai Cup 2026 trực tiếp và trọn vẹn trên FPT Play, tại: http://fptplay.vn'}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2026-08-10 09:15:52 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2026-08-10 09:15:52 [httpcore.http11] DEBUG: send_request_headers.started request= 2026-08-10 09:15:52 [httpcore.http11] DEBUG: send_request_headers.complete 2026-08-10 09:15:52 [httpcore.http11] DEBUG: send_request_body.started request= 2026-08-10 09:15:52 [httpcore.http11] DEBUG: send_request_body.complete 2026-08-10 09:15:52 [httpcore.http11] DEBUG: receive_response_headers.started request= 2026-08-10 09:15:53 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 429, b'Too Many Requests', [(b'Date', b'Mon, 10 Aug 2026 09:15:53 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Content-Length', b'283'), (b'Connection', b'keep-alive'), (b'CF-Ray', b'a28de607ed1009bc-HKG'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Origin'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'X-Content-Type-Options', b'nosniff'), (b'x-openai-proxy-wasm', b'v0.1'), (b'x-request-id', b'req_849956145e7440fbbf4c1fbe201cedba'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2026-08-10 09:15:53 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 429 Too Many Requests" 2026-08-10 09:15:53 [httpcore.http11] DEBUG: receive_response_body.started request= 2026-08-10 09:15:53 [httpcore.http11] DEBUG: receive_response_body.complete 2026-08-10 09:15:53 [httpcore.http11] DEBUG: response_closed.started 2026-08-10 09:15:53 [httpcore.http11] DEBUG: response_closed.complete 2026-08-10 09:15:53 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "429 Too Many Requests" Headers([('date', 'Mon, 10 Aug 2026 09:15:53 GMT'), ('content-type', 'application/json; charset=utf-8'), ('content-length', '283'), ('connection', 'keep-alive'), ('cf-ray', 'a28de607ed1009bc-HKG'), ('cf-cache-status', 'DYNAMIC'), ('server', 'cloudflare'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('vary', 'Origin'), ('access-control-expose-headers', 'CF-Ray'), ('access-control-expose-headers', 'CF-Ray'), ('x-content-type-options', 'nosniff'), ('x-openai-proxy-wasm', 'v0.1'), ('x-request-id', 'req_849956145e7440fbbf4c1fbe201cedba'), ('alt-svc', 'h3=":443"; ma=86400')]) 2026-08-10 09:15:53 [openai._base_client] DEBUG: request_id: req_849956145e7440fbbf4c1fbe201cedba 2026-08-10 09:15:53 [openai._base_client] DEBUG: Encountered httpx.HTTPStatusError Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 2026-08-10 09:15:53 [openai._base_client] DEBUG: Retrying due to status code 429 2026-08-10 09:15:53 [openai._base_client] DEBUG: 1 retry left 2026-08-10 09:15:53 [openai._base_client] INFO: Retrying request to /chat/completions in 0.793510 seconds 2026-08-10 09:15:54 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': 'Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., \'the\', \'and\', \'is\') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: New Straits Times cho biết, chắc chắn đội tuyển Malaysia sẽ tiếp tục sử dụng sân Kuala Lumpur như các trận vòng bảng để tiếp đội tuyển Việt Nam tại bán kết lượt đi ASEAN Cup 2026 lúc 20 giờ ngày 16.8 tới đây. Lý do sân Bukit Jalil, sân chính của đội tuyển nước này thi đấu từ trước nay, hiện không thể sử dụng do đang quá trình thay thế đường chạy để chuẩn bị cho SEA Games vào năm sau. Trên các tài khoản chính thức mạng xã hội của đội tuyển Malaysia (Malaysia NT) cũng xác nhận địa điểm thi đấu ở bán kết, đó là sân Kuala Lumpur. "Tiến vào bán kết. Trận lượt đi trên sân nhà (Kuala Lumpur), sau đó chúng tôi sẽ thi đấu trận lượt về trên sân khách", trang Malaysia NT viết trên mạng xã hội X và facebook ngày 9.8. Đội tuyển Malaysia sẽ tiếp đón các nhà đương kim vô địch ASEAN Cup, đội tuyển Việt Nam trong trận bán kết lượt đi vào ngày 16.8, trước khi hành quân đến Hà Nội thi đấu trận lượt về vào ngày 19.8 trên Mỹ Đình (cùng 20 giờ, giờ Việt Nam). Việc đội tuyển Việt Nam thi đấu trên sân Kuala Lumpur (có sức chứa 18.000 khán giả), và có mặt sân là cỏ lá gừng khá dày, nên chắc chắn sẽ bị ảnh hưởng không ít đến lối chơi kỹ thuật vốn quen thuộc trên các mặt sân cỏ chỉ và được chăm sóc đạt yêu cầu chất lượng. Như sân Mỹ Đình hiện đã cải tạo mặt sân mới, và được xem đáp ứng mọi yêu cầu về lối chơi kỹ thuật và tốc độ nhanh mà HLV Kim Sang-sik đã áp dụng cho các học trò của mình. Theo New Straits Times , trước đó Tập đoàn sân vận động Malaysia (MSC) đã xác nhận với Timesport rằng, sân Bukit Jalil sẽ đóng cửa từ tháng 6 đến tháng 9 để thực hiện công tác cải tạo đường chạy, khiến sân không thể phục vụ cho đội tuyển Malaysia tại ASEAN Cup 2026. Bạn có thể chọn 1 mục. Bình chọn của bạn sẽ được công khai. Việt Nam thắng Malaysia thắng Tỷ số hòa "Công việc cải tạo đường chạy đã bắt đầu, với các phần bề mặt cũ đã được dỡ bỏ trong quá trình chuẩn bị cho việc Malaysia đăng cai SEA Games vào năm tới", New Straits Times cho biết thêm. Trong khi đó, đội tuyển Malaysia thi đấu trên sân Kuala Lumpur ở hai trận vòng bảng, gồm trận thắng đội Lào tỷ số 4-0 có 10.044 khán giả đến xem vào ngày 28.7. Còn trận gặp Philippines mới đây thắng tỷ số 1-0 để vào bán kết có 12.734 người xem. Mặc dù vậy, ở trận bán kết dư luận Malaysia vẫn thắc mắc vì sao FAM không sử dụng sân Bukit Jalil để thi đấu với đội tuyển Việt Nam, vì đây là trận đấu quan trọng và có sức hút lớn. Hơn nữa, họ cho rằng sân này chỉ thay thế đường chạy, vẫn có thể sử dụng thi đấu được. Tuy nhiên, FAM đã không phản hồi các câu hỏi của Timesport về việc bình luận thêm liên quan đến địa điểm thi đấu tại bán kết ASEAN Cup mà người hâm mộ nước này thắc mắc. Xem ASEAN Hyundai Cup 2026 trực tiếp và trọn vẹn trên FPT Play, tại: http://fptplay.vn'}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2026-08-10 09:15:54 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2026-08-10 09:15:54 [httpcore.http11] DEBUG: send_request_headers.started request= 2026-08-10 09:15:54 [httpcore.http11] DEBUG: send_request_headers.complete 2026-08-10 09:15:54 [httpcore.http11] DEBUG: send_request_body.started request= 2026-08-10 09:15:54 [httpcore.http11] DEBUG: send_request_body.complete 2026-08-10 09:15:54 [httpcore.http11] DEBUG: receive_response_headers.started request= 2026-08-10 09:15:54 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 429, b'Too Many Requests', [(b'Date', b'Mon, 10 Aug 2026 09:15:54 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Content-Length', b'283'), (b'Connection', b'keep-alive'), (b'CF-Ray', b'a28de60f489809bc-HKG'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Origin'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'X-Content-Type-Options', b'nosniff'), (b'x-openai-proxy-wasm', b'v0.1'), (b'x-request-id', b'req_8d86b942b1604ffaa96eb875948d2266'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2026-08-10 09:15:54 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 429 Too Many Requests" 2026-08-10 09:15:54 [httpcore.http11] DEBUG: receive_response_body.started request= 2026-08-10 09:15:54 [httpcore.http11] DEBUG: receive_response_body.complete 2026-08-10 09:15:54 [httpcore.http11] DEBUG: response_closed.started 2026-08-10 09:15:54 [httpcore.http11] DEBUG: response_closed.complete 2026-08-10 09:15:54 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "429 Too Many Requests" Headers([('date', 'Mon, 10 Aug 2026 09:15:54 GMT'), ('content-type', 'application/json; charset=utf-8'), ('content-length', '283'), ('connection', 'keep-alive'), ('cf-ray', 'a28de60f489809bc-HKG'), ('cf-cache-status', 'DYNAMIC'), ('server', 'cloudflare'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('vary', 'Origin'), ('access-control-expose-headers', 'CF-Ray'), ('access-control-expose-headers', 'CF-Ray'), ('x-content-type-options', 'nosniff'), ('x-openai-proxy-wasm', 'v0.1'), ('x-request-id', 'req_8d86b942b1604ffaa96eb875948d2266'), ('alt-svc', 'h3=":443"; ma=86400')]) 2026-08-10 09:15:54 [openai._base_client] DEBUG: request_id: req_8d86b942b1604ffaa96eb875948d2266 2026-08-10 09:15:54 [openai._base_client] DEBUG: Encountered httpx.HTTPStatusError Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 2026-08-10 09:15:54 [openai._base_client] DEBUG: Re-raising status error 2026-08-10 09:15:54 [scrapy.core.scraper] ERROR: Spider error processing (referer: https://thanhnien.vn/tin-moi.htm) Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/scrapy/utils/defer.py", line 279, in iter_errback yield next(it) ^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/utils/python.py", line 350, in __next__ return next(self.data) ^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/utils/python.py", line 350, in __next__ return next(self.data) ^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/offsite.py", line 28, in return (r for r in result or () if self._filter(r, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/referer.py", line 352, in return (self._set_referer(r, response) for r in result or ()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/urllength.py", line 27, in return (r for r in result or () if self._filter(r, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/depth.py", line 31, in return (r for r in result or () if self._filter(r, response, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/opt/scrapy_projects/news_scraper/spiders/thanhnien_timestamp_spider.py", line 95, in parse_article item["tags"] = item.extract_tags() ^^^^^^^^^^^^^^^^^^^ File "/opt/scrapy_projects/news_scraper/items.py", line 51, in extract_tags response = client.chat.completions.create( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_utils/_utils.py", line 279, in wrapper return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/resources/chat/completions/completions.py", line 914, in create return self._post( ^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1242, in post return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 919, in request return self._request( ^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1008, in _request return self._retry_request( ^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1057, in _retry_request return self._request( ^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1008, in _request return self._retry_request( ^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1057, in _retry_request return self._request( ^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1023, in _request raise self._make_status_error_from_response(err.response) from None openai.RateLimitError: Error code: 429 - {'error': {'message': 'You have no credits remaining. Add credits to continue using the API at https://platform.openai.com/settings/organization/billing/.', 'type': 'insufficient_quota', 'param': None, 'code': 'credit_balance_exhausted'}} 2026-08-10 09:15:54 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://thanhnien.vn/tin-moi.htm) 2026-08-10 09:15:54 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': "Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., 'the', 'and', 'is') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: Mặc dù Google Chrome phổ biến nhờ hệ sinh thái đa dạng, nó vẫn thiếu hụt nhiều tính năng chuyên sâu. Những người dùng tìm kiếm sự linh hoạt, bảo mật cao hay tùy biến sâu thường sẽ cảm thấy giao diện tối giản của Chrome là chưa đủ. Dưới đây là 4 lựa chọn trình duyệt thay thế sở hữu nhiều tính năng vượt trội so với Chrome, sẵn sàng mang đến trải nghiệm duyệt web hoàn toàn mới. Brave phát triển trên mã nguồn Chromium nhưng đã loại bỏ các trình theo dõi URL xâm phạm quyền riêng tư. Trình duyệt này tự động chặn cookie bên thứ ba, chống thu thập dấu vết thiết bị và tích hợp sẵn công cụ chặn quảng cáo YouTube. Ngoài ra, Brave còn hỗ trợ duyệt web qua mạng Tor, tích hợp ví tiền điện tử cùng trình đọc RSS tiện lợi. Người dùng cũng có thể đưa các trang web yêu thích vào danh sách cho phép để hỗ trợ họ bằng cách xem quảng cáo. Trình duyệt còn tích hợp sẵn dịch vụ VPN cao cấp và khả năng tạo danh sách phát phương tiện ngoại tuyến. Nhờ khả năng bảo vệ dữ liệu nghiêm ngặt, Brave đánh bại Chrome ngay trên nền tảng mã nguồn mở. Ứng dụng hiện hỗ trợ đầy đủ trên các hệ điều hành iOS, Android, Linux, macOS và Windows. Vivaldi là lựa chọn phù hợp cho những ai yêu thích việc cá nhân hóa và tùy chỉnh giao diện trình duyệt không giới hạn. Người dùng có thể tự do thay đổi màu sắc, hình nền, vị trí thanh tab hoặc tải về các chủ đề do cộng đồng thiết kế. Trình duyệt này tích hợp sẵn dịch vụ Proton VPN uy tín, công cụ ghi chú, chụp ảnh màn hình và chế độ Picture-in-picture. Về mặt hỗ trợ công việc, Vivaldi cung cấp tính năng Quick Commands và Command Chains giúp thực hiện nhiều thao tác chỉ bằng một lần click. Trình duyệt cũng sở hữu khả năng xếp chồng tab, tạo không gian làm việc và tích hợp trình đọc RSS tương tự Brave. Đây là công cụ hoàn hảo để thay thế Chrome cho những người dùng cần xử lý khối lượng công việc lớn. Vivaldi có sẵn trên cả nền tảng di động lẫn máy tính để người dùng dễ dàng trải nghiệm. Firefox nổi tiếng là đối thủ nặng ký của Chrome nhờ khả năng bảo vệ quyền riêng tư người dùng vượt trội. Công nghệ bảo vệ theo dõi nâng cao (Enhanced Tracking Protection) và bảo vệ cookie toàn diện (Total Cookie Protection) giúp chặn đứng mọi hành vi do thám trên web. Không như Chrome, Firefox chỉ thu thập dữ liệu kỹ thuật thuần túy chứ không theo dõi hoạt động cá nhân của bạn. Trình duyệt này còn tích hợp sẵn công cụ đọc và chỉnh sửa tệp PDF tiện lợi cho công việc văn phòng. Chế độ đọc của Firefox cũng linh hoạt hơn khi loại bỏ toàn bộ quảng cáo, hình ảnh thừa thãi để tối ưu hiển thị. Đặc biệt, Firefox cho phép cài đặt các tiện ích mở rộng ngay trên ứng dụng di động Android . Dịch vụ VPN tích hợp cùng khả năng đồng bộ đa nền tảng giúp Firefox ghi điểm tuyệt đối. Opera tỏ ra áp đảo Chrome nhờ việc tích hợp sẵn công cụ chặn quảng cáo và dịch vụ VPN miễn phí. Đáng chú ý, trình duyệt đã cập nhật trợ lý Opera AI giúp giải đáp thắc mắc dựa trên bối cảnh các tab đang mở. Trình duyệt còn sở hữu công cụ tạo ảnh bằng AI miễn phí mà không yêu cầu người dùng phải đăng ký tài khoản. Thanh bên của Opera tích hợp sẵn các lối tắt truy cập nhanh đến ChatGPT, Gemini cùng nhiều ứng dụng nhắn tin như WhatsApp, Telegram. Người dùng có thể linh hoạt chuyển đổi giữa bố cục tab ngang truyền thống hoặc xếp tab theo hàng dọc. Tính năng Tab Islands giúp gom nhóm tab thành thư mục, kết hợp cùng Pinboards giúp lưu trữ ý tưởng dễ dàng khi nghiên cứu. Trình duyệt hỗ trợ đa dạng hệ điều hành từ Windows, macOS, Linux cho đến iOS, Android và ChromeOS."}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2026-08-10 09:15:54 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2026-08-10 09:15:54 [httpcore.connection] DEBUG: connect_tcp.started host='api.openai.com' port=443 local_address=None timeout=900 socket_options=None 2026-08-10 09:15:54 [httpcore.connection] DEBUG: connect_tcp.complete return_value= 2026-08-10 09:15:54 [httpcore.connection] DEBUG: start_tls.started ssl_context= server_hostname='api.openai.com' timeout=900 2026-08-10 09:15:54 [httpcore.connection] DEBUG: start_tls.complete return_value= 2026-08-10 09:15:54 [httpcore.http11] DEBUG: send_request_headers.started request= 2026-08-10 09:15:54 [httpcore.http11] DEBUG: send_request_headers.complete 2026-08-10 09:15:54 [httpcore.http11] DEBUG: send_request_body.started request= 2026-08-10 09:15:54 [httpcore.http11] DEBUG: send_request_body.complete 2026-08-10 09:15:54 [httpcore.http11] DEBUG: receive_response_headers.started request= 2026-08-10 09:15:55 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 429, b'Too Many Requests', [(b'Date', b'Mon, 10 Aug 2026 09:15:55 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Content-Length', b'283'), (b'Connection', b'keep-alive'), (b'CF-Ray', b'a28de614899614b4-HKG'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Origin'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'X-Content-Type-Options', b'nosniff'), (b'x-openai-proxy-wasm', b'v0.1'), (b'x-request-id', b'req_0c7276e933644c4295b5974ca03151f3'), (b'set-cookie', b'__cf_bm=Zk_2ZjD0F.XlvdaW7TWhUGvXD1BFUYJu_JSHzUBt8gE-1786353354.968406-1.0.1.1-SgahjEL3FJyhRIbAK1fuHmRvo1q9Tt_VHTW.isspEijg.6IstUE2cheFGfo6IWlZcJPKeLNci8OpHtMBbp5vfSYns73nQvC2mfVixFMERRR8Oc5RuH8QdcpVHyYYmIII; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 10 Aug 2026 09:45:55 GMT'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2026-08-10 09:15:55 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 429 Too Many Requests" 2026-08-10 09:15:55 [httpcore.http11] DEBUG: receive_response_body.started request= 2026-08-10 09:15:55 [httpcore.http11] DEBUG: receive_response_body.complete 2026-08-10 09:15:55 [httpcore.http11] DEBUG: response_closed.started 2026-08-10 09:15:55 [httpcore.http11] DEBUG: response_closed.complete 2026-08-10 09:15:55 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "429 Too Many Requests" Headers([('date', 'Mon, 10 Aug 2026 09:15:55 GMT'), ('content-type', 'application/json; charset=utf-8'), ('content-length', '283'), ('connection', 'keep-alive'), ('cf-ray', 'a28de614899614b4-HKG'), ('cf-cache-status', 'DYNAMIC'), ('server', 'cloudflare'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('vary', 'Origin'), ('access-control-expose-headers', 'CF-Ray'), ('access-control-expose-headers', 'CF-Ray'), ('x-content-type-options', 'nosniff'), ('x-openai-proxy-wasm', 'v0.1'), ('x-request-id', 'req_0c7276e933644c4295b5974ca03151f3'), ('set-cookie', '__cf_bm=Zk_2ZjD0F.XlvdaW7TWhUGvXD1BFUYJu_JSHzUBt8gE-1786353354.968406-1.0.1.1-SgahjEL3FJyhRIbAK1fuHmRvo1q9Tt_VHTW.isspEijg.6IstUE2cheFGfo6IWlZcJPKeLNci8OpHtMBbp5vfSYns73nQvC2mfVixFMERRR8Oc5RuH8QdcpVHyYYmIII; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 10 Aug 2026 09:45:55 GMT'), ('alt-svc', 'h3=":443"; ma=86400')]) 2026-08-10 09:15:55 [openai._base_client] DEBUG: request_id: req_0c7276e933644c4295b5974ca03151f3 2026-08-10 09:15:55 [openai._base_client] DEBUG: Encountered httpx.HTTPStatusError Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 2026-08-10 09:15:55 [openai._base_client] DEBUG: Retrying due to status code 429 2026-08-10 09:15:55 [openai._base_client] DEBUG: 2 retries left 2026-08-10 09:15:55 [openai._base_client] INFO: Retrying request to /chat/completions in 0.411221 seconds 2026-08-10 09:15:55 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': "Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., 'the', 'and', 'is') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: Mặc dù Google Chrome phổ biến nhờ hệ sinh thái đa dạng, nó vẫn thiếu hụt nhiều tính năng chuyên sâu. Những người dùng tìm kiếm sự linh hoạt, bảo mật cao hay tùy biến sâu thường sẽ cảm thấy giao diện tối giản của Chrome là chưa đủ. Dưới đây là 4 lựa chọn trình duyệt thay thế sở hữu nhiều tính năng vượt trội so với Chrome, sẵn sàng mang đến trải nghiệm duyệt web hoàn toàn mới. Brave phát triển trên mã nguồn Chromium nhưng đã loại bỏ các trình theo dõi URL xâm phạm quyền riêng tư. Trình duyệt này tự động chặn cookie bên thứ ba, chống thu thập dấu vết thiết bị và tích hợp sẵn công cụ chặn quảng cáo YouTube. Ngoài ra, Brave còn hỗ trợ duyệt web qua mạng Tor, tích hợp ví tiền điện tử cùng trình đọc RSS tiện lợi. Người dùng cũng có thể đưa các trang web yêu thích vào danh sách cho phép để hỗ trợ họ bằng cách xem quảng cáo. Trình duyệt còn tích hợp sẵn dịch vụ VPN cao cấp và khả năng tạo danh sách phát phương tiện ngoại tuyến. Nhờ khả năng bảo vệ dữ liệu nghiêm ngặt, Brave đánh bại Chrome ngay trên nền tảng mã nguồn mở. Ứng dụng hiện hỗ trợ đầy đủ trên các hệ điều hành iOS, Android, Linux, macOS và Windows. Vivaldi là lựa chọn phù hợp cho những ai yêu thích việc cá nhân hóa và tùy chỉnh giao diện trình duyệt không giới hạn. Người dùng có thể tự do thay đổi màu sắc, hình nền, vị trí thanh tab hoặc tải về các chủ đề do cộng đồng thiết kế. Trình duyệt này tích hợp sẵn dịch vụ Proton VPN uy tín, công cụ ghi chú, chụp ảnh màn hình và chế độ Picture-in-picture. Về mặt hỗ trợ công việc, Vivaldi cung cấp tính năng Quick Commands và Command Chains giúp thực hiện nhiều thao tác chỉ bằng một lần click. Trình duyệt cũng sở hữu khả năng xếp chồng tab, tạo không gian làm việc và tích hợp trình đọc RSS tương tự Brave. Đây là công cụ hoàn hảo để thay thế Chrome cho những người dùng cần xử lý khối lượng công việc lớn. Vivaldi có sẵn trên cả nền tảng di động lẫn máy tính để người dùng dễ dàng trải nghiệm. Firefox nổi tiếng là đối thủ nặng ký của Chrome nhờ khả năng bảo vệ quyền riêng tư người dùng vượt trội. Công nghệ bảo vệ theo dõi nâng cao (Enhanced Tracking Protection) và bảo vệ cookie toàn diện (Total Cookie Protection) giúp chặn đứng mọi hành vi do thám trên web. Không như Chrome, Firefox chỉ thu thập dữ liệu kỹ thuật thuần túy chứ không theo dõi hoạt động cá nhân của bạn. Trình duyệt này còn tích hợp sẵn công cụ đọc và chỉnh sửa tệp PDF tiện lợi cho công việc văn phòng. Chế độ đọc của Firefox cũng linh hoạt hơn khi loại bỏ toàn bộ quảng cáo, hình ảnh thừa thãi để tối ưu hiển thị. Đặc biệt, Firefox cho phép cài đặt các tiện ích mở rộng ngay trên ứng dụng di động Android . Dịch vụ VPN tích hợp cùng khả năng đồng bộ đa nền tảng giúp Firefox ghi điểm tuyệt đối. Opera tỏ ra áp đảo Chrome nhờ việc tích hợp sẵn công cụ chặn quảng cáo và dịch vụ VPN miễn phí. Đáng chú ý, trình duyệt đã cập nhật trợ lý Opera AI giúp giải đáp thắc mắc dựa trên bối cảnh các tab đang mở. Trình duyệt còn sở hữu công cụ tạo ảnh bằng AI miễn phí mà không yêu cầu người dùng phải đăng ký tài khoản. Thanh bên của Opera tích hợp sẵn các lối tắt truy cập nhanh đến ChatGPT, Gemini cùng nhiều ứng dụng nhắn tin như WhatsApp, Telegram. Người dùng có thể linh hoạt chuyển đổi giữa bố cục tab ngang truyền thống hoặc xếp tab theo hàng dọc. Tính năng Tab Islands giúp gom nhóm tab thành thư mục, kết hợp cùng Pinboards giúp lưu trữ ý tưởng dễ dàng khi nghiên cứu. Trình duyệt hỗ trợ đa dạng hệ điều hành từ Windows, macOS, Linux cho đến iOS, Android và ChromeOS."}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2026-08-10 09:15:55 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2026-08-10 09:15:55 [httpcore.http11] DEBUG: send_request_headers.started request= 2026-08-10 09:15:55 [httpcore.http11] DEBUG: send_request_headers.complete 2026-08-10 09:15:55 [httpcore.http11] DEBUG: send_request_body.started request= 2026-08-10 09:15:55 [httpcore.http11] DEBUG: send_request_body.complete 2026-08-10 09:15:55 [httpcore.http11] DEBUG: receive_response_headers.started request= 2026-08-10 09:15:55 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 429, b'Too Many Requests', [(b'Date', b'Mon, 10 Aug 2026 09:15:55 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Content-Length', b'283'), (b'Connection', b'keep-alive'), (b'CF-Ray', b'a28de6187db314b4-HKG'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Origin'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'X-Content-Type-Options', b'nosniff'), (b'x-openai-proxy-wasm', b'v0.1'), (b'x-request-id', b'req_fac7585e9d1748d98cf38f37be5be4d0'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2026-08-10 09:15:55 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 429 Too Many Requests" 2026-08-10 09:15:55 [httpcore.http11] DEBUG: receive_response_body.started request= 2026-08-10 09:15:55 [httpcore.http11] DEBUG: receive_response_body.complete 2026-08-10 09:15:55 [httpcore.http11] DEBUG: response_closed.started 2026-08-10 09:15:55 [httpcore.http11] DEBUG: response_closed.complete 2026-08-10 09:15:55 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "429 Too Many Requests" Headers([('date', 'Mon, 10 Aug 2026 09:15:55 GMT'), ('content-type', 'application/json; charset=utf-8'), ('content-length', '283'), ('connection', 'keep-alive'), ('cf-ray', 'a28de6187db314b4-HKG'), ('cf-cache-status', 'DYNAMIC'), ('server', 'cloudflare'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('vary', 'Origin'), ('access-control-expose-headers', 'CF-Ray'), ('access-control-expose-headers', 'CF-Ray'), ('x-content-type-options', 'nosniff'), ('x-openai-proxy-wasm', 'v0.1'), ('x-request-id', 'req_fac7585e9d1748d98cf38f37be5be4d0'), ('alt-svc', 'h3=":443"; ma=86400')]) 2026-08-10 09:15:55 [openai._base_client] DEBUG: request_id: req_fac7585e9d1748d98cf38f37be5be4d0 2026-08-10 09:15:55 [openai._base_client] DEBUG: Encountered httpx.HTTPStatusError Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 2026-08-10 09:15:55 [openai._base_client] DEBUG: Retrying due to status code 429 2026-08-10 09:15:55 [openai._base_client] DEBUG: 1 retry left 2026-08-10 09:15:55 [openai._base_client] INFO: Retrying request to /chat/completions in 0.962394 seconds 2026-08-10 09:15:56 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': "Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., 'the', 'and', 'is') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: Mặc dù Google Chrome phổ biến nhờ hệ sinh thái đa dạng, nó vẫn thiếu hụt nhiều tính năng chuyên sâu. Những người dùng tìm kiếm sự linh hoạt, bảo mật cao hay tùy biến sâu thường sẽ cảm thấy giao diện tối giản của Chrome là chưa đủ. Dưới đây là 4 lựa chọn trình duyệt thay thế sở hữu nhiều tính năng vượt trội so với Chrome, sẵn sàng mang đến trải nghiệm duyệt web hoàn toàn mới. Brave phát triển trên mã nguồn Chromium nhưng đã loại bỏ các trình theo dõi URL xâm phạm quyền riêng tư. Trình duyệt này tự động chặn cookie bên thứ ba, chống thu thập dấu vết thiết bị và tích hợp sẵn công cụ chặn quảng cáo YouTube. Ngoài ra, Brave còn hỗ trợ duyệt web qua mạng Tor, tích hợp ví tiền điện tử cùng trình đọc RSS tiện lợi. Người dùng cũng có thể đưa các trang web yêu thích vào danh sách cho phép để hỗ trợ họ bằng cách xem quảng cáo. Trình duyệt còn tích hợp sẵn dịch vụ VPN cao cấp và khả năng tạo danh sách phát phương tiện ngoại tuyến. Nhờ khả năng bảo vệ dữ liệu nghiêm ngặt, Brave đánh bại Chrome ngay trên nền tảng mã nguồn mở. Ứng dụng hiện hỗ trợ đầy đủ trên các hệ điều hành iOS, Android, Linux, macOS và Windows. Vivaldi là lựa chọn phù hợp cho những ai yêu thích việc cá nhân hóa và tùy chỉnh giao diện trình duyệt không giới hạn. Người dùng có thể tự do thay đổi màu sắc, hình nền, vị trí thanh tab hoặc tải về các chủ đề do cộng đồng thiết kế. Trình duyệt này tích hợp sẵn dịch vụ Proton VPN uy tín, công cụ ghi chú, chụp ảnh màn hình và chế độ Picture-in-picture. Về mặt hỗ trợ công việc, Vivaldi cung cấp tính năng Quick Commands và Command Chains giúp thực hiện nhiều thao tác chỉ bằng một lần click. Trình duyệt cũng sở hữu khả năng xếp chồng tab, tạo không gian làm việc và tích hợp trình đọc RSS tương tự Brave. Đây là công cụ hoàn hảo để thay thế Chrome cho những người dùng cần xử lý khối lượng công việc lớn. Vivaldi có sẵn trên cả nền tảng di động lẫn máy tính để người dùng dễ dàng trải nghiệm. Firefox nổi tiếng là đối thủ nặng ký của Chrome nhờ khả năng bảo vệ quyền riêng tư người dùng vượt trội. Công nghệ bảo vệ theo dõi nâng cao (Enhanced Tracking Protection) và bảo vệ cookie toàn diện (Total Cookie Protection) giúp chặn đứng mọi hành vi do thám trên web. Không như Chrome, Firefox chỉ thu thập dữ liệu kỹ thuật thuần túy chứ không theo dõi hoạt động cá nhân của bạn. Trình duyệt này còn tích hợp sẵn công cụ đọc và chỉnh sửa tệp PDF tiện lợi cho công việc văn phòng. Chế độ đọc của Firefox cũng linh hoạt hơn khi loại bỏ toàn bộ quảng cáo, hình ảnh thừa thãi để tối ưu hiển thị. Đặc biệt, Firefox cho phép cài đặt các tiện ích mở rộng ngay trên ứng dụng di động Android . Dịch vụ VPN tích hợp cùng khả năng đồng bộ đa nền tảng giúp Firefox ghi điểm tuyệt đối. Opera tỏ ra áp đảo Chrome nhờ việc tích hợp sẵn công cụ chặn quảng cáo và dịch vụ VPN miễn phí. Đáng chú ý, trình duyệt đã cập nhật trợ lý Opera AI giúp giải đáp thắc mắc dựa trên bối cảnh các tab đang mở. Trình duyệt còn sở hữu công cụ tạo ảnh bằng AI miễn phí mà không yêu cầu người dùng phải đăng ký tài khoản. Thanh bên của Opera tích hợp sẵn các lối tắt truy cập nhanh đến ChatGPT, Gemini cùng nhiều ứng dụng nhắn tin như WhatsApp, Telegram. Người dùng có thể linh hoạt chuyển đổi giữa bố cục tab ngang truyền thống hoặc xếp tab theo hàng dọc. Tính năng Tab Islands giúp gom nhóm tab thành thư mục, kết hợp cùng Pinboards giúp lưu trữ ý tưởng dễ dàng khi nghiên cứu. Trình duyệt hỗ trợ đa dạng hệ điều hành từ Windows, macOS, Linux cho đến iOS, Android và ChromeOS."}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2026-08-10 09:15:56 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2026-08-10 09:15:56 [httpcore.http11] DEBUG: send_request_headers.started request= 2026-08-10 09:15:56 [httpcore.http11] DEBUG: send_request_headers.complete 2026-08-10 09:15:56 [httpcore.http11] DEBUG: send_request_body.started request= 2026-08-10 09:15:56 [httpcore.http11] DEBUG: send_request_body.complete 2026-08-10 09:15:56 [httpcore.http11] DEBUG: receive_response_headers.started request= 2026-08-10 09:15:56 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 429, b'Too Many Requests', [(b'Date', b'Mon, 10 Aug 2026 09:15:56 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Content-Length', b'283'), (b'Connection', b'keep-alive'), (b'CF-Ray', b'a28de61fd8e714b4-HKG'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Origin'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'X-Content-Type-Options', b'nosniff'), (b'x-openai-proxy-wasm', b'v0.1'), (b'x-request-id', b'req_89ae6c670f6246f48fe377ff907739e7'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2026-08-10 09:15:56 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 429 Too Many Requests" 2026-08-10 09:15:56 [httpcore.http11] DEBUG: receive_response_body.started request= 2026-08-10 09:15:56 [httpcore.http11] DEBUG: receive_response_body.complete 2026-08-10 09:15:56 [httpcore.http11] DEBUG: response_closed.started 2026-08-10 09:15:56 [httpcore.http11] DEBUG: response_closed.complete 2026-08-10 09:15:56 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "429 Too Many Requests" Headers([('date', 'Mon, 10 Aug 2026 09:15:56 GMT'), ('content-type', 'application/json; charset=utf-8'), ('content-length', '283'), ('connection', 'keep-alive'), ('cf-ray', 'a28de61fd8e714b4-HKG'), ('cf-cache-status', 'DYNAMIC'), ('server', 'cloudflare'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('vary', 'Origin'), ('access-control-expose-headers', 'CF-Ray'), ('access-control-expose-headers', 'CF-Ray'), ('x-content-type-options', 'nosniff'), ('x-openai-proxy-wasm', 'v0.1'), ('x-request-id', 'req_89ae6c670f6246f48fe377ff907739e7'), ('alt-svc', 'h3=":443"; ma=86400')]) 2026-08-10 09:15:56 [openai._base_client] DEBUG: request_id: req_89ae6c670f6246f48fe377ff907739e7 2026-08-10 09:15:56 [openai._base_client] DEBUG: Encountered httpx.HTTPStatusError Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 2026-08-10 09:15:56 [openai._base_client] DEBUG: Re-raising status error 2026-08-10 09:15:56 [scrapy.core.scraper] ERROR: Spider error processing (referer: https://thanhnien.vn/tin-moi.htm) Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/scrapy/utils/defer.py", line 279, in iter_errback yield next(it) ^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/utils/python.py", line 350, in __next__ return next(self.data) ^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/utils/python.py", line 350, in __next__ return next(self.data) ^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/offsite.py", line 28, in return (r for r in result or () if self._filter(r, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/referer.py", line 352, in return (self._set_referer(r, response) for r in result or ()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/urllength.py", line 27, in return (r for r in result or () if self._filter(r, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/depth.py", line 31, in return (r for r in result or () if self._filter(r, response, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/opt/scrapy_projects/news_scraper/spiders/thanhnien_timestamp_spider.py", line 95, in parse_article item["tags"] = item.extract_tags() ^^^^^^^^^^^^^^^^^^^ File "/opt/scrapy_projects/news_scraper/items.py", line 51, in extract_tags response = client.chat.completions.create( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_utils/_utils.py", line 279, in wrapper return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/resources/chat/completions/completions.py", line 914, in create return self._post( ^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1242, in post return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 919, in request return self._request( ^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1008, in _request return self._retry_request( ^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1057, in _retry_request return self._request( ^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1008, in _request return self._retry_request( ^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1057, in _retry_request return self._request( ^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1023, in _request raise self._make_status_error_from_response(err.response) from None openai.RateLimitError: Error code: 429 - {'error': {'message': 'You have no credits remaining. Add credits to continue using the API at https://platform.openai.com/settings/organization/billing/.', 'type': 'insufficient_quota', 'param': None, 'code': 'credit_balance_exhausted'}} 2026-08-10 09:15:57 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://thanhnien.vn/tin-moi.htm) 2026-08-10 09:15:57 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': "Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., 'the', 'and', 'is') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: Chiều 10.8, Trường ĐH Khoa học xã hội và nhân văn TP.HCM thông báo điểm chuẩn trúng tuyển các ngành theo phương thức tổng hợp năm 2026. Theo đó, truyền thông đa phương tiện dẫn đầu về điểm chuẩn các ngành với 88,80. Điểm chuẩn từng ngành như bảng sau: Công thức tính điểm như sau: Thí sinh có thể xem điểm chuẩn các trường đại học năm 2026 TẠI ĐÂY hoặc TẠI ĐÂY ."}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2026-08-10 09:15:57 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2026-08-10 09:15:57 [httpcore.connection] DEBUG: connect_tcp.started host='api.openai.com' port=443 local_address=None timeout=900 socket_options=None 2026-08-10 09:15:57 [httpcore.connection] DEBUG: connect_tcp.complete return_value= 2026-08-10 09:15:57 [httpcore.connection] DEBUG: start_tls.started ssl_context= server_hostname='api.openai.com' timeout=900 2026-08-10 09:15:57 [httpcore.connection] DEBUG: start_tls.complete return_value= 2026-08-10 09:15:57 [httpcore.http11] DEBUG: send_request_headers.started request= 2026-08-10 09:15:57 [httpcore.http11] DEBUG: send_request_headers.complete 2026-08-10 09:15:57 [httpcore.http11] DEBUG: send_request_body.started request= 2026-08-10 09:15:57 [httpcore.http11] DEBUG: send_request_body.complete 2026-08-10 09:15:57 [httpcore.http11] DEBUG: receive_response_headers.started request= 2026-08-10 09:15:58 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 429, b'Too Many Requests', [(b'Date', b'Mon, 10 Aug 2026 09:15:58 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Content-Length', b'283'), (b'Connection', b'keep-alive'), (b'CF-Ray', b'a28de6255a585657-HKG'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Origin'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'X-Content-Type-Options', b'nosniff'), (b'x-openai-proxy-wasm', b'v0.1'), (b'x-request-id', b'req_69341094a2804cff8ae4ee82d8bf8c87'), (b'set-cookie', b'__cf_bm=dfS_I.DQwkIVgGTZTZdURKRsnjBVvfTCMBvMUtG_VRg-1786353357.6528392-1.0.1.1-QuO3L7cIZBdZLXm8AB2erIk35kuTLTYZHUzMTK0_trk5PUpJTkizjRrAnSk.Njopms_nUUxNz.elgWkg0br3mqcyD_SFHaczlThWTGtJoKbxR.5e5R4vANbWKulnBeDS; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 10 Aug 2026 09:45:58 GMT'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2026-08-10 09:15:58 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 429 Too Many Requests" 2026-08-10 09:15:58 [httpcore.http11] DEBUG: receive_response_body.started request= 2026-08-10 09:15:58 [httpcore.http11] DEBUG: receive_response_body.complete 2026-08-10 09:15:58 [httpcore.http11] DEBUG: response_closed.started 2026-08-10 09:15:58 [httpcore.http11] DEBUG: response_closed.complete 2026-08-10 09:15:58 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "429 Too Many Requests" Headers([('date', 'Mon, 10 Aug 2026 09:15:58 GMT'), ('content-type', 'application/json; charset=utf-8'), ('content-length', '283'), ('connection', 'keep-alive'), ('cf-ray', 'a28de6255a585657-HKG'), ('cf-cache-status', 'DYNAMIC'), ('server', 'cloudflare'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('vary', 'Origin'), ('access-control-expose-headers', 'CF-Ray'), ('access-control-expose-headers', 'CF-Ray'), ('x-content-type-options', 'nosniff'), ('x-openai-proxy-wasm', 'v0.1'), ('x-request-id', 'req_69341094a2804cff8ae4ee82d8bf8c87'), ('set-cookie', '__cf_bm=dfS_I.DQwkIVgGTZTZdURKRsnjBVvfTCMBvMUtG_VRg-1786353357.6528392-1.0.1.1-QuO3L7cIZBdZLXm8AB2erIk35kuTLTYZHUzMTK0_trk5PUpJTkizjRrAnSk.Njopms_nUUxNz.elgWkg0br3mqcyD_SFHaczlThWTGtJoKbxR.5e5R4vANbWKulnBeDS; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 10 Aug 2026 09:45:58 GMT'), ('alt-svc', 'h3=":443"; ma=86400')]) 2026-08-10 09:15:58 [openai._base_client] DEBUG: request_id: req_69341094a2804cff8ae4ee82d8bf8c87 2026-08-10 09:15:58 [openai._base_client] DEBUG: Encountered httpx.HTTPStatusError Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 2026-08-10 09:15:58 [openai._base_client] DEBUG: Retrying due to status code 429 2026-08-10 09:15:58 [openai._base_client] DEBUG: 2 retries left 2026-08-10 09:15:58 [openai._base_client] INFO: Retrying request to /chat/completions in 0.431613 seconds 2026-08-10 09:15:58 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': "Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., 'the', 'and', 'is') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: Chiều 10.8, Trường ĐH Khoa học xã hội và nhân văn TP.HCM thông báo điểm chuẩn trúng tuyển các ngành theo phương thức tổng hợp năm 2026. Theo đó, truyền thông đa phương tiện dẫn đầu về điểm chuẩn các ngành với 88,80. Điểm chuẩn từng ngành như bảng sau: Công thức tính điểm như sau: Thí sinh có thể xem điểm chuẩn các trường đại học năm 2026 TẠI ĐÂY hoặc TẠI ĐÂY ."}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2026-08-10 09:15:58 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2026-08-10 09:15:58 [httpcore.http11] DEBUG: send_request_headers.started request= 2026-08-10 09:15:58 [httpcore.http11] DEBUG: send_request_headers.complete 2026-08-10 09:15:58 [httpcore.http11] DEBUG: send_request_body.started request= 2026-08-10 09:15:58 [httpcore.http11] DEBUG: send_request_body.complete 2026-08-10 09:15:58 [httpcore.http11] DEBUG: receive_response_headers.started request= 2026-08-10 09:15:59 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 429, b'Too Many Requests', [(b'Date', b'Mon, 10 Aug 2026 09:15:59 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Content-Length', b'283'), (b'Connection', b'keep-alive'), (b'CF-Ray', b'a28de62a6d3f5657-HKG'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Origin'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'X-Content-Type-Options', b'nosniff'), (b'x-openai-proxy-wasm', b'v0.1'), (b'x-request-id', b'req_d5a23ed7e6b74c43b03a9233f07c96b0'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2026-08-10 09:15:59 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 429 Too Many Requests" 2026-08-10 09:15:59 [httpcore.http11] DEBUG: receive_response_body.started request= 2026-08-10 09:15:59 [httpcore.http11] DEBUG: receive_response_body.complete 2026-08-10 09:15:59 [httpcore.http11] DEBUG: response_closed.started 2026-08-10 09:15:59 [httpcore.http11] DEBUG: response_closed.complete 2026-08-10 09:15:59 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "429 Too Many Requests" Headers([('date', 'Mon, 10 Aug 2026 09:15:59 GMT'), ('content-type', 'application/json; charset=utf-8'), ('content-length', '283'), ('connection', 'keep-alive'), ('cf-ray', 'a28de62a6d3f5657-HKG'), ('cf-cache-status', 'DYNAMIC'), ('server', 'cloudflare'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('vary', 'Origin'), ('access-control-expose-headers', 'CF-Ray'), ('access-control-expose-headers', 'CF-Ray'), ('x-content-type-options', 'nosniff'), ('x-openai-proxy-wasm', 'v0.1'), ('x-request-id', 'req_d5a23ed7e6b74c43b03a9233f07c96b0'), ('alt-svc', 'h3=":443"; ma=86400')]) 2026-08-10 09:15:59 [openai._base_client] DEBUG: request_id: req_d5a23ed7e6b74c43b03a9233f07c96b0 2026-08-10 09:15:59 [openai._base_client] DEBUG: Encountered httpx.HTTPStatusError Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 2026-08-10 09:15:59 [openai._base_client] DEBUG: Retrying due to status code 429 2026-08-10 09:15:59 [openai._base_client] DEBUG: 1 retry left 2026-08-10 09:15:59 [openai._base_client] INFO: Retrying request to /chat/completions in 0.877048 seconds 2026-08-10 09:15:59 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': "Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., 'the', 'and', 'is') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: Chiều 10.8, Trường ĐH Khoa học xã hội và nhân văn TP.HCM thông báo điểm chuẩn trúng tuyển các ngành theo phương thức tổng hợp năm 2026. Theo đó, truyền thông đa phương tiện dẫn đầu về điểm chuẩn các ngành với 88,80. Điểm chuẩn từng ngành như bảng sau: Công thức tính điểm như sau: Thí sinh có thể xem điểm chuẩn các trường đại học năm 2026 TẠI ĐÂY hoặc TẠI ĐÂY ."}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2026-08-10 09:15:59 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2026-08-10 09:15:59 [httpcore.http11] DEBUG: send_request_headers.started request= 2026-08-10 09:15:59 [httpcore.http11] DEBUG: send_request_headers.complete 2026-08-10 09:15:59 [httpcore.http11] DEBUG: send_request_body.started request= 2026-08-10 09:15:59 [httpcore.http11] DEBUG: send_request_body.complete 2026-08-10 09:15:59 [httpcore.http11] DEBUG: receive_response_headers.started request= 2026-08-10 09:16:00 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 429, b'Too Many Requests', [(b'Date', b'Mon, 10 Aug 2026 09:16:00 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Content-Length', b'283'), (b'Connection', b'keep-alive'), (b'CF-Ray', b'a28de6339bc05657-HKG'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Origin'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'X-Content-Type-Options', b'nosniff'), (b'x-openai-proxy-wasm', b'v0.1'), (b'x-request-id', b'req_e227b3d81aab497fa08a38790ee08a57'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2026-08-10 09:16:00 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 429 Too Many Requests" 2026-08-10 09:16:00 [httpcore.http11] DEBUG: receive_response_body.started request= 2026-08-10 09:16:00 [httpcore.http11] DEBUG: receive_response_body.complete 2026-08-10 09:16:00 [httpcore.http11] DEBUG: response_closed.started 2026-08-10 09:16:00 [httpcore.http11] DEBUG: response_closed.complete 2026-08-10 09:16:00 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "429 Too Many Requests" Headers([('date', 'Mon, 10 Aug 2026 09:16:00 GMT'), ('content-type', 'application/json; charset=utf-8'), ('content-length', '283'), ('connection', 'keep-alive'), ('cf-ray', 'a28de6339bc05657-HKG'), ('cf-cache-status', 'DYNAMIC'), ('server', 'cloudflare'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('vary', 'Origin'), ('access-control-expose-headers', 'CF-Ray'), ('access-control-expose-headers', 'CF-Ray'), ('x-content-type-options', 'nosniff'), ('x-openai-proxy-wasm', 'v0.1'), ('x-request-id', 'req_e227b3d81aab497fa08a38790ee08a57'), ('alt-svc', 'h3=":443"; ma=86400')]) 2026-08-10 09:16:00 [openai._base_client] DEBUG: request_id: req_e227b3d81aab497fa08a38790ee08a57 2026-08-10 09:16:00 [openai._base_client] DEBUG: Encountered httpx.HTTPStatusError Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 2026-08-10 09:16:00 [openai._base_client] DEBUG: Re-raising status error 2026-08-10 09:16:00 [scrapy.core.scraper] ERROR: Spider error processing (referer: https://thanhnien.vn/tin-moi.htm) Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/scrapy/utils/defer.py", line 279, in iter_errback yield next(it) ^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/utils/python.py", line 350, in __next__ return next(self.data) ^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/utils/python.py", line 350, in __next__ return next(self.data) ^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/offsite.py", line 28, in return (r for r in result or () if self._filter(r, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/referer.py", line 352, in return (self._set_referer(r, response) for r in result or ()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/urllength.py", line 27, in return (r for r in result or () if self._filter(r, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/depth.py", line 31, in return (r for r in result or () if self._filter(r, response, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/opt/scrapy_projects/news_scraper/spiders/thanhnien_timestamp_spider.py", line 95, in parse_article item["tags"] = item.extract_tags() ^^^^^^^^^^^^^^^^^^^ File "/opt/scrapy_projects/news_scraper/items.py", line 51, in extract_tags response = client.chat.completions.create( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_utils/_utils.py", line 279, in wrapper return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/resources/chat/completions/completions.py", line 914, in create return self._post( ^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1242, in post return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 919, in request return self._request( ^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1008, in _request return self._retry_request( ^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1057, in _retry_request return self._request( ^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1008, in _request return self._retry_request( ^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1057, in _retry_request return self._request( ^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1023, in _request raise self._make_status_error_from_response(err.response) from None openai.RateLimitError: Error code: 429 - {'error': {'message': 'You have no credits remaining. Add credits to continue using the API at https://platform.openai.com/settings/organization/billing/.', 'type': 'insufficient_quota', 'param': None, 'code': 'credit_balance_exhausted'}} 2026-08-10 09:16:00 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://thanhnien.vn/tin-moi.htm) 2026-08-10 09:16:00 [httpcore.connection] DEBUG: close.started 2026-08-10 09:16:00 [httpcore.connection] DEBUG: close.complete 2026-08-10 09:16:00 [httpcore.connection] DEBUG: close.started 2026-08-10 09:16:00 [httpcore.connection] DEBUG: close.complete 2026-08-10 09:16:00 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': "Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., 'the', 'and', 'is') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: Sáng 10.8, Trường ĐH Khoa học Sức khỏe (ĐH Quốc gia TP.HCM) thông báo điểm chuẩn trúng tuyển các ngành năm 2026. Điểm chuẩn từng ngành như bảng sau: Thí sinh có thể xem điểm chuẩn các trường đại học năm 2026 TẠI ĐÂY hoặc TẠI ĐÂY ."}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2026-08-10 09:16:00 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2026-08-10 09:16:00 [httpcore.connection] DEBUG: connect_tcp.started host='api.openai.com' port=443 local_address=None timeout=900 socket_options=None 2026-08-10 09:16:00 [httpcore.connection] DEBUG: connect_tcp.complete return_value= 2026-08-10 09:16:00 [httpcore.connection] DEBUG: start_tls.started ssl_context= server_hostname='api.openai.com' timeout=900 2026-08-10 09:16:00 [httpcore.connection] DEBUG: start_tls.complete return_value= 2026-08-10 09:16:00 [httpcore.http11] DEBUG: send_request_headers.started request= 2026-08-10 09:16:00 [httpcore.http11] DEBUG: send_request_headers.complete 2026-08-10 09:16:00 [httpcore.http11] DEBUG: send_request_body.started request= 2026-08-10 09:16:00 [httpcore.http11] DEBUG: send_request_body.complete 2026-08-10 09:16:00 [httpcore.http11] DEBUG: receive_response_headers.started request= 2026-08-10 09:16:00 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 429, b'Too Many Requests', [(b'Date', b'Mon, 10 Aug 2026 09:16:00 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Content-Length', b'283'), (b'Connection', b'keep-alive'), (b'CF-Ray', b'a28de637b99890e4-HKG'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Origin'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'X-Content-Type-Options', b'nosniff'), (b'x-openai-proxy-wasm', b'v0.1'), (b'x-request-id', b'req_60692357ff7f4414addefe1f3f4a2698'), (b'set-cookie', b'__cf_bm=u4J0RmCHS0d0T5ARlS42SmoTIuNJAzyGPvXa2i4794E-1786353360.5930083-1.0.1.1-6FTnB.DvQE6_Pes.kWfsXXOfmnnCzXSG4TyXzuQzEon6aMK_tLIvfo6ZkBd3mFq_ly3jbOLpCbuEHIStmnVqGwUgkFtWYyifdxmpJRUY.YqCWKVDZbz0_BxmboishpPq; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 10 Aug 2026 09:46:00 GMT'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2026-08-10 09:16:00 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 429 Too Many Requests" 2026-08-10 09:16:00 [httpcore.http11] DEBUG: receive_response_body.started request= 2026-08-10 09:16:00 [httpcore.http11] DEBUG: receive_response_body.complete 2026-08-10 09:16:00 [httpcore.http11] DEBUG: response_closed.started 2026-08-10 09:16:00 [httpcore.http11] DEBUG: response_closed.complete 2026-08-10 09:16:00 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "429 Too Many Requests" Headers([('date', 'Mon, 10 Aug 2026 09:16:00 GMT'), ('content-type', 'application/json; charset=utf-8'), ('content-length', '283'), ('connection', 'keep-alive'), ('cf-ray', 'a28de637b99890e4-HKG'), ('cf-cache-status', 'DYNAMIC'), ('server', 'cloudflare'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('vary', 'Origin'), ('access-control-expose-headers', 'CF-Ray'), ('access-control-expose-headers', 'CF-Ray'), ('x-content-type-options', 'nosniff'), ('x-openai-proxy-wasm', 'v0.1'), ('x-request-id', 'req_60692357ff7f4414addefe1f3f4a2698'), ('set-cookie', '__cf_bm=u4J0RmCHS0d0T5ARlS42SmoTIuNJAzyGPvXa2i4794E-1786353360.5930083-1.0.1.1-6FTnB.DvQE6_Pes.kWfsXXOfmnnCzXSG4TyXzuQzEon6aMK_tLIvfo6ZkBd3mFq_ly3jbOLpCbuEHIStmnVqGwUgkFtWYyifdxmpJRUY.YqCWKVDZbz0_BxmboishpPq; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 10 Aug 2026 09:46:00 GMT'), ('alt-svc', 'h3=":443"; ma=86400')]) 2026-08-10 09:16:00 [openai._base_client] DEBUG: request_id: req_60692357ff7f4414addefe1f3f4a2698 2026-08-10 09:16:00 [openai._base_client] DEBUG: Encountered httpx.HTTPStatusError Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 2026-08-10 09:16:00 [openai._base_client] DEBUG: Retrying due to status code 429 2026-08-10 09:16:00 [openai._base_client] DEBUG: 2 retries left 2026-08-10 09:16:00 [openai._base_client] INFO: Retrying request to /chat/completions in 0.386041 seconds 2026-08-10 09:16:01 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': "Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., 'the', 'and', 'is') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: Sáng 10.8, Trường ĐH Khoa học Sức khỏe (ĐH Quốc gia TP.HCM) thông báo điểm chuẩn trúng tuyển các ngành năm 2026. Điểm chuẩn từng ngành như bảng sau: Thí sinh có thể xem điểm chuẩn các trường đại học năm 2026 TẠI ĐÂY hoặc TẠI ĐÂY ."}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2026-08-10 09:16:01 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2026-08-10 09:16:01 [httpcore.http11] DEBUG: send_request_headers.started request= 2026-08-10 09:16:01 [httpcore.http11] DEBUG: send_request_headers.complete 2026-08-10 09:16:01 [httpcore.http11] DEBUG: send_request_body.started request= 2026-08-10 09:16:01 [httpcore.http11] DEBUG: send_request_body.complete 2026-08-10 09:16:01 [httpcore.http11] DEBUG: receive_response_headers.started request= 2026-08-10 09:16:01 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 429, b'Too Many Requests', [(b'Date', b'Mon, 10 Aug 2026 09:16:01 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Content-Length', b'283'), (b'Connection', b'keep-alive'), (b'CF-Ray', b'a28de63b5c7f90e4-HKG'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Origin'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'X-Content-Type-Options', b'nosniff'), (b'x-openai-proxy-wasm', b'v0.1'), (b'x-request-id', b'req_aea0b0ed0936406a820d1e651575e2ec'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2026-08-10 09:16:01 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 429 Too Many Requests" 2026-08-10 09:16:01 [httpcore.http11] DEBUG: receive_response_body.started request= 2026-08-10 09:16:01 [httpcore.http11] DEBUG: receive_response_body.complete 2026-08-10 09:16:01 [httpcore.http11] DEBUG: response_closed.started 2026-08-10 09:16:01 [httpcore.http11] DEBUG: response_closed.complete 2026-08-10 09:16:01 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "429 Too Many Requests" Headers([('date', 'Mon, 10 Aug 2026 09:16:01 GMT'), ('content-type', 'application/json; charset=utf-8'), ('content-length', '283'), ('connection', 'keep-alive'), ('cf-ray', 'a28de63b5c7f90e4-HKG'), ('cf-cache-status', 'DYNAMIC'), ('server', 'cloudflare'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('vary', 'Origin'), ('access-control-expose-headers', 'CF-Ray'), ('access-control-expose-headers', 'CF-Ray'), ('x-content-type-options', 'nosniff'), ('x-openai-proxy-wasm', 'v0.1'), ('x-request-id', 'req_aea0b0ed0936406a820d1e651575e2ec'), ('alt-svc', 'h3=":443"; ma=86400')]) 2026-08-10 09:16:01 [openai._base_client] DEBUG: request_id: req_aea0b0ed0936406a820d1e651575e2ec 2026-08-10 09:16:01 [openai._base_client] DEBUG: Encountered httpx.HTTPStatusError Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 2026-08-10 09:16:01 [openai._base_client] DEBUG: Retrying due to status code 429 2026-08-10 09:16:01 [openai._base_client] DEBUG: 1 retry left 2026-08-10 09:16:01 [openai._base_client] INFO: Retrying request to /chat/completions in 0.946087 seconds 2026-08-10 09:16:02 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': "Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., 'the', 'and', 'is') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: Sáng 10.8, Trường ĐH Khoa học Sức khỏe (ĐH Quốc gia TP.HCM) thông báo điểm chuẩn trúng tuyển các ngành năm 2026. Điểm chuẩn từng ngành như bảng sau: Thí sinh có thể xem điểm chuẩn các trường đại học năm 2026 TẠI ĐÂY hoặc TẠI ĐÂY ."}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2026-08-10 09:16:02 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2026-08-10 09:16:02 [httpcore.http11] DEBUG: send_request_headers.started request= 2026-08-10 09:16:02 [httpcore.http11] DEBUG: send_request_headers.complete 2026-08-10 09:16:02 [httpcore.http11] DEBUG: send_request_body.started request= 2026-08-10 09:16:02 [httpcore.http11] DEBUG: send_request_body.complete 2026-08-10 09:16:02 [httpcore.http11] DEBUG: receive_response_headers.started request= 2026-08-10 09:16:02 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 429, b'Too Many Requests', [(b'Date', b'Mon, 10 Aug 2026 09:16:02 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Content-Length', b'283'), (b'Connection', b'keep-alive'), (b'CF-Ray', b'a28de64289b590e4-HKG'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Origin'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'X-Content-Type-Options', b'nosniff'), (b'x-openai-proxy-wasm', b'v0.1'), (b'x-request-id', b'req_b7207d6cde8c43ceac81d21f521b972c'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2026-08-10 09:16:02 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 429 Too Many Requests" 2026-08-10 09:16:02 [httpcore.http11] DEBUG: receive_response_body.started request= 2026-08-10 09:16:02 [httpcore.http11] DEBUG: receive_response_body.complete 2026-08-10 09:16:02 [httpcore.http11] DEBUG: response_closed.started 2026-08-10 09:16:02 [httpcore.http11] DEBUG: response_closed.complete 2026-08-10 09:16:02 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "429 Too Many Requests" Headers([('date', 'Mon, 10 Aug 2026 09:16:02 GMT'), ('content-type', 'application/json; charset=utf-8'), ('content-length', '283'), ('connection', 'keep-alive'), ('cf-ray', 'a28de64289b590e4-HKG'), ('cf-cache-status', 'DYNAMIC'), ('server', 'cloudflare'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('vary', 'Origin'), ('access-control-expose-headers', 'CF-Ray'), ('access-control-expose-headers', 'CF-Ray'), ('x-content-type-options', 'nosniff'), ('x-openai-proxy-wasm', 'v0.1'), ('x-request-id', 'req_b7207d6cde8c43ceac81d21f521b972c'), ('alt-svc', 'h3=":443"; ma=86400')]) 2026-08-10 09:16:02 [openai._base_client] DEBUG: request_id: req_b7207d6cde8c43ceac81d21f521b972c 2026-08-10 09:16:02 [openai._base_client] DEBUG: Encountered httpx.HTTPStatusError Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 2026-08-10 09:16:02 [openai._base_client] DEBUG: Re-raising status error 2026-08-10 09:16:02 [scrapy.core.scraper] ERROR: Spider error processing (referer: https://thanhnien.vn/tin-moi.htm) Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/scrapy/utils/defer.py", line 279, in iter_errback yield next(it) ^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/utils/python.py", line 350, in __next__ return next(self.data) ^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/utils/python.py", line 350, in __next__ return next(self.data) ^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/offsite.py", line 28, in return (r for r in result or () if self._filter(r, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/referer.py", line 352, in return (self._set_referer(r, response) for r in result or ()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/urllength.py", line 27, in return (r for r in result or () if self._filter(r, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/depth.py", line 31, in return (r for r in result or () if self._filter(r, response, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/opt/scrapy_projects/news_scraper/spiders/thanhnien_timestamp_spider.py", line 95, in parse_article item["tags"] = item.extract_tags() ^^^^^^^^^^^^^^^^^^^ File "/opt/scrapy_projects/news_scraper/items.py", line 51, in extract_tags response = client.chat.completions.create( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_utils/_utils.py", line 279, in wrapper return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/resources/chat/completions/completions.py", line 914, in create return self._post( ^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1242, in post return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 919, in request return self._request( ^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1008, in _request return self._retry_request( ^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1057, in _retry_request return self._request( ^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1008, in _request return self._retry_request( ^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1057, in _retry_request return self._request( ^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1023, in _request raise self._make_status_error_from_response(err.response) from None openai.RateLimitError: Error code: 429 - {'error': {'message': 'You have no credits remaining. Add credits to continue using the API at https://platform.openai.com/settings/organization/billing/.', 'type': 'insufficient_quota', 'param': None, 'code': 'credit_balance_exhausted'}} 2026-08-10 09:16:02 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://thanhnien.vn/tin-moi.htm) 2026-08-10 09:16:02 [thanhnien_timestamp] INFO: 2026-08-10 15:23:00 not in 2026-08-10 15:55:00 to 2026-08-10 16:10:00 2026-08-10 09:16:03 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://thanhnien.vn/tin-moi.htm) 2026-08-10 09:16:04 [thanhnien_timestamp] INFO: 2026-08-10 15:29:00 not in 2026-08-10 15:55:00 to 2026-08-10 16:10:00 2026-08-10 09:16:06 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://thanhnien.vn/tin-moi.htm) 2026-08-10 09:16:06 [thanhnien_timestamp] INFO: 2026-08-10 15:31:00 not in 2026-08-10 15:55:00 to 2026-08-10 16:10:00 2026-08-10 09:16:08 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://thanhnien.vn/tin-moi.htm) 2026-08-10 09:16:08 [thanhnien_timestamp] INFO: 2026-08-10 15:34:00 not in 2026-08-10 15:55:00 to 2026-08-10 16:10:00 2026-08-10 09:16:11 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://thanhnien.vn/tin-moi.htm) 2026-08-10 09:16:11 [thanhnien_timestamp] INFO: 2026-08-10 15:34:00 not in 2026-08-10 15:55:00 to 2026-08-10 16:10:00 2026-08-10 09:16:14 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://thanhnien.vn/tin-moi.htm) 2026-08-10 09:16:14 [thanhnien_timestamp] INFO: 2026-08-10 15:44:00 not in 2026-08-10 15:55:00 to 2026-08-10 16:10:00 2026-08-10 09:16:15 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://thanhnien.vn/tin-moi.htm) 2026-08-10 09:16:16 [thanhnien_timestamp] INFO: 2026-08-10 15:50:00 not in 2026-08-10 15:55:00 to 2026-08-10 16:10:00 2026-08-10 09:16:18 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://thanhnien.vn/tin-moi.htm) 2026-08-10 09:16:18 [thanhnien_timestamp] INFO: 2026-08-10 15:54:00 not in 2026-08-10 15:55:00 to 2026-08-10 16:10:00 2026-08-10 09:16:20 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://thanhnien.vn/tin-moi.htm) 2026-08-10 09:16:20 [thanhnien_timestamp] INFO: 2026-08-10 15:54:00 not in 2026-08-10 15:55:00 to 2026-08-10 16:10:00 2026-08-10 09:16:23 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://thanhnien.vn/tin-moi.htm) 2026-08-10 09:16:23 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': "Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., 'the', 'and', 'is') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: Ngày 10.8, thông tin từ Bệnh viện đa khoa tỉnh Quảng Trị cho biết đơn vị vừa tiếp nhận một bệnh nhân trong tình trạng hôn mê, sốt cao và có nhiều vết thương trên cơ thể. Cụ thể, bệnh nhân là ông H.V.D (44 tuổi, ở thôn Tăng Cô Hang, xã Lìa, tỉnh Quảng Trị) được chính quyền địa phương và người nhà đưa đến bệnh viện vào chiều cùng ngày. Trước đó, vào ngày 7.8, ông D. đi làm tại khu vực rừng tràm thuộc thôn Gia Giã (xã Hướng Hiệp) nhưng sau đó không thấy trở về nhà. Người nhà đã đăng thông báo tìm kiếm trên mạng xã hội đồng thời thông báo với chính quyền xã Hướng Hiệp. Đến sáng nay (10.8), khi người dân tổ chức tìm kiếm thì phát hiện ông D. nằm thoi thóp giữa rừng, cơ thể có nhiều vết thương, xung quanh có nhiều dấu chân trâu. Nhận được thông, UBND xã Hướng Hiệp đã liên hệ xe cấp cứu , hỗ trợ đưa ông D. ra khỏi khu vực rừng và chuyển đến Bệnh viện đa khoa tỉnh Quảng Trị cấp cứu, điều trị. Theo người nhà, ông D. có thể bị trâu tấn công trong lúc đang làm việc. Hiện tại, bệnh nhân đang được các y bác sĩ Bệnh viện đa khoa tỉnh Quảng Trị chăm sóc, theo dõi."}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2026-08-10 09:16:23 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2026-08-10 09:16:23 [httpcore.connection] DEBUG: connect_tcp.started host='api.openai.com' port=443 local_address=None timeout=900 socket_options=None 2026-08-10 09:16:23 [httpcore.connection] DEBUG: connect_tcp.complete return_value= 2026-08-10 09:16:23 [httpcore.connection] DEBUG: start_tls.started ssl_context= server_hostname='api.openai.com' timeout=900 2026-08-10 09:16:23 [httpcore.connection] DEBUG: start_tls.complete return_value= 2026-08-10 09:16:23 [httpcore.http11] DEBUG: send_request_headers.started request= 2026-08-10 09:16:23 [httpcore.http11] DEBUG: send_request_headers.complete 2026-08-10 09:16:23 [httpcore.http11] DEBUG: send_request_body.started request= 2026-08-10 09:16:23 [httpcore.http11] DEBUG: send_request_body.complete 2026-08-10 09:16:23 [httpcore.http11] DEBUG: receive_response_headers.started request= 2026-08-10 09:16:24 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 429, b'Too Many Requests', [(b'Date', b'Mon, 10 Aug 2026 09:16:23 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Content-Length', b'283'), (b'Connection', b'keep-alive'), (b'CF-Ray', b'a28de6c8af529354-HKG'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Origin'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'X-Content-Type-Options', b'nosniff'), (b'x-openai-proxy-wasm', b'v0.1'), (b'x-request-id', b'req_f7f6cad8c59a4620849af2ad306472cd'), (b'set-cookie', b'__cf_bm=DB6xiVyfO0ST5R39BxbBtL1Ia47x_28em5ADIWhQtEs-1786353383.784868-1.0.1.1-V8aQvtVFTLTLusL8XBtVGUP7Z0jxGZVLBtl067ra1F1YkrHbZXO3a_EoRy4_YsWIcETCd5AH8FxaMiVIluq.eClovyNJtAUuJuKSTyzY_1IAwuhDzi393Eb2wgTBqELE; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 10 Aug 2026 09:46:23 GMT'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2026-08-10 09:16:24 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 429 Too Many Requests" 2026-08-10 09:16:24 [httpcore.http11] DEBUG: receive_response_body.started request= 2026-08-10 09:16:24 [httpcore.http11] DEBUG: receive_response_body.complete 2026-08-10 09:16:24 [httpcore.http11] DEBUG: response_closed.started 2026-08-10 09:16:24 [httpcore.http11] DEBUG: response_closed.complete 2026-08-10 09:16:24 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "429 Too Many Requests" Headers([('date', 'Mon, 10 Aug 2026 09:16:23 GMT'), ('content-type', 'application/json; charset=utf-8'), ('content-length', '283'), ('connection', 'keep-alive'), ('cf-ray', 'a28de6c8af529354-HKG'), ('cf-cache-status', 'DYNAMIC'), ('server', 'cloudflare'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('vary', 'Origin'), ('access-control-expose-headers', 'CF-Ray'), ('access-control-expose-headers', 'CF-Ray'), ('x-content-type-options', 'nosniff'), ('x-openai-proxy-wasm', 'v0.1'), ('x-request-id', 'req_f7f6cad8c59a4620849af2ad306472cd'), ('set-cookie', '__cf_bm=DB6xiVyfO0ST5R39BxbBtL1Ia47x_28em5ADIWhQtEs-1786353383.784868-1.0.1.1-V8aQvtVFTLTLusL8XBtVGUP7Z0jxGZVLBtl067ra1F1YkrHbZXO3a_EoRy4_YsWIcETCd5AH8FxaMiVIluq.eClovyNJtAUuJuKSTyzY_1IAwuhDzi393Eb2wgTBqELE; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 10 Aug 2026 09:46:23 GMT'), ('alt-svc', 'h3=":443"; ma=86400')]) 2026-08-10 09:16:24 [openai._base_client] DEBUG: request_id: req_f7f6cad8c59a4620849af2ad306472cd 2026-08-10 09:16:24 [openai._base_client] DEBUG: Encountered httpx.HTTPStatusError Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 2026-08-10 09:16:24 [openai._base_client] DEBUG: Retrying due to status code 429 2026-08-10 09:16:24 [openai._base_client] DEBUG: 2 retries left 2026-08-10 09:16:24 [openai._base_client] INFO: Retrying request to /chat/completions in 0.440908 seconds 2026-08-10 09:16:24 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': "Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., 'the', 'and', 'is') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: Ngày 10.8, thông tin từ Bệnh viện đa khoa tỉnh Quảng Trị cho biết đơn vị vừa tiếp nhận một bệnh nhân trong tình trạng hôn mê, sốt cao và có nhiều vết thương trên cơ thể. Cụ thể, bệnh nhân là ông H.V.D (44 tuổi, ở thôn Tăng Cô Hang, xã Lìa, tỉnh Quảng Trị) được chính quyền địa phương và người nhà đưa đến bệnh viện vào chiều cùng ngày. Trước đó, vào ngày 7.8, ông D. đi làm tại khu vực rừng tràm thuộc thôn Gia Giã (xã Hướng Hiệp) nhưng sau đó không thấy trở về nhà. Người nhà đã đăng thông báo tìm kiếm trên mạng xã hội đồng thời thông báo với chính quyền xã Hướng Hiệp. Đến sáng nay (10.8), khi người dân tổ chức tìm kiếm thì phát hiện ông D. nằm thoi thóp giữa rừng, cơ thể có nhiều vết thương, xung quanh có nhiều dấu chân trâu. Nhận được thông, UBND xã Hướng Hiệp đã liên hệ xe cấp cứu , hỗ trợ đưa ông D. ra khỏi khu vực rừng và chuyển đến Bệnh viện đa khoa tỉnh Quảng Trị cấp cứu, điều trị. Theo người nhà, ông D. có thể bị trâu tấn công trong lúc đang làm việc. Hiện tại, bệnh nhân đang được các y bác sĩ Bệnh viện đa khoa tỉnh Quảng Trị chăm sóc, theo dõi."}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2026-08-10 09:16:24 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2026-08-10 09:16:24 [httpcore.http11] DEBUG: send_request_headers.started request= 2026-08-10 09:16:24 [httpcore.http11] DEBUG: send_request_headers.complete 2026-08-10 09:16:24 [httpcore.http11] DEBUG: send_request_body.started request= 2026-08-10 09:16:24 [httpcore.http11] DEBUG: send_request_body.complete 2026-08-10 09:16:24 [httpcore.http11] DEBUG: receive_response_headers.started request= 2026-08-10 09:16:24 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 429, b'Too Many Requests', [(b'Date', b'Mon, 10 Aug 2026 09:16:24 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Content-Length', b'283'), (b'Connection', b'keep-alive'), (b'CF-Ray', b'a28de6ccdbeb9354-HKG'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Origin'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'X-Content-Type-Options', b'nosniff'), (b'x-openai-proxy-wasm', b'v0.1'), (b'x-request-id', b'req_3ba2454e5dcd4d57ac2ed1c6bea25f21'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2026-08-10 09:16:24 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 429 Too Many Requests" 2026-08-10 09:16:24 [httpcore.http11] DEBUG: receive_response_body.started request= 2026-08-10 09:16:24 [httpcore.http11] DEBUG: receive_response_body.complete 2026-08-10 09:16:24 [httpcore.http11] DEBUG: response_closed.started 2026-08-10 09:16:24 [httpcore.http11] DEBUG: response_closed.complete 2026-08-10 09:16:24 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "429 Too Many Requests" Headers([('date', 'Mon, 10 Aug 2026 09:16:24 GMT'), ('content-type', 'application/json; charset=utf-8'), ('content-length', '283'), ('connection', 'keep-alive'), ('cf-ray', 'a28de6ccdbeb9354-HKG'), ('cf-cache-status', 'DYNAMIC'), ('server', 'cloudflare'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('vary', 'Origin'), ('access-control-expose-headers', 'CF-Ray'), ('access-control-expose-headers', 'CF-Ray'), ('x-content-type-options', 'nosniff'), ('x-openai-proxy-wasm', 'v0.1'), ('x-request-id', 'req_3ba2454e5dcd4d57ac2ed1c6bea25f21'), ('alt-svc', 'h3=":443"; ma=86400')]) 2026-08-10 09:16:24 [openai._base_client] DEBUG: request_id: req_3ba2454e5dcd4d57ac2ed1c6bea25f21 2026-08-10 09:16:24 [openai._base_client] DEBUG: Encountered httpx.HTTPStatusError Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 2026-08-10 09:16:24 [openai._base_client] DEBUG: Retrying due to status code 429 2026-08-10 09:16:24 [openai._base_client] DEBUG: 1 retry left 2026-08-10 09:16:24 [openai._base_client] INFO: Retrying request to /chat/completions in 0.972012 seconds 2026-08-10 09:16:25 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': "Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., 'the', 'and', 'is') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: Ngày 10.8, thông tin từ Bệnh viện đa khoa tỉnh Quảng Trị cho biết đơn vị vừa tiếp nhận một bệnh nhân trong tình trạng hôn mê, sốt cao và có nhiều vết thương trên cơ thể. Cụ thể, bệnh nhân là ông H.V.D (44 tuổi, ở thôn Tăng Cô Hang, xã Lìa, tỉnh Quảng Trị) được chính quyền địa phương và người nhà đưa đến bệnh viện vào chiều cùng ngày. Trước đó, vào ngày 7.8, ông D. đi làm tại khu vực rừng tràm thuộc thôn Gia Giã (xã Hướng Hiệp) nhưng sau đó không thấy trở về nhà. Người nhà đã đăng thông báo tìm kiếm trên mạng xã hội đồng thời thông báo với chính quyền xã Hướng Hiệp. Đến sáng nay (10.8), khi người dân tổ chức tìm kiếm thì phát hiện ông D. nằm thoi thóp giữa rừng, cơ thể có nhiều vết thương, xung quanh có nhiều dấu chân trâu. Nhận được thông, UBND xã Hướng Hiệp đã liên hệ xe cấp cứu , hỗ trợ đưa ông D. ra khỏi khu vực rừng và chuyển đến Bệnh viện đa khoa tỉnh Quảng Trị cấp cứu, điều trị. Theo người nhà, ông D. có thể bị trâu tấn công trong lúc đang làm việc. Hiện tại, bệnh nhân đang được các y bác sĩ Bệnh viện đa khoa tỉnh Quảng Trị chăm sóc, theo dõi."}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2026-08-10 09:16:25 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2026-08-10 09:16:25 [httpcore.http11] DEBUG: send_request_headers.started request= 2026-08-10 09:16:25 [httpcore.http11] DEBUG: send_request_headers.complete 2026-08-10 09:16:25 [httpcore.http11] DEBUG: send_request_body.started request= 2026-08-10 09:16:25 [httpcore.http11] DEBUG: send_request_body.complete 2026-08-10 09:16:25 [httpcore.http11] DEBUG: receive_response_headers.started request= 2026-08-10 09:16:25 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 429, b'Too Many Requests', [(b'Date', b'Mon, 10 Aug 2026 09:16:25 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Content-Length', b'283'), (b'Connection', b'keep-alive'), (b'CF-Ray', b'a28de6d429169354-HKG'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Origin'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'X-Content-Type-Options', b'nosniff'), (b'x-openai-proxy-wasm', b'v0.1'), (b'x-request-id', b'req_2a2af3e4f1e342c7b62f5fe492c30e2f'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2026-08-10 09:16:25 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 429 Too Many Requests" 2026-08-10 09:16:25 [httpcore.http11] DEBUG: receive_response_body.started request= 2026-08-10 09:16:25 [httpcore.http11] DEBUG: receive_response_body.complete 2026-08-10 09:16:25 [httpcore.http11] DEBUG: response_closed.started 2026-08-10 09:16:25 [httpcore.http11] DEBUG: response_closed.complete 2026-08-10 09:16:25 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "429 Too Many Requests" Headers([('date', 'Mon, 10 Aug 2026 09:16:25 GMT'), ('content-type', 'application/json; charset=utf-8'), ('content-length', '283'), ('connection', 'keep-alive'), ('cf-ray', 'a28de6d429169354-HKG'), ('cf-cache-status', 'DYNAMIC'), ('server', 'cloudflare'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('vary', 'Origin'), ('access-control-expose-headers', 'CF-Ray'), ('access-control-expose-headers', 'CF-Ray'), ('x-content-type-options', 'nosniff'), ('x-openai-proxy-wasm', 'v0.1'), ('x-request-id', 'req_2a2af3e4f1e342c7b62f5fe492c30e2f'), ('alt-svc', 'h3=":443"; ma=86400')]) 2026-08-10 09:16:25 [openai._base_client] DEBUG: request_id: req_2a2af3e4f1e342c7b62f5fe492c30e2f 2026-08-10 09:16:25 [openai._base_client] DEBUG: Encountered httpx.HTTPStatusError Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 2026-08-10 09:16:25 [openai._base_client] DEBUG: Re-raising status error 2026-08-10 09:16:25 [scrapy.core.scraper] ERROR: Spider error processing (referer: https://thanhnien.vn/tin-moi.htm) Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/scrapy/utils/defer.py", line 279, in iter_errback yield next(it) ^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/utils/python.py", line 350, in __next__ return next(self.data) ^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/utils/python.py", line 350, in __next__ return next(self.data) ^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/offsite.py", line 28, in return (r for r in result or () if self._filter(r, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/referer.py", line 352, in return (self._set_referer(r, response) for r in result or ()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/urllength.py", line 27, in return (r for r in result or () if self._filter(r, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/depth.py", line 31, in return (r for r in result or () if self._filter(r, response, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/opt/scrapy_projects/news_scraper/spiders/thanhnien_timestamp_spider.py", line 95, in parse_article item["tags"] = item.extract_tags() ^^^^^^^^^^^^^^^^^^^ File "/opt/scrapy_projects/news_scraper/items.py", line 51, in extract_tags response = client.chat.completions.create( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_utils/_utils.py", line 279, in wrapper return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/resources/chat/completions/completions.py", line 914, in create return self._post( ^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1242, in post return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 919, in request return self._request( ^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1008, in _request return self._retry_request( ^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1057, in _retry_request return self._request( ^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1008, in _request return self._retry_request( ^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1057, in _retry_request return self._request( ^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1023, in _request raise self._make_status_error_from_response(err.response) from None openai.RateLimitError: Error code: 429 - {'error': {'message': 'You have no credits remaining. Add credits to continue using the API at https://platform.openai.com/settings/organization/billing/.', 'type': 'insufficient_quota', 'param': None, 'code': 'credit_balance_exhausted'}} 2026-08-10 09:16:25 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://thanhnien.vn/tin-moi.htm) 2026-08-10 09:16:26 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': 'Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., \'the\', \'and\', \'is\') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: Trong xu thế chuyển đổi số, việc ứng dụng trí tuệ nhân tạo (AI) vào ngành ngân hàng không còn là điều mới lạ. Không đi theo cách tiếp cận công nghệ khô khan, TPBank tập trung tối ưu hóa trải nghiệm cá nhân hóa nhằm mang lại những giá trị sát sườn nhất cho khách hàng. T\'AioX không chỉ là một AI thông minh, mà là một chuyên gia ngân hàng số thấu hiểu thói quen chi tiêu và nhu cầu tài chính cá nhân, giúp mọi tương tác trên App TPBank trở nên tự nhiên và riêng biệt như một cuộc hội thoại giữa những người bạn. Khách hàng có thể trải nghiệm sự hỗ trợ toàn diện của T\'AioX thông qua bốn nhóm tính năng trọng tâm được thiết kế liền mạch trên ứng dụng. Thay vì phải tự mình lục tìm lịch sử giao dịch hay cộng trừ thủ công, người dùng giờ đây chỉ cần đặt những câu hỏi đơn giản như: "Tổng hợp chi tiêu 1 năm gần đây?", "Tìm các giao dịch chuyển tiền với NAM?" hay "Liệt kê các giao dịch hóa đơn?", hệ thống sẽ lập tức tổng hợp và trả về số liệu chính xác. T\'AioX cũng khéo léo hỗ trợ nhắc nhở các khoản nợ vay, hóa đơn định kỳ hay dư nợ thẻ tín dụng, giúp khách hàng luôn chủ động trong mọi kế hoạch chi tiêu. Bên cạnh đó, tính năng điều hướng thông minh (AI SmartSearch) giúp giảm thiểu tối đa thời gian tìm kiếm giữa hàng chục danh mục phức tạp. Khi khách hàng bày tỏ mong muốn như "Tôi muốn mở tiết kiệm", "Phí thường niên thẻ tín dụng là bao nhiêu?"; "Khoá thẻ tín dụng như thế nào" hoặc "Thanh toán hóa đơn ở đâu?", T\'AioX sẽ trực tiếp giải đáp và dẫn dắt họ tới đúng màn hình cần thiết mà không đòi hỏi phải ghi nhớ vị trí các tính năng. Sự đồng hành của T\'AioX còn thể hiện qua khả năng hỗ trợ khẩn cấp 24/7. Trong các tình huống cấp bách như chưa nhận được tiền chuyển khoản, cần khóa thẻ khẩn cấp hay gặp lỗi mã OTP, mọi vướng mắc sẽ được ghi nhận tức thì và điều hướng tới kênh xử lý hoặc tư vấn viên phù hợp nhất, đảm bảo luồng thông tin luôn thông suốt. Cuối cùng, để gia tăng thêm giá trị trải nghiệm, T\'AioX còn là trợ thủ đắc lực trong việc cập nhật các ưu đãi cá nhân hóa. Chỉ qua vài thao tác trò chuyện đơn giản, người dùng có thể khám phá ngay các chương trình giảm giá mua sắm, ẩm thực hay du lịch được thiết kế dựa trên chính thói quen chi tiêu của mình. Việc phát triển T\'AioX là một phần trong chiến lược dài hạn của TPBank nhằm mang đến một hệ sinh thái ngân hàng số thông minh và thân thiện. Thay vì yêu cầu khách hàng phải làm quen với những giao diện phức tạp, TPBank chọn cách để công nghệ tự thích nghi với ngôn ngữ và thói quen của người dùng. Sự ra đời của T\'AioX là trái ngọt từ hành trình bền bỉ của TPBank trong việc làm chủ trí tuệ nhân tạo. Không chỉ là một chatbot AI thông thường, T\'AioX được TPBank phát triển trên nền tảng AI đa mô hình (Multi-LLM Platform), cho phép linh hoạt ứng dụng những công nghệ trí tuệ nhân tạo tiên tiến hàng đầu thế giới như ChatGPT, Gemini và Grok. Tùy theo từng nhu cầu và tình huống, hệ thống sẽ tự động lựa chọn mô hình AI phù hợp để mang đến câu trả lời nhanh hơn, chính xác hơn và trải nghiệm tốt hơn cho người dùng. Đặc biệt, T\'AioX không chỉ đồng hành cùng khách hàng trên các kênh số mà còn là nền tảng AI phục vụ toàn bộ hoạt động của ngân hàng. Từ tư vấn sản phẩm, hỗ trợ giao dịch, chăm sóc khách hàng đến hỗ trợ cán bộ nhân viên tra cứu thông tin, xử lý nghiệp vụ, phân tích dữ liệu và nâng cao hiệu quả công việc, T\'AioX đều có thể đáp ứng trên cùng một nền tảng AI thống nhất. Thay vì xây dựng một chatbot, TPBank lựa chọn xây dựng một nền tảng AI có khả năng liên tục tiếp nhận và ứng dụng những công nghệ tiên tiến nhất. Điều này giúp T\'AioX không ngừng thông minh hơn theo thời gian, đảm bảo hiệu suất và độ an toàn ở mức cao, mang lại trải nghiệm ngày càng tốt hơn cho cả khách hàng và cán bộ nhân viên. Sự kiên trì trong việc lấy sự thấu hiểu làm trọng tâm đã giúp TPBank xuất sắc nhận giải thưởng "Ứng dụng AI tạo sinh (GenAI) xuất sắc nhất" (Best GenAI Application in Vietnam) và "Doanh nghiệp triển khai AI toàn diện nhất Việt Nam" (Best Enterprise Wide AI Technology Implementation in Vietnam) từ tổ chức uy tín The Asian Banker. Đối với TPBank, các giải thưởng quốc tế này là minh chứng cho việc đưa GenAI vượt xa vai trò của một chatbot thông thường để thực sự đồng hành cùng khách hàng. Đây cũng chính là lời cam kết để ngân hàng tiếp tục hoàn thiện Chuyên gia Ngân hàng số T\'AioX, biến mỗi hành trình tài chính trên App TPBank trở thành một trải nghiệm thông minh, an toàn và đậm chất cá nhân hóa. Sau giai đoạn thử nghiệm thành công, TPBank chính thức triển khai rộng rãi T\'AioX tới toàn bộ khách hàng trên phạm vi toàn quốc. Đây là cơ hội để mọi khách hàng của TPBank trải nghiệm một phong cách tài chính hoàn toàn mới, nơi mọi nhu cầu của bạn đều được lắng nghe và đáp ứng trong tích tắc. Hãy đăng nhập vào App TPBank ngay hôm nay để bắt đầu cuộc trò chuyện đầu tiên với "Chuyên gia Ngân hàng số" của riêng bạn!'}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2026-08-10 09:16:26 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2026-08-10 09:16:26 [httpcore.connection] DEBUG: connect_tcp.started host='api.openai.com' port=443 local_address=None timeout=900 socket_options=None 2026-08-10 09:16:26 [httpcore.connection] DEBUG: connect_tcp.complete return_value= 2026-08-10 09:16:26 [httpcore.connection] DEBUG: start_tls.started ssl_context= server_hostname='api.openai.com' timeout=900 2026-08-10 09:16:26 [httpcore.connection] DEBUG: start_tls.complete return_value= 2026-08-10 09:16:26 [httpcore.http11] DEBUG: send_request_headers.started request= 2026-08-10 09:16:26 [httpcore.http11] DEBUG: send_request_headers.complete 2026-08-10 09:16:26 [httpcore.http11] DEBUG: send_request_body.started request= 2026-08-10 09:16:26 [httpcore.http11] DEBUG: send_request_body.complete 2026-08-10 09:16:26 [httpcore.http11] DEBUG: receive_response_headers.started request= 2026-08-10 09:16:26 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 429, b'Too Many Requests', [(b'Date', b'Mon, 10 Aug 2026 09:16:26 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Content-Length', b'283'), (b'Connection', b'keep-alive'), (b'CF-Ray', b'a28de6d7680a06f0-HKG'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Origin'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'X-Content-Type-Options', b'nosniff'), (b'x-openai-proxy-wasm', b'v0.1'), (b'x-request-id', b'req_7160f6b649c343ebbade729b1826141a'), (b'set-cookie', b'__cf_bm=K7epMRm6KPiFF.alRXpWhLhiV9fncsCO7nvEm6z02KA-1786353386.1459756-1.0.1.1-nC5fGqow2e_2GCzv6dKGZamJX.xCCakEGfefMAQF6VUjwKO2FTtxMOUUV1Q4O.Il067v7vC.O03hLxGD.eUiD8c0cGbopJ7xHOkapsPBFkJ06xBKKNoNen_SEx.iXy7L; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 10 Aug 2026 09:46:26 GMT'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2026-08-10 09:16:26 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 429 Too Many Requests" 2026-08-10 09:16:26 [httpcore.http11] DEBUG: receive_response_body.started request= 2026-08-10 09:16:26 [httpcore.http11] DEBUG: receive_response_body.complete 2026-08-10 09:16:26 [httpcore.http11] DEBUG: response_closed.started 2026-08-10 09:16:26 [httpcore.http11] DEBUG: response_closed.complete 2026-08-10 09:16:26 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "429 Too Many Requests" Headers([('date', 'Mon, 10 Aug 2026 09:16:26 GMT'), ('content-type', 'application/json; charset=utf-8'), ('content-length', '283'), ('connection', 'keep-alive'), ('cf-ray', 'a28de6d7680a06f0-HKG'), ('cf-cache-status', 'DYNAMIC'), ('server', 'cloudflare'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('vary', 'Origin'), ('access-control-expose-headers', 'CF-Ray'), ('access-control-expose-headers', 'CF-Ray'), ('x-content-type-options', 'nosniff'), ('x-openai-proxy-wasm', 'v0.1'), ('x-request-id', 'req_7160f6b649c343ebbade729b1826141a'), ('set-cookie', '__cf_bm=K7epMRm6KPiFF.alRXpWhLhiV9fncsCO7nvEm6z02KA-1786353386.1459756-1.0.1.1-nC5fGqow2e_2GCzv6dKGZamJX.xCCakEGfefMAQF6VUjwKO2FTtxMOUUV1Q4O.Il067v7vC.O03hLxGD.eUiD8c0cGbopJ7xHOkapsPBFkJ06xBKKNoNen_SEx.iXy7L; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 10 Aug 2026 09:46:26 GMT'), ('alt-svc', 'h3=":443"; ma=86400')]) 2026-08-10 09:16:26 [openai._base_client] DEBUG: request_id: req_7160f6b649c343ebbade729b1826141a 2026-08-10 09:16:26 [openai._base_client] DEBUG: Encountered httpx.HTTPStatusError Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 2026-08-10 09:16:26 [openai._base_client] DEBUG: Retrying due to status code 429 2026-08-10 09:16:26 [openai._base_client] DEBUG: 2 retries left 2026-08-10 09:16:26 [openai._base_client] INFO: Retrying request to /chat/completions in 0.394021 seconds 2026-08-10 09:16:26 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': 'Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., \'the\', \'and\', \'is\') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: Trong xu thế chuyển đổi số, việc ứng dụng trí tuệ nhân tạo (AI) vào ngành ngân hàng không còn là điều mới lạ. Không đi theo cách tiếp cận công nghệ khô khan, TPBank tập trung tối ưu hóa trải nghiệm cá nhân hóa nhằm mang lại những giá trị sát sườn nhất cho khách hàng. T\'AioX không chỉ là một AI thông minh, mà là một chuyên gia ngân hàng số thấu hiểu thói quen chi tiêu và nhu cầu tài chính cá nhân, giúp mọi tương tác trên App TPBank trở nên tự nhiên và riêng biệt như một cuộc hội thoại giữa những người bạn. Khách hàng có thể trải nghiệm sự hỗ trợ toàn diện của T\'AioX thông qua bốn nhóm tính năng trọng tâm được thiết kế liền mạch trên ứng dụng. Thay vì phải tự mình lục tìm lịch sử giao dịch hay cộng trừ thủ công, người dùng giờ đây chỉ cần đặt những câu hỏi đơn giản như: "Tổng hợp chi tiêu 1 năm gần đây?", "Tìm các giao dịch chuyển tiền với NAM?" hay "Liệt kê các giao dịch hóa đơn?", hệ thống sẽ lập tức tổng hợp và trả về số liệu chính xác. T\'AioX cũng khéo léo hỗ trợ nhắc nhở các khoản nợ vay, hóa đơn định kỳ hay dư nợ thẻ tín dụng, giúp khách hàng luôn chủ động trong mọi kế hoạch chi tiêu. Bên cạnh đó, tính năng điều hướng thông minh (AI SmartSearch) giúp giảm thiểu tối đa thời gian tìm kiếm giữa hàng chục danh mục phức tạp. Khi khách hàng bày tỏ mong muốn như "Tôi muốn mở tiết kiệm", "Phí thường niên thẻ tín dụng là bao nhiêu?"; "Khoá thẻ tín dụng như thế nào" hoặc "Thanh toán hóa đơn ở đâu?", T\'AioX sẽ trực tiếp giải đáp và dẫn dắt họ tới đúng màn hình cần thiết mà không đòi hỏi phải ghi nhớ vị trí các tính năng. Sự đồng hành của T\'AioX còn thể hiện qua khả năng hỗ trợ khẩn cấp 24/7. Trong các tình huống cấp bách như chưa nhận được tiền chuyển khoản, cần khóa thẻ khẩn cấp hay gặp lỗi mã OTP, mọi vướng mắc sẽ được ghi nhận tức thì và điều hướng tới kênh xử lý hoặc tư vấn viên phù hợp nhất, đảm bảo luồng thông tin luôn thông suốt. Cuối cùng, để gia tăng thêm giá trị trải nghiệm, T\'AioX còn là trợ thủ đắc lực trong việc cập nhật các ưu đãi cá nhân hóa. Chỉ qua vài thao tác trò chuyện đơn giản, người dùng có thể khám phá ngay các chương trình giảm giá mua sắm, ẩm thực hay du lịch được thiết kế dựa trên chính thói quen chi tiêu của mình. Việc phát triển T\'AioX là một phần trong chiến lược dài hạn của TPBank nhằm mang đến một hệ sinh thái ngân hàng số thông minh và thân thiện. Thay vì yêu cầu khách hàng phải làm quen với những giao diện phức tạp, TPBank chọn cách để công nghệ tự thích nghi với ngôn ngữ và thói quen của người dùng. Sự ra đời của T\'AioX là trái ngọt từ hành trình bền bỉ của TPBank trong việc làm chủ trí tuệ nhân tạo. Không chỉ là một chatbot AI thông thường, T\'AioX được TPBank phát triển trên nền tảng AI đa mô hình (Multi-LLM Platform), cho phép linh hoạt ứng dụng những công nghệ trí tuệ nhân tạo tiên tiến hàng đầu thế giới như ChatGPT, Gemini và Grok. Tùy theo từng nhu cầu và tình huống, hệ thống sẽ tự động lựa chọn mô hình AI phù hợp để mang đến câu trả lời nhanh hơn, chính xác hơn và trải nghiệm tốt hơn cho người dùng. Đặc biệt, T\'AioX không chỉ đồng hành cùng khách hàng trên các kênh số mà còn là nền tảng AI phục vụ toàn bộ hoạt động của ngân hàng. Từ tư vấn sản phẩm, hỗ trợ giao dịch, chăm sóc khách hàng đến hỗ trợ cán bộ nhân viên tra cứu thông tin, xử lý nghiệp vụ, phân tích dữ liệu và nâng cao hiệu quả công việc, T\'AioX đều có thể đáp ứng trên cùng một nền tảng AI thống nhất. Thay vì xây dựng một chatbot, TPBank lựa chọn xây dựng một nền tảng AI có khả năng liên tục tiếp nhận và ứng dụng những công nghệ tiên tiến nhất. Điều này giúp T\'AioX không ngừng thông minh hơn theo thời gian, đảm bảo hiệu suất và độ an toàn ở mức cao, mang lại trải nghiệm ngày càng tốt hơn cho cả khách hàng và cán bộ nhân viên. Sự kiên trì trong việc lấy sự thấu hiểu làm trọng tâm đã giúp TPBank xuất sắc nhận giải thưởng "Ứng dụng AI tạo sinh (GenAI) xuất sắc nhất" (Best GenAI Application in Vietnam) và "Doanh nghiệp triển khai AI toàn diện nhất Việt Nam" (Best Enterprise Wide AI Technology Implementation in Vietnam) từ tổ chức uy tín The Asian Banker. Đối với TPBank, các giải thưởng quốc tế này là minh chứng cho việc đưa GenAI vượt xa vai trò của một chatbot thông thường để thực sự đồng hành cùng khách hàng. Đây cũng chính là lời cam kết để ngân hàng tiếp tục hoàn thiện Chuyên gia Ngân hàng số T\'AioX, biến mỗi hành trình tài chính trên App TPBank trở thành một trải nghiệm thông minh, an toàn và đậm chất cá nhân hóa. Sau giai đoạn thử nghiệm thành công, TPBank chính thức triển khai rộng rãi T\'AioX tới toàn bộ khách hàng trên phạm vi toàn quốc. Đây là cơ hội để mọi khách hàng của TPBank trải nghiệm một phong cách tài chính hoàn toàn mới, nơi mọi nhu cầu của bạn đều được lắng nghe và đáp ứng trong tích tắc. Hãy đăng nhập vào App TPBank ngay hôm nay để bắt đầu cuộc trò chuyện đầu tiên với "Chuyên gia Ngân hàng số" của riêng bạn!'}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2026-08-10 09:16:26 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2026-08-10 09:16:26 [httpcore.http11] DEBUG: send_request_headers.started request= 2026-08-10 09:16:26 [httpcore.http11] DEBUG: send_request_headers.complete 2026-08-10 09:16:26 [httpcore.http11] DEBUG: send_request_body.started request= 2026-08-10 09:16:26 [httpcore.http11] DEBUG: send_request_body.complete 2026-08-10 09:16:26 [httpcore.http11] DEBUG: receive_response_headers.started request= 2026-08-10 09:16:26 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 429, b'Too Many Requests', [(b'Date', b'Mon, 10 Aug 2026 09:16:26 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Content-Length', b'283'), (b'Connection', b'keep-alive'), (b'CF-Ray', b'a28de6db493506f0-HKG'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Origin'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'X-Content-Type-Options', b'nosniff'), (b'x-openai-proxy-wasm', b'v0.1'), (b'x-request-id', b'req_efdef7e80ce04e538c597f8936e9bdbc'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2026-08-10 09:16:26 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 429 Too Many Requests" 2026-08-10 09:16:26 [httpcore.http11] DEBUG: receive_response_body.started request= 2026-08-10 09:16:26 [httpcore.http11] DEBUG: receive_response_body.complete 2026-08-10 09:16:26 [httpcore.http11] DEBUG: response_closed.started 2026-08-10 09:16:26 [httpcore.http11] DEBUG: response_closed.complete 2026-08-10 09:16:26 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "429 Too Many Requests" Headers([('date', 'Mon, 10 Aug 2026 09:16:26 GMT'), ('content-type', 'application/json; charset=utf-8'), ('content-length', '283'), ('connection', 'keep-alive'), ('cf-ray', 'a28de6db493506f0-HKG'), ('cf-cache-status', 'DYNAMIC'), ('server', 'cloudflare'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('vary', 'Origin'), ('access-control-expose-headers', 'CF-Ray'), ('access-control-expose-headers', 'CF-Ray'), ('x-content-type-options', 'nosniff'), ('x-openai-proxy-wasm', 'v0.1'), ('x-request-id', 'req_efdef7e80ce04e538c597f8936e9bdbc'), ('alt-svc', 'h3=":443"; ma=86400')]) 2026-08-10 09:16:26 [openai._base_client] DEBUG: request_id: req_efdef7e80ce04e538c597f8936e9bdbc 2026-08-10 09:16:26 [openai._base_client] DEBUG: Encountered httpx.HTTPStatusError Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 2026-08-10 09:16:26 [openai._base_client] DEBUG: Retrying due to status code 429 2026-08-10 09:16:26 [openai._base_client] DEBUG: 1 retry left 2026-08-10 09:16:26 [openai._base_client] INFO: Retrying request to /chat/completions in 0.910620 seconds 2026-08-10 09:16:27 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': 'Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., \'the\', \'and\', \'is\') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: Trong xu thế chuyển đổi số, việc ứng dụng trí tuệ nhân tạo (AI) vào ngành ngân hàng không còn là điều mới lạ. Không đi theo cách tiếp cận công nghệ khô khan, TPBank tập trung tối ưu hóa trải nghiệm cá nhân hóa nhằm mang lại những giá trị sát sườn nhất cho khách hàng. T\'AioX không chỉ là một AI thông minh, mà là một chuyên gia ngân hàng số thấu hiểu thói quen chi tiêu và nhu cầu tài chính cá nhân, giúp mọi tương tác trên App TPBank trở nên tự nhiên và riêng biệt như một cuộc hội thoại giữa những người bạn. Khách hàng có thể trải nghiệm sự hỗ trợ toàn diện của T\'AioX thông qua bốn nhóm tính năng trọng tâm được thiết kế liền mạch trên ứng dụng. Thay vì phải tự mình lục tìm lịch sử giao dịch hay cộng trừ thủ công, người dùng giờ đây chỉ cần đặt những câu hỏi đơn giản như: "Tổng hợp chi tiêu 1 năm gần đây?", "Tìm các giao dịch chuyển tiền với NAM?" hay "Liệt kê các giao dịch hóa đơn?", hệ thống sẽ lập tức tổng hợp và trả về số liệu chính xác. T\'AioX cũng khéo léo hỗ trợ nhắc nhở các khoản nợ vay, hóa đơn định kỳ hay dư nợ thẻ tín dụng, giúp khách hàng luôn chủ động trong mọi kế hoạch chi tiêu. Bên cạnh đó, tính năng điều hướng thông minh (AI SmartSearch) giúp giảm thiểu tối đa thời gian tìm kiếm giữa hàng chục danh mục phức tạp. Khi khách hàng bày tỏ mong muốn như "Tôi muốn mở tiết kiệm", "Phí thường niên thẻ tín dụng là bao nhiêu?"; "Khoá thẻ tín dụng như thế nào" hoặc "Thanh toán hóa đơn ở đâu?", T\'AioX sẽ trực tiếp giải đáp và dẫn dắt họ tới đúng màn hình cần thiết mà không đòi hỏi phải ghi nhớ vị trí các tính năng. Sự đồng hành của T\'AioX còn thể hiện qua khả năng hỗ trợ khẩn cấp 24/7. Trong các tình huống cấp bách như chưa nhận được tiền chuyển khoản, cần khóa thẻ khẩn cấp hay gặp lỗi mã OTP, mọi vướng mắc sẽ được ghi nhận tức thì và điều hướng tới kênh xử lý hoặc tư vấn viên phù hợp nhất, đảm bảo luồng thông tin luôn thông suốt. Cuối cùng, để gia tăng thêm giá trị trải nghiệm, T\'AioX còn là trợ thủ đắc lực trong việc cập nhật các ưu đãi cá nhân hóa. Chỉ qua vài thao tác trò chuyện đơn giản, người dùng có thể khám phá ngay các chương trình giảm giá mua sắm, ẩm thực hay du lịch được thiết kế dựa trên chính thói quen chi tiêu của mình. Việc phát triển T\'AioX là một phần trong chiến lược dài hạn của TPBank nhằm mang đến một hệ sinh thái ngân hàng số thông minh và thân thiện. Thay vì yêu cầu khách hàng phải làm quen với những giao diện phức tạp, TPBank chọn cách để công nghệ tự thích nghi với ngôn ngữ và thói quen của người dùng. Sự ra đời của T\'AioX là trái ngọt từ hành trình bền bỉ của TPBank trong việc làm chủ trí tuệ nhân tạo. Không chỉ là một chatbot AI thông thường, T\'AioX được TPBank phát triển trên nền tảng AI đa mô hình (Multi-LLM Platform), cho phép linh hoạt ứng dụng những công nghệ trí tuệ nhân tạo tiên tiến hàng đầu thế giới như ChatGPT, Gemini và Grok. Tùy theo từng nhu cầu và tình huống, hệ thống sẽ tự động lựa chọn mô hình AI phù hợp để mang đến câu trả lời nhanh hơn, chính xác hơn và trải nghiệm tốt hơn cho người dùng. Đặc biệt, T\'AioX không chỉ đồng hành cùng khách hàng trên các kênh số mà còn là nền tảng AI phục vụ toàn bộ hoạt động của ngân hàng. Từ tư vấn sản phẩm, hỗ trợ giao dịch, chăm sóc khách hàng đến hỗ trợ cán bộ nhân viên tra cứu thông tin, xử lý nghiệp vụ, phân tích dữ liệu và nâng cao hiệu quả công việc, T\'AioX đều có thể đáp ứng trên cùng một nền tảng AI thống nhất. Thay vì xây dựng một chatbot, TPBank lựa chọn xây dựng một nền tảng AI có khả năng liên tục tiếp nhận và ứng dụng những công nghệ tiên tiến nhất. Điều này giúp T\'AioX không ngừng thông minh hơn theo thời gian, đảm bảo hiệu suất và độ an toàn ở mức cao, mang lại trải nghiệm ngày càng tốt hơn cho cả khách hàng và cán bộ nhân viên. Sự kiên trì trong việc lấy sự thấu hiểu làm trọng tâm đã giúp TPBank xuất sắc nhận giải thưởng "Ứng dụng AI tạo sinh (GenAI) xuất sắc nhất" (Best GenAI Application in Vietnam) và "Doanh nghiệp triển khai AI toàn diện nhất Việt Nam" (Best Enterprise Wide AI Technology Implementation in Vietnam) từ tổ chức uy tín The Asian Banker. Đối với TPBank, các giải thưởng quốc tế này là minh chứng cho việc đưa GenAI vượt xa vai trò của một chatbot thông thường để thực sự đồng hành cùng khách hàng. Đây cũng chính là lời cam kết để ngân hàng tiếp tục hoàn thiện Chuyên gia Ngân hàng số T\'AioX, biến mỗi hành trình tài chính trên App TPBank trở thành một trải nghiệm thông minh, an toàn và đậm chất cá nhân hóa. Sau giai đoạn thử nghiệm thành công, TPBank chính thức triển khai rộng rãi T\'AioX tới toàn bộ khách hàng trên phạm vi toàn quốc. Đây là cơ hội để mọi khách hàng của TPBank trải nghiệm một phong cách tài chính hoàn toàn mới, nơi mọi nhu cầu của bạn đều được lắng nghe và đáp ứng trong tích tắc. Hãy đăng nhập vào App TPBank ngay hôm nay để bắt đầu cuộc trò chuyện đầu tiên với "Chuyên gia Ngân hàng số" của riêng bạn!'}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2026-08-10 09:16:27 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2026-08-10 09:16:27 [httpcore.http11] DEBUG: send_request_headers.started request= 2026-08-10 09:16:27 [httpcore.http11] DEBUG: send_request_headers.complete 2026-08-10 09:16:27 [httpcore.http11] DEBUG: send_request_body.started request= 2026-08-10 09:16:27 [httpcore.http11] DEBUG: send_request_body.complete 2026-08-10 09:16:27 [httpcore.http11] DEBUG: receive_response_headers.started request= 2026-08-10 09:16:28 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 429, b'Too Many Requests', [(b'Date', b'Mon, 10 Aug 2026 09:16:28 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Content-Length', b'283'), (b'Connection', b'keep-alive'), (b'CF-Ray', b'a28de6e25bed06f0-HKG'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Origin'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'X-Content-Type-Options', b'nosniff'), (b'x-openai-proxy-wasm', b'v0.1'), (b'x-request-id', b'req_1322d0bacd7740dfac59a399cec7aa7b'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2026-08-10 09:16:28 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 429 Too Many Requests" 2026-08-10 09:16:28 [httpcore.http11] DEBUG: receive_response_body.started request= 2026-08-10 09:16:28 [httpcore.http11] DEBUG: receive_response_body.complete 2026-08-10 09:16:28 [httpcore.http11] DEBUG: response_closed.started 2026-08-10 09:16:28 [httpcore.http11] DEBUG: response_closed.complete 2026-08-10 09:16:28 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "429 Too Many Requests" Headers([('date', 'Mon, 10 Aug 2026 09:16:28 GMT'), ('content-type', 'application/json; charset=utf-8'), ('content-length', '283'), ('connection', 'keep-alive'), ('cf-ray', 'a28de6e25bed06f0-HKG'), ('cf-cache-status', 'DYNAMIC'), ('server', 'cloudflare'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('vary', 'Origin'), ('access-control-expose-headers', 'CF-Ray'), ('access-control-expose-headers', 'CF-Ray'), ('x-content-type-options', 'nosniff'), ('x-openai-proxy-wasm', 'v0.1'), ('x-request-id', 'req_1322d0bacd7740dfac59a399cec7aa7b'), ('alt-svc', 'h3=":443"; ma=86400')]) 2026-08-10 09:16:28 [openai._base_client] DEBUG: request_id: req_1322d0bacd7740dfac59a399cec7aa7b 2026-08-10 09:16:28 [openai._base_client] DEBUG: Encountered httpx.HTTPStatusError Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 2026-08-10 09:16:28 [openai._base_client] DEBUG: Re-raising status error 2026-08-10 09:16:28 [scrapy.core.scraper] ERROR: Spider error processing (referer: https://thanhnien.vn/tin-moi.htm) Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/scrapy/utils/defer.py", line 279, in iter_errback yield next(it) ^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/utils/python.py", line 350, in __next__ return next(self.data) ^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/utils/python.py", line 350, in __next__ return next(self.data) ^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/offsite.py", line 28, in return (r for r in result or () if self._filter(r, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/referer.py", line 352, in return (self._set_referer(r, response) for r in result or ()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/urllength.py", line 27, in return (r for r in result or () if self._filter(r, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/depth.py", line 31, in return (r for r in result or () if self._filter(r, response, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/opt/scrapy_projects/news_scraper/spiders/thanhnien_timestamp_spider.py", line 95, in parse_article item["tags"] = item.extract_tags() ^^^^^^^^^^^^^^^^^^^ File "/opt/scrapy_projects/news_scraper/items.py", line 51, in extract_tags response = client.chat.completions.create( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_utils/_utils.py", line 279, in wrapper return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/resources/chat/completions/completions.py", line 914, in create return self._post( ^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1242, in post return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 919, in request return self._request( ^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1008, in _request return self._retry_request( ^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1057, in _retry_request return self._request( ^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1008, in _request return self._retry_request( ^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1057, in _retry_request return self._request( ^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1023, in _request raise self._make_status_error_from_response(err.response) from None openai.RateLimitError: Error code: 429 - {'error': {'message': 'You have no credits remaining. Add credits to continue using the API at https://platform.openai.com/settings/organization/billing/.', 'type': 'insufficient_quota', 'param': None, 'code': 'credit_balance_exhausted'}} 2026-08-10 09:16:28 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://thanhnien.vn/tin-moi.htm) 2026-08-10 09:16:28 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': "Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., 'the', 'and', 'is') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: Báo Thanh Niên cập nhật nhanh nhất kết quả xổ số miền Nam ngày 10 tháng 8 ; kết quả xổ số miền Bắc, kết quả xổ số miền Trung, kết quả xổ số điện toán trực tiếp nhanh nhất hôm nay thứ hai ngày 10.8.2026. Xổ số TP.HCM, Đồng Tháp, Cà Mau, Huế, Phú Yên... XSMN thứ hai ngày 10.8.2026 Ký hiệu trúng đặc biệt: Mời bạn đọc xem kết quả xổ số (KQXS) miền Bắc (XSMB), kết quả xổ số miền Nam (XSMN), kết quả xổ số miền Trung (XSMT) được cập nhật trên Báo Thanh Niên mỗi ngày."}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2026-08-10 09:16:28 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2026-08-10 09:16:28 [httpcore.connection] DEBUG: connect_tcp.started host='api.openai.com' port=443 local_address=None timeout=900 socket_options=None 2026-08-10 09:16:28 [httpcore.connection] DEBUG: connect_tcp.complete return_value= 2026-08-10 09:16:28 [httpcore.connection] DEBUG: start_tls.started ssl_context= server_hostname='api.openai.com' timeout=900 2026-08-10 09:16:28 [httpcore.connection] DEBUG: start_tls.complete return_value= 2026-08-10 09:16:28 [httpcore.http11] DEBUG: send_request_headers.started request= 2026-08-10 09:16:28 [httpcore.http11] DEBUG: send_request_headers.complete 2026-08-10 09:16:28 [httpcore.http11] DEBUG: send_request_body.started request= 2026-08-10 09:16:28 [httpcore.http11] DEBUG: send_request_body.complete 2026-08-10 09:16:28 [httpcore.http11] DEBUG: receive_response_headers.started request= 2026-08-10 09:16:28 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 429, b'Too Many Requests', [(b'Date', b'Mon, 10 Aug 2026 09:16:28 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Content-Length', b'283'), (b'Connection', b'keep-alive'), (b'CF-Ray', b'a28de6e7bd0377c5-HKG'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Origin'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'X-Content-Type-Options', b'nosniff'), (b'x-openai-proxy-wasm', b'v0.1'), (b'x-request-id', b'req_cf7c7b95c15f4770a8f28e94850aa7c1'), (b'set-cookie', b'__cf_bm=1VYgjDbaF6bUcorGQHis9eDCHrOtQrV4FT5J6ODbiKY-1786353388.7556047-1.0.1.1-XA0iu2ggRmFvTtj2MgRo7.KW3uYEOq3pMrnwavq_PdOlWtzNUpe7G1WSuyULxaJdsT1EjwRexJu1qtZDD1.IlBki_ksNtBQKtd.K3OIQMVAQiypZUjE7swTgN609PJZe; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 10 Aug 2026 09:46:28 GMT'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2026-08-10 09:16:28 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 429 Too Many Requests" 2026-08-10 09:16:28 [httpcore.http11] DEBUG: receive_response_body.started request= 2026-08-10 09:16:28 [httpcore.http11] DEBUG: receive_response_body.complete 2026-08-10 09:16:28 [httpcore.http11] DEBUG: response_closed.started 2026-08-10 09:16:28 [httpcore.http11] DEBUG: response_closed.complete 2026-08-10 09:16:28 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "429 Too Many Requests" Headers([('date', 'Mon, 10 Aug 2026 09:16:28 GMT'), ('content-type', 'application/json; charset=utf-8'), ('content-length', '283'), ('connection', 'keep-alive'), ('cf-ray', 'a28de6e7bd0377c5-HKG'), ('cf-cache-status', 'DYNAMIC'), ('server', 'cloudflare'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('vary', 'Origin'), ('access-control-expose-headers', 'CF-Ray'), ('access-control-expose-headers', 'CF-Ray'), ('x-content-type-options', 'nosniff'), ('x-openai-proxy-wasm', 'v0.1'), ('x-request-id', 'req_cf7c7b95c15f4770a8f28e94850aa7c1'), ('set-cookie', '__cf_bm=1VYgjDbaF6bUcorGQHis9eDCHrOtQrV4FT5J6ODbiKY-1786353388.7556047-1.0.1.1-XA0iu2ggRmFvTtj2MgRo7.KW3uYEOq3pMrnwavq_PdOlWtzNUpe7G1WSuyULxaJdsT1EjwRexJu1qtZDD1.IlBki_ksNtBQKtd.K3OIQMVAQiypZUjE7swTgN609PJZe; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 10 Aug 2026 09:46:28 GMT'), ('alt-svc', 'h3=":443"; ma=86400')]) 2026-08-10 09:16:28 [openai._base_client] DEBUG: request_id: req_cf7c7b95c15f4770a8f28e94850aa7c1 2026-08-10 09:16:28 [openai._base_client] DEBUG: Encountered httpx.HTTPStatusError Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 2026-08-10 09:16:28 [openai._base_client] DEBUG: Retrying due to status code 429 2026-08-10 09:16:28 [openai._base_client] DEBUG: 2 retries left 2026-08-10 09:16:28 [openai._base_client] INFO: Retrying request to /chat/completions in 0.448609 seconds 2026-08-10 09:16:29 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': "Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., 'the', 'and', 'is') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: Báo Thanh Niên cập nhật nhanh nhất kết quả xổ số miền Nam ngày 10 tháng 8 ; kết quả xổ số miền Bắc, kết quả xổ số miền Trung, kết quả xổ số điện toán trực tiếp nhanh nhất hôm nay thứ hai ngày 10.8.2026. Xổ số TP.HCM, Đồng Tháp, Cà Mau, Huế, Phú Yên... XSMN thứ hai ngày 10.8.2026 Ký hiệu trúng đặc biệt: Mời bạn đọc xem kết quả xổ số (KQXS) miền Bắc (XSMB), kết quả xổ số miền Nam (XSMN), kết quả xổ số miền Trung (XSMT) được cập nhật trên Báo Thanh Niên mỗi ngày."}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2026-08-10 09:16:29 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2026-08-10 09:16:29 [httpcore.http11] DEBUG: send_request_headers.started request= 2026-08-10 09:16:29 [httpcore.http11] DEBUG: send_request_headers.complete 2026-08-10 09:16:29 [httpcore.http11] DEBUG: send_request_body.started request= 2026-08-10 09:16:29 [httpcore.http11] DEBUG: send_request_body.complete 2026-08-10 09:16:29 [httpcore.http11] DEBUG: receive_response_headers.started request= 2026-08-10 09:16:29 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 429, b'Too Many Requests', [(b'Date', b'Mon, 10 Aug 2026 09:16:29 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Content-Length', b'283'), (b'Connection', b'keep-alive'), (b'CF-Ray', b'a28de6ebda6b77c5-HKG'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Origin'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'X-Content-Type-Options', b'nosniff'), (b'x-openai-proxy-wasm', b'v0.1'), (b'x-request-id', b'req_bfb139130feb4649b26e8d6b08911fc4'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2026-08-10 09:16:29 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 429 Too Many Requests" 2026-08-10 09:16:29 [httpcore.http11] DEBUG: receive_response_body.started request= 2026-08-10 09:16:29 [httpcore.http11] DEBUG: receive_response_body.complete 2026-08-10 09:16:29 [httpcore.http11] DEBUG: response_closed.started 2026-08-10 09:16:29 [httpcore.http11] DEBUG: response_closed.complete 2026-08-10 09:16:29 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "429 Too Many Requests" Headers([('date', 'Mon, 10 Aug 2026 09:16:29 GMT'), ('content-type', 'application/json; charset=utf-8'), ('content-length', '283'), ('connection', 'keep-alive'), ('cf-ray', 'a28de6ebda6b77c5-HKG'), ('cf-cache-status', 'DYNAMIC'), ('server', 'cloudflare'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('vary', 'Origin'), ('access-control-expose-headers', 'CF-Ray'), ('access-control-expose-headers', 'CF-Ray'), ('x-content-type-options', 'nosniff'), ('x-openai-proxy-wasm', 'v0.1'), ('x-request-id', 'req_bfb139130feb4649b26e8d6b08911fc4'), ('alt-svc', 'h3=":443"; ma=86400')]) 2026-08-10 09:16:29 [openai._base_client] DEBUG: request_id: req_bfb139130feb4649b26e8d6b08911fc4 2026-08-10 09:16:29 [openai._base_client] DEBUG: Encountered httpx.HTTPStatusError Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 2026-08-10 09:16:29 [openai._base_client] DEBUG: Retrying due to status code 429 2026-08-10 09:16:29 [openai._base_client] DEBUG: 1 retry left 2026-08-10 09:16:29 [openai._base_client] INFO: Retrying request to /chat/completions in 0.961818 seconds 2026-08-10 09:16:30 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': "Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., 'the', 'and', 'is') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: Báo Thanh Niên cập nhật nhanh nhất kết quả xổ số miền Nam ngày 10 tháng 8 ; kết quả xổ số miền Bắc, kết quả xổ số miền Trung, kết quả xổ số điện toán trực tiếp nhanh nhất hôm nay thứ hai ngày 10.8.2026. Xổ số TP.HCM, Đồng Tháp, Cà Mau, Huế, Phú Yên... XSMN thứ hai ngày 10.8.2026 Ký hiệu trúng đặc biệt: Mời bạn đọc xem kết quả xổ số (KQXS) miền Bắc (XSMB), kết quả xổ số miền Nam (XSMN), kết quả xổ số miền Trung (XSMT) được cập nhật trên Báo Thanh Niên mỗi ngày."}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2026-08-10 09:16:30 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2026-08-10 09:16:30 [httpcore.http11] DEBUG: send_request_headers.started request= 2026-08-10 09:16:30 [httpcore.http11] DEBUG: send_request_headers.complete 2026-08-10 09:16:30 [httpcore.http11] DEBUG: send_request_body.started request= 2026-08-10 09:16:30 [httpcore.http11] DEBUG: send_request_body.complete 2026-08-10 09:16:30 [httpcore.http11] DEBUG: receive_response_headers.started request= 2026-08-10 09:16:30 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 429, b'Too Many Requests', [(b'Date', b'Mon, 10 Aug 2026 09:16:30 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Content-Length', b'283'), (b'Connection', b'keep-alive'), (b'CF-Ray', b'a28de6f358df77c5-HKG'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Origin'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'X-Content-Type-Options', b'nosniff'), (b'x-openai-proxy-wasm', b'v0.1'), (b'x-request-id', b'req_c4cbc4f0102c443bbcf21b535f0be338'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2026-08-10 09:16:30 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 429 Too Many Requests" 2026-08-10 09:16:30 [httpcore.http11] DEBUG: receive_response_body.started request= 2026-08-10 09:16:30 [httpcore.http11] DEBUG: receive_response_body.complete 2026-08-10 09:16:30 [httpcore.http11] DEBUG: response_closed.started 2026-08-10 09:16:30 [httpcore.http11] DEBUG: response_closed.complete 2026-08-10 09:16:30 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "429 Too Many Requests" Headers([('date', 'Mon, 10 Aug 2026 09:16:30 GMT'), ('content-type', 'application/json; charset=utf-8'), ('content-length', '283'), ('connection', 'keep-alive'), ('cf-ray', 'a28de6f358df77c5-HKG'), ('cf-cache-status', 'DYNAMIC'), ('server', 'cloudflare'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('vary', 'Origin'), ('access-control-expose-headers', 'CF-Ray'), ('access-control-expose-headers', 'CF-Ray'), ('x-content-type-options', 'nosniff'), ('x-openai-proxy-wasm', 'v0.1'), ('x-request-id', 'req_c4cbc4f0102c443bbcf21b535f0be338'), ('alt-svc', 'h3=":443"; ma=86400')]) 2026-08-10 09:16:30 [openai._base_client] DEBUG: request_id: req_c4cbc4f0102c443bbcf21b535f0be338 2026-08-10 09:16:30 [openai._base_client] DEBUG: Encountered httpx.HTTPStatusError Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 2026-08-10 09:16:30 [openai._base_client] DEBUG: Re-raising status error 2026-08-10 09:16:30 [scrapy.core.scraper] ERROR: Spider error processing (referer: https://thanhnien.vn/tin-moi.htm) Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/scrapy/utils/defer.py", line 279, in iter_errback yield next(it) ^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/utils/python.py", line 350, in __next__ return next(self.data) ^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/utils/python.py", line 350, in __next__ return next(self.data) ^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/offsite.py", line 28, in return (r for r in result or () if self._filter(r, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/referer.py", line 352, in return (self._set_referer(r, response) for r in result or ()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/urllength.py", line 27, in return (r for r in result or () if self._filter(r, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/depth.py", line 31, in return (r for r in result or () if self._filter(r, response, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/opt/scrapy_projects/news_scraper/spiders/thanhnien_timestamp_spider.py", line 95, in parse_article item["tags"] = item.extract_tags() ^^^^^^^^^^^^^^^^^^^ File "/opt/scrapy_projects/news_scraper/items.py", line 51, in extract_tags response = client.chat.completions.create( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_utils/_utils.py", line 279, in wrapper return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/resources/chat/completions/completions.py", line 914, in create return self._post( ^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1242, in post return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 919, in request return self._request( ^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1008, in _request return self._retry_request( ^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1057, in _retry_request return self._request( ^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1008, in _request return self._retry_request( ^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1057, in _retry_request return self._request( ^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1023, in _request raise self._make_status_error_from_response(err.response) from None openai.RateLimitError: Error code: 429 - {'error': {'message': 'You have no credits remaining. Add credits to continue using the API at https://platform.openai.com/settings/organization/billing/.', 'type': 'insufficient_quota', 'param': None, 'code': 'credit_balance_exhausted'}} 2026-08-10 09:16:30 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://thanhnien.vn/tin-moi.htm) 2026-08-10 09:16:31 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': 'Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., \'the\', \'and\', \'is\') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: Ngày 10.8, bà Trần Thị Oanh, Chủ tịch UBND xã Cồn Tiên (Quảng Trị), cho biết địa phương đang phối hợp với lực lượng chức năng tìm kiếm và xác minh thông tin liên quan đến vị trí mộ liệt sĩ tại địa bàn. Cụ thể, vào ngày 8.5.1967, tại khu vực chân đồi Cồn Tiên đã diễn ra trận chiến của lực lượng đặc công nhằm chọc thủng "hàng rào điện tử McNamara". Trong trận chiến này, nhiều cán bộ, chiến sĩ quân ta đã hy sinh. Theo một số nguồn tin thu thập được, vào thời điểm trên, các đơn vị của quân ta, gồm: Đại đội 2, 3 thuộc Tiểu đoàn 31, Đặc công của Quân khu 4; Đại đội đặc công Vĩnh Linh; Đại đội đặc công Quảng Bình; Đại đội đặc công Núi Quyết thuộc Đoàn Thu Bồn và Tiểu đoàn 4, Trung đoàn 812, Sư đoàn 324; Phân đội súng phun lửa thuộc Bộ đội hóa học đã tổ chức tiến công căn cứ Cồn Tiên. Trận đánh này đã có 173 chiến sĩ hy sinh và nghi được chôn ở một rãnh dài khoảng 60 m ở khu vực nói trên. UBND xã Cồn Tiên cùng các cơ quan chức năng đã triển khai xác minh, tìm kiếm nhưng đến nay chưa xác định được vị trí cụ thể. Để tiếp tục xác minh vị trí, UBND xã Cồn Tiên đang tìm kiếm những người từng tham gia chiến đấu trực tiếp tại chiến trường nói trên hoặc những người biết thông tin về việc chôn cất các liệt sĩ sau trận đánh ngày 8.5.1967. Liên quan đến khu vực nghi có một liệt sĩ tại xã Cồn Tiên, Văn phòng Ban Chỉ đạo quốc gia về tìm kiếm, quy tập và xác định danh tính hài cốt liệt sĩ đã đề nghị tỉnh Quảng Trị chỉ đạo các cơ quan chuyên môn phối hợp với địa phương khẩn trương rà soát, tổng hợp hồ sơ, tài liệu liên quan đến trận chiến đấu ngày 8.5.1967 tại căn cứ Cồn Tiên. Đồng thời, đẩy mạnh tìm kiếm nhân chứng lịch sử, phân tích, hệ thống hóa những thông tin thu thập được và kết hợp thăm dò bằng thiết bị radar xuyên đất để khoanh vùng những vị trí có khả năng tồn tại mộ liệt sĩ tập thể. UBND xã Cồn Tiên cùng Sư đoàn 968 cho biết: Những thông tin nhỏ nhất đều sẽ góp phần quan trọng để đưa các liệt sĩ về với quê hương. Mọi thông tin xin gửi về Phòng Chính trị, Sư đoàn 968 (trụ sở tại phường Đông Hà) hoặc liên hệ trung tá Lê Trường Giang, Chính trị viên Đội quy tập thuộc Sư đoàn 968, qua số điện thoại: 0985.306.448, hoặc trung tá Cao Xuân Cường, Đội trưởng Đội quy tập, qua số điện thoại: 0977.037.109.'}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2026-08-10 09:16:31 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2026-08-10 09:16:31 [httpcore.connection] DEBUG: connect_tcp.started host='api.openai.com' port=443 local_address=None timeout=900 socket_options=None 2026-08-10 09:16:31 [httpcore.connection] DEBUG: connect_tcp.complete return_value= 2026-08-10 09:16:31 [httpcore.connection] DEBUG: start_tls.started ssl_context= server_hostname='api.openai.com' timeout=900 2026-08-10 09:16:31 [httpcore.connection] DEBUG: start_tls.complete return_value= 2026-08-10 09:16:31 [httpcore.http11] DEBUG: send_request_headers.started request= 2026-08-10 09:16:31 [httpcore.http11] DEBUG: send_request_headers.complete 2026-08-10 09:16:31 [httpcore.http11] DEBUG: send_request_body.started request= 2026-08-10 09:16:31 [httpcore.http11] DEBUG: send_request_body.complete 2026-08-10 09:16:31 [httpcore.http11] DEBUG: receive_response_headers.started request= 2026-08-10 09:16:31 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 429, b'Too Many Requests', [(b'Date', b'Mon, 10 Aug 2026 09:16:31 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Content-Length', b'283'), (b'Connection', b'keep-alive'), (b'CF-Ray', b'a28de6f688bb9b15-HKG'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Origin'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'X-Content-Type-Options', b'nosniff'), (b'x-openai-proxy-wasm', b'v0.1'), (b'x-request-id', b'req_ce84bcd2b1154ca6a6ed39a6d23578a7'), (b'set-cookie', b'__cf_bm=5TgPCm68XEhNdWQuZfPu2sBMqDLbiYbWqGnAh1lSLRg-1786353391.124792-1.0.1.1-oIAnkOYIYvpff2KDOncgk1uZCJoYI0sm8fBCSYKr7cvSJXgYh5BTNm91SW4OPCKu6wal2Xjmn3hrYAR6pQ6zfszwYjxWGGqwCsp5cN9BL0aHaoB6sl8nCMgwy3rbjkGU; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 10 Aug 2026 09:46:31 GMT'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2026-08-10 09:16:31 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 429 Too Many Requests" 2026-08-10 09:16:31 [httpcore.http11] DEBUG: receive_response_body.started request= 2026-08-10 09:16:31 [httpcore.http11] DEBUG: receive_response_body.complete 2026-08-10 09:16:31 [httpcore.http11] DEBUG: response_closed.started 2026-08-10 09:16:31 [httpcore.http11] DEBUG: response_closed.complete 2026-08-10 09:16:31 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "429 Too Many Requests" Headers([('date', 'Mon, 10 Aug 2026 09:16:31 GMT'), ('content-type', 'application/json; charset=utf-8'), ('content-length', '283'), ('connection', 'keep-alive'), ('cf-ray', 'a28de6f688bb9b15-HKG'), ('cf-cache-status', 'DYNAMIC'), ('server', 'cloudflare'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('vary', 'Origin'), ('access-control-expose-headers', 'CF-Ray'), ('access-control-expose-headers', 'CF-Ray'), ('x-content-type-options', 'nosniff'), ('x-openai-proxy-wasm', 'v0.1'), ('x-request-id', 'req_ce84bcd2b1154ca6a6ed39a6d23578a7'), ('set-cookie', '__cf_bm=5TgPCm68XEhNdWQuZfPu2sBMqDLbiYbWqGnAh1lSLRg-1786353391.124792-1.0.1.1-oIAnkOYIYvpff2KDOncgk1uZCJoYI0sm8fBCSYKr7cvSJXgYh5BTNm91SW4OPCKu6wal2Xjmn3hrYAR6pQ6zfszwYjxWGGqwCsp5cN9BL0aHaoB6sl8nCMgwy3rbjkGU; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 10 Aug 2026 09:46:31 GMT'), ('alt-svc', 'h3=":443"; ma=86400')]) 2026-08-10 09:16:31 [openai._base_client] DEBUG: request_id: req_ce84bcd2b1154ca6a6ed39a6d23578a7 2026-08-10 09:16:31 [openai._base_client] DEBUG: Encountered httpx.HTTPStatusError Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 2026-08-10 09:16:31 [openai._base_client] DEBUG: Retrying due to status code 429 2026-08-10 09:16:31 [openai._base_client] DEBUG: 2 retries left 2026-08-10 09:16:31 [openai._base_client] INFO: Retrying request to /chat/completions in 0.460750 seconds 2026-08-10 09:16:31 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': 'Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., \'the\', \'and\', \'is\') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: Ngày 10.8, bà Trần Thị Oanh, Chủ tịch UBND xã Cồn Tiên (Quảng Trị), cho biết địa phương đang phối hợp với lực lượng chức năng tìm kiếm và xác minh thông tin liên quan đến vị trí mộ liệt sĩ tại địa bàn. Cụ thể, vào ngày 8.5.1967, tại khu vực chân đồi Cồn Tiên đã diễn ra trận chiến của lực lượng đặc công nhằm chọc thủng "hàng rào điện tử McNamara". Trong trận chiến này, nhiều cán bộ, chiến sĩ quân ta đã hy sinh. Theo một số nguồn tin thu thập được, vào thời điểm trên, các đơn vị của quân ta, gồm: Đại đội 2, 3 thuộc Tiểu đoàn 31, Đặc công của Quân khu 4; Đại đội đặc công Vĩnh Linh; Đại đội đặc công Quảng Bình; Đại đội đặc công Núi Quyết thuộc Đoàn Thu Bồn và Tiểu đoàn 4, Trung đoàn 812, Sư đoàn 324; Phân đội súng phun lửa thuộc Bộ đội hóa học đã tổ chức tiến công căn cứ Cồn Tiên. Trận đánh này đã có 173 chiến sĩ hy sinh và nghi được chôn ở một rãnh dài khoảng 60 m ở khu vực nói trên. UBND xã Cồn Tiên cùng các cơ quan chức năng đã triển khai xác minh, tìm kiếm nhưng đến nay chưa xác định được vị trí cụ thể. Để tiếp tục xác minh vị trí, UBND xã Cồn Tiên đang tìm kiếm những người từng tham gia chiến đấu trực tiếp tại chiến trường nói trên hoặc những người biết thông tin về việc chôn cất các liệt sĩ sau trận đánh ngày 8.5.1967. Liên quan đến khu vực nghi có một liệt sĩ tại xã Cồn Tiên, Văn phòng Ban Chỉ đạo quốc gia về tìm kiếm, quy tập và xác định danh tính hài cốt liệt sĩ đã đề nghị tỉnh Quảng Trị chỉ đạo các cơ quan chuyên môn phối hợp với địa phương khẩn trương rà soát, tổng hợp hồ sơ, tài liệu liên quan đến trận chiến đấu ngày 8.5.1967 tại căn cứ Cồn Tiên. Đồng thời, đẩy mạnh tìm kiếm nhân chứng lịch sử, phân tích, hệ thống hóa những thông tin thu thập được và kết hợp thăm dò bằng thiết bị radar xuyên đất để khoanh vùng những vị trí có khả năng tồn tại mộ liệt sĩ tập thể. UBND xã Cồn Tiên cùng Sư đoàn 968 cho biết: Những thông tin nhỏ nhất đều sẽ góp phần quan trọng để đưa các liệt sĩ về với quê hương. Mọi thông tin xin gửi về Phòng Chính trị, Sư đoàn 968 (trụ sở tại phường Đông Hà) hoặc liên hệ trung tá Lê Trường Giang, Chính trị viên Đội quy tập thuộc Sư đoàn 968, qua số điện thoại: 0985.306.448, hoặc trung tá Cao Xuân Cường, Đội trưởng Đội quy tập, qua số điện thoại: 0977.037.109.'}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2026-08-10 09:16:31 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2026-08-10 09:16:31 [httpcore.http11] DEBUG: send_request_headers.started request= 2026-08-10 09:16:31 [httpcore.http11] DEBUG: send_request_headers.complete 2026-08-10 09:16:31 [httpcore.http11] DEBUG: send_request_body.started request= 2026-08-10 09:16:31 [httpcore.http11] DEBUG: send_request_body.complete 2026-08-10 09:16:31 [httpcore.http11] DEBUG: receive_response_headers.started request= 2026-08-10 09:16:32 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 429, b'Too Many Requests', [(b'Date', b'Mon, 10 Aug 2026 09:16:32 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Content-Length', b'283'), (b'Connection', b'keep-alive'), (b'CF-Ray', b'a28de6fadd349b15-HKG'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Origin'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'X-Content-Type-Options', b'nosniff'), (b'x-openai-proxy-wasm', b'v0.1'), (b'x-request-id', b'req_6234944950eb4909943ef42f48e7da5e'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2026-08-10 09:16:32 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 429 Too Many Requests" 2026-08-10 09:16:32 [httpcore.http11] DEBUG: receive_response_body.started request= 2026-08-10 09:16:32 [httpcore.http11] DEBUG: receive_response_body.complete 2026-08-10 09:16:32 [httpcore.http11] DEBUG: response_closed.started 2026-08-10 09:16:32 [httpcore.http11] DEBUG: response_closed.complete 2026-08-10 09:16:32 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "429 Too Many Requests" Headers([('date', 'Mon, 10 Aug 2026 09:16:32 GMT'), ('content-type', 'application/json; charset=utf-8'), ('content-length', '283'), ('connection', 'keep-alive'), ('cf-ray', 'a28de6fadd349b15-HKG'), ('cf-cache-status', 'DYNAMIC'), ('server', 'cloudflare'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('vary', 'Origin'), ('access-control-expose-headers', 'CF-Ray'), ('access-control-expose-headers', 'CF-Ray'), ('x-content-type-options', 'nosniff'), ('x-openai-proxy-wasm', 'v0.1'), ('x-request-id', 'req_6234944950eb4909943ef42f48e7da5e'), ('alt-svc', 'h3=":443"; ma=86400')]) 2026-08-10 09:16:32 [openai._base_client] DEBUG: request_id: req_6234944950eb4909943ef42f48e7da5e 2026-08-10 09:16:32 [openai._base_client] DEBUG: Encountered httpx.HTTPStatusError Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 2026-08-10 09:16:32 [openai._base_client] DEBUG: Retrying due to status code 429 2026-08-10 09:16:32 [openai._base_client] DEBUG: 1 retry left 2026-08-10 09:16:32 [openai._base_client] INFO: Retrying request to /chat/completions in 0.989462 seconds 2026-08-10 09:16:33 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': 'Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., \'the\', \'and\', \'is\') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: Ngày 10.8, bà Trần Thị Oanh, Chủ tịch UBND xã Cồn Tiên (Quảng Trị), cho biết địa phương đang phối hợp với lực lượng chức năng tìm kiếm và xác minh thông tin liên quan đến vị trí mộ liệt sĩ tại địa bàn. Cụ thể, vào ngày 8.5.1967, tại khu vực chân đồi Cồn Tiên đã diễn ra trận chiến của lực lượng đặc công nhằm chọc thủng "hàng rào điện tử McNamara". Trong trận chiến này, nhiều cán bộ, chiến sĩ quân ta đã hy sinh. Theo một số nguồn tin thu thập được, vào thời điểm trên, các đơn vị của quân ta, gồm: Đại đội 2, 3 thuộc Tiểu đoàn 31, Đặc công của Quân khu 4; Đại đội đặc công Vĩnh Linh; Đại đội đặc công Quảng Bình; Đại đội đặc công Núi Quyết thuộc Đoàn Thu Bồn và Tiểu đoàn 4, Trung đoàn 812, Sư đoàn 324; Phân đội súng phun lửa thuộc Bộ đội hóa học đã tổ chức tiến công căn cứ Cồn Tiên. Trận đánh này đã có 173 chiến sĩ hy sinh và nghi được chôn ở một rãnh dài khoảng 60 m ở khu vực nói trên. UBND xã Cồn Tiên cùng các cơ quan chức năng đã triển khai xác minh, tìm kiếm nhưng đến nay chưa xác định được vị trí cụ thể. Để tiếp tục xác minh vị trí, UBND xã Cồn Tiên đang tìm kiếm những người từng tham gia chiến đấu trực tiếp tại chiến trường nói trên hoặc những người biết thông tin về việc chôn cất các liệt sĩ sau trận đánh ngày 8.5.1967. Liên quan đến khu vực nghi có một liệt sĩ tại xã Cồn Tiên, Văn phòng Ban Chỉ đạo quốc gia về tìm kiếm, quy tập và xác định danh tính hài cốt liệt sĩ đã đề nghị tỉnh Quảng Trị chỉ đạo các cơ quan chuyên môn phối hợp với địa phương khẩn trương rà soát, tổng hợp hồ sơ, tài liệu liên quan đến trận chiến đấu ngày 8.5.1967 tại căn cứ Cồn Tiên. Đồng thời, đẩy mạnh tìm kiếm nhân chứng lịch sử, phân tích, hệ thống hóa những thông tin thu thập được và kết hợp thăm dò bằng thiết bị radar xuyên đất để khoanh vùng những vị trí có khả năng tồn tại mộ liệt sĩ tập thể. UBND xã Cồn Tiên cùng Sư đoàn 968 cho biết: Những thông tin nhỏ nhất đều sẽ góp phần quan trọng để đưa các liệt sĩ về với quê hương. Mọi thông tin xin gửi về Phòng Chính trị, Sư đoàn 968 (trụ sở tại phường Đông Hà) hoặc liên hệ trung tá Lê Trường Giang, Chính trị viên Đội quy tập thuộc Sư đoàn 968, qua số điện thoại: 0985.306.448, hoặc trung tá Cao Xuân Cường, Đội trưởng Đội quy tập, qua số điện thoại: 0977.037.109.'}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2026-08-10 09:16:33 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2026-08-10 09:16:33 [httpcore.http11] DEBUG: send_request_headers.started request= 2026-08-10 09:16:33 [httpcore.http11] DEBUG: send_request_headers.complete 2026-08-10 09:16:33 [httpcore.http11] DEBUG: send_request_body.started request= 2026-08-10 09:16:33 [httpcore.http11] DEBUG: send_request_body.complete 2026-08-10 09:16:33 [httpcore.http11] DEBUG: receive_response_headers.started request= 2026-08-10 09:16:33 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 429, b'Too Many Requests', [(b'Date', b'Mon, 10 Aug 2026 09:16:33 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Content-Length', b'283'), (b'Connection', b'keep-alive'), (b'CF-Ray', b'a28de702593d9b15-HKG'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Origin'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'X-Content-Type-Options', b'nosniff'), (b'x-openai-proxy-wasm', b'v0.1'), (b'x-request-id', b'req_17b60243f8364760a61c467b6950eb67'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2026-08-10 09:16:33 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 429 Too Many Requests" 2026-08-10 09:16:33 [httpcore.http11] DEBUG: receive_response_body.started request= 2026-08-10 09:16:33 [httpcore.http11] DEBUG: receive_response_body.complete 2026-08-10 09:16:33 [httpcore.http11] DEBUG: response_closed.started 2026-08-10 09:16:33 [httpcore.http11] DEBUG: response_closed.complete 2026-08-10 09:16:33 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "429 Too Many Requests" Headers([('date', 'Mon, 10 Aug 2026 09:16:33 GMT'), ('content-type', 'application/json; charset=utf-8'), ('content-length', '283'), ('connection', 'keep-alive'), ('cf-ray', 'a28de702593d9b15-HKG'), ('cf-cache-status', 'DYNAMIC'), ('server', 'cloudflare'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('vary', 'Origin'), ('access-control-expose-headers', 'CF-Ray'), ('access-control-expose-headers', 'CF-Ray'), ('x-content-type-options', 'nosniff'), ('x-openai-proxy-wasm', 'v0.1'), ('x-request-id', 'req_17b60243f8364760a61c467b6950eb67'), ('alt-svc', 'h3=":443"; ma=86400')]) 2026-08-10 09:16:33 [openai._base_client] DEBUG: request_id: req_17b60243f8364760a61c467b6950eb67 2026-08-10 09:16:33 [openai._base_client] DEBUG: Encountered httpx.HTTPStatusError Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 2026-08-10 09:16:33 [openai._base_client] DEBUG: Re-raising status error 2026-08-10 09:16:33 [scrapy.core.scraper] ERROR: Spider error processing (referer: https://thanhnien.vn/tin-moi.htm) Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/scrapy/utils/defer.py", line 279, in iter_errback yield next(it) ^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/utils/python.py", line 350, in __next__ return next(self.data) ^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/utils/python.py", line 350, in __next__ return next(self.data) ^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/offsite.py", line 28, in return (r for r in result or () if self._filter(r, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/referer.py", line 352, in return (self._set_referer(r, response) for r in result or ()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/urllength.py", line 27, in return (r for r in result or () if self._filter(r, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/depth.py", line 31, in return (r for r in result or () if self._filter(r, response, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/opt/scrapy_projects/news_scraper/spiders/thanhnien_timestamp_spider.py", line 95, in parse_article item["tags"] = item.extract_tags() ^^^^^^^^^^^^^^^^^^^ File "/opt/scrapy_projects/news_scraper/items.py", line 51, in extract_tags response = client.chat.completions.create( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_utils/_utils.py", line 279, in wrapper return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/resources/chat/completions/completions.py", line 914, in create return self._post( ^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1242, in post return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 919, in request return self._request( ^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1008, in _request return self._retry_request( ^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1057, in _retry_request return self._request( ^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1008, in _request return self._retry_request( ^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1057, in _retry_request return self._request( ^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1023, in _request raise self._make_status_error_from_response(err.response) from None openai.RateLimitError: Error code: 429 - {'error': {'message': 'You have no credits remaining. Add credits to continue using the API at https://platform.openai.com/settings/organization/billing/.', 'type': 'insufficient_quota', 'param': None, 'code': 'credit_balance_exhausted'}} 2026-08-10 09:16:33 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://thanhnien.vn/tin-moi.htm) 2026-08-10 09:16:33 [httpcore.connection] DEBUG: close.started 2026-08-10 09:16:33 [httpcore.connection] DEBUG: close.complete 2026-08-10 09:16:33 [httpcore.connection] DEBUG: close.started 2026-08-10 09:16:33 [httpcore.connection] DEBUG: close.complete 2026-08-10 09:16:33 [httpcore.connection] DEBUG: close.started 2026-08-10 09:16:33 [httpcore.connection] DEBUG: close.complete 2026-08-10 09:16:33 [httpcore.connection] DEBUG: close.started 2026-08-10 09:16:33 [httpcore.connection] DEBUG: close.complete 2026-08-10 09:16:33 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': "Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., 'the', 'and', 'is') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: Chiều 10.8, Trường ĐH Ngân hàng TP.HCM thông báo điểm chuẩn trúng tuyển các ngành năm 2026. Theo PGS-TS Nguyễn Văn Thụy, Trưởng phòng Tuyển sinh và Truyền thông nhà trường, hầu hết các ngành đều tăng điểm so với năm 2025. Trong đó tăng cao nhất là kiểm toán (24,48 điểm); tiếp đến là ngành tài chính ngân hàng (23,48 điểm). Điểm chuẩn từng ngành như bảng sau: Thí sinh có thể xem điểm chuẩn các trường đại học năm 2026 TẠI ĐÂY hoặc TẠI ĐÂY ."}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2026-08-10 09:16:33 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2026-08-10 09:16:33 [httpcore.connection] DEBUG: connect_tcp.started host='api.openai.com' port=443 local_address=None timeout=900 socket_options=None 2026-08-10 09:16:33 [httpcore.connection] DEBUG: connect_tcp.complete return_value= 2026-08-10 09:16:33 [httpcore.connection] DEBUG: start_tls.started ssl_context= server_hostname='api.openai.com' timeout=900 2026-08-10 09:16:33 [httpcore.connection] DEBUG: start_tls.complete return_value= 2026-08-10 09:16:33 [httpcore.http11] DEBUG: send_request_headers.started request= 2026-08-10 09:16:33 [httpcore.http11] DEBUG: send_request_headers.complete 2026-08-10 09:16:33 [httpcore.http11] DEBUG: send_request_body.started request= 2026-08-10 09:16:33 [httpcore.http11] DEBUG: send_request_body.complete 2026-08-10 09:16:33 [httpcore.http11] DEBUG: receive_response_headers.started request= 2026-08-10 09:16:33 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 429, b'Too Many Requests', [(b'Date', b'Mon, 10 Aug 2026 09:16:33 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Content-Length', b'283'), (b'Connection', b'keep-alive'), (b'CF-Ray', b'a28de7060b9add9a-HKG'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Origin'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'X-Content-Type-Options', b'nosniff'), (b'x-openai-proxy-wasm', b'v0.1'), (b'x-request-id', b'req_50d549ecc2fe47b58497c6af7d897c65'), (b'set-cookie', b'__cf_bm=lT1RveFkXrYTMX.8RBdnBHPfaR8Liq_iN3gvSYbTA7k-1786353393.6027722-1.0.1.1-wvUTFXzd.sv2FW.Nae4XSKJ50WYq6QFQdi4HOM6WBH7RTeLbGvFwY2ljQUIbEQgEdr4zB4RewoM3gZvMVxhphqPXEhexOilJYGIUrsVPhbNmHFssYlADryI6vSKwSthS; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 10 Aug 2026 09:46:33 GMT'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2026-08-10 09:16:33 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 429 Too Many Requests" 2026-08-10 09:16:33 [httpcore.http11] DEBUG: receive_response_body.started request= 2026-08-10 09:16:33 [httpcore.http11] DEBUG: receive_response_body.complete 2026-08-10 09:16:33 [httpcore.http11] DEBUG: response_closed.started 2026-08-10 09:16:33 [httpcore.http11] DEBUG: response_closed.complete 2026-08-10 09:16:33 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "429 Too Many Requests" Headers([('date', 'Mon, 10 Aug 2026 09:16:33 GMT'), ('content-type', 'application/json; charset=utf-8'), ('content-length', '283'), ('connection', 'keep-alive'), ('cf-ray', 'a28de7060b9add9a-HKG'), ('cf-cache-status', 'DYNAMIC'), ('server', 'cloudflare'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('vary', 'Origin'), ('access-control-expose-headers', 'CF-Ray'), ('access-control-expose-headers', 'CF-Ray'), ('x-content-type-options', 'nosniff'), ('x-openai-proxy-wasm', 'v0.1'), ('x-request-id', 'req_50d549ecc2fe47b58497c6af7d897c65'), ('set-cookie', '__cf_bm=lT1RveFkXrYTMX.8RBdnBHPfaR8Liq_iN3gvSYbTA7k-1786353393.6027722-1.0.1.1-wvUTFXzd.sv2FW.Nae4XSKJ50WYq6QFQdi4HOM6WBH7RTeLbGvFwY2ljQUIbEQgEdr4zB4RewoM3gZvMVxhphqPXEhexOilJYGIUrsVPhbNmHFssYlADryI6vSKwSthS; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 10 Aug 2026 09:46:33 GMT'), ('alt-svc', 'h3=":443"; ma=86400')]) 2026-08-10 09:16:33 [openai._base_client] DEBUG: request_id: req_50d549ecc2fe47b58497c6af7d897c65 2026-08-10 09:16:33 [openai._base_client] DEBUG: Encountered httpx.HTTPStatusError Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 2026-08-10 09:16:33 [openai._base_client] DEBUG: Retrying due to status code 429 2026-08-10 09:16:33 [openai._base_client] DEBUG: 2 retries left 2026-08-10 09:16:33 [openai._base_client] INFO: Retrying request to /chat/completions in 0.477155 seconds 2026-08-10 09:16:34 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': "Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., 'the', 'and', 'is') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: Chiều 10.8, Trường ĐH Ngân hàng TP.HCM thông báo điểm chuẩn trúng tuyển các ngành năm 2026. Theo PGS-TS Nguyễn Văn Thụy, Trưởng phòng Tuyển sinh và Truyền thông nhà trường, hầu hết các ngành đều tăng điểm so với năm 2025. Trong đó tăng cao nhất là kiểm toán (24,48 điểm); tiếp đến là ngành tài chính ngân hàng (23,48 điểm). Điểm chuẩn từng ngành như bảng sau: Thí sinh có thể xem điểm chuẩn các trường đại học năm 2026 TẠI ĐÂY hoặc TẠI ĐÂY ."}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2026-08-10 09:16:34 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2026-08-10 09:16:34 [httpcore.http11] DEBUG: send_request_headers.started request= 2026-08-10 09:16:34 [httpcore.http11] DEBUG: send_request_headers.complete 2026-08-10 09:16:34 [httpcore.http11] DEBUG: send_request_body.started request= 2026-08-10 09:16:34 [httpcore.http11] DEBUG: send_request_body.complete 2026-08-10 09:16:34 [httpcore.http11] DEBUG: receive_response_headers.started request= 2026-08-10 09:16:34 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 429, b'Too Many Requests', [(b'Date', b'Mon, 10 Aug 2026 09:16:34 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Content-Length', b'283'), (b'Connection', b'keep-alive'), (b'CF-Ray', b'a28de70a8f24dd9a-HKG'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Origin'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'X-Content-Type-Options', b'nosniff'), (b'x-openai-proxy-wasm', b'v0.1'), (b'x-request-id', b'req_2b071342ed1c452d8bcc1572f5ecd28d'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2026-08-10 09:16:34 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 429 Too Many Requests" 2026-08-10 09:16:34 [httpcore.http11] DEBUG: receive_response_body.started request= 2026-08-10 09:16:34 [httpcore.http11] DEBUG: receive_response_body.complete 2026-08-10 09:16:34 [httpcore.http11] DEBUG: response_closed.started 2026-08-10 09:16:34 [httpcore.http11] DEBUG: response_closed.complete 2026-08-10 09:16:34 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "429 Too Many Requests" Headers([('date', 'Mon, 10 Aug 2026 09:16:34 GMT'), ('content-type', 'application/json; charset=utf-8'), ('content-length', '283'), ('connection', 'keep-alive'), ('cf-ray', 'a28de70a8f24dd9a-HKG'), ('cf-cache-status', 'DYNAMIC'), ('server', 'cloudflare'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('vary', 'Origin'), ('access-control-expose-headers', 'CF-Ray'), ('access-control-expose-headers', 'CF-Ray'), ('x-content-type-options', 'nosniff'), ('x-openai-proxy-wasm', 'v0.1'), ('x-request-id', 'req_2b071342ed1c452d8bcc1572f5ecd28d'), ('alt-svc', 'h3=":443"; ma=86400')]) 2026-08-10 09:16:34 [openai._base_client] DEBUG: request_id: req_2b071342ed1c452d8bcc1572f5ecd28d 2026-08-10 09:16:34 [openai._base_client] DEBUG: Encountered httpx.HTTPStatusError Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 2026-08-10 09:16:34 [openai._base_client] DEBUG: Retrying due to status code 429 2026-08-10 09:16:34 [openai._base_client] DEBUG: 1 retry left 2026-08-10 09:16:34 [openai._base_client] INFO: Retrying request to /chat/completions in 0.961264 seconds 2026-08-10 09:16:35 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': "Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., 'the', 'and', 'is') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: Chiều 10.8, Trường ĐH Ngân hàng TP.HCM thông báo điểm chuẩn trúng tuyển các ngành năm 2026. Theo PGS-TS Nguyễn Văn Thụy, Trưởng phòng Tuyển sinh và Truyền thông nhà trường, hầu hết các ngành đều tăng điểm so với năm 2025. Trong đó tăng cao nhất là kiểm toán (24,48 điểm); tiếp đến là ngành tài chính ngân hàng (23,48 điểm). Điểm chuẩn từng ngành như bảng sau: Thí sinh có thể xem điểm chuẩn các trường đại học năm 2026 TẠI ĐÂY hoặc TẠI ĐÂY ."}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2026-08-10 09:16:35 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2026-08-10 09:16:35 [httpcore.http11] DEBUG: send_request_headers.started request= 2026-08-10 09:16:35 [httpcore.http11] DEBUG: send_request_headers.complete 2026-08-10 09:16:35 [httpcore.http11] DEBUG: send_request_body.started request= 2026-08-10 09:16:35 [httpcore.http11] DEBUG: send_request_body.complete 2026-08-10 09:16:35 [httpcore.http11] DEBUG: receive_response_headers.started request= 2026-08-10 09:16:35 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 429, b'Too Many Requests', [(b'Date', b'Mon, 10 Aug 2026 09:16:35 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Content-Length', b'283'), (b'Connection', b'keep-alive'), (b'CF-Ray', b'a28de711d9b5dd9a-HKG'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Origin'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'Access-Control-Expose-Headers', b'CF-Ray'), (b'X-Content-Type-Options', b'nosniff'), (b'x-openai-proxy-wasm', b'v0.1'), (b'x-request-id', b'req_ffce4c0cb30148eeb816b5c647855fd8'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2026-08-10 09:16:35 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 429 Too Many Requests" 2026-08-10 09:16:35 [httpcore.http11] DEBUG: receive_response_body.started request= 2026-08-10 09:16:35 [httpcore.http11] DEBUG: receive_response_body.complete 2026-08-10 09:16:35 [httpcore.http11] DEBUG: response_closed.started 2026-08-10 09:16:35 [httpcore.http11] DEBUG: response_closed.complete 2026-08-10 09:16:35 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "429 Too Many Requests" Headers([('date', 'Mon, 10 Aug 2026 09:16:35 GMT'), ('content-type', 'application/json; charset=utf-8'), ('content-length', '283'), ('connection', 'keep-alive'), ('cf-ray', 'a28de711d9b5dd9a-HKG'), ('cf-cache-status', 'DYNAMIC'), ('server', 'cloudflare'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('vary', 'Origin'), ('access-control-expose-headers', 'CF-Ray'), ('access-control-expose-headers', 'CF-Ray'), ('x-content-type-options', 'nosniff'), ('x-openai-proxy-wasm', 'v0.1'), ('x-request-id', 'req_ffce4c0cb30148eeb816b5c647855fd8'), ('alt-svc', 'h3=":443"; ma=86400')]) 2026-08-10 09:16:35 [openai._base_client] DEBUG: request_id: req_ffce4c0cb30148eeb816b5c647855fd8 2026-08-10 09:16:35 [openai._base_client] DEBUG: Encountered httpx.HTTPStatusError Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1002, in _request response.raise_for_status() File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '429 Too Many Requests' for url 'https://api.openai.com/v1/chat/completions' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 2026-08-10 09:16:35 [openai._base_client] DEBUG: Re-raising status error 2026-08-10 09:16:35 [scrapy.core.scraper] ERROR: Spider error processing (referer: https://thanhnien.vn/tin-moi.htm) Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/scrapy/utils/defer.py", line 279, in iter_errback yield next(it) ^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/utils/python.py", line 350, in __next__ return next(self.data) ^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/utils/python.py", line 350, in __next__ return next(self.data) ^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/offsite.py", line 28, in return (r for r in result or () if self._filter(r, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/referer.py", line 352, in return (self._set_referer(r, response) for r in result or ()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/urllength.py", line 27, in return (r for r in result or () if self._filter(r, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/depth.py", line 31, in return (r for r in result or () if self._filter(r, response, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/opt/scrapy_projects/news_scraper/spiders/thanhnien_timestamp_spider.py", line 95, in parse_article item["tags"] = item.extract_tags() ^^^^^^^^^^^^^^^^^^^ File "/opt/scrapy_projects/news_scraper/items.py", line 51, in extract_tags response = client.chat.completions.create( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_utils/_utils.py", line 279, in wrapper return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/resources/chat/completions/completions.py", line 914, in create return self._post( ^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1242, in post return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 919, in request return self._request( ^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1008, in _request return self._retry_request( ^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1057, in _retry_request return self._request( ^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1008, in _request return self._retry_request( ^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1057, in _retry_request return self._request( ^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1023, in _request raise self._make_status_error_from_response(err.response) from None openai.RateLimitError: Error code: 429 - {'error': {'message': 'You have no credits remaining. Add credits to continue using the API at https://platform.openai.com/settings/organization/billing/.', 'type': 'insufficient_quota', 'param': None, 'code': 'credit_balance_exhausted'}} 2026-08-10 09:16:35 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://thanhnien.vn/tin-moi.htm) 2026-08-10 09:16:35 [thanhnien_timestamp] INFO: 2026-08-10 16:12:00 not in 2026-08-10 15:55:00 to 2026-08-10 16:10:00 2026-08-10 09:16:38 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://thanhnien.vn/tin-moi.htm) 2026-08-10 09:16:38 [thanhnien_timestamp] INFO: 2026-08-10 16:14:00 not in 2026-08-10 15:55:00 to 2026-08-10 16:10:00 2026-08-10 09:16:38 [scrapy.core.engine] INFO: Closing spider (finished) 2026-08-10 09:16:38 [boto3.s3.transfer] DEBUG: Opting out of CRT Transfer Manager. Preferred client: auto, CRT available: False, Instance Optimized: False. 2026-08-10 09:16:38 [boto3.s3.transfer] DEBUG: Using default client. pid: 46913, thread: 140629647305528 2026-08-10 09:16:38 [s3transfer.utils] DEBUG: Acquiring 0 2026-08-10 09:16:38 [s3transfer.tasks] DEBUG: UploadSubmissionTask(transfer_id=0, {'transfer_future': }) about to wait for the following futures [] 2026-08-10 09:16:38 [s3transfer.tasks] DEBUG: UploadSubmissionTask(transfer_id=0, {'transfer_future': }) done waiting for dependent futures 2026-08-10 09:16:38 [s3transfer.tasks] DEBUG: Executing task UploadSubmissionTask(transfer_id=0, {'transfer_future': }) with kwargs {'client': , 'config': , 'osutil': , 'request_executor': , 'transfer_future': } 2026-08-10 09:16:38 [s3transfer.futures] DEBUG: Submitting task PutObjectTask(transfer_id=0, {'bucket': 'dagster-output-data', 'key': 'thanhnien_timestamp/thanhnien_timestamp_0150446e949c11f1b41882b496cd12ce_scheduled_2026-08-10.jl', 'extra_args': {}}) to executor for transfer request: 0. 2026-08-10 09:16:38 [s3transfer.utils] DEBUG: Acquiring 0 2026-08-10 09:16:38 [s3transfer.tasks] DEBUG: PutObjectTask(transfer_id=0, {'bucket': 'dagster-output-data', 'key': 'thanhnien_timestamp/thanhnien_timestamp_0150446e949c11f1b41882b496cd12ce_scheduled_2026-08-10.jl', 'extra_args': {}}) about to wait for the following futures [] 2026-08-10 09:16:38 [s3transfer.utils] DEBUG: Releasing acquire 0/None 2026-08-10 09:16:38 [s3transfer.tasks] DEBUG: PutObjectTask(transfer_id=0, {'bucket': 'dagster-output-data', 'key': 'thanhnien_timestamp/thanhnien_timestamp_0150446e949c11f1b41882b496cd12ce_scheduled_2026-08-10.jl', 'extra_args': {}}) done waiting for dependent futures 2026-08-10 09:16:38 [s3transfer.tasks] DEBUG: Executing task PutObjectTask(transfer_id=0, {'bucket': 'dagster-output-data', 'key': 'thanhnien_timestamp/thanhnien_timestamp_0150446e949c11f1b41882b496cd12ce_scheduled_2026-08-10.jl', 'extra_args': {}}) with kwargs {'client': , 'fileobj': , 'bucket': 'dagster-output-data', 'key': 'thanhnien_timestamp/thanhnien_timestamp_0150446e949c11f1b41882b496cd12ce_scheduled_2026-08-10.jl', 'extra_args': {}} 2026-08-10 09:16:38 [botocore.hooks] DEBUG: Event before-parameter-build.s3.PutObject: calling handler 2026-08-10 09:16:38 [botocore.hooks] DEBUG: Event before-parameter-build.s3.PutObject: calling handler 2026-08-10 09:16:38 [botocore.hooks] DEBUG: Event before-parameter-build.s3.PutObject: calling handler 2026-08-10 09:16:38 [botocore.hooks] DEBUG: Event before-parameter-build.s3.PutObject: calling handler 2026-08-10 09:16:38 [botocore.hooks] DEBUG: Event before-parameter-build.s3.PutObject: calling handler 2026-08-10 09:16:38 [botocore.hooks] DEBUG: Event before-parameter-build.s3.PutObject: calling handler > 2026-08-10 09:16:38 [botocore.hooks] DEBUG: Event before-parameter-build.s3.PutObject: calling handler > 2026-08-10 09:16:38 [botocore.hooks] DEBUG: Event before-parameter-build.s3.PutObject: calling handler 2026-08-10 09:16:38 [botocore.hooks] DEBUG: Event before-endpoint-resolution.s3: calling handler 2026-08-10 09:16:38 [botocore.hooks] DEBUG: Event before-endpoint-resolution.s3: calling handler > 2026-08-10 09:16:38 [botocore.regions] DEBUG: Calling endpoint provider with parameters: {'Bucket': 'dagster-output-data', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'Endpoint': 'https://lake-api.actable.ai/', 'ForcePathStyle': True, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Key': 'thanhnien_timestamp/thanhnien_timestamp_0150446e949c11f1b41882b496cd12ce_scheduled_2026-08-10.jl', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True} 2026-08-10 09:16:38 [botocore.regions] DEBUG: Endpoint provider result: https://lake-api.actable.ai/dagster-output-data 2026-08-10 09:16:38 [botocore.regions] DEBUG: Selecting from endpoint provider's list of auth schemes: "sigv4". User selected auth scheme is: "None" 2026-08-10 09:16:38 [botocore.regions] DEBUG: Selected auth type "v4" as "v4" with signing context params: {'region': 'us-east-1', 'signing_name': 's3', 'disableDoubleEncoding': True} 2026-08-10 09:16:38 [botocore.hooks] DEBUG: Event before-call.s3.PutObject: calling handler 2026-08-10 09:16:38 [botocore.hooks] DEBUG: Event before-call.s3.PutObject: calling handler 2026-08-10 09:16:38 [botocore.handlers] DEBUG: Adding expect 100 continue header to request. 2026-08-10 09:16:38 [botocore.hooks] DEBUG: Event before-call.s3.PutObject: calling handler > 2026-08-10 09:16:38 [botocore.hooks] DEBUG: Event before-call.s3.PutObject: calling handler 2026-08-10 09:16:38 [botocore.hooks] DEBUG: Event before-call.s3.PutObject: calling handler 2026-08-10 09:16:38 [botocore.endpoint] DEBUG: Making request for OperationModel(name=PutObject) with params: {'url_path': '/thanhnien_timestamp/thanhnien_timestamp_0150446e949c11f1b41882b496cd12ce_scheduled_2026-08-10.jl', 'query_string': {}, 'method': 'PUT', 'headers': {'User-Agent': 'Boto3/1.34.57 md/Botocore#1.34.162 ua/2.0 os/linux#5.15.0-186-generic md/arch#x86_64 lang/python#3.11.13 md/pyimpl#CPython cfg/retry-mode#legacy Botocore/1.34.162', 'Content-MD5': '1B2M2Y8AsgTpgAmY7PhCfg==', 'Expect': '100-continue'}, 'body': , 'auth_path': '/dagster-output-data/thanhnien_timestamp/thanhnien_timestamp_0150446e949c11f1b41882b496cd12ce_scheduled_2026-08-10.jl', 'url': 'https://lake-api.actable.ai/dagster-output-data/thanhnien_timestamp/thanhnien_timestamp_0150446e949c11f1b41882b496cd12ce_scheduled_2026-08-10.jl', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': True, 'auth_type': 'v4', 's3_redirect': {'redirected': False, 'bucket': 'dagster-output-data', 'params': {'Bucket': 'dagster-output-data', 'Key': 'thanhnien_timestamp/thanhnien_timestamp_0150446e949c11f1b41882b496cd12ce_scheduled_2026-08-10.jl', 'Body': }}, 'input_params': {'Bucket': 'dagster-output-data', 'Key': 'thanhnien_timestamp/thanhnien_timestamp_0150446e949c11f1b41882b496cd12ce_scheduled_2026-08-10.jl'}, 'signing': {'region': 'us-east-1', 'signing_name': 's3', 'disableDoubleEncoding': True}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}} 2026-08-10 09:16:38 [botocore.hooks] DEBUG: Event request-created.s3.PutObject: calling handler 2026-08-10 09:16:38 [botocore.hooks] DEBUG: Event request-created.s3.PutObject: calling handler > 2026-08-10 09:16:38 [botocore.hooks] DEBUG: Event choose-signer.s3.PutObject: calling handler > 2026-08-10 09:16:38 [botocore.hooks] DEBUG: Event choose-signer.s3.PutObject: calling handler 2026-08-10 09:16:38 [botocore.hooks] DEBUG: Event before-sign.s3.PutObject: calling handler 2026-08-10 09:16:38 [botocore.hooks] DEBUG: Event before-sign.s3.PutObject: calling handler > 2026-08-10 09:16:38 [botocore.auth] DEBUG: Calculating signature using v4 auth. 2026-08-10 09:16:38 [botocore.auth] DEBUG: CanonicalRequest: PUT /dagster-output-data/thanhnien_timestamp/thanhnien_timestamp_0150446e949c11f1b41882b496cd12ce_scheduled_2026-08-10.jl content-md5:1B2M2Y8AsgTpgAmY7PhCfg== host:lake-api.actable.ai x-amz-content-sha256:UNSIGNED-PAYLOAD x-amz-date:20260810T091638Z content-md5;host;x-amz-content-sha256;x-amz-date UNSIGNED-PAYLOAD 2026-08-10 09:16:38 [botocore.auth] DEBUG: StringToSign: AWS4-HMAC-SHA256 20260810T091638Z 20260810/us-east-1/s3/aws4_request abdc7661f33ea0b98c83848c65a9440181b29e59262b389d4e48ffa4531e9049 2026-08-10 09:16:38 [botocore.auth] DEBUG: Signature: 432150ba2abb515aee050b0f108d417734977d3d9fb33a3954dd731018e84ef0 2026-08-10 09:16:38 [botocore.hooks] DEBUG: Event request-created.s3.PutObject: calling handler 2026-08-10 09:16:38 [botocore.hooks] DEBUG: Event request-created.s3.PutObject: calling handler 2026-08-10 09:16:38 [botocore.endpoint] DEBUG: Sending http request: 2026-08-10 09:16:38 [botocore.httpsession] DEBUG: Certificate path: /usr/local/lib/python3.11/site-packages/certifi/cacert.pem 2026-08-10 09:16:38 [urllib3.connectionpool] DEBUG: Starting new HTTPS connection (1): lake-api.actable.ai:443 2026-08-10 09:16:39 [botocore.awsrequest] DEBUG: Waiting for 100 Continue response. 2026-08-10 09:16:39 [botocore.awsrequest] DEBUG: 100 Continue response seen, now sending request body. 2026-08-10 09:16:39 [urllib3.connectionpool] DEBUG: https://lake-api.actable.ai:443 "PUT /dagster-output-data/thanhnien_timestamp/thanhnien_timestamp_0150446e949c11f1b41882b496cd12ce_scheduled_2026-08-10.jl HTTP/1.1" 200 0 2026-08-10 09:16:39 [botocore.parsers] DEBUG: Response headers: {'Server': 'nginx/1.18.0 (Ubuntu)', 'Date': 'Mon, 10 Aug 2026 09:16:39 GMT', 'Content-Length': '0', 'Connection': 'keep-alive', 'Accept-Ranges': 'bytes', 'ETag': '"d41d8cd98f00b204e9800998ecf8427e"', 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains', 'Vary': 'Origin, Accept-Encoding', 'X-Amz-Bucket-Region': 'us-east-1', 'X-Amz-Id-2': 'dd9025bab4ad464b049177c95eb6ebf374d3b3fd1af9251148b658df7ac2e3e8', 'X-Amz-Request-Id': '18CA66F3B7B16395', 'X-Content-Type-Options': 'nosniff', 'X-Ratelimit-Limit': '3162', 'X-Ratelimit-Remaining': '3162', 'X-Xss-Protection': '1; mode=block'} 2026-08-10 09:16:39 [botocore.parsers] DEBUG: Response body: b'' 2026-08-10 09:16:39 [botocore.hooks] DEBUG: Event needs-retry.s3.PutObject: calling handler 2026-08-10 09:16:39 [botocore.retryhandler] DEBUG: No retry needed. 2026-08-10 09:16:39 [botocore.hooks] DEBUG: Event needs-retry.s3.PutObject: calling handler > 2026-08-10 09:16:39 [s3transfer.utils] DEBUG: Releasing acquire 0/None 2026-08-10 09:16:39 [scrapy.extensions.feedexport] INFO: Stored jsonlines feed (0 items) in: s3://dagster-output-data/thanhnien_timestamp/thanhnien_timestamp_0150446e949c11f1b41882b496cd12ce_scheduled_2026-08-10.jl 2026-08-10 09:16:39 [scrapy.statscollectors] INFO: Dumping Scrapy stats: {'downloader/request_bytes': 7572, 'downloader/request_count': 23, 'downloader/request_method_count/GET': 23, 'downloader/response_bytes': 3701186, 'downloader/response_count': 23, 'downloader/response_status_count/200': 23, 'elapsed_time_seconds': 57.271097, 'feedexport/success_count/S3FeedStorage': 1, 'finish_reason': 'finished', 'finish_time': datetime.datetime(2026, 8, 10, 9, 16, 38, 932973, tzinfo=datetime.timezone.utc), 'httpcompression/response_bytes': 17366576, 'httpcompression/response_count': 23, 'log_count/DEBUG': 631, 'log_count/ERROR': 9, 'log_count/INFO': 68, 'memusage/max': 124764160, 'memusage/startup': 124764160, 'request_depth_max': 2, 'response_received_count': 23, 'robotstxt/request_count': 1, 'robotstxt/response_count': 1, 'robotstxt/response_status_count/200': 1, 'scheduler/dequeued': 22, 'scheduler/dequeued/memory': 22, 'scheduler/enqueued': 22, 'scheduler/enqueued/memory': 22, 'spider_exceptions/RateLimitError': 9, 'start_time': datetime.datetime(2026, 8, 10, 9, 15, 41, 661876, tzinfo=datetime.timezone.utc)} 2026-08-10 09:16:39 [scrapy.core.engine] INFO: Spider closed (finished) 2026-08-10 09:16:39 [httpcore.connection] DEBUG: close.started 2026-08-10 09:16:39 [httpcore.connection] DEBUG: close.complete 2026-08-10 09:16:39 [httpcore.connection] DEBUG: close.started 2026-08-10 09:16:39 [httpcore.connection] DEBUG: close.complete 2026-08-10 09:16:39 [httpcore.connection] DEBUG: close.started 2026-08-10 09:16:39 [httpcore.connection] DEBUG: close.complete