diff --git a/.coveragerc b/.coveragerc new file mode 100644 index 000000000..ff6f19aab --- /dev/null +++ b/.coveragerc @@ -0,0 +1,7 @@ +[run] +source = + ./metagpt/ +omit = + */metagpt/environment/android/* + */metagpt/ext/android_assistant/* + */metagpt/ext/werewolf/* \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index a774d0ed1..01ab0342d 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -3,7 +3,7 @@ { "name": "Python 3", // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile - "image": "mcr.microsoft.com/devcontainers/python:0-3.11", + "image": "metagpt/metagpt:latest", // Features to add to the dev container. More info: https://containers.dev/features. // "features": {}, @@ -18,7 +18,7 @@ ] } }, - + // Use 'postCreateCommand' to run commands after the container is created. "postCreateCommand": "./.devcontainer/postCreateCommand.sh" diff --git a/.gitattributes b/.gitattributes index 865da2ca2..e6436790e 100644 --- a/.gitattributes +++ b/.gitattributes @@ -14,6 +14,7 @@ *.ico binary *.jpeg binary *.mp3 binary +*.mp4 binary *.zip binary *.bin binary diff --git a/.github/ISSUE_TEMPLATE/show_me_the_bug.md b/.github/ISSUE_TEMPLATE/show_me_the_bug.md index 504a2bd12..0c33f0319 100644 --- a/.github/ISSUE_TEMPLATE/show_me_the_bug.md +++ b/.github/ISSUE_TEMPLATE/show_me_the_bug.md @@ -19,6 +19,7 @@ - LLM type and model name: - System version: - Python version: +- MetaGPT version or branch: diff --git a/.github/workflows/build-package.yaml b/.github/workflows/build-package.yaml index 7f4fee53e..294a13f71 100644 --- a/.github/workflows/build-package.yaml +++ b/.github/workflows/build-package.yaml @@ -1,8 +1,9 @@ name: Build and upload python package on: + workflow_dispatch: release: - types: [created] + types: [created, published] jobs: deploy: diff --git a/.github/workflows/fulltest.yaml b/.github/workflows/fulltest.yaml index 70c800481..2ab6444fa 100644 --- a/.github/workflows/fulltest.yaml +++ b/.github/workflows/fulltest.yaml @@ -30,7 +30,10 @@ jobs: cache: 'pip' - name: Install dependencies run: | - sh tests/scripts/run_install_deps.sh + python -m pip install --upgrade pip + pip install -e .[test] + npm install -g @mermaid-js/mermaid-cli + playwright install --with-deps - name: Run reverse proxy script for ssh service if: contains(github.ref, '-debugger') continue-on-error: true diff --git a/.github/workflows/pre-commit.yaml b/.github/workflows/pre-commit.yaml index ed4bbb144..d350a87f1 100644 --- a/.github/workflows/pre-commit.yaml +++ b/.github/workflows/pre-commit.yaml @@ -11,6 +11,7 @@ on: jobs: pre-commit-check: runs-on: ubuntu-latest + environment: pre-commit steps: - name: Checkout Source Code uses: actions/checkout@v2 diff --git a/.github/workflows/unittest.yaml b/.github/workflows/unittest.yaml index afa9faba7..25f82b1e6 100644 --- a/.github/workflows/unittest.yaml +++ b/.github/workflows/unittest.yaml @@ -27,20 +27,57 @@ jobs: cache: 'pip' - name: Install dependencies run: | - sh tests/scripts/run_install_deps.sh + python -m pip install --upgrade pip + pip install -e .[test] + npm install -g @mermaid-js/mermaid-cli + playwright install --with-deps - name: Test with pytest run: | export ALLOW_OPENAI_API_CALL=0 mkdir -p ~/.metagpt && cp tests/config2.yaml ~/.metagpt/config2.yaml - pytest tests/ --doctest-modules --cov=./metagpt/ --cov-report=xml:cov.xml --cov-report=html:htmlcov --durations=20 | tee unittest.txt + pytest --continue-on-collection-errors tests/ \ + --ignore=tests/metagpt/environment/android_env \ + --ignore=tests/metagpt/ext/android_assistant \ + --ignore=tests/metagpt/ext/stanford_town \ + --ignore=tests/metagpt/provider/test_bedrock_api.py \ + --ignore=tests/metagpt/rag/factories/test_embedding.py \ + --ignore=tests/metagpt/ext/werewolf/actions/test_experience_operation.py \ + --ignore=tests/metagpt/provider/test_openai.py \ + --ignore=tests/metagpt/planner/test_action_planner.py \ + --ignore=tests/metagpt/planner/test_basic_planner.py \ + --ignore=tests/metagpt/actions/test_project_management.py \ + --ignore=tests/metagpt/actions/test_write_code.py \ + --ignore=tests/metagpt/actions/test_write_code_review.py \ + --ignore=tests/metagpt/actions/test_write_prd.py \ + --ignore=tests/metagpt/environment/werewolf_env/test_werewolf_ext_env.py \ + --ignore=tests/metagpt/memory/test_brain_memory.py \ + --ignore=tests/metagpt/roles/test_assistant.py \ + --ignore=tests/metagpt/roles/test_engineer.py \ + --ignore=tests/metagpt/serialize_deserialize/test_write_code_review.py \ + --ignore=tests/metagpt/test_environment.py \ + --ignore=tests/metagpt/test_llm.py \ + --ignore=tests/metagpt/tools/test_metagpt_oas3_api_svc.py \ + --ignore=tests/metagpt/tools/test_moderation.py \ + --ignore=tests/metagpt/tools/test_search_engine.py \ + --ignore=tests/metagpt/tools/test_tool_convert.py \ + --ignore=tests/metagpt/tools/test_web_browser_engine_playwright.py \ + --ignore=tests/metagpt/utils/test_mermaid.py \ + --ignore=tests/metagpt/utils/test_redis.py \ + --ignore=tests/metagpt/utils/test_tree.py \ + --ignore=tests/metagpt/serialize_deserialize/test_sk_agent.py \ + --ignore=tests/metagpt/utils/test_text.py \ + --ignore=tests/metagpt/actions/di/test_write_analysis_code.py \ + --ignore=tests/metagpt/provider/test_ark.py \ + --doctest-modules --cov=./metagpt/ --cov-report=xml:cov.xml --cov-report=html:htmlcov \ + --durations=20 | tee unittest.txt - name: Show coverage report run: | coverage report -m - name: Show failed tests and overall summary run: | grep -E "FAILED tests|ERROR tests|[0-9]+ passed," unittest.txt - failed_count=$(grep -E "FAILED|ERROR" unittest.txt | wc -l) - if [[ "$failed_count" -gt 0 ]]; then + failed_count=$(grep -E "FAILED tests|ERROR tests" unittest.txt | wc -l | tr -d '[:space:]') + if [[ $failed_count -gt 0 ]]; then echo "$failed_count failed lines found! Task failed." exit 1 fi diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 000000000..292433f80 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,3 @@ +recursive-include metagpt/ext/stanford_town/prompts *.txt +recursive-include metagpt/ext/stanford_town/static_dirs *.csv +recursive-include metagpt/ext/stanford_town/static_dirs *.json \ No newline at end of file diff --git a/README.md b/README.md index 9f129105c..3410e08fc 100644 --- a/README.md +++ b/README.md @@ -26,18 +26,16 @@ # MetaGPT: The Multi-Agent Framework

## News -🚀 Mar. 29, 2024: [v0.8.0](https://github.com/geekan/MetaGPT/releases/tag/v0.8.0) released. Now you can use Data Interpreter via pypi package import. Meanwhile, we integrated RAG module and supported multiple new LLMs. - -🚀 Mar. 14, 2024: Our **Data Interpreter** paper is on [arxiv](https://arxiv.org/abs/2402.18679). Check the [example](https://docs.deepwisdom.ai/main/en/DataInterpreter/) and [code](https://github.com/geekan/MetaGPT/tree/main/examples/di)! +🚀 Mar. 29, 2024: [v0.8.0](https://github.com/geekan/MetaGPT/releases/tag/v0.8.0) released. Now you can use Data Interpreter ([arxiv](https://arxiv.org/abs/2402.18679), [example](https://docs.deepwisdom.ai/main/en/DataInterpreter/), [code](https://github.com/geekan/MetaGPT/tree/main/examples/di)) via pypi package import. Meanwhile, we integrated RAG module and supported multiple new LLMs. 🚀 Feb. 08, 2024: [v0.7.0](https://github.com/geekan/MetaGPT/releases/tag/v0.7.0) released, supporting assigning different LLMs to different Roles. We also introduced [Data Interpreter](https://github.com/geekan/MetaGPT/blob/main/examples/di/README.md), a powerful agent capable of solving a wide range of real-world problems. 🚀 Jan. 16, 2024: Our paper [MetaGPT: Meta Programming for A Multi-Agent Collaborative Framework -](https://arxiv.org/abs/2308.00352) accepted for oral presentation **(top 1.2%)** at ICLR 2024, **ranking #1** in the LLM-based Agent category. +](https://openreview.net/forum?id=VtmBAGCN7o) accepted for **oral presentation (top 1.2%)** at ICLR 2024, **ranking #1** in the LLM-based Agent category. 🚀 Jan. 03, 2024: [v0.6.0](https://github.com/geekan/MetaGPT/releases/tag/v0.6.0) released, new features include serialization, upgraded OpenAI package and supported multiple LLM, provided [minimal example for debate](https://github.com/geekan/MetaGPT/blob/main/examples/debate_simple.py) etc. -🚀 Dec. 15, 2023: [v0.5.0](https://github.com/geekan/MetaGPT/releases/tag/v0.5.0) released, introducing some experimental features such as **incremental development**, **multilingual**, **multiple programming languages**, etc. +🚀 Dec. 15, 2023: [v0.5.0](https://github.com/geekan/MetaGPT/releases/tag/v0.5.0) released, introducing some experimental features such as incremental development, multilingual, multiple programming languages, etc. 🔥 Nov. 08, 2023: MetaGPT is selected into [Open100: Top 100 Open Source achievements](https://www.benchcouncil.org/evaluation/opencs/annual.html). @@ -85,8 +83,8 @@ # Check https://docs.deepwisdom.ai/main/en/guide/get_started/configuration.html ```yaml llm: - api_type: "openai" # or azure / ollama / open_llm etc. Check LLMType for more options - model: "gpt-4-turbo-preview" # or gpt-3.5-turbo-1106 / gpt-4-1106-preview + api_type: "openai" # or azure / ollama / groq etc. Check LLMType for more options + model: "gpt-4-turbo" # or gpt-3.5-turbo base_url: "https://api.openai.com/v1" # or forward url / other llm url api_key: "YOUR_API_KEY" ``` @@ -107,7 +105,7 @@ ### Usage print(repo) # it will print the repo structure with files ``` -You can also use its [Data Interpreter](https://github.com/geekan/MetaGPT/tree/main/examples/di) +You can also use [Data Interpreter](https://github.com/geekan/MetaGPT/tree/main/examples/di) to write code: ```python import asyncio @@ -147,10 +145,13 @@ ## Tutorial ## Support -### Discard Join US -📢 Join Our [Discord Channel](https://discord.gg/ZRHeExS6xv)! +### Discord Join US -Looking forward to seeing you there! 🎉 +📢 Join Our [Discord Channel](https://discord.gg/ZRHeExS6xv)! Looking forward to seeing you there! 🎉 + +### Contributor form + +📝 [Fill out the form](https://airtable.com/appInfdG0eJ9J4NNL/pagK3Fh1sGclBvVkV/form) to become a contributor. We are looking forward to your participation! ### Contact Information @@ -165,16 +166,15 @@ ## Citation To stay updated with the latest research and development, follow [@MetaGPT_](https://twitter.com/MetaGPT_) on Twitter. -To cite [MetaGPT](https://arxiv.org/abs/2308.00352) or [Data Interpreter](https://arxiv.org/abs/2402.18679) in publications, please use the following BibTeX entries. +To cite [MetaGPT](https://openreview.net/forum?id=VtmBAGCN7o) or [Data Interpreter](https://arxiv.org/abs/2402.18679) in publications, please use the following BibTeX entries. ```bibtex -@misc{hong2023metagpt, - title={MetaGPT: Meta Programming for A Multi-Agent Collaborative Framework}, - author={Sirui Hong and Mingchen Zhuge and Jonathan Chen and Xiawu Zheng and Yuheng Cheng and Ceyao Zhang and Jinlin Wang and Zili Wang and Steven Ka Shing Yau and Zijuan Lin and Liyang Zhou and Chenyu Ran and Lingfeng Xiao and Chenglin Wu and Jürgen Schmidhuber}, - year={2023}, - eprint={2308.00352}, - archivePrefix={arXiv}, - primaryClass={cs.AI} +@inproceedings{hong2024metagpt, + title={Meta{GPT}: Meta Programming for A Multi-Agent Collaborative Framework}, + author={Sirui Hong and Mingchen Zhuge and Jonathan Chen and Xiawu Zheng and Yuheng Cheng and Jinlin Wang and Ceyao Zhang and Zili Wang and Steven Ka Shing Yau and Zijuan Lin and Liyang Zhou and Chenyu Ran and Lingfeng Xiao and Chenglin Wu and J{\"u}rgen Schmidhuber}, + booktitle={The Twelfth International Conference on Learning Representations}, + year={2024}, + url={https://openreview.net/forum?id=VtmBAGCN7o} } @misc{hong2024data, title={Data Interpreter: An LLM Agent For Data Science}, @@ -184,6 +184,5 @@ ## Citation archivePrefix={arXiv}, primaryClass={cs.AI} } - ``` diff --git a/config/config2.example.yaml b/config/config2.example.yaml index c5454ec32..b82468eed 100644 --- a/config/config2.example.yaml +++ b/config/config2.example.yaml @@ -1,17 +1,24 @@ llm: - api_type: "openai" # or azure / ollama / open_llm etc. Check LLMType for more options + api_type: "openai" # or azure / ollama / groq etc. base_url: "YOUR_BASE_URL" api_key: "YOUR_API_KEY" - model: "gpt-4-turbo-preview" # or gpt-3.5-turbo-1106 / gpt-4-1106-preview + model: "gpt-4-turbo" # or gpt-3.5-turbo proxy: "YOUR_PROXY" # for LLM API requests # timeout: 600 # Optional. If set to 0, default value is 300. - pricing_plan: "" # Optional. If invalid, it will be automatically filled in with the value of the `model`. - # Azure-exclusive pricing plan mappings: - # - gpt-3.5-turbo 4k: "gpt-3.5-turbo-1106" - # - gpt-4-turbo: "gpt-4-turbo-preview" - # - gpt-4-turbo-vision: "gpt-4-vision-preview" - # - gpt-4 8k: "gpt-4" - # See for more: https://azure.microsoft.com/en-us/pricing/details/cognitive-services/openai-service/ + # Details: https://azure.microsoft.com/en-us/pricing/details/cognitive-services/openai-service/ + pricing_plan: "" # Optional. Use for Azure LLM when its model name is not the same as OpenAI's + + +# RAG Embedding. +# For backward compatibility, if the embedding is not set and the llm's api_type is either openai or azure, the llm's config will be used. +embedding: + api_type: "" # openai / azure / gemini / ollama etc. Check EmbeddingType for more options. + base_url: "" + api_key: "" + model: "" + api_version: "" + embed_batch_size: 100 + dimensions: # output dimension of embedding model repair_llm_output: true # when the output is not a valid json, try to repair it @@ -28,7 +35,7 @@ browser: mermaid: engine: "pyppeteer" - path: "/Applications/Google Chrome.app" + pyppeteer_path: "/Applications/Google Chrome.app" redis: host: "YOUR_HOST" @@ -52,3 +59,27 @@ iflytek_api_key: "YOUR_API_KEY" iflytek_api_secret: "YOUR_API_SECRET" metagpt_tti_url: "YOUR_MODEL_URL" + +omniparse: + api_key: "YOUR_API_KEY" + base_url: "YOUR_BASE_URL" + +models: +# "YOUR_MODEL_NAME_1 or YOUR_API_TYPE_1": # model: "gpt-4-turbo" # or gpt-3.5-turbo +# api_type: "openai" # or azure / ollama / groq etc. +# base_url: "YOUR_BASE_URL" +# api_key: "YOUR_API_KEY" +# proxy: "YOUR_PROXY" # for LLM API requests +# # timeout: 600 # Optional. If set to 0, default value is 300. +# # Details: https://azure.microsoft.com/en-us/pricing/details/cognitive-services/openai-service/ +# pricing_plan: "" # Optional. Use for Azure LLM when its model name is not the same as OpenAI's +# "YOUR_MODEL_NAME_2 or YOUR_API_TYPE_2": # api_type: "openai" # or azure / ollama / groq etc. +# api_type: "openai" # or azure / ollama / groq etc. +# base_url: "YOUR_BASE_URL" +# api_key: "YOUR_API_KEY" +# proxy: "YOUR_PROXY" # for LLM API requests +# # timeout: 600 # Optional. If set to 0, default value is 300. +# # Details: https://azure.microsoft.com/en-us/pricing/details/cognitive-services/openai-service/ +# pricing_plan: "" # Optional. Use for Azure LLM when its model name is not the same as OpenAI's + +agentops_api_key: "YOUR_AGENTOPS_API_KEY" # get key from https://app.agentops.ai/settings/projects diff --git a/config/config2.yaml b/config/config2.yaml index 8e5825b57..b3f24539c 100644 --- a/config/config2.yaml +++ b/config/config2.yaml @@ -1,7 +1,8 @@ # Full Example: https://github.com/geekan/MetaGPT/blob/main/config/config2.example.yaml # Reflected Code: https://github.com/geekan/MetaGPT/blob/main/metagpt/config2.py +# Config Docs: https://docs.deepwisdom.ai/main/en/guide/get_started/configuration.html llm: - api_type: "openai" # or azure / ollama / open_llm etc. Check LLMType for more options - model: "gpt-4-turbo-preview" # or gpt-3.5-turbo-1106 / gpt-4-1106-preview + api_type: "openai" # or azure / ollama / groq etc. + model: "gpt-4-turbo" # or gpt-3.5-turbo base_url: "https://api.openai.com/v1" # or forward url / other llm url api_key: "YOUR_API_KEY" \ No newline at end of file diff --git a/config/examples/anthropic-claude-3-5-sonnet.yaml b/config/examples/anthropic-claude-3-5-sonnet.yaml new file mode 100644 index 000000000..7c4df6064 --- /dev/null +++ b/config/examples/anthropic-claude-3-5-sonnet.yaml @@ -0,0 +1,5 @@ +llm: + api_type: 'claude' # or anthropic + base_url: 'https://api.anthropic.com' + api_key: 'YOUR_API_KEY' + model: 'claude-3-5-sonnet-20240620' # or 'claude-3-opus-20240229' \ No newline at end of file diff --git a/config/examples/aws-bedrock.yaml b/config/examples/aws-bedrock.yaml new file mode 100644 index 000000000..d44fe8386 --- /dev/null +++ b/config/examples/aws-bedrock.yaml @@ -0,0 +1,10 @@ +llm: + api_type: 'bedrock' + access_key: 'YOUR_API_KEY' + secret_key: 'YOUR_API_SECRET' + + region_name: "us-east-1" + model: "meta.llama2-70b-chat-v1" + # model: "anthropic.claude-3-sonnet-20240229-v1:0" + # model: "mistral.mixtral-8x7b-instruct-v0:1" + # model: "meta.llama2-13b-chat-v1" \ No newline at end of file diff --git a/config/examples/google-gemini.yaml b/config/examples/google-gemini.yaml new file mode 100644 index 000000000..82a22bdf5 --- /dev/null +++ b/config/examples/google-gemini.yaml @@ -0,0 +1,4 @@ +llm: + api_type: 'gemini' + api_key: 'YOUR_API_KEY' + model: 'gemini-pro' \ No newline at end of file diff --git a/config/examples/groq-llama3-70b.yaml b/config/examples/groq-llama3-70b.yaml new file mode 100644 index 000000000..93ff24b3d --- /dev/null +++ b/config/examples/groq-llama3-70b.yaml @@ -0,0 +1,5 @@ +llm: + # Visit https://console.groq.com/keys to create api key + base_url: "https://api.groq.com/openai/v1" + api_key: "YOUR_API_KEY" + model: "llama3-70b-8192" # llama3-8b-8192,llama3-70b-8192,llama2-70b-4096 ,mixtral-8x7b-32768,gemma-7b-it diff --git a/config/examples/huoshan_ark.yaml b/config/examples/huoshan_ark.yaml new file mode 100644 index 000000000..b0516359b --- /dev/null +++ b/config/examples/huoshan_ark.yaml @@ -0,0 +1,5 @@ +llm: + api_type: "ark" + model: "" # your model endpoint like ep-xxx + base_url: "https://ark.cn-beijing.volces.com/api/v3" + api_key: "" # your api-key like ey…… \ No newline at end of file diff --git a/config/examples/openai-gpt-3.5-turbo.yaml b/config/examples/openai-gpt-3.5-turbo.yaml new file mode 100644 index 000000000..41364842a --- /dev/null +++ b/config/examples/openai-gpt-3.5-turbo.yaml @@ -0,0 +1,5 @@ +llm: + api_key: "YOUR_API_KEY" + model: "gpt-3.5-turbo" + #proxy: "http://:" + #base_url: "https:///v1" diff --git a/config/examples/openai-gpt-4-turbo.yaml b/config/examples/openai-gpt-4-turbo.yaml new file mode 100644 index 000000000..5765f460e --- /dev/null +++ b/config/examples/openai-gpt-4-turbo.yaml @@ -0,0 +1,6 @@ +llm: + api_key: "YOUR_API_KEY" + model: "gpt-4-turbo" + #proxy: "http://:" + #base_url: "https:///v1" + diff --git a/config/examples/openrouter-llama3-70b-instruct.yaml b/config/examples/openrouter-llama3-70b-instruct.yaml new file mode 100644 index 000000000..1850d7f5c --- /dev/null +++ b/config/examples/openrouter-llama3-70b-instruct.yaml @@ -0,0 +1,5 @@ +llm: + api_type: openrouter + base_url: "https://openrouter.ai/api/v1" + api_key: "YOUR_API_KEY" + model: meta-llama/llama-3-70b-instruct \ No newline at end of file diff --git a/config/examples/spark_lite.yaml b/config/examples/spark_lite.yaml new file mode 100644 index 000000000..15898e019 --- /dev/null +++ b/config/examples/spark_lite.yaml @@ -0,0 +1,10 @@ +# 适用于讯飞星火的spark-lite 参考 https://www.xfyun.cn/doc/spark/Web.html#_2-function-call%E8%AF%B4%E6%98%8E + +llm: + api_type: "spark" + # 对应模型的url 参考 https://www.xfyun.cn/doc/spark/Web.html#_1-%E6%8E%A5%E5%8F%A3%E8%AF%B4%E6%98%8E + base_url: "ws(s)://spark-api.xf-yun.com/v1.1/chat" + app_id: "" + api_key: "" + api_secret: "" + domain: "general" # 取值为 [general,generalv2,generalv3,generalv3.5] 和url一一对应 diff --git a/config/puppeteer-config.json b/config/puppeteer-config.json index 7b2851c29..b74a514e7 100644 --- a/config/puppeteer-config.json +++ b/config/puppeteer-config.json @@ -1,6 +1,4 @@ { - "executablePath": "/usr/bin/chromium", - "args": [ - "--no-sandbox" - ] -} \ No newline at end of file + "executablePath": "/usr/bin/chromium", + "args": ["--no-sandbox"] +} diff --git a/docs/FAQ-EN.md b/docs/FAQ-EN.md index d3caa244e..f4c5fff15 100644 --- a/docs/FAQ-EN.md +++ b/docs/FAQ-EN.md @@ -38,9 +38,9 @@ ### Chief Evangelist (Monthly Rotation) ### FAQ 1. Code truncation/ Parsing failure: - 1. Check if it's due to exceeding length. Consider using the gpt-4-turbo-preview or other long token versions. + 1. Check if it's due to exceeding length. Consider using the gpt-4-turbo or other long token versions. 2. Success rate: - 1. There hasn't been a quantitative analysis yet, but the success rate of code generated by gpt-4-turbo-preview is significantly higher than that of gpt-3.5-turbo. + 1. There hasn't been a quantitative analysis yet, but the success rate of code generated by gpt-4-turbo is significantly higher than that of gpt-3.5-turbo. 3. Support for incremental, differential updates (if you wish to continue a half-done task): 1. There is now an experimental version. Specify `--inc --project-path ""` or `--inc --project-name ""` on the command line and enter the corresponding requirements to try it. 4. Can existing code be loaded? diff --git a/docs/README_CN.md b/docs/README_CN.md index 8aea5e4cb..4e7866d83 100644 --- a/docs/README_CN.md +++ b/docs/README_CN.md @@ -119,13 +119,12 @@ ## 引用 如果您在研究论文中使用 MetaGPT 或 Data Interpreter,请引用我们的工作: ```bibtex -@misc{hong2023metagpt, - title={MetaGPT: Meta Programming for Multi-Agent Collaborative Framework}, - author={Sirui Hong and Xiawu Zheng and Jonathan Chen and Yuheng Cheng and Jinlin Wang and Ceyao Zhang and Zili Wang and Steven Ka Shing Yau and Zijuan Lin and Liyang Zhou and Chenyu Ran and Lingfeng Xiao and Chenglin Wu}, - year={2023}, - eprint={2308.00352}, - archivePrefix={arXiv}, - primaryClass={cs.AI} +@inproceedings{hong2024metagpt, + title={Meta{GPT}: Meta Programming for A Multi-Agent Collaborative Framework}, + author={Sirui Hong and Mingchen Zhuge and Jonathan Chen and Xiawu Zheng and Yuheng Cheng and Jinlin Wang and Ceyao Zhang and Zili Wang and Steven Ka Shing Yau and Zijuan Lin and Liyang Zhou and Chenyu Ran and Lingfeng Xiao and Chenglin Wu and J{\"u}rgen Schmidhuber}, + booktitle={The Twelfth International Conference on Learning Representations}, + year={2024}, + url={https://openreview.net/forum?id=VtmBAGCN7o} } @misc{hong2024data, title={Data Interpreter: An LLM Agent For Data Science}, diff --git a/docs/README_JA.md b/docs/README_JA.md index 91155532b..8981361a8 100644 --- a/docs/README_JA.md +++ b/docs/README_JA.md @@ -298,13 +298,12 @@ ## 引用 研究論文でMetaGPTやData Interpreterを使用する場合は、以下のように当社の作業を引用してください: ```bibtex -@misc{hong2023metagpt, - title={MetaGPT: Meta Programming for A Multi-Agent Collaborative Framework}, - author={Sirui Hong and Mingchen Zhuge and Jonathan Chen and Xiawu Zheng and Yuheng Cheng and Ceyao Zhang and Jinlin Wang and Zili Wang and Steven Ka Shing Yau and Zijuan Lin and Liyang Zhou and Chenyu Ran and Lingfeng Xiao and Chenglin Wu and Jürgen Schmidhuber}, - year={2023}, - eprint={2308.00352}, - archivePrefix={arXiv}, - primaryClass={cs.AI} +@inproceedings{hong2024metagpt, + title={Meta{GPT}: Meta Programming for A Multi-Agent Collaborative Framework}, + author={Sirui Hong and Mingchen Zhuge and Jonathan Chen and Xiawu Zheng and Yuheng Cheng and Jinlin Wang and Ceyao Zhang and Zili Wang and Steven Ka Shing Yau and Zijuan Lin and Liyang Zhou and Chenyu Ran and Lingfeng Xiao and Chenglin Wu and J{\"u}rgen Schmidhuber}, + booktitle={The Twelfth International Conference on Learning Representations}, + year={2024}, + url={https://openreview.net/forum?id=VtmBAGCN7o} } @misc{hong2024data, title={Data Interpreter: An LLM Agent For Data Science}, diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index ec17cc0ce..452171971 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -55,29 +55,30 @@ ### Tasks 14. Implementation: AI training 15. ~~Implementation: Run code~~ (v0.2.1) 16. ~~Implementation: Web access~~ (v0.2.1) -5. Plugins: Compatibility with plugin system -6. Tools +5. Tools 1. ~~Support SERPER api~~ 2. ~~Support Selenium apis~~ 3. ~~Support Playwright apis~~ -7. Roles + 4. Plugins: Compatibility with plugin system +6. Roles 1. Perfect the action pool/skill pool for each role 2. E-commerce seller 3. ~~Data analyst~~ (v0.7.0) 4. News observer 5. ~~Institutional researcher~~ (v0.2.1) -8. Evaluation + 6. User +7. Evaluation 1. Support an evaluation on a game dataset (experimentation done with game agents) 2. Reproduce papers, implement full skill acquisition for a single game role, achieving SOTA results (experimentation done with game agents) 3. Support an evaluation on a math dataset (expected v0.8.0) 4. Reproduce papers, achieving SOTA results for current mathematical problem solving process (expected v0.8.0) -9. LLM - 1. Support Claude underlying API +8. LLM + 1. ~~Support Claude underlying API~~ 2. ~~Support Azure asynchronous API~~ - 3. Support streaming version of all APIs + 3. ~~Support streaming version of all APIs~~ 4. ~~Make gpt-3.5-turbo available (HARD)~~ -10. Other - 1. ~~Clean up existing unused code~~ - 2. ~~Unify all code styles and establish contribution standards~~ - 3. ~~Multi-language support~~ - 4. ~~Multi-programming-language support~~ +9. Other + 1. ~~Clean up existing unused code~~ + 2. ~~Unify all code styles and establish contribution standards~~ + 3. ~~Multi-language support~~ + 4. ~~Multi-programming-language support~~ \ No newline at end of file diff --git a/examples/android_assistant/requirements.txt b/examples/android_assistant/requirements.txt new file mode 100644 index 000000000..155863613 --- /dev/null +++ b/examples/android_assistant/requirements.txt @@ -0,0 +1,2 @@ +pyshine==0.0.9 +opencv-python==4.6.0.66 \ No newline at end of file diff --git a/examples/android_assistant/run_assistant.py b/examples/android_assistant/run_assistant.py new file mode 100644 index 000000000..7d5d4d5c8 --- /dev/null +++ b/examples/android_assistant/run_assistant.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : the entry of android assistant including learning and acting stage +# See the usage README inside `metagpt/ext/android_assistant` +# README see `metagpt/ext/android_assistant/README.md` + +import asyncio +from pathlib import Path + +import typer + +from metagpt.config2 import config +from metagpt.environment.android.android_env import AndroidEnv +from metagpt.ext.android_assistant.roles.android_assistant import AndroidAssistant +from metagpt.team import Team + +app = typer.Typer(add_completion=False, pretty_exceptions_show_locals=False) + + +@app.command("", help="Run a Android Assistant") +def startup( + task_desc: str = typer.Argument(help="the task description you want the android assistant to learn or act"), + n_round: int = typer.Option(default=20, help="The max round to do an app operation task."), + stage: str = typer.Option(default="learn", help="stage: learn / act"), + mode: str = typer.Option(default="auto", help="mode: auto / manual , when state=learn"), + app_name: str = typer.Option(default="demo", help="the name of app you want to run"), + investment: float = typer.Option(default=5.0, help="Dollar amount to invest in the AI company."), + refine_doc: bool = typer.Option( + default=False, help="Refine existing operation docs based on the latest observation if True." + ), + min_dist: int = typer.Option( + default=30, help="The minimum distance between elements to prevent overlapping during the labeling process." + ), + android_screenshot_dir: str = typer.Option( + default="/sdcard/Pictures/Screenshots", + help="The path to store screenshots on android device. Make sure it exists.", + ), + android_xml_dir: str = typer.Option( + default="/sdcard", + help="The path to store xml files for determining UI elements localtion. Make sure it exists.", + ), + device_id: str = typer.Option(default="emulator-5554", help="The Android device_id"), +): + config.extra = { + "stage": stage, + "mode": mode, + "app_name": app_name, + "task_desc": task_desc, + "refine_doc": refine_doc, + "min_dist": min_dist, + "android_screenshot_dir": android_screenshot_dir, + "android_xml_dir": android_xml_dir, + "device_id": device_id, + } + + team = Team( + env=AndroidEnv( + device_id=device_id, + xml_dir=Path(android_xml_dir), + screenshot_dir=Path(android_screenshot_dir), + ) + ) + + team.hire([AndroidAssistant(output_root_dir=Path(__file__).parent)]) + team.invest(investment) + team.run_project(idea=task_desc) + asyncio.run(team.run(n_round=n_round)) + + +if __name__ == "__main__": + app() diff --git a/examples/build_customized_agent.py b/examples/build_customized_agent.py index cfe264b47..7dab4833d 100644 --- a/examples/build_customized_agent.py +++ b/examples/build_customized_agent.py @@ -17,7 +17,7 @@ from metagpt.schema import Message class SimpleWriteCode(Action): PROMPT_TEMPLATE: str = """ - Write a python function that can {instruction} and provide two runnnable test cases. + Write a python function that can {instruction} and provide two runnable test cases. Return ```python your_code_here ``` with NO other texts, your code: """ diff --git a/examples/data/omniparse/test01.docx b/examples/data/omniparse/test01.docx new file mode 100644 index 000000000..7b6251799 Binary files /dev/null and b/examples/data/omniparse/test01.docx differ diff --git a/examples/data/omniparse/test02.pdf b/examples/data/omniparse/test02.pdf new file mode 100644 index 000000000..8cd15877f Binary files /dev/null and b/examples/data/omniparse/test02.pdf differ diff --git a/examples/data/omniparse/test03.mp4 b/examples/data/omniparse/test03.mp4 new file mode 100644 index 000000000..54746f45d Binary files /dev/null and b/examples/data/omniparse/test03.mp4 differ diff --git a/examples/data/omniparse/test04.mp3 b/examples/data/omniparse/test04.mp3 new file mode 100644 index 000000000..2c8e149d8 Binary files /dev/null and b/examples/data/omniparse/test04.mp3 differ diff --git a/examples/data/rag_bm/RGB_En/answer.json b/examples/data/rag_bm/RGB_En/answer.json new file mode 100644 index 000000000..96b76ff4d --- /dev/null +++ b/examples/data/rag_bm/RGB_En/answer.json @@ -0,0 +1,2102 @@ +[ + { + "question": "When is the premiere of 'Carole King & James Taylor: Just Call Out My Name'?", + "gt_answer": "January 2 2022", + "gt_reference": [ + "However, the concert tour took place in honor of the 40th anniversary. The two might have aged since they first performed together but neither Carole King nor James Taylor have lost a beat in all these years!The concert film includes the following songs:(You Make Me Feel Like) A Natural WomanSomething in the Way She MovesSo Far AwayCarolina in My MindCountry RoadSmackwater JackWhere You Lead (lyrics changed up as the city they’re playing in replaces New York)Your Smiling FaceBeautifulShower The PeopleWay Over YonderSweet Baby James (this kicks off the second half of the film)Up on the RoofIt’s Too LateFire and RainI Feel the Earth MoveYou’ve Got a FriendHow Sweet It Is (To Be Loved by You)You Can Close Your EyesMexico (end credits)DIRECTOR: Frank MarshallFEATURING: Carole King, James Taylor, Danny Kortchmar, Peter Asher, Russ Kunkel, Leland SklarADDITIONAL MUSICIANS: Andrea Zonn, Arnold McCuller, Kate Markowitz, Robbie KondorCarole King & James Taylor: Just Call Out My Name premiered January 2, 2022, at 9:00pm ET/PT on CNN. The film will be available on demand via cable/satellite systems, CNNgo platforms, and CNN mobile apps, beginning Monday, January 3, through Sunday, January 16." + ] + }, + { + "question": "The genre of the drama \"Good Sam\" is what?", + "gt_answer": "medical", + "gt_reference": [ + "The new CBS drama Good Sam is likely to draw viewers towards more shows that revolve around medical drama and family issues. Starring Jason Isaacs and Sophia Bush, Good Sam delves into the strenuous father-daughter relationship between Dr. Sam Griffith and Dr. Rob Griffith. Tensions increase as the duo also happen to work in the same hospital.  RELATED: 10 Medical Dramas That Are Better Than Grey's Anatomy Good Sam serves as an interesting watch for medical drama fans. So, it is natural for audiences to also check out other genre classics like Grey’s Anatomy and contemporary shows like The Good Doctor. At the same time, Good Sam’s complex family dynamics imply that viewers can also binge their way through some acclaimed “dysfunctional family dramas”. ABC's The Good Doctor's main character Shaun Murphy is a brilliant surgeon who relocates to a prestigious California hospital. Along with saving patient lives, he struggles to get over his troubled past and to counter his social insecurities. The show benefits greatly from Freddie Highmore’s committed performance as he emulates the optimistic nature of the lead character.  Fans of Good Sam must check out The Good Doctor for it shows how a doctor’s psyche can influence the operation. Even though Sam is still in her good-natured self, Rob is shown as a talented yet hot-headed surgeon." + ] + }, + { + "question": "Who won the 2022 Citrus Bowl?", + "gt_answer": "Kentucky Wildcats", + "gt_reference": [ + "The 2022 Citrus Bowl was a college football bowl game played on January 1, 2022, with kickoff at 1:00 p.m. EST and televised on ABC.[4] It was the 76th edition of the Citrus Bowl, and was one of the 2021–22 bowl games concluding the 2021 FBS football season. Sponsored by Vrbo, a vacation rental marketplace owned by the HomeAway division of Expedia, the game was officially known as the VRBO Citrus Bowl. In the first meeting between the two programs, the game featured the Kentucky Wildcats of the Southeastern Conference (SEC) and the Iowa Hawkeyes of the Big Ten Conference. Both teams received and accepted invitations on Sunday, December 5.[5] The Wildcats entered the Citrus Bowl with a 9–3 record (5–3 SEC) and a No. 22 ranking in the final CFP poll. Kentucky made its second Citrus Bowl appearance (2019). The Hawkeyes, winners of the Big Ten West Division, entered the Citrus Bowl with a 10–3 record (7–2 B1G) and a No. 15 ranking in the final CFP poll. Iowa also made its second Citrus Bowl appearance (2005). at Camping World Stadium • Orlando, Florida" + ] + }, + { + "question": "What position did Jason Semore hold at Valdosta State before returning to Georgia Tech?", + "gt_answer": "defensive coordinator", + "gt_reference": [ + "A hugely successful high school quarterback, he threw for over 5,300 yards and 59 touchdowns at North Florida Christian High School before spending the early part of his college career at FSU. However, it was at West Virginia where his playing career took off, leading the Big 12 in completion percentage in 2014 while becoming a semifinalist for the Davey O’Brien Award. A new addition to the Marshall coaching staff for the 2023 college football season, Jason Semore becomes the Thundering Herd’s defensive coordinator. He arrives in Huntington having spent the last season with Georgia Tech, the latest stop on a varied and successful coaching career that has seen him gain experience in multiple roles at several different levels of competition. A linebacker at Adams State from 2001-2005, Semore spent 2022 working with the Georgia Tech linebackers and was slated to become their special teams coordinator with responsibilities for nickel backs and safeties. Instead, he reprises a role he previously held at Valdosta State, Montana, and the Colorado School of Mines, in addition to co-DC duties at his alma mater. He has tasted success in each of those stints. Semore helped lead Colorado School of Mines to a 10-2 season, assisted Montana in achieving three consecutive winning seasons and top-ranked Big Sky defense, and his defense fueled a Valdosta State run to the DII title game in 2021." + ] + }, + { + "question": "How many vehicles did Tesla deliver in 2021?", + "gt_answer": "936,172", + "gt_reference": [ + "The EV maker doesn't disclose U.S.-only sales figures but claims sales for the year were up an amazing 87 percent in a turbulent marketplace. Anyone who thinks the legacy automakers are catching Tesla in the electric-vehicle sales race should take a quick look at some recently released figures. Over the weekend, Tesla announced it delivered 308,600 vehicles in the fourth quarter of 2021. Model S and Model X EVs made up 11,750 of those deliveries, while the bulk—296,850—were Model 3 and Model Y deliveries. These numbers brought Tesla's 2021 full-year deliveries to 936,172 vehicles. The 936,000 vehicle deliveries represent an 87 percent increase from 2020, Reuters and other news sources noted, based on Tesla's announcement dated January 2, while the 306,600 deliveries for the quarter mean that Tesla delivered 71 percent more electric vehicles in the fourth quarter of 2021 than it did a year earlier. Reuters reportssemiconductor chipsTesla doesn't break out its deliveries by country, but its sales are strongest in Europe and China, the notes. Tesla itself called those two regions \"important markets\" in its last SEC filing, but the U.S. is still the region where Tesla makes the most money. In the third quarter of 2021, for example, an shows Tesla made more than $6 billion in revenue in the U.S., compared to $3." + ] + }, + { + "question": "Which company acquired ShowBiz Cinemas?", + "gt_answer": "EVO Entertainment Group", + "gt_reference": [ + "Evo Entertainment Group has acquired 100 percent of the stock of Showbiz Cinemas in an all-cash deal. The companies did not disclose the full details of the acquisition. \"Today is a monumental moment for our company and our industry,” said Mitch Roberts, founder and CEO of Evo Entertainment Group and 2022 Forbes 30 Under 30 honoree. “This transaction establishes Evo as the country’s largest operator of cinema-entertainment centers and paves the way for accelerated progress and innovation within a new era of cinema.” Roberts and Kevin Mitchell, CEO and founder of Showbiz Cinemas, represent multiple generations in the cinema business. Their pioneering of cinema entertainment centers has been a genuine success. Said Mitchell, \"It is a wonderful time to entrust the company I started to a fourth-generation motion picture exhibitor and family member, because Showbiz Cinemas just had an all-time record-breaking holiday season! I am confident that Mitch’s leadership and Marbella’s capital strength will ensure a long and successful run for Showbiz, and I now look forward to exploring new ventures both in and out of the entertainment industry." + ] + }, + { + "question": "Where is the Super Bowl held in 2022?", + "gt_answer": "SoFi Stadium", + "gt_reference": [ + "Super Bowl LVI[12] was an American football game played to determine the champion of the National Football League (NFL) for the 2021 season. The National Football Conference (NFC) champion Los Angeles Rams defeated the American Football Conference (AFC) champion Cincinnati Bengals, 23–20. The game was played on February 13, 2022, at SoFi Stadium in Inglewood, California, the home stadium of the Rams, marking the second consecutive and second overall Super Bowl with a team playing and winning in its home stadium.[13][14][15][16] The Rams' victory was their second, first as a Los Angeles-based team, and first since winning 1999's Super Bowl XXXIV when they were based in St. Louis. Finishing with a 12–5 record, the Rams reached their fifth appearance after acquiring veteran quarterback Matthew Stafford, who had not won a playoff game in his previous 12 years with the Detroit Lions. The Bengals, who finished with a 10–7 record, were seeking their first Super Bowl title following several decades of losing seasons and playoff struggles. They won their first playoff game since 1990, ending the longest drought in the four major North American sports, en route to their third Super Bowl appearance and first since 1988's Super Bowl XXIII." + ] + }, + { + "question": "When will Truth Social launch on iOS?", + "gt_answer": "February 21", + "gt_reference": [ + "On February 21, 2022, Truth Social was released on Apple iOS,[98] reaching number one on the App Store's top charts.[99][100] Due to an extensive backlog of applicants, upon downloading the app, about 500,000 people who initially attempted to register as users were automatically waitlisted.[101][102][103] The app was installed 872,000 times during its first week, but a month later, new user signup had fallen to 60,000 per week. During that time, weekly visits to truthsocial.com fell from 6 million to fewer than 2 million.[104] Upon its launch, the British automotive solar power company Trailar complained Truth Social's app logo closely resembled its \"T\" logo.[105] The platform has been criticized for its poor performance at launch, with waitlisting users attempting to register and extended outages.[106] A day after its launch, The Washington Post described it as \"a disaster\".[101] A week after, Newsweek reported some early adopters were beginning to lose interest in the app due to low numbers of users and poor engagement, although others were willing to persevere with the app to see if things would improve.[107] The Truth Social platform suffered from severe and persistent problems with scalability at launch, limiting the platform's growth.[108][109]" + ] + }, + { + "question": "What won best drama at 79th Golden Globes?", + "gt_answer": "The Power of the Dog", + "gt_reference": [ + "Best Picture Drama: “The Power of the Dog” Jane Campion’s first film in more than a decade, “The Power of the Dog,” took home the most prestigious award of the night. “Power of the Dog” won Best Picture Drama, Best Director Motion Picture (Jane Campion), and Best Supporting Actor — Motion Picture (Kodi Smit-McPhee).  The acclaimed Netflix drama was the most-nominated movie along with “Belfast,” with each film earning seven nominations. Campion became the third woman to win in this category at Golden Globes. Best Television Series — Musical or Comedy: “Hacks” HBO Max’s “Hacks” won the main Television (Musical or Comedy) category and Best Actress — Comedy/Musical for star Jean Smart at the 79th Golden Globes Awards. While other shows in this category were also strong contenders, such as Apple TV+’s “Ted Lasso,” “Hacks” proved to be a favorite in this category with its first season. “Hacks can laugh all the way to the bank with this one,” announced the official Golden Globes account via Twitter. “Congratulations on taking home the #GoldenGlobe for Best Musical/Comedy Series.” Best Television Series — Drama: “Succession” HBO’s “Succession” was the big winner at this year’s Golden Globes, scooping three major categories." + ] + }, + { + "question": "How much are GA Tech softball 2022 season tickets?", + "gt_answer": "$100 per seat", + "gt_reference": [ + "THE FLATS – Georgia Tech softball 2023 season and single-game tickets are now on sale and can be purchased HERE. Season tickets are located in the reserved chairback sections of Mewborn Field and cost $100 per seat. Season ticket members enjoy every game in the same seat for a discounted rate. Single-game tickets are also available as detailed below. More ticketing information, including the steps to become a member of the Mew Crew and the benefits of joining, can be found on the official Georgia Tech Softball Tickets page. Single-Game Pricing: Reserved Chairback: $5 Adult GA Bench: $3 Youth/Senior GA Bench: $2 Group (10+) GA Bench: $2 Standing room only tickets will be sold for $2 each if all other sections are sold out. Georgia Tech students and faculty/staff can receive free admission to regular season home games while seats remain available by showing a valid BuzzCard at the entrance. Tech’s 56-game 2023 regular season schedule is highlighted by 33 home games and four Atlantic Coast Conference series at Mewborn Field. The Yellow Jackets will also host three home tournaments, most notably the ACC/B1G Challenge, as well as a pair of SEC schools, including this season’s edition of Clean, Old-Fashioned Hate. The White and Gold are slated to face six ranked opponents throughout the year, hosting four of them for eight total games." + ] + }, + { + "question": "When does the 2022 Olympic Winter Games end?", + "gt_answer": "February 20", + "gt_reference": [ + "The 2022 Winter Olympics (2022年冬季奥林匹克运动会), officially called the XXIV Olympic Winter Games (Chinese: 第二十四届冬季奥林匹克运动会; pinyin: Dì Èrshísì Jiè Dōngjì Àolínpǐkè Yùndònghuì) and commonly known as Beijing 2022 (北京2022), was an international winter multi-sport event held from 4 to 20 February 2022 in Beijing, China, and surrounding areas with competition in selected events beginning 2 February 2022.[1] It was the 24th edition of the Winter Olympic Games. Beijing was selected as host city in 2015 at the 128th IOC Session in Kuala Lumpur, Malaysia, marking its second time hosting the Olympics, and the last of three consecutive Olympics hosted in East Asia following the 2018 Winter Olympics in Pyeongchang County, South Korea, and the 2020 Summer Olympics in Tokyo, Japan. Having previously hosted the 2008 Summer Olympics, Beijing became the first city to have hosted both the Summer and Winter Olympics." + ] + }, + { + "question": "Who won the Spanish Super Cup 2022?", + "gt_answer": "Real Madrid", + "gt_reference": [ + "The two Spanish giants will meet in the Spanish Super Cup final for the eighth time with Real Madrid having won six and losing once. Get match time in India. Defending champions Real Madrid will take on arch-rivals Barcelona in the Supercopa de Espana 2022-23 final at the King Fahd International Stadium in Riyadh, Saudi Arabia on Sunday.  The Spanish Super Cup, changed from a two-team format to a four-team football tournament in 2019-20, features the winners and runners-up of La Liga and Copa del Rey.  Barcelona are the most successful team at the Spanish Super Cup football tournament with 13 titles. However, the Blaugrana have lost six of their seven Super Cup finals against Real Madrid and are still to win a title after the new four-team format was introduced.  Real Madrid and Barcelona booked their places for the first El Clasico of 2023 by beating Valencia and Real Betis in the semi-finals, respectively.  Real Madrid, who are one shy of equalling Barcelona’s record of 13 Super Cup titles, won their semi-final 4-2 in the penalty shootout after Karim Benzema’s first-half goal from the spot was cancelled out by Valencia in the second-half.  Barcelona, meanwhile, took the lead twice against Real Betis through Robert Lewandowski and Ansu Fati but had to win the match through penalties." + ] + }, + { + "question": "How much is Microsoft acquiring Activision Blizzard for?", + "gt_answer": "$68.7 billion", + "gt_reference": [ + "January 18, 2022\t\t\t \t\t\t | Microsoft News Center REDMOND, Wash. and Santa Monica, Calif. – Jan. 18, 2022 – With three billion people actively playing games today, and fueled by a new generation steeped in the joys of interactive entertainment, gaming is now the largest and fastest-growing form of entertainment. Today, Microsoft Corp. (Nasdaq: MSFT) announced plans to acquire Activision Blizzard Inc. (Nasdaq: ATVI), a leader in game development and interactive entertainment content publisher. This acquisition will accelerate the growth in Microsoft’s gaming business across mobile, PC, console and cloud and will provide building blocks for the metaverse. Microsoft will acquire Activision Blizzard for $95.00 per share, in an all-cash transaction valued at $68.7 billion, inclusive of Activision Blizzard’s net cash. When the transaction closes, Microsoft will become the world’s third-largest gaming company by revenue, behind Tencent and Sony. The planned acquisition includes iconic franchises from the Activision, Blizzard and King studios like “Warcraft,” “Diablo,” “Overwatch,” “Call of Duty” and “Candy Crush,” in addition to global eSports activities through Major League Gaming. The company has studios around the world with nearly 10,000 employees." + ] + }, + { + "question": "What is the price for a 30-second spot during the Super Bowl 2022?", + "gt_answer": "$6.5 million", + "gt_reference": [ + "A star-studded lineup of Super Bowl LVII commercials is set to hit our screens on Sunday. While millions of people will be tuning into the intense NFL action between the Kansas City Chiefs and Philadelphia Eagles, a large sum will be even more excited for the iconic commercials. The cost for a 30-second commercial during this year’s Super Bowl is reaching a record-high amount, with advertisers hoping their ad makes a bang for the viewers. Ahead of the game, let’s take a look at the costs of a Super Bowl commercial in 2023 and more history about the big game day ads: In 2023, a 30-second Super Bowl commercial costs a record-high average of $7 million, according to Forbes. In 2022, a 30-second commercial slot during the Super Bowl was $6.5 million, which was an increase from the $5.5 million asked for in 2021. Here were the prices in some recent previous years:  Connecting you to your favorite North Texas sports teams as well as sports news around the globe. There's a reason commercials during the Super Bowl have to refer to the event as the \"Big Game\" rather than \"Super Bowl LVII.\" The reason is that the term has been a registered NFL trademark since 1969, requiring commercials, radio hosts and other specific media personnel to pay to use the official name." + ] + }, + { + "question": "When is the Sports Star of the Year Awards Show 2022?", + "gt_answer": "May 26", + "gt_reference": [ + "(SSC/Alan Alabastro) The Seattle Sports Commission hosted the 87th annual Seattle Sports Star of the Year Awards Show at the Westin in Seattle, Wash. on May 26, 2022. (SSC/Alan Alabastro) The Seattle Sports Commission hosted the 87th annual Seattle Sports Star of the Year Awards Show at the Westin in Seattle, Wash. on May 26, 2022. (SSC/Alan Alabastro) The Seattle Sports Commission hosted the 87th annual Seattle Sports Star of the Year Awards Show at the Westin in Seattle, Wash. on May 26, 2022. (SSC/Alan Alabastro) The Seattle Sports Commission hosted the 87th annual Seattle Sports Star of the Year Awards Show at the Westin in Seattle, Wash. on May 26, 2022. (SSC/Alan Alabastro) The Seattle Sports Commission hosted the 87th annual Seattle Sports Star of the Year Awards Show at the Westin in Seattle, Wash. on May 26, 2022. (SSC/Alan Alabastro) The Seattle Sports Commission hosted the 87th annual Seattle Sports Star of the Year Awards Show at the Westin in Seattle, Wash. on May 26, 2022." + ] + }, + { + "question": "Who are the recipients of the 2022 Ivan Allen Jr. Prize for Social Courage?", + "gt_answer": "Lawrence Williams", + "gt_reference": [ + "January 21, 2022 Ford Greene, Ralph Long Jr., and Lawrence Williams, Georgia Tech’s first Black students, and Ronald Yancey, Tech’s first Black graduate, will receive the 2022 Ivan Allen Jr. Prize for Social Courage. The Ivan Allen Jr. Prize for Social Courage was established in 2010 to honor Tech alumnus and former Atlanta Mayor Ivan Allen Jr. Funded in perpetuity by a grant from the Wilbur and Hilda Glenn Family Foundation, the prize includes a $100,000 stipend for recipients. The inaugural prize was awarded in March 2011. It recognizes exemplary, courageous leaders — those who, like Mayor Allen, take on personal risks in an effort to improve the lives of others,” said Georgia Tech President Ángel Cabrera. “With great determination, Ford Greene, Ralph Long Jr., Lawrence Williams, and Ronald Yancey withstood hazards and adversity of every kind to prove to the world that Black students had the right to study at Georgia Tech, paving the way for the thousands of Black Yellow Jackets who have earned their degrees here since.” Greene, Long, and Williams, dubbed the “three pioneers” in the Harrison Square sculpture that depicts them on their first day at Tech, began classes in the fall of 1961. And, although their arrival didn’t elicit violence as it had at other southern universities, it was not easy." + ] + }, + { + "question": "What is the codename for Google's AR headset project?", + "gt_answer": "Project Iris", + "gt_reference": [ + "12] In January 2022, The Verge reported that Google was building an AR headset which used \"outward-facing cameras to blend computer graphics with a video feed of the real world\", internally codenamed Project Iris and being developed in a highly secretive and secure facility located in the San Francisco Bay Area. Overseen by Bavor, the headset was to be powered by the Android operating system as well as a custom system on a chip akin to Tensor, expected to launch in 2024 alongside Project Starline. Other key people named as part of the project include Shahram Izadi, Eddie Chung, Scott Huffman, Kurt Akeley, and Lucovsky.[13] An early prototype of the headset bore a close resemblance to the North Focals.[14] In March, The Information reported that Google would acquire Raxium, an AR hardware startup, for approximately $1 billion, and would continue to make further acquisitions to assist in their AR and mixed reality (MR) work.[15] The acquisition was completed a month later.[16] In May 2022, Google unveiled a different version of Iris resembling eyeglasses with live translation capabilities during the 2022 Google I/O keynote.[14][17][18] The company began publicly testing these prototypes across the U.S. in August,[19] before expanding into Canada in October.[20] According to Business Insider, Google executives' constantly changing strategy for Project Iris frustrated employees." + ] + }, + { + "question": "What is the name of Meta's AI supercomputer?", + "gt_answer": "RSC", + "gt_reference": [ + "Meta Unveils AI Supercomputer for the Metaverse \t\t\t\t\tThis item in \t\t\t\t\t \t\t\t\t\t\tjapanese \t\t\t\t\t Feb 01, 2022 \t\t\t\t\t\t\t\t \t\t\t\t\t\t\t\t \t\t\t\t\t\t\t\t \t\t\t\t\t\t\t\t\t \t\t\t\t\t\t\t\t\t2 \t\t\t\t\t\t\t\t\tmin read \t\t\t\t\t\t\t\t \t\t\t\t\t\t\t by Daniel Dominguez Meta has unveiled its AI Research SuperCluster (RSC) supercomputer, aimed at accelerating AI research and helping the company build the metaverse. The RSC will help the company build new and better AI models, working across hundreds of different languages, and to develop new augmented reality tools. Developing the next generation of advanced AI will require powerful new computers capable of quintillions of operations per second. Meta’s researchers have already started using RSC to train large models in natural-language processing (NLP) and computer vision for research, with the aim of one day training models with trillions of parameters across Meta’s businesses, from content-moderation algorithms used to detect hate speech on Facebook and Instagram, to augmented-reality features that will one day be available in the metaverse. RSC can train models that use multimodal signals to determine whether an action, sound or image is harmful or benign. Meta claims this will not only help keep people safe on Meta’s services today, but also in the metaverse." + ] + }, + { + "question": "When will American students start taking digital SAT exams?", + "gt_answer": "2024", + "gt_reference": [ + "We will continue to provide more information about the transition to the digital SAT Suite of Assessments throughout 2023 and early 2024. We are making a full transition to digital, so once we begin administering the SAT Suite digitally we will no longer offer a paper and pencil version of the tests. Though we will continue to support students who test with accommodations that require a paper and pencil test. That means:   Read more Students will be able to register for the first digital SAT administrations at international test centers starting in fall 2022. We’ll share more information about registration and administration dates later this year. We’re administering the digital SAT first at international test centers in spring 2023. It will then be offered in the U.S. beginning in spring 2024. Most students who take the SAT do so for the first time in the spring of their junior year. So, for students testing internationally, those in the class of 2024 will be the first to take the digital SAT. In the U.S., students in the high school class of 2025 will be the first class to take the digital SAT.  Students everywhere will take the digital PSAT 8/9 and PSAT/NMSQT starting in fall 2023. They will take the PSAT 10 starting in spring of 2024.   Read more" + ] + }, + { + "question": "When do the Paralympic Winter Games 2022 start?", + "gt_answer": "March 4", + "gt_reference": [ + "What may be the biggest Paralympic Winter Games in history is coming our way in March 2022. Get up to speed on when they're happening, what sports are being contested and more. The 2022 Winter Paralympics begin on March 4, 2022, and will be shown on NBC, Peacock, USA Network, Olympic Channel, NBCOlympics.com and the NBC Sports app. The 2022 Paralympic Winter Games will take place from Friday, March 4 - Sunday, March 13. The 2022 Winter Paralympics will feature a maximum of 736 Paralympians across 78 medal events. In addition to having 39 medal events for men, 35 events for women and 4 mixed events, there will be a maximum of 222 slots available for women. Paralympians will compete across six different Paralympic sports at the 2022 Winter Paralympics --  Alpine Skiing, Biathlon, Cross-Country Skiing, Sled Hockey, Snowboarding and Wheelchair Curling. Five events are on the Alpine Skiing program (Downhill, Super-G, Super Combined, Giant Slalom, Slalom) across three competition categories (standing, sitting and vision-impaired). Athletes combine speed and agility while racing down slopes at speeds of around 100km/h." + ] + }, + { + "question": "Super Bowl 2022 date", + "gt_answer": "February 13", + "gt_reference": [ + "What is the date and location of the 2022 Super Bowl, who will broadcast the game, what is the halftime show, and who are favorites to win? What is the location and date for the Super Bowl in 2022? After Super Bowl LV was held in Tampa Bay, where will the NFL’s flagship event be played in 2022, where will it be broadcast, who is performing the halftime show, and which teams are the favorite to square off? For years, the Super Bowl commences on the first Sunday in February. Yet, because money speaks louder than Stephen A. Smith with a microphone, the NFL expanded their season to 17 games. This pushes the league’s premier product to February 13, the latest in the game’s history. SoFi Stadium gets the nod to host the Super Bowl in 2022. SoFi sits in Inglewood, California, with a capacity of 70,000. However, it’s expandable to slightly over 100,000 for large events, such as a Super Bowl. It was supposed to host Super Bowl LV, but construction delays derailed that plan. Although Los Angeles originally won one of the bids from the cluster made available of LIII, LIV, and LV, they couldn’t host in 2021. The three Super Bowl hosts were chosen from a four-candidate pool. However, with the delay, all four locations got a spot." + ] + }, + { + "question": "Who won the 2022 Nobel Prize for chemistry?", + "gt_answer": "Carolyn R. Bertozzi", + "gt_reference": [ + "Advertisement Supported by Carolyn R. Bertozzi, Morten Meldal and K. Barry Sharpless were honored for their advances in “click chemistry,” which has played a role in treating and diagnosing illnesses. By Cora Engelbrecht, Euan Ward and Oliver Whang The 2022 Nobel Prize in Chemistry has been awarded to three scientists whose work harnessed the power of molecular interaction and introduced new, unobtrusive ways of studying the natural world. Carolyn R. Bertozzi of Stanford University, Morten Meldal of the University of Copenhagen and K. Barry Sharpless of Scripps Research will share the prize, which honors the scientists’ independent research that resulted in the development of what is known as click chemistry and bio-orthogonal chemistry. The three researchers will also split a prize of 10 million Swedish kronor, around $900,000. Their works have “led to a revolution in how chemists think about linking molecules together,” said Johan Aqvist, the chair of the Nobel Committee for Chemistry. In winning the award on Wednesday, Dr. Sharpless became only the fifth person to win two Nobels, having received the chemistry prize in 2001 for his work on chirally catalyzed oxidation reactions. The other two-time winners were Marie Curie, John Bardeen, Linus Pauling and Frederick Sanger. Dr." + ] + }, + { + "question": "Who won the Super Bowl 2022?", + "gt_answer": "Los Angeles Rams", + "gt_reference": [ + "Super Bowl LVI[12] was an American football game played to determine the champion of the National Football League (NFL) for the 2021 season. The National Football Conference (NFC) champion Los Angeles Rams defeated the American Football Conference (AFC) champion Cincinnati Bengals, 23–20. The game was played on February 13, 2022, at SoFi Stadium in Inglewood, California, the home stadium of the Rams, marking the second consecutive and second overall Super Bowl with a team playing and winning in its home stadium.[13][14][15][16] The Rams' victory was their second, first as a Los Angeles-based team, and first since winning 1999's Super Bowl XXXIV when they were based in St. Louis. Finishing with a 12–5 record, the Rams reached their fifth appearance after acquiring veteran quarterback Matthew Stafford, who had not won a playoff game in his previous 12 years with the Detroit Lions. The Bengals, who finished with a 10–7 record, were seeking their first Super Bowl title following several decades of losing seasons and playoff struggles. They won their first playoff game since 1990, ending the longest drought in the four major North American sports, en route to their third Super Bowl appearance and first since 1988's Super Bowl XXIII." + ] + }, + { + "question": "Who won women's 500m speed skating at the 2022 Winter Olympics?", + "gt_answer": "Erin Jackson", + "gt_reference": [ + "The women's 500 m competition in speed skating at the 2022 Winter Olympics was held on 13 February, at the National Speed Skating Oval (\"Ice Ribbon\") in Beijing.[1] Erin Jackson of the United States became the Olympic champion, winning her first Olympic medal. She was also the first female Black athlete to medal in speed skating.[2] Miho Takagi of Japan won the silver medal, and Angelina Golikova, representing the Russian Olympic committee, won bronze, also her first Olympic medal. The defending champion and the Olympic record holder was Nao Kodaira. The 2018 silver medalist, Lee Sang-hwa, retired from competitions. She was still the world record holder during the Olympics. The bronze medalist, Karolína Erbanová, retired as well. Golikova was the 2021 World Single Distances champion at the 500 m distance. Femke Kok and Olga Fatkulina were the silver and bronze medalist, respectively. Erin Jackson was leading the 2021–22 ISU Speed Skating World Cup at the 500 m distance with eight events completed before the Olympics, followed by Golikova and Kodaira. Golikova skated the season best time, 36.66 in Calgary on 11 December 2021.[3] Takagi in pair 4 became the early leader with 37.12." + ] + }, + { + "question": "When was Lost Ark game release on Steam?", + "gt_answer": "February 11 2022", + "gt_reference": [ + "Lost Ark was fully released in South Korea on December 4, 2019, and in North American, South American, and European regions on February 11, 2022, with Amazon Games serving as the global publisher.[16] Users that pre-purchased one of four founder's packs could play 3 days early on February 8, 2022.[17][18][19][20] The game was initially unavailable in Belgium and the Netherlands due to the countries' stringent loot box regulations,[21] with the latter later reversing its decision.[22] Within twenty-four hours of its release, Lost Ark became the second most played game on Steam.[23][24] In 2021, there were plans between Smilegate and game publisher HappyTuk [zh] to launch Lost Ark in Taiwan.[25] It was announced in 2023 that the release of Taiwanese servers has been delayed but not canceled.[26] Lost Ark received \"generally favorable\" reviews according to review aggregator Metacritic.[27] PC Magazine praised Lost Ark's combat, writing, \"Abilities look good, sound sufficiently powerful, and feel great to use. You can’t help but feel like a combat god when you divekick a crowd, and blast fodder monsters into bloody chunks." + ] + }, + { + "question": "What medals did Jessie Diggins win in the Beijing 2022 Olympic Games?", + "gt_answer": "silver", + "gt_reference": [ + "VTDigger \t\t\t\t\tNews in pursuit of truth\t\t\t\t Stratton-trained Jessie Diggins powered through food poisoning Sunday to win her second medal at the 2022 Beijing Winter Games. The 30-year-old cross-country skier, who snagged bronze in the individual sprint Feb. 8, took silver in the 30-kilometer freestyle race. “It’s really emotional,” she told NBC. “That was one of the hardest things I’ve ever done in my whole life, especially because I had food poisoning 30 hours ago, which is why I thought I was going to die at the finish line. My legs were cramping the whole last 17 kilometers. I don’t know how I made it.” With her victory, Diggins, who won gold in the 2018 women’s team sprint, now owns an Olympic medal in every color. “It’s been an emotional roller-coaster, but I am so happy we made it to the end,” Diggins told reporters. “To have a medal in the sprint and the 30K are the ultimate bookends for me. I have been trying to be a good all-round athlete my whole life, so this has been really cool.” Diggins finished the final cross-country race of the Beijing Olympics in 1 hour 26 minutes 37 seconds, less than two minutes behind Therese Johaug of Norway and 50 seconds ahead of third-place finisher Kerttu Niskanen of Finland." + ] + }, + { + "question": "What is the genre of The Endgame (TV show)?", + "gt_answer": "crime", + "gt_reference": [ + "The Endgame is an American crime drama thriller television series that premiered on NBC on February 21, 2022. The series is created by Nicholas Wootton and Jake Coburn.[1][2] In May 2022, the series was canceled after one season.[3] In this heist drama, criminal mastermind Elena Federova squares off against principled FBI agent Val Turner.[4] On April 21, 2021, The Untitled Nick Wootton/Jake Coburn Project was given a pilot order by NBC. It was created by Nicholas Wootton and Jake Coburn who were expected to executive produce alongside Julie Plec and Emily Cummins. Wootton also wrote the pilot.[5] On September 21, 2021, NBC ordered The Endgame to series. Justin Lin and Andrew Schneider were added as executive producers. Lin also directed the pilot. Universal Television, Nicholas Wootton Productions, Jake Coburn Productions, Inc., My So-Called Company, and Perfect Storm Entertainment are the production companies involved with producing the series.[1] Upon the series order, Morena Baccarin, Ryan Michelle Bathé, Kamal Angelo Bolden, Costa Ronin, Noah Bean, Jordan Johnson-Hinds, and Mark D. Espinoza were cast in starring roles.[6] On November 18, 2021, Karl Josef Co and Massiel Mordan were added to the cast." + ] + }, + { + "question": "When did Russia invade Ukraine?", + "gt_answer": "February 24", + "gt_reference": [ + "He falsely claimed they had been \"been facing humiliation and genocide perpetrated by the Kyiv regime\".[74] Putin also falsely claimed that Ukraine's government were neo-Nazis under Western control, that Ukraine was developing nuclear weapons, and that NATO was building up military infrastructure in Ukraine to threaten Russia.[75] He said Russia sought the \"demilitarisation and denazification\" of Ukraine.[76] Putin said he had no plans to occupy Ukraine and supported the right of the Ukrainian people to self-determination.[75] Within minutes of Putin's announcement, Russian missiles struck targets throughout Ukraine,[77] and Russian troops invaded from the north, east and south.[78] Later an alleged report from Russia's Federal Security Service (FSB) was leaked, claiming that the intelligence agency had not been aware of Putin's plan to invade Ukraine.[79] The invasion began at dawn on 24 February,[72] with infantry divisions and armoured and air support in Eastern Ukraine, and dozens of missile attacks across Ukraine,[80][81] which reached as far west as Lviv.[82][83] The first fighting took place in Luhansk Oblast near Milove village on the border with Russia at 3:40 a.m. Kyiv time." + ] + }, + { + "question": "When was Elden Ring being released?", + "gt_answer": "February 25", + "gt_reference": [ + "“What this represented in them is this sort of golden light, or this golden aura, that’s specifically shown in their eyes. And this symbolises the blessing or the grace of the Erdtree. However, after a time, there were some individuals who lost this grace, and the light faded from their eyes. And these are what are known as the Tarnished.” The Tarnished were banished and exiled from the game’s world many years prior to when you – the player – will enter it. Since their ex-communication, the eponymous Elden Ring has of course been shattered and now the Tarnished are being summoned back to The Lands Between. So what are you waiting for? Get pre-ordering and we’ll see you on the other side… Elden Ring is released on February 25, 2022, hitting PS4, PS5, Xbox One, Xbox Series X, and PC. Keep an eye here for more updates. The world’s defining voice in music and pop culture: breaking what’s new and what’s next since 1952. When you purchase through links on our site, we may earn an affiliate commission. © 2023 NME is part of NME Networks." + ] + }, + { + "question": "Who did Iga Swiatek defeat to win the Qatar Open 2022?", + "gt_answer": "Anett Kontaveit", + "gt_reference": [ + "3: Top 10 players Swiatek defeated en route to her first title of the season in Doha. The win is the second WTA 1000 title of her career.  0: Wins for Swiatek against Maria Sakkari (0-3) and Aryna Sabalenka (0-1) going into Doha. After beating them in back-to-back matches in Doha, she has not lost to either player since. 1: Set lost by Swiatek in Doha, which came to Viktorija Golubic in the first round.  2: Games lost in the final against Anett Kontaveit.  Champions Corner: Swiatek's 'surreal' Indian Wells 20: Wins for Swiatek in 2022 after defeating Maria Sakkari 6-4, 6-1 in the final, the most on tour.  2: Swiatek's new career-high ranking after winning her second-straight WTA 1000 title. 3: Comebacks from a set down for Swiatek in Indian Wells, doing so to beat Anhelina Kalinina, Clara Tauson and Angelique Kerber in her first three matches. She has had seven such comebacks in 2022. Prior to this season, she had just eight in her career.  11: Consecutive wins for Swiatek, tying then No." + ] + }, + { + "question": "Which country won the most medals at the 2022 Winter Olympics?", + "gt_answer": "Norway", + "gt_reference": [ + "Published on 2/21/2022 at 11:04 AM The 2022 Beijing Winter Olympics have ended after over two weeks of some dramatic, inspiring, and comedic moments. The medals given out during these games were are made up of five rings and a center and are called \"Tong Xin,\" which means \"together as one.\" Unlike during the summer games in Tokyo just last year, the top gold medal winner of the winter games is not the most expected. Instead, the biggest gold medal winner of the 2022 Olympics is Norway. Overall, the nation took home significantly more medals than its competitors. Here's the breakdown of the five countries that won the biggest. Gold: 16Silver: 8Bronze: 13Total: 37 Gold: 6Silver: 12Bronze: 14Total: 32 Gold: 12Silver: 10Bronze: 5Total: 27 Gold: 4Silver: 8Bronze: 14Total: 26 Gold: 8Silver: 10Bronze: 7Total: 25 When it came to which countries won the most medals overall, Norway came in first. The Russian Olympic Committee (the unofficial team representing Russia's athletes) came in second with 32 medals. In third place was Germany, with 27 medals. Canada was next with 26 medals, and the US trailed behind with 25 medals." + ] + }, + { + "question": "Who won the Male Vocalist of the Year at the 2022 CMA ?", + "gt_answer": "Chris Stapleton", + "gt_reference": [ + "Chris Stapleton won the trophy for Male Vocalist of the Year at the 2022 CMA Awards, beating out fellow nominees Eric Church, Luke Combs, Cody Johnson and Morgan Wallen.  Visibly moved by the win, Stapleton used the opportunity to share his appreciation with those who have supported his career through the years. \"This is a dream every minute we get to live this,\" he told the crowd during his acceptance speech. \"I'm evidence that dreams come true all the time, so thank you, thank you to everybody.\" Stapleton's Wednesday night win marks the second consecutive year that he has won the Male Vocalist of the Year trophy, and his sixth win in the category overall. From 2015 to 2018, the singer had a hot streak as Male Vocalist, but Combs toppled his reign for two years in 2019 and 2020. Still, in 2022, Stapleton's steady traditionalism and consistency as a live act won the day. Together with his All-American Road Show, the singer has been one of country music's most prolific and reliable touring acts this year, and he is even the subject of a current Country Music Hall of Fame exhibit. Early in the year, he won three Grammy Awards, including Best Country Album for his late 2020 project, Starting Over. The 2022 CMA Awards aired live from Nashville's Bridgestone Arena on ABC." + ] + }, + { + "question": "Who won the ACC Tournament in 2022?", + "gt_answer": "Virginia Tech", + "gt_reference": [ + "The 2022 ACC men's basketball tournament (officially the 2022 New York Life ACC Men's Basketball Tournament, for sponsorship reasons) was the postseason men's basketball tournament for the 2021–22 Atlantic Coast Conference men's basketball season. It was held at the Barclays Center in Brooklyn, New York, during March 8–12, 2022.[1] The 2022 tournament was the 69th annual edition of the tournament. The Virginia Tech Hokies won the tournament, their first ACC Tournament title and only their second conference tournament title in program history, receiving the conference's automatic bid to the 2022 NCAA tournament. The Hokies were the second ACC champion to win four tournament games to secure the title and were the lowest overall seed to win the title.[2] All 15 ACC teams participate in the tournament. Teams were seeded by conference record, with a tiebreaker system to seed teams that finished with identical conference records.[3] Duke secured the regular season title and the first overall seed. Notre Dame, North Carolina, and Miami were the other teams to secure double-byes.[4] ‡ – ACC Regular Season Champions.† – Received a double-bye in the conference tournament.# – Received a single-bye in the conference tournament. * – Denotes overtime period Tournament MVP: Hunter Cattoor, Virginia Tech All-Tournament Teams:[5]" + ] + }, + { + "question": "What chip does the iPhone 14 have?", + "gt_answer": "A15", + "gt_reference": [ + "Apple started taking pre-orders on September 9, with general availability from September 16 for the iPhone 14 and October 7 for the iPhone 14 Plus.[22] The iPhone 14 and iPhone 14 Plus have an identical design to the iPhone 13, although the US models lack a physical SIM tray. The iPhone 14 and iPhone 14 Plus are available in six colors: Blue, Purple, Midnight, Starlight, Yellow, and Product Red.[24] Purple is a new color replacing Pink used on the iPhone 13 and iPhone 13 Mini. The yellow option was added on March 7, 2023.[25] iPhone 14 and 14 Plus are available in three internal storage configurations: 128, 256, and 512 GB. Both models have 6 GB of RAM, an increase over the previous iPhone 13 and 13 mini models' 4 GB of RAM. The iPhone 14 and 14 Plus have the same IP68 rating for dust and water resistance as their predecessors.[6] The iPhone 14 and 14 Plus use a 5-nanometer Apple-designed system on a chip, the A15 Bionic, while the iPhone 14 Pro and 14 Pro Max have a faster A16 Bionic.[26][27] The iPhone 14's A15 chip has a 6-core CPU, 5-core GPU, and a 16-core Neural Engine." + ] + }, + { + "question": "When is Google I/O 2022 scheduled to take place?", + "gt_answer": "May 11", + "gt_reference": [ + "Google has released the Google I/O 2022 schedule, giving us a brief overview of what to expect. Read on to know more. We’re just two weeks away from Google I/O 2022. While the yearly event is primarily targeted at developers, there will be plenty of fun stuff for enthusiasts and the general public. Google usually doesn’t reveal much about what it plans to announce at the event. However, the company has now released the Google I/O 2022 schedule, giving us a brief overview of what to expect. Google I/O 2022 will be held on May 11 and May 12 at the Shoreline Amphitheater. The event will kick off with Sundar Pichai’s “Google I/O keynote” at 10 AM. This will be the main attraction for the general population as the main event tends to be more consumer-focused. While the event’s description doesn’t provide specifics, expect to see announcements for popular Google services, Workspace, privacy, health, and Google’s other new projects and endeavors. Also, keep an eye out for potential hardware announcements in the form of the Pixel 6a, Pixel Watch, and smart home devices. The main keynote will be followed by the Developer keynote and “What’s new in Android.” This is where we expect to learn more about Android 13, Wear OS, and updates to developer products and tools. Google says the schedule is slightly different this year." + ] + }, + { + "question": "who will direct Irredeemable film?", + "gt_answer": "Jeymes Samuel", + "gt_reference": [ + "Netflix to Develop Film Adaptation of Irredeemable and Incorruptible Graphic Novel Series with The Harder They Fall Director Jeymes Samuel & Academy Award-Nominated Screenwriter Kemp Powers BAFTA Film Award winner Jeymes Samuel (The Harder They Fall) is set to direct a film adaptation of the BOOM! Studios’ graphic novel series Irredeemable and its spin-off Incorruptible for Netflix. Academy Award nominated Kemp Powers (writer of One Night in Miami and Soul and director of the upcoming Spider-Man: Across the Spider-Verse (Part One) with Joaquim Dos Santos & Justin Thompson) will pen the adaptation, which will have the protagonists from each series – one a villain on a quest to become a superhero, and the other a fallen hero turned villain – face off. The film will be produced by Shawn Carter, James Lassiter, and Stephen Christy & Ross Richie for BOOM! Studios. Kemp Powers and Adam Yoelin are executive producers on the film. Mette Norkjaer will oversee the project for BOOM! Studios. When the world’s most powerful and beloved superhero, the god-like Plutonian, inexplicably begins slaughtering everyone on Earth, the only person that can stop him is his former arch-nemesis, the super-powered villain Max Damage." + ] + }, + { + "question": "What is the name of China's rover on Mars?", + "gt_answer": "Zhurong", + "gt_reference": [ + "39][40] Tianwen-1's rover is named Zhurong (Chinese: 祝融号), after a Chinese mytho-historical figure usually associated with fire and light.[41] The name was chosen through an online poll held from January to February 2021.[42] China's Mars program started in partnership with Russia. In November 2011, the Russian spacecraft Fobos-Grunt, destined for Mars and Phobos, was launched from Baikonur Cosmodrome. The Russian spacecraft carried with it an attached secondary spacecraft, the Yinghuo-1, which was intended to become China's first Mars orbiter (Fobos-Grunt also carried experiments from the Bulgarian Academy of Sciences and the American Planetary Society). However, Fobos-Grunt's main propulsion unit failed to boost the Mars-bound stack from its initial Earth parking orbit and the combined multinational spacecraft and experiments eventually reentered the atmosphere of Earth in January 2012.[citation needed] In 2014, China subsequently began an independent Mars project.[43] The new Mars spacecraft, consisting of an orbiter and a lander with an attached rover, was developed by the China Aerospace Science and Technology Corporation (CASC) and is managed by the National Space Science Centre (NSSC) in Beijing.[44] The mission was formally approved in 2016.[45]" + ] + }, + { + "question": "Who is being honored with the 2022 Warrior Award?", + "gt_answer": "Shad Gaspard", + "gt_reference": [ + "Shad Gaspard has been posthumously named the recipient of the 2022 Warrior Award. Named after WWE Hall of Famer The Ultimate Warrior, The Warrior Award is presented to an individual who has exhibited unwavering strength and perseverance and who lives life with the courage and compassion that embodies the indomitable spirit of The Ultimate Warrior. The news was first reported by Foxsports.com. The Warrior Award presentation will be part of the WWE Hall of Fame Induction Ceremony, Friday, April 1, at American Airlines Center in Dallas as part of WrestleMania Week. The event will stream live exclusively on Peacock in the U.S. and WWE Network everywhere else. A larger-than-life Superstar with boundless charisma, Shad passed away on May 17, 2020. While swimming with his son, the pair got caught in a strong current in Venice Beach, Cal. In a heroic act of love, the concerned father instructed lifeguards to save his son before himself and disappeared soon after. Days later, his passing was confirmed. He was 39 years old. Shad’s bravery and selflessness will be honored next Friday with the 2022 Warrior Award as part of the 2022 WWE Hall of Fame Induction Ceremony. WWE Global Ambassador Titus O’Neil has been named the recipient of the 2020 Warrior Award. Longtime WWE employee Rich Hering has been named the recipient of the 2021 Warrior Award." + ] + }, + { + "question": "What is the weight of the Surface Laptop SE?", + "gt_answer": "2.45", + "gt_reference": [ + "2x7.6x0.7 inchesWEIGHT: 2.45 pounds LEARN MORE: Make the right decision when making purchasing decisions. Unlike most other computing devices, the Microsoft Surface Laptop SE is designed to be fully accessible for onsite repairs of common components, so students likely won’t have to wait to get back to work if their SE breaks. With no moving parts and a strong chassis, the Microsoft Surface Laptop SE is about as tough as a laptop can be without adding specifically ruggedized components. And while elementary education is hardly a war zone, younger students likely don’t treat their devices with as much care as adults. Microsoft talked with school administrators, teachers and IT professionals working with students ranging in age from kindergarten to eighth grade. It quickly became apparent that three key items — the screen, keyboard and battery — were the most commonly damaged or broken components on classroom laptops, especially in devices that also went home with students. Those three components made up 85 percent of all repair orders, and the repair process itself was also a detriment to education. Normally, broken units must be shipped to a factory or repair center that might take a week or longer to ship the device back — meaning broken laptops were not available to students for extended periods. The shipping costs also were often the responsibility of the school. Microsoft has revolutionized that process with the Microsoft Surface Laptop SE." + ] + }, + { + "question": "Who stars in The Lost City?", + "gt_answer": "Sandra Bullock", + "gt_reference": [ + "The Lost City features Sandra Bullock, Channing Tatum, and Daniel Radcliffe, among a few other actors. Check out some fun facts about the cast. The 2022 film The Lost City is the perfect combination of comedy, adventure, romance, and an incredibly talented cast capable of pulling off any role. This film directed by Adam and Aaron Nee, from a story by Seth Gordon, features Loretta Sage, a brilliant author who writes romance novels set in exotic locations featuring Dr. Angela Lovemore and her romantic interest, Dash McMahon. But Loretta's real life bears no resemblance to the things she writes: after her husband's death, she became a reclusive, grumpy woman who is not even eager to write anymore. Halfway through a promotional tour for her latest novel, Loretta is kidnapped by a lunatic billionaire who wants her to lead him to a lost city treasure she depicted in her book. Fortunately, Loretta won't be alone: Alan, the cover model of her books, sets out on a journey to rescue her and demonstrate that he can also be a hero. Sandra Bullock and Channing Tatum headline this blockbuster alongside Daniel Radcliffe, Da'Vine Joy Randolph, Brad Pitt, and Oscar Nunez, among other actors. The Lost City was released in March 2022 and quickly became a box office hit." + ] + }, + { + "question": "What happened at the Academy Awards involving Will Smith and Chris Rock?", + "gt_answer": "slapped", + "gt_reference": [ + "Filed under: What the American Oscars telecast cut from the Will Smith-Chris Rock confrontation. Will Smith has been banned from the Oscars for 10 years after slapping Chris Rock live on camera during the award show, the New York Times reports. The incident came in the final hour of an otherwise sleepy Oscars telecast on March 27. Rock made a joke about Smith’s wife, Jada Pinkett Smith, and Smith took the stage and slapped him. Minutes later, Smith won his first ever Oscar. “I did not know this was gonna be the most exciting Oscars ever,” marveled Diddy shortly after. “This action we are taking today in response to Will Smith’s behavior is a step toward a larger goal of protecting the safety of our performers and guests, and restoring trust in the Academy,” the Academy of Motion Picture Arts and Sciences said in an open letter on April 8. “We also hope this can begin a time of healing and restoration for all involved and impacted.” Smith, who resigned from the Academy on April 1, said in a statement, “I accept and respect the Academy’s decision.” Here’s what happened. Chris Rock was appearing at the Oscars to announce the winner for Best Documentary. In the leadup to announcing the nominees, he went through a little comedic patter about some of the nominees, and his attention appeared to snag on Smith’s wife, Jada Pinkett Smith, sitting in front in a green gown with a shaved head." + ] + }, + { + "question": "When did Apple M2 chip?", + "gt_answer": "June 6", + "gt_reference": [ + "Apple M2 is a series of ARM-based system on a chip (SoC) designed by Apple Inc. as a central processing unit (CPU) and graphics processing unit (GPU) for its Mac desktops and notebooks, and the iPad Pro tablet. It is the second generation of ARM architecture intended for Apple's Mac computers after switching from Intel Core to Apple silicon, succeeding the M1. Apple announced the M2 on June 6, 2022, at WWDC, along with models of the MacBook Air and the 13-inch MacBook Pro using the M2. The M2 is made with TSMC's \"Enhanced 5-nanometer technology\" N5P process and contains 20 billion transistors, a 25% increase from the M1. Apple claims CPU improvements up to 18% and GPU improvements up to 35% compared to the M1.[3] The M2 was followed by the professional-focused M2 Pro and M2 Max chips in January 2023. The M2 Max is a higher-powered version of the M2 Pro, with more GPU cores and memory bandwidth, and a larger die size.[4] Apple introduced the M2 Ultra in June 2023, combining two M2 Max chips in one package.[1]" + ] + }, + { + "question": "What film won the 2022 Academy Award for Best Picture?", + "gt_answer": "CODA", + "gt_reference": [ + "CODA is the Oscars 2022 Best Picture Oscar winner! Ten films competed to take home the most prestigious award in film, the Oscar, with the winner revealed when The Oscars aired LIVE SUNDAY, MARCH 27 on ABC. The nominees for Best Picture were: BELFAST, CODA, DON'T LOOK UP, DRIVE MY CAR, DUNE, KING RICHARD, LICORICE PIZZA, NIGHTMARE ALLEY, THE POWER OF THE DOG and WEST SIDE STORY. THE POWER OF THE DOG had the most nominations, having been nominated for 12 Academy Awards. NIGHTMARE ALLEY was the fourth Best Picture nomination for Bradley Cooper, having previously been nominated for AMERICAN SNIPER (2014), A STAR IS BORN (2018) and JOKER (2019). WEST SIDE STORY was Steven Spielberg's 11th Best Picture nomination, which is a record for an individual producer. For all the details, you can read more about the Oscars 2022 Best Picture nominees below. You can also explore other Oscars 2022 nominees and see the complete Oscars 2022 nominations list right here on Oscar.com." + ] + }, + { + "question": "When will the 94th Academy Awards be held?", + "gt_answer": "March 27", + "gt_reference": [ + "Kong\" \"The Matrix Resurrections\" \"No Time to Die\" \"Shang-Chi and the Legend of the Ten Rings\" \"Spider-Man: No Way Home\" Download   Nominations voting begins on Thursday, January 27, 2022, and concludes on Tuesday, February 1, 2022. Nominations for the 94th Academy Awards will be announced on Tuesday, February 8, 2022. The 94th Oscars® will be held on Sunday, March 27, 2022, at the Dolby® Theatre at Hollywood & Highland® in Hollywood and will be televised live on ABC and in more than 200 territories worldwide.   FOLLOW THE ACADEMYwww.oscars.orgwww.facebook.com/TheAcademywww.youtube.com/Oscarswww.twitter.com/TheAcademywww.instagram." + ] + }, + { + "question": "When was A House Between the Earth and the Moon published?", + "gt_answer": "March 29", + "gt_reference": [ + "Mar 29, 2022 | ISBN 9781101980118 Buy from Other Retailers: Mar 29, 2022 | ISBN 9780593553077 700 Minutes Buy from Other Retailers: “Inventive and thrilling. . . . I couldn’t put it down.” —Brit Bennett, #1 New York Times bestselling author of The Vanishing Half“It’s a thrill to read this novel.” —Jia Tolentino, New York Times bestselling author of Trick MirrorThe gripping story of one scientist in outer space, another who watches over him, the family left behind, and the lengths people will go to protect the people and planet they loveFor twenty years, Alex has believed that his gene-edited superalgae will slow and even reverse the effects of climate change. His obsession with his research has jeopardized his marriage, his relationships with his kids, and his own professional future. When the Son sisters, founders of the colossal tech company Sensus, offer him a chance to complete his research, he seizes the opportunity. The catch? His lab will be in outer space on Parallaxis, the first-ever luxury residential space station built for billionaires. Alex and six other scientists leave Earth and their loved ones to become Pioneers, the beta tenants of Parallaxis. But Parallaxis is not the space palace they were sold." + ] + }, + { + "question": "Which alnum won the Album of the Year GRAMMYs 2022", + "gt_answer": "We are", + "gt_reference": [ + "After finding a new date and host city (thanks COVID-19) the 2022 Grammys officially went down in Las Vegas. Going into the night, Late Night with Stephen Colbert bandleader, Jon Batiste had the spotlight, clocking in with a whopping 11 nods in a number of genres. Batiste would end up being a big winner, picking up five 2022 Grammy Awards, including Album of the Year. Doja Cat came into the night with eight nominations. She picked up a W for Best Pop Duo, for her hit \"Kiss Me More\" It was also a big night for Silk Sonic, who came into the night with four nominations. They swept the night, including Record of the Year and Song of the Year. Best Rap Album was announced before the show and it went to Tyler, the Creator for his unofficial Gangsta GrillzalbumCALL ME IF YOU GET LOST. In one of the most surprising moments of the night, Baby Keem and his cousin Kendrick Lamar won the Best Rap Performance Grammy for \"Family Ties.\" Scroll down to see the list of 2022 Grammys winners. Jon Batiste - We Are  Tony Bennett and Lady Gaga - Love For Sale Justin Bieber - Justice (Triple Chucks Deluxe)  Doja Cat - Planet Her Billie Eilish - Happier Than Ever H.E.R." + ] + }, + { + "question": "When is the final of the 2022 FIFA World Cup?", + "gt_answer": "December 18", + "gt_reference": [ + "16] The defending champions were France, who defeated Croatia 4–2 in the 2018 FIFA World Cup Final.[17][18] The event was scheduled to take place under a reduced length,[19] from 20 November to 18 December in Qatar.[20][21][22] Being held in Qatar, it was the first World Cup tournament to be held in the Arab world.[23] Spectators were not required to follow most COVID-19 pandemic restrictions such as social distancing, wearing masks, and negative tests.[24] Unlike previous FIFA World Cups, which are typically played in June and July, because of Qatar's intense summer heat and often fairly high humidity,[2][21][25] the 2022 World Cup was played in November and December.[5][26] As a result, the World Cup was unusually staged in the middle of the seasons of many domestic association football leagues, which started in late July or August, including all of the major European leagues, which had been obliged to incorporate extended breaks into their domestic schedules to accommodate the World Cup. Major European competitions had scheduled their respective competitions group matches to be played before the World Cup, to avoid playing group matches the following year.[27] The match schedule was confirmed by FIFA in July 2020.[28] The group stage was set to begin on 21 November, with four matches every day." + ] + }, + { + "question": "How many vehicles did Tesla deliver in the first quarter of 2022?", + "gt_answer": "310,048", + "gt_reference": [ + "Checking Accounts Best Credit Cards for Small Business Best Small Business Loans Best Tax Software for Small Business SELECT All Taxes Best Tax Software Best Tax Software for Small Businesses Tax Refunds SELECT All Help for Low Credit Scores Best Credit Cards for Bad Credit Best Personal Loans for Bad Credit Best Debt Consolidation Loans for Bad Credit Personal Loans if You Don't Have Credit Best Credit Cards for Building Credit Personal Loans for 580 Credit Score or Lower Personal Loans for 670 Credit Score or Lower Best Mortgages for Bad Credit Best Hardship Loans How to Boost Your Credit Score SELECT All Investing Best IRA Accounts Best Roth IRA Accounts Best Investing Apps Best Free Stock Trading Platforms Best Robo-Advisors Index Funds Mutual Funds ETFs Bonds Tesla just reported first-quarter vehicle production and delivery numbers for 2022. Here's how they did. Electric vehicle deliveries (total): 310,048 Electric vehicle production (total): 305,407 Over the same period last year, Tesla delivered 184,800 electric vehicles and produced 180,338 cars. Model 3 and Model Y vehicles comprised 95%, or 295,324, of deliveries in the first quarter of 2022, according to Tesla. The company produced 4,641 fewer cars than it delivered during the quarter citing \"ongoing supply chain challenges and factory shutdowns.\" Analysts expected deliveries of 317,000 vehicles for the first three months of 2022, according to estimates compiled by FactSet as of March 31." + ] + }, + { + "question": "Who acquired Twitter?", + "gt_answer": "Elon Musk", + "gt_reference": [ + "Searching for your content... In-Language News Contact Us 888-776-0942 from 8 AM - 10 PM ET News provided by 25 Apr, 2022, 14:50 ET Share this article SAN FRANCISCO, April 25, 2022 /PRNewswire/ -- Twitter, Inc. (NYSE: TWTR) today announced that it has entered into a definitive agreement to be acquired by an entity wholly owned by Elon Musk, for $54.20 per share in cash in a transaction valued at approximately $44 billion. Upon completion of the transaction, Twitter will become a privately held company. Under the terms of the agreement, Twitter stockholders will receive $54.20 in cash for each share of Twitter common stock that they own upon closing of the proposed transaction. The purchase price represents a 38% premium to Twitter's closing stock price on April 1, 2022, which was the last trading day before Mr. Musk disclosed his approximately 9% stake in Twitter. Bret Taylor, Twitter's Independent Board Chair, said, \"The Twitter Board conducted a thoughtful and comprehensive process to assess Elon's proposal with a deliberate focus on value, certainty, and financing. The proposed transaction will deliver a substantial cash premium, and we believe it is the best path forward for Twitter's stockholders.\" Parag Agrawal, Twitter's CEO, said, \"Twitter has a purpose and relevance that impacts the entire world." + ] + }, + { + "question": "How much did Elon Musk bought Twitter?", + "gt_answer": "44 billion", + "gt_reference": [ + "Musk's acquisition of the social media company has been mired in controversy. The richest person in the world said he wanted to own one of the most popular social media platforms -- until he said he didn't. In early October, he reversed course again, saying he wanted to complete the deal. On Oct. 28, he finally did. Tesla CEO Elon Musk completed the deal to acquire Twitter at his original offer price of $54.20 a share at a total cost of roughly $44 billion. In the ensuing days, Musk fired top executives, laid off half of the company's staff, formed a content moderation council that will review account reinstatements and revamped the platform's subscription service. The changes at Twitter mark the latest chapter in a monthslong saga that began in January when Musk started investing in the social media company. Musk reached an acquisition deal with Twitter in April, but over the ensuing weeks, he raised concerns over spam accounts on the platform, claiming Twitter had not provided him with an accurate estimate of their number. Twitter rebuked that claim, saying it has provided Musk with information in accordance with conditions set out in the acquisition deal." + ] + }, + { + "question": "Who won the 2022 Masters Tournament?", + "gt_answer": "Scottie Scheffler", + "gt_reference": [ + "The 2022 Masters Tournament was the 86th edition of the Masters Tournament, the first of the four major golf championships of 2022, held April 7–10 at the Augusta National Golf Club in Augusta, Georgia. For the first time since the 2019 tournament, attendance returned to full capacity with maximum of 40,000 spectators per day; the traditional par-3 contest also returned.[1][2] Scottie Scheffler won his first major by three strokes over Rory McIlroy.[3][4] Scheffler had achieved his first PGA Tour win at the WM Phoenix Open two months earlier, and after also winning the Arnold Palmer Invitational and WGC-Dell Technologies Match Play he entered the Masters as world number one.[5] Scheffler led by a record-tying five strokes after the second round, and held the lead from then on. His main challenger was Cameron Smith, who narrowed the lead to one stroke after the second hole of the final round. On the subsequent hole, Scheffler and Smith found themselves in the same tricky position, with Scheffler chipping in for a birdie, and Smith only managing a bogey, extending the lead to 3 strokes. Smith made a triple bogey on the 12th hole after his ball went into the water, leaving Scheffler relatively unchallenged for the rest of the round." + ] + }, + { + "question": "Who won the women's singles Australian Open 2022?", + "gt_answer": "Ashleigh Barty", + "gt_reference": [ + "Ashleigh Barty defeated Danielle Collins in the final, 6–3, 7–6(7–2) to win the women's singles tennis title at the 2022 Australian Open. She became the first home player to win an Australian Open singles title since Chris O'Neil in 1978. It was Barty's third major singles title, and she won the title without losing a set, dropping just three service games during the tournament.[1] The final also marked Barty's last professional appearance, as she announced her retirement from the sport two months later.[2] Naomi Osaka was the defending champion,[3] but lost to Amanda Anisimova in the third round.[4] Barty retained the world No. 1 singles ranking after Aryna Sabalenka and Barbora Krejčíková lost in the fourth round and quarterfinals, respectively. Collins entered the WTA top 10 rankings for the first time by reaching the final.[5] Alizé Cornet reached her first major singles quarterfinal on her 63rd main-draw appearance, surpassing Tamarine Tanasugarn's all-time record, who reached her maiden quarterfinal at the 2008 Wimbledon Championships on her 45th attempt.[6] Kaia Kanepi becomes the first Estonian to reach the quarterfinals at all four majors after her victory over second seed Aryna Sabalenka in the fourth round." + ] + }, + { + "question": "Who won the women's singles Australian Open 2023?", + "gt_answer": "Aryna Sabalenka", + "gt_reference": [ + "Aryna Sabalenka defeated Elena Rybakina in the final, 4–6, 6–3, 6–4 to win the women's singles tennis title at the 2023 Australian Open. It was her first major singles title.[1] Sabalenka dropped just one set during the tournament, to Rybakina in the championship match. Rybakina became the first Kazakhstani player to progress past the fourth round, and the first player since Jennifer Capriati in 2001 to defeat three consecutive major champions in a single edition of the Australian Open.[2] By reaching the final, Rybakina made her debut in the top ten of the WTA Rankings. Ashleigh Barty was the reigning champion,[3] but she retired from professional tennis in March 2022.[4] Barty's retirement and Angelique Kerber and Naomi Osaka’s absences (both due to pregnancy) meant that Victoria Azarenka and Sofia Kenin were the only former champions left in the draw. They met in the first round, with Azarenka winning in straight sets.[5] Jeļena Ostapenko became the first Latvian to reach the Australian Open quarterfinals.[6] Click on the seed number of a player to go to their draw section. The following are the seeded players. Seedings are based on WTA rankings as of 9 January 2023." + ] + }, + { + "question": "Who won the men's singles Australian Open 2022?", + "gt_answer": "Rafael Nadal", + "gt_reference": [ + "As the 2023 edition of the Australian Open heats up, fans and tennis lovers are starting to get a spring in their step as the air fills with excitement. Arguably the most anticipated Grand Slam on the tennis calendar, the Melbourne tournament has everything and this year won't be different. Ranging from interactive activities to some of the biggest names in the world, the Australian Open doesn't disappoint. Looking back, the 2022 event was nothing short of outstanding. Australian Ash Barty broke a 44-year-old record to claim her first Grand Slam on her home turf. While Rafael Nadal - who notched his 21st Grand Slam - remarkably came back from two sets to love to defeat 2021 US Open (tournament before Aus Open) champion Daniil Medvedev. Here's how it played out. Barty came into the tournament ranked no.1 in the world and knew what it took to win a Grand Slam. Having previously won at Wimbledon (2021) and the French Open (2019), the Queenslander wanted to take home the prize that meant the most: a trophy on her home soil. Despite the pressure of expectation to take out the 2022 championship, Barty's form never wavered throughout the two weeks, resulting in no sets lost. In the final, the Australian came up against American, Danielle Collins, who she had the reign over in previous battles." + ] + }, + { + "question": "Who won the men's singles Australian Open 2023?", + "gt_answer": "Novak Djokovic", + "gt_reference": [ + "By : Neha Dhyani Updated : Jun 11, 2023, 22:37 The 2023 Australian Open Winner in the Men’s Singles category is Novak Djokovic. Djokovic defeated Stefanos Tsitsipas with a score of 6–3, 7–6(7–4), 7–6(7–5) in the finals to claim his 10th Australian Open title. In the Women’s Singles category, Aryna Sabalenka (Belarus) made history by defeating Elena Rybakina (Kazakhstan). Find out the complete list of 2023 Australian Open winners here. We have shared the winners of the Men’s Singles and Doubles, Women’s Singles and Doubles, and Mixed Doubles here, along with the details of the final scores. The 2023 Australian Open was held at Melbourne Park, Melbourne, Victoria, Australia. The 111th edition of the Grand Slam tournament was held from 16—29 January 2023." + ] + }, + { + "question": "Who won the women's singles French Open 2022?", + "gt_answer": "Iga Swiatek", + "gt_reference": [ + "Play Now Football Pick'em Play Now College Pick'em See who to add and drop PGA Tour and beyond The 2022 French Open women's final represented a moment for the sport that could be called a changing of the guard. While Iga Swiatek entered the final with a Grand Slam title in her trophy case already -- and on a 34-match winning streak -- the 21-year-old is still just coming into her own as one of the world's great players. She staked a dominant claim to that as she cruised to victory over Coco Gauff with a 6-1, 6-3 win in the final at Roland Garros in a match where she was almost never seriously challenged.   Swiatek won the fall edition of the French Open in 2020 after it was postponed due to COVID-19 -- and she told NBC Sports after this win why taking home the trophy as the No. 1 player in the world is different than being a surprise winner and the lowest-ranked woman to ever win the event. \"I feel like two years ago I was pretty lucky that I could be there and basically I was living kind of in a bubble for two weeks,\" said Swiatek, the only Polish player to win a Grand Slam title. \"This time I felt the pressure. ..." + ] + }, + { + "question": "Who won the women's singles French Open 2023?", + "gt_answer": "Iga Swiatek", + "gt_reference": [ + "Top seed Iga Swiatek of Poland faces 43rd-ranked Czech Karolina Muchova in the French Open women’s singles final, live on NBC Sports, NBCSports.com/live, the NBC Sports app and Peacock on Saturday at 9 a.m. ET. Swiatek can join Serena Williams and Justine Henin as the lone women to win three or more French Opens since 2000. Having turned 22 last week, she can become the youngest woman to win three French Opens since Monica Seles in 1992 and the youngest woman to win four Slams overall since Williams in 2002. FRENCH OPEN: Broadcast Schedule | Men’s Draw Swiatek didn’t lose a set en route to the final, losing just 23 games in her first six matches, exactly how she marched to her first Roland Garros final in 2020. In the final she gets a surprise. Muchova upset No. 2 seed Aryna Sabalenka of Belarus in the semifinals to reach her first major final. No. 3 Jessica Pegula, the highest-seeded American man or woman, was eliminated in the third round. No. 4 Elena Rybakina of Kazakhstan, who has three wins over Swiatek this year, withdrew before her third-round match due to illness. No." + ] + }, + { + "question": "Who is the runner-up in the women's singles at the 2023 French Open?", + "gt_answer": "Karolina Muchova", + "gt_reference": [ + "Subscribers Only Have you subscribed yet? Buy Print Updated : Jun 11, 2023 03:44 IST Comments Follow Us SHARE READ LATER Poland’s Iga Swiatek celebrates with the Suzanne Lenglen Cup after beating Karolina Muchova of Czech Republic in the Women's Singles Final match of French Open 2023 at Roland Garros on Saturday in Paris. Welcome to Sportstar’s highlights of the French Open 2023 women’s singles final in which Iga Swiatek beat Karolina Muchova. This was Nihit Sachdeva taking you through the action as it unfolded on Court Philippe-Chatrier at Roland-Garros, Paris.(* denotes server) Tomorrow is the last day of this year’s French Open and there are two finals in store for the tennis fans. First up, it will be the women’s doubles final between the Canadian-American pair of Leylah Fernandez and Taylor Townsend and the Chinese Taipei and Chinese duo of Su-Wei Hsieh and Xinyu Wang. Post that will be the big event - the men’s singles final between Novak Djokovic, who is chasing a record-breaking 23rd Grand Slam title, and Norway’s Casper Ruud. Do join us for live coverage. Till then, take care and stay safe! “First of all, congrats to Karolina." + ] + }, + { + "question": "Who won the men's singles French Open 2022?", + "gt_answer": "Rafael Nadal", + "gt_reference": [ + "She is a Polish player who has won the singles title three times, twice in the French Open in 2020 and 2022, and once in the US Open in 2022. Rafael Nadal has won the French Open 14 times in the men’s singles category. He is also the 2022 French Open winner in men’s singles. Nadal is touted as the greatest of all time because of his exceptional tennis career. He won his 22nd Grand Slam title after winning the French Open in 2022. The French Open winners in women’s doubles were Wang Xinyu/Hsieh Su-wei. In men’s doubles, Ivan Dodig/Austin Krajicek won against Sander Gillé/Karolína Muchová. The 2023 French Open winners were awarded their trophies at the award ceremony. We have shared the list of 2023 French Open winners here. Find the names of the winners in men’s and women’s singles, men’s and women’s doubles and mixed doubles categories here." + ] + }, + { + "question": "Who won the men's singles French Open 2023?", + "gt_answer": "Novak Djokovic", + "gt_reference": [ + "Novak Djokovic defeated Casper Ruud in the final, 7–6(7–1), 6–3, 7–5 to win the men's singles tennis title at the 2023 French Open. It was his third French Open title and his record-breaking 23rd men's singles major title overall, surpassing the record he previously held jointly with Rafael Nadal.[1] With the victory, Djokovic became the first man to achieve a triple career Grand Slam, and became the oldest French Open champion at the age of 36 years and 20 days.[2] Nadal was the reigning champion,[3] but withdrew due to a left hip injury. This was the first time the 14-time champion missed the tournament since his debut in 2005.[4] With his withdrawal, Nadal fell out of the top 100 of the ATP rankings for the first time since 2003.[5] By winning the title, Djokovic reclaimed the world No. 1 singles ranking from Carlos Alcaraz; Daniil Medvedev and Stefanos Tsitsipas were also in contention for the top ranking at the beginning of the tournament.[6][7] Medvedev's loss to Thiago Seyboth Wild in the first round marked the first time since 2000 that the second seed (then Pete Sampras) lost in the opening round." + ] + }, + { + "question": "who the women's singles wimbledon 2022?", + "gt_answer": "Elena Rybakina", + "gt_reference": [ + "LONDON, ENGLAND - JULY 13: Ons Jabeur of Tunisia celebrates victory against Aryna Sabalenka following the Women’s Singles Semi Finals on day eleven of The Championships Wimbledon 2023 at All England Lawn Tennis and Croquet Club on July 13, 2023 in London, England. (Photo by Mike Hewitt/Getty Images) Getty Images Ons Jabeur plays Marketa Vondrousova in the Wimbledon women’s singles final, each seeking a first major title. Jabeur, the Wimbledon and U.S. Open runner-up last year, took out No. 2 seed Aryna Sabalenka in a three-set semifinal. Jabeur, the No. 6 seed from Tunisia, lost the 2022 Wimbledon final from a set up on Kazakh Elena Rybakina. She is the lone African woman, and lone Arab or North African man or woman, to reach a major final. The Czech Vondrousova, the 2019 French Open runner-up, became the first unseeded Wimbledon women’s finalist since Billie Jean King in 1963. At No. 42 in the world, she is the second-lowest-ranked Wimbledon women’s finalist since the rankings were created in 1975. Serena Williams was No. 181 when she made the 2018 final coming back from childbirth. World No." + ] + }, + { + "question": "who the women's singles wimbledon 2023?", + "gt_answer": "Marketa Vondrousova", + "gt_reference": [ + "LONDON, ENGLAND - JULY 13: Ons Jabeur of Tunisia celebrates victory against Aryna Sabalenka following the Women’s Singles Semi Finals on day eleven of The Championships Wimbledon 2023 at All England Lawn Tennis and Croquet Club on July 13, 2023 in London, England. (Photo by Mike Hewitt/Getty Images) Getty Images Ons Jabeur plays Marketa Vondrousova in the Wimbledon women’s singles final, each seeking a first major title. Jabeur, the Wimbledon and U.S. Open runner-up last year, took out No. 2 seed Aryna Sabalenka in a three-set semifinal. Jabeur, the No. 6 seed from Tunisia, lost the 2022 Wimbledon final from a set up on Kazakh Elena Rybakina. She is the lone African woman, and lone Arab or North African man or woman, to reach a major final. The Czech Vondrousova, the 2019 French Open runner-up, became the first unseeded Wimbledon women’s finalist since Billie Jean King in 1963. At No. 42 in the world, she is the second-lowest-ranked Wimbledon women’s finalist since the rankings were created in 1975. Serena Williams was No. 181 when she made the 2018 final coming back from childbirth. World No." + ] + }, + { + "question": "Who won the men's singles wimbledon 2022?", + "gt_answer": "Novak Djokovic", + "gt_reference": [ + "Three-time defending champion Novak Djokovic defeated Nick Kyrgios in the final, 4–6, 6–3, 6–4, 7–6(7–3) to win the gentlemen's singles tennis title at the 2022 Wimbledon Championships. It was his seventh Wimbledon title and 21st major singles title overall.[1] Djokovic became the fifth man in the Open Era to record a streak of at least four consecutive titles at one major.[2] By reaching his 32nd men's singles major final, he surpassed the all-time record he had jointly held with Roger Federer.[3] Djokovic also became the first player (male or female) to win 80 matches at all four majors with his first-round win over Kwon Soon-woo.[4] Because no ranking points were awarded for the tournament in response to its banning of Russian and Belarusian players, Djokovic dropped out of the top five in ATP rankings after the tournament.[5] Kyrgios became the first unseeded man to reach a major final since Jo-Wilfried Tsonga at the 2008 Australian Open, the first Australian man to reach a major final since Lleyton Hewitt at the 2005 Australian Open, and the first unseeded or Australian man to reach the Wimbledon final since Mark Philippoussis in 2003.[6]" + ] + }, + { + "question": "Who won the men's singles wimbledon 2023?", + "gt_answer": "Carlos Alcaraz", + "gt_reference": [ + "Carlos Alcaraz defeated the four-time defending champion Novak Djokovic in the final, 1–6, 7–6(8–6), 6–1, 3–6, 6–4 to win the gentlemen's singles tennis title at the 2023 Wimbledon Championships. It was his first Wimbledon title and second major singles title overall.[1] Alcaraz, Djokovic, and Daniil Medvedev were in contention for the men's singles No. 1 ranking. Alcaraz retained the No. 1 ranking with his victory, [2][3] and became the first player to qualify for the year-end championships.[4] For the first time since Lleyton Hewitt in 2002, the top seed and winner of the event was not a member of the Big Four. Stan Wawrinka was attempting to complete the career Grand Slam, but was defeated by Djokovic in the third round. Djokovic's loss ended his third major bid to become the first man to win all four Grand Slam events in a calendar year since Rod Laver in 1969. He previously lost his first attempt at Wimbledon in 2016, and his second, at the US Open, in 2021. Click on the seed number of a player to go to their draw section. The following are the seeded players. Seedings are based on ATP rankings as of 26 June 2023." + ] + }, + { + "question": "How many titles has Swiatek won in 2022 season?", + "gt_answer": "eight", + "gt_reference": [ + "She is tied for third with Angelique Kerber among active players. Only Venus Williams (7) and Naomi Osaka (4) have more.  4 – Number of sets that Swiatek lost on clay in 2022, in 19 matches.  5 – Number of times Swiatek won a set by 6-0 (three times) or 6-1 (twice) in a final in 2022.  6 – Number of titles that Swiatek won during her 37-match winning streak this season – Doha, Indian Wells, Miami, Stuttgart, Rome and Roland-Garros.  7 – Number of works of literature Swiatek reads each month (just kidding, we couldn’t find a 7).  8 – Swiatek mustered an 8-1 record in finals to improve to 11-2 lifetime in tour-level title matches.  10 – Number of victories that Swiatek earned from a set down in 2022, compared to seven in 2020 and 2021 combined.  15 – Number of top 10 wins that Swiatek reeled off in succession, from January to November. match win streak against top 10 opposition. Per WTA Media, only Martina Navratilova (20) and Steffi Graf (17) produced bigger streaks against the top 10 in the last 40 years." + ] + }, + { + "question": "who the women's singles U.S. Open 2022?", + "gt_answer": "Iga Swiatek", + "gt_reference": [ + "Advertisement Supported by Swiatek, the world No. 1, beat Jabeur in straight sets to capture her first U.S. Open singles title. It is her third Grand Slam title and first on a surface other than clay. By Matthew Futterman The 2022 U.S. Open will always be remembered — outside of Poland, at least — for its farewell to Serena Williams, long the queen of tennis and the greatest women’s player ever. Beware, though, after Poland’s Iga Swiatek won the women’s singles title Saturday, beating Ons Jabeur of Tunisia Saturday afternoon at Arthur Ashe Stadium, the sport may have a new ruler on its hands. Swiatek, the world No. 1, lived up to her billing and beat Jabeur, 6-2, 7-6(5), to capture her first U.S. Open singles title. It was the third Grand Slam title of Swiatek’s brief career and her first on a surface other than clay. When Jabeur’s last forehand sailed long, Swiatek collapsed on her back after a 1 hour, 51 minute duel that got dangerously close as the afternoon wore on." + ] + }, + { + "question": "Who won the men's singles U.S. Open 2022?", + "gt_answer": "Carlos Alcaraz", + "gt_reference": [ + "Carlos Alcaraz defeated Casper Ruud in the final, 6–4, 2–6, 7–6(7–1), 6–3 to win the men's singles tennis title at the 2022 US Open. It was his first major title, and he claimed the world No. 1 singles ranking with the win.[1] Ruud, Rafael Nadal, Daniil Medvedev, and Stefanos Tsitsipas were also in contention for the top position.[2] Alcaraz saved a match point en route to the title, in the quarterfinals against Jannik Sinner.[3] Alcaraz became the youngest major champion since Nadal at the 2005 French Open, the youngest US Open champion since Pete Sampras in 1990, the first man born in the 2000s to win a major singles title, and the youngest man to be ranked world No. 1 in tennis history, surpassing the record Lleyton Hewitt held.[4] Alcaraz also became the third player to reach a major final having won three consecutive five-set matches, after Stefan Edberg at the 1992 US Open and Andre Agassi at the 2005 US Open.[5] At 23 hours and 39 minutes of play duration across his seven matches, Alcaraz spent the longest time on court in major history." + ] + }, + { + "question": "Who is the new head coach of the Virginia Tech football team in 2022?", + "gt_answer": "Brent Pry", + "gt_reference": [ + "The 2022 Virginia Tech Hokies football team represented Virginia Tech during the 2022 NCAA Division I FBS football season. The Hokies were led by first-year head coach Brent Pry. They played their home games at Lane Stadium in Blacksburg, Virginia, competing as members of the Atlantic Coast Conference (ACC). The Hokies finished the 2021 season 6–7, 4–4 in ACC play to finish in a tie for third place in the Coastal division.[1] They received an invitation to the 2021 Pinstripe Bowl where they lost to Maryland 54–10.[2] On November 16, 2021, the school fired head coach Justin Fuente after six years as head coach.[3] Assistant coach J. C. Price was named the interim coach and coached the Hokies in the Pinstripe Bowl.[4] On November 30, the school named Penn State defensive coordinator Brent Pry the team's new head coach.[5] [7][8] The game was canceled due to the 2022 University of Virginia shooting, which killed 3 players on Virginia's team. Roster Last update: 5/28/23" + ] + }, + { + "question": "Where is Consensus 2022 taking place?", + "gt_answer": "Austin", + "gt_reference": [ + "May 29 - 31, 2024 May 29 - 31, 2024 Austin, Texas  Austin, TX About Overview Who We Are 2023 Videos Participate Register Now Marketing Partnerships Terms Merchandise Sponsors Become a Sponsor Add two passes to your cart and enter code 2FOR1 at checkout. Consensus 2023 videos are now available to watch with a free CoinDesk account. Consensus is the world's largest, longest-running and most influential gathering that brings together all sides of the cryptocurrency, blockchain and Web3 community. From hard-hitting conversations with visionary speakers to hands-on workshops aimed at solving industry challenges, developers, investors, founders, brands, policymakers and more will walk away with the tools and insights needed to continue laying the foundation of a more decentralized future. It is called “Consensus” for a reason. This event is the primary forum where the industry comes together to discuss the most pivotal matters of the day, highlight the biggest successes and debate the most critical conversations. Consensus 2024 is your chance to be a part of the most important conversation in crypto and Web3.\r Watch highlights from Consensus 2023! Consensus 2023 was the place for dealmaking as the ecosystem continues to mature. Very impressive. What I love about Consensus is that it’s a place for people from all walks of life. You can connect with people from different age groups and professional backgrounds and that is so important." + ] + }, + { + "question": "When did the 148th Kentucky Derby take place?", + "gt_answer": "May 7", + "gt_reference": [ + "The 2022 Kentucky Derby (officially, the 148th Running of the Kentucky Derby Presented by Woodford Reserve[1]) took place on Saturday, May 7, 2022, at Churchill Downs in Louisville, Kentucky. It was the 148th running of the Kentucky Derby, a 1+1⁄4 miles (2.0 km) Grade I stakes race for three-year-old Thoroughbreds. The Derby is held annually at Churchill Downs on the first Saturday in May since its inception in 1875. The 20 horses that ran in the Derby qualified by earning points in the 2022 Road to the Kentucky Derby. The two favorites for the 2022 Kentucky Derby were Epicenter, the winner of the Louisiana Derby, and Zandon, the winner of the Blue Grass Stakes. Both horses finished behind winner Rich Strike, who had only entered the race after a late scratch. Entering the race at odds of 80–1, Rich Strike's victory was the second-largest upset in Derby history. It was the first Kentucky Derby victory for his trainer Eric Reed, as well as the first graded stakes win in any race for his jockey Sonny Leon. Participation in the Kentucky Derby is restricted to three-year-old Thoroughbreds." + ] + }, + { + "question": "What was Tesla's revenue in Q1 2022?", + "gt_answer": "18.76 billion", + "gt_reference": [ + "Today after the bell American electric vehicle giant Tesla reported its first-quarter performance. The company detailed revenues of $18.76 billion and $2.86 worth of earnings per share, up from its Q1 2021 results of top line worth $10.389 billion and earnings per share of 93 cents.  Tesla said it faced several challenges in the first quarter related to global supply chain, transportation, labor and manufacturing issues and that the problems could limit its ability to run its factories at full capacity. The automaker also warned of continued supply constraints that could hamper future production, despite the recent openings of its Gigafactories in Berlin and Texas that will build the Model Y. “Our own factories have been running below capacity for several quarters as supply chain became the main limiting factor, which is likely to continue through the rest of 2022,” the automaker said in its financial outlook. Tesla reported $3.32 billion worth of net income, a 658% increase from the $438 million reported for the same period last year. The company’s profit result stands out as it is by far the company’s largest in recent history, towering around $1 billion above its Q4 2021 net income results. The figures bested analysts expectations in both revenue and net income terms. Per data from Yahoo Finance, analysts expected that Tesla would generate Q1 2022 revenues of $17.8 billion, and $2.26 in earnings per share." + ] + }, + { + "question": "When will Splatoon 3 be released?", + "gt_answer": "September 9", + "gt_reference": [ + "Splatoon 3 also features a Story Mode where Agent 3 will have to face off against the Octarians. Learn the secrets behind Alterna, the Fuzzy Ooze, and how they will lead into the \"Return of the Mammalians.” The co-op mode Salmon Run also makes its return where you'll have to team up and fend off waves of dangerous Salmonid bosses!  Latest News and Events Pokemon Splatfest Dates and Time Updated 10/9/2022 Splatoon 3 is celebrating the upcoming release of Pokemon Scarlet and Violet! Read on to learn the dates and time of the upcoming Pokemon Splatfest Available Platforms Updated 9/10/2022 Splatoon 3 will be released exclusively for the Nintendo Switch on September 9, 2022! Release Date Countdown Updated 9/14/2022 Splatoon 3 will release on September 9, 2022. See more details on its release and a countdown to its release date! Splatoon 3 Direct Summary Updated 9/27/2022 The Splatoon 3 Direct will came out on August 10, 2022. See all the new features introduced in the direct! Splatfest World Premiere Guide Updated 8/31/2022 Splatfest World Premiere is a limited-time event available in the demo for Splatoon 3. Find out how to download the demo and all the contents included!" + ] + }, + { + "question": "Who acquired STX Entertainment?", + "gt_answer": "Najafi Companies", + "gt_reference": [ + "15][16] The combined entity raised $125 million of new equity funding and received $350 million in credit led by JPMorgan.[17] In December 2021, amid financial shortcomings following the merger, Jahm Najafi's Najafi Companies announced that it had reached an agreement to acquire STX Entertainment from ErosSTX for $173 million.[18] However, in late January 2022, Lionsgate also emerged as a potential suitor, looking to absorb either part or whole of STX, but the deal was later rejected, leaving only Najafi as a potential suitor.[19][20] In April 2022, Najafi Companies completed its acquisition of STX Entertainment. Eros Media World will retain a 15% non-voting stake in the company.[21][22] In July 2022, shortly after STX's motion picture chairman Adam Fogelson departed for the studio, Deadline reported that STX was in talks with Lionsgate over a potential film distribution deal.[23] Shortly after, it was reported that STX Entertainment's U.K. offices, including the London office housing STXinternational's headquarters, were gradually shutting down.[24] Following the departure of STXinternational head John Friedberg to join Black Bear Pictures' international division, it was announced the latter company was nearing a deal with STX to handle part of its slate internationally." + ] + }, + { + "question": "When did Orrin G. Hatch pass away?", + "gt_answer": "April 23 2022", + "gt_reference": [ + "Salt Lake City, UT—The Hatch Foundation sadly announces the passing of Senator Orrin G. Hatch—the Chairman Emeritus of the Hatch Foundation, former President Pro Tempore of the United States Senate, and longest-serving Senator in Utah history (1977-2019). Senator Hatch passed away at 5:30 p.m. on Saturday, April 23, 2022 in Salt Lake City, Utah, surrounded by family. Upon the Senator’s passing, the Hatch Foundation issued the following statements:  “Senator Orrin G. Hatch personified the American Dream,” said Matt Sandgren, Executive Director of the Hatch Foundation. “Born the son of a carpenter and plaster lather, he overcame the poverty of his youth to become a United States Senator. With the hardships of his upbringing always fresh in his mind, he made it his life’s mission to expand freedom and opportunity for others—and the results speak for themselves. From tax and trade to religious liberty and healthcare, few legislators have had a greater impact on American life than Orrin Hatch. He was a profoundly positive influence in the lives of those he served, whether they were the constituents he helped over four decades of casework, the hundreds of interns he sponsored in both Utah and DC, or the robust network of Hatch staffers who carry on his legacy to this day. Senator Hatch touched the hearts of countless individuals, and I know I speak for all of them when I say he will be dearly missed." + ] + }, + { + "question": "Who was the new CEO of CNN?", + "gt_answer": "Chris Licht", + "gt_reference": [ + "David Folkenflik Chris Licht became CNN's chairman and CEO in May. A few months later, high-profile departures and arrivals may signal how he will lead the network. AILSA CHANG, HOST: This week brought news of the death of CNN founding anchor Bernard Shaw, known for pursuing the news and avoiding flash. And in recent days, CNN's new leader has made moves that he says will return the cable channel closer to its news-driven roots. Some of his changes have sparked concerns inside and outside the network. And for more on that, we have NPR media correspondent David Folkenflik. Hey, David.DAVID FOLKENFLIK, BYLINE: Hey, Ailsa.CHANG: OK. So tell us, who is CNN's new CEO and chairman Chris Licht, and how does he want to reshape CNN exactly?FOLKENFLIK: Sure. Chris Licht came over after stints at CBS where he oversaw the Colbert \"Late Show.\" And he had also been at CBS News, and before that, MSNBC. He's promising in this incarnation at CNN that he's going to make the channel less opinion driven, less perhaps focused on Donald Trump as the one true story that they really rode during the Trump era. This has been a passion of Discovery CEO David Zaslav and Discovery's biggest investor, John Malone. Let's not forget that they just took over Time Warner and CNN recently." + ] + }, + { + "question": "Who won the French Presidential Election 2022?", + "gt_answer": "Emmanuel Macron", + "gt_reference": [ + "French polling agencies are projecting that centrist incumbent Emmanuel Macron will win France’s presidential runoff Sunday, beating far-right rival Marine Le Pen in a tight race that was clouded by the Ukraine war and saw a surge in support for extremist ideas. (AP Photo/Francois Mori) Far-right leader Marine Le Pen smiles as she leaves after speaking after the early result projections of the French presidential election runoff were announced in Paris, Sunday, April 24, 2022. French polling agencies are projecting that centrist incumbent Emmanuel Macron will win France’s presidential runoff Sunday, beating far-right rival Marine Le Pen in a tight race that was clouded by the Ukraine war and saw a surge in support for extremist ideas. (AP Photo/Francois Mori) Far-right leader Marine Le Pen speaks after the early result projections of the French presidential election runoff were announced in Paris, Sunday, April 24, 2022. French polling agencies are projecting that centrist incumbent Emmanuel Macron will win France’s presidential runoff Sunday, beating far-right rival Marine Le Pen in a tight race that was clouded by the Ukraine war and saw a surge in support for extremist ideas. (AP Photo/Francois Mori) Supporters of French President Emmanuel Macron celebrate reports of his victory Sunday, April 24, 2022 in Paris." + ] + }, + { + "question": "What is the megapixel in main camera on the iPhone 14 Pro?", + "gt_answer": "48", + "gt_reference": [ + "With iPhone 14 Pro, we’re entering the 48 megapixel era of iPhone photography. If it was mere detail or pixels, it would mark a step towards the cameras from the Radio Shack ad. But what Apple has delivered in the iPhone 14 Pro is a camera that performs in all ways closer to a ‘proper’ camera than any phone ever has. At times, it can capture images that truly render unlike a phone camera — instead, they are what I would consider a real photo, not from a phone, but from a camera. That’s a huge leap for all of us with an iPhone in our pocket. Begin typing your search above and press return to search. Press Esc to cancel." + ] + }, + { + "question": "How much does it cost to rent a tool kit for Apple device repairs?", + "gt_answer": "49", + "gt_reference": [ + "Now it's launched the program, it can tell any court in the land that it is providing every possible tool — and doing so for a $49/week rental fee, including shipping.\r Only, that isn't $49 per week for however long you need to study the 80+ pages of repair manuals available on the new service site. It is $49 for one week and only one week — or in practice, probably not quite even that.\r Instead, you have to drop the kit off at a UPS store \"by day 7.\" If you fail to do so, \"you will be charged a fee and a tax,\" though Apple does not specify how much that will amount to.\r It does say that at point of rental, it will put a temporary authorization on your credit card to cover the full replacement value of the tools. Again, Apple does not say how much that is — partly because it varies, there are customized repair toolkits for different models.\r Confusingly, Apple's listings for the different toolkits don't entirely tally with its listings for each tool you can buy separately. There are some in the kit that don't appear to be listed separately, while there are some separate ones that are not in the kit.\r However, counting only the tools that are present in the iPhone SE toolkit — the smallest kit available — then the kit's contents are worth around $914." + ] + }, + { + "question": "Where will the 2022 Met Gala take place?", + "gt_answer": "Metropolitan Museum of Art", + "gt_reference": [ + "For this reason, guests must abide by the no phone (and, therefore, no social media) policy. However, you can see exclusive photos from inside the 2023 Met Gala here and catch a glimpse of the table settings, menu, and decor. Kendall Jenner also gave us a behind the scenes look at the Met Gala through her camera in 2021. The event usually involves a high-profile performer (like Rihanna or Justin Bieber). This year, Lizzo shut down the gala with her shimmering, surprise performance. And guests always explore the exhibition before sitting down together for dinner.  This content can also be viewed on the site it originates from. The Met Gala takes place at the Metropolitan Museum of Art in New York City on the first Monday in May each year (with the exception of the 2021 event, which took place in September due to COVID-19 restrictions). Guests attending the Met Gala typically stay in hotels nearby, congregating at a few celebrity-favorite spots. This year, the Mark Hotel was a prime location for celeb-spotting; see our photos from inside its halls. Until the evening before the event, the guest list is top secret. But some of the biggest names in the business regularly attend—from Beyoncé and Lady Gaga to Madonna and Rihanna. More often than not, designers attend with their muses: think Marc Jacobs and Kate Moss, or Nicolas Ghesquière and Emma Stone." + ] + }, + { + "question": "Who won the Champions League in the 2022-2023 season?", + "gt_answer": "Real Madrid", + "gt_reference": [ + "Saturday, June 10, 2023 Keep track of all the 2022/23 Champions League scores and results. Keep track of all the 2022/23 Champions League scores and results. The 2022/23 UEFA Champions League season kicked off with the start of the group stage on 6 September and concluded with the final in Istanbul on 10 June 2023. Here's a full rundown of this season's results. Saturday 10 JuneMan City 1-0 Inter Tuesday 9 MayReal Madrid 1-1 Man City Wednesday 10 MayAC Milan 0-2 Inter Tuesday 16 MayInter 1-0 AC Milan (agg: 3-0) Wednesday 17 MayMan City 4-0 Real Madrid (agg: 5-1) No more away goals rule There was a rule change ahead of 2021/22: ties level after the second leg will go to extra time and a penalty shoot-out if required, irrespective of the number of away goals a team has scored." + ] + }, + { + "question": "Which teams are playing in the 2021-22 NBA Finals?", + "gt_answer": "Golden State Warriors", + "gt_reference": [ + "The 2021-22 NBA Finals are set to begin on Thursday, June 2 between the Golden State Warriors and Boston Celtics. The full NBA Finals schedule is below. To view the postseason bracket, visit Yahoo Sports' NBA scoreboard page. Game 1: Celtics at Warriors, Thursday, June 2, 9 p.m. ET (ABC) Game 2: Celtics at Warriors, Sunday, June 5, 8 p.m. ET (ABC) Game 3: Warriors at Celtics, Wednesday, June 8, 9 p.m. ET (ABC) Game 4: Warriors at Celtics, Friday, June 10, 9 p.m. ET (ABC) Game 5: Celtics at Warriors, Monday, June 13, 9 p.m. ET (ABC)* Game 6: Warriors at Celtics, Thursday, June 16, 9 p.m. ET (ABC)* Game 7: Celtics at Warriors, Sunday, June 19, 8 p.m. ET (ABC)* * — if necessary All NBA Finals games between the Warriors and Celtics will be televised on ABC. Per BetMGM, the betting favorite to win the 2021-22 NBA championship are the Warriors at -160 followed by the Celtics (+125), as of May 29. The top six seeds in each conference were determined at the conclusion of the regular season. The final two seeds were determined through the play-in tournament." + ] + }, + { + "question": "What is the prize money for the Squid Game-inspired reality competition?", + "gt_answer": "4.56 million", + "gt_reference": [ + "Submit Δ \t\tThanks for contacting us. We've received your submission.\t Can a “Squid Game” reality series turn around Netflix’s fading fortunes? The embattled streamer has announced they’re creating a real-life version of the gory South Korean survival show — with production slated to take place in the UK early next year. “Squid Game: The Challenge” is being billed as “the biggest reality competition series ever created” and will feature 456 contestants battling it out for a whopping $4.56 million in prize money. According to a press release put out by Netflix on Tuesday, the staggering sum will be the largest cash prize ever offered on reality television. “‘Squid Game’ took the world by storm with [director] Hwang Dong-hyuk’s captivating story and iconic imagery,” Netflix VP Brandon Rieg said in the release. “We’re grateful for his support as we turn the fictional world into reality in this massive competition and social experiment.” Casting is currently open to English-language speakers over the age of 21 at SquidGameCasting.com. The reality show will feature 10 episodes and production is expected to take place over four weeks. The original “Squid Game” — which was released on Netflix last September — revolved around a contest whereby 456 cash-strapped contestants risked their lives to play a series of deadly children’s games for a $36 million prize." + ] + }, + { + "question": "When was Overwatch 2 released?", + "gt_answer": "October 4 2022", + "gt_reference": [ + "16] At least three new heroes were announced to be added to the roster, including Sojourn, a Canadian Overwatch officer, Junker Queen, the ruler of Junkertown, and Kiriko, the protector of Kanezaka.[17][18] Overwatch 2 runs on an upgraded version of the original game's engine which allows for larger map sizes to better support the new story-based player versus environment (PvE) elements.[12] Additionally, all of the existing heroes received visual redesigns for Overwatch 2, although Blizzard did not expect every hero to have their redesigns finished when the game launched. Twelve of the existing 31 redesigns were completed at the time of Overwatch 2's reveal.[17] Overwatch 2 was released for Nintendo Switch, PlayStation 4, PlayStation 5, Windows, Xbox One, and Xbox Series X/S in early access on October 4, 2022.[18] Kaplan stated when the game was announced that they were more concerned about quality of the product than timeliness of the release.[19][20] Investor documents released in November 2021 reported that the initial 2022 release window was delayed to at least 2023, intended for \"giving the teams some extra time to complete production and continue growing their creative resources to support the titles after launch\".[21] Kaplan anticipated that Overwatch and Overwatch 2 will ultimately merge into a single product to avoid having any engine differences affecting player experience." + ] + }, + { + "question": "Who won the 2022 Tour de France?", + "gt_answer": "Jonas Vingegaard", + "gt_reference": [ + "Denmark’s Jonas Vingegaard (Jumbo-Visma) defended his place atop the general classification of the 2022 Tour de France, finishing Stage 14 alongside his biggest rival, Slovenia’s Tadej Pogačar (UAE Team Emirates), the Tour’s two-time defending champion. The two remain first- and second-overall, separated by 2:22. Great Britain’s Geraint Thomas (INEOS Grenadiers) held onto his third-place position, despite losing 17 seconds to Vingegaard and Pogačar at the end of the stage. Australia’s Michael Matthews (Team BikeExchange-Jayco) took a fantastic stage win, the fourth of his career. Riding with determination after several near-misses so far in this year’s Tour, the 31-year-old joined the day’s big breakaway, initiated the winning move in the stage’s final hour, dropped his two breakaway companions on the tough final climb, and was caught and gapped by Italy’s Alberto Bettiol (EF Education-EasyPost) midway up the ascent. But the Australian kept himself in contention, catching and then passing Bettiol while cresting the summit to win the stage—almost five years to the day after taking his last Tour de France stage victory. Bettiol finished second, and France’s Thibaut Pinot (Groupama-FDJ) was third. Who’s Really Winning the Tour?" + ] + }, + { + "question": "How much was Apple's revenue in Q3? 2022", + "gt_answer": "83 billion", + "gt_reference": [ + "Apple today officially reported its earnings for the third fiscal quarter of 2022, covering the second calendar quarter and the months of April, May, and June. A lot of eyes are on Apple as concerns mount over an economic downturn in the United States. Here’s what the company reported today. For Q3 2022, Apple reported revenue of $83.0 billion and a profit of $19.4 billion. Earnings-per-share hit $1.20 for the quarter. For Q3 2022, analyst predictions for revenue varied; $79.26B at the low end to $88.41B at the high end. The average across 26 analysts, however, was $82.81 billion. Apple had not provided any guidance for Q3 2022, citing ongoing supply chain issues and continued disruptions caused by the COVID-19 pandemic. In fact, the company had even warned that supply constraints would cost it somewhere in the range of $4 billion to $8 billion in revenue for the quarter. For comparison’s sake, in the same quarter a year ago, Apple reported $81.43 billion in revenue and profit of $21.74 billion. It reported earnings-per-share of $1.30. These numbers were boosted heavily by pandemic-induced spending, driven by strong iPad and Mac revenue growth. Apple no longer reports unit sales for any of its products but instead reports a breakdown of revenue by product category." + ] + }, + { + "question": "Who won the 2022 Atlanta Open?", + "gt_answer": "Alex de Minaur", + "gt_reference": [ + "Alex de Minaur defeated Jenson Brooksby in the final, 6–3, 6–3 to win the singles title at the 2022 Atlanta Open. It was de Minaur's second Atlanta title, the first being in 2019. John Isner was the defending champion,[1] but lost in the quarterfinals to Brooksby. The top four seeds received a bye into the second round." + ] + }, + { + "question": "What was the revenue of AWS in Q2 2022?", + "gt_answer": "19.7 billion", + "gt_reference": [ + "“Some of that was in Q1, but the majority of it will be in Q2 through 4. And I think if you want to think about it as somewhere, 250-ish a quarter,” she said. AWS segment sales for Q3 2022 increased 27 percent year-over-year to $20.5 billion, from $16.5 billion in Q3 2021. AWS’ operating income was $5.4 billion, compared with an operating income of $4.9 billion in the third quarter 2021. Sales were up from the previous quarter this year, but income was down slightly. Q2 2022 saw AWS post net sales of $19.7 billion for the quarter, and operating income of $5.7 billion. Q1 2022 sales and income were $18.44 billion and $6.5 billion respectively. The cloud giant looks likely to reach sales of $80 billion by the end of the next quarter. As a whole, the company saw Net sales increase 15 percent to $127.1 billion in the third quarter. Operating income decreased to $2.5 billion. The company saw $4.9 billion of operating income in third quarter 2021. Net income decreased to $2.9 billion." + ] + }, + { + "question": "when was xenoblade chronicles 3 released?", + "gt_answer": "July 29", + "gt_reference": [ + "Ben Johnson Published: Jul 29, 2022 Xenoblade Chronicles 3, developed by Monolith Soft, is out now on the Nintendo Switch. This is the fourth instalment in the much-loved Xenoblade series, and the trailer showcases lush landscapes, giant mechons, and grand drama. We love the game, as we explain in our Xenoblade Chronicles 3 review, so be sure to check it out if you’re interested. With the Xenoblade Chronicles 3 release date set for July 29, it means the game is out now. It’s a bit of a blend of the two previous mainline entries, which could have interesting story implications. To learn more about the possibilities, check out our Xenoblade Chronicles 3 Noah, Xenoblade Chronicles 3 Mio, or Xenoblade Chronicles 3 characters guides to see what’s going on. The last game in the series, Xenoblade Chronicles 2, came out back in 2017, the launch year for the Nintendo Switch. In terms of sales, it was very successful and was followed by a remaster of the original Xenoblade. Check out our Xenoblade Chronicles 3 trailers page to see if you can spot any clues as to how the stories tie together." + ] + }, + { + "question": "What is the name of the horse in the movie \"Nope\"?", + "gt_answer": "Ghost", + "gt_reference": [ + "Professor, Management and Organizational Studies, Huron University College, Western University Kendra Coulter receives funding from the Social Sciences and Humanities Research Council of Canada and is a fellow of the Oxford Centre for Animal Ethics. Western University provides funding as a member of The Conversation CA-FR. Western University provides funding as a member of The Conversation CA. View all partners It is a horse named Ghost who first signals that something is awry in the sky in Jordan Peele’s latest visually and thematically ambitious film Nope. OJ (Daniel Kaluuya) is the head wrangler of Heywood Hollywood Horses, an intergenerational, Black-owned and now struggling ranch that specializes in training horses for the big screen. But it is his sister Emerald (Keke Palmer) who notices that Ghost, one of their family’s veteran equine actors, is unexpectedly standing in an outdoor pen staring out into space, his light grey fur as sublime as the moonlight. Ghost jumps the fence and gallops away, saying “nope” in his own way. As a subversive Western science fiction kaleidoscope, Nope challenges viewers to consider technology, surveillance, other worldly life and the making of spectacle through different lenses — including the eyes of animals. The result is an unsettling view that exposes core ethical questions about animals’ work in films, including in Nope itself." + ] + }, + { + "question": "When did Neal Lemlein pass away?", + "gt_answer": "July 22 2022", + "gt_reference": [ + "Neal Charles LemleinSept. 29, 1950 - July 22, 2022Neal Charles Lemlein was interested in people and they responded. “He was probablyone of the most charismatic people I’ve met,” Ryan, his son, says.Neal died July 22 in Aurora, Colorado, of kidney cancer. He was 71. A small privateservice will be held.He is survived by his wife, Patricia (Patti) Lewis Lemlein, of Erie, Colorado, Ryan(Jessica DiCroce) and daughter, Alexandra, both of Denver, his mother, Rhoda Lemlein,San Diego, and sister, Dian Robertson, of Columbus, Ohio. His father, Leonard Lemlein,died in 1996.Neal grew up in White Plains, New York. “He had this amazing career,” says Alexandra,recalling that his professional life began when he took a job at Young & Rubicam, astoried Madison Avenue advertising agency, having graduated from Tulane University,obtained a master’s degree at New York University, and traveled for a prolonged spell inEurope in his long wild hair and a Fu Manchu moustache.Moving West, he rose in the entertainment industry, first in San Francisco and then inLos Angeles, steering marketing and media campaigns at ad agencies and studios forsome 200 films, in executive positions at CBS, Universal Studios and 20th Century Fox." + ] + }, + { + "question": "Who is the lead actor in the film Carter?", + "gt_answer": "Joo Won", + "gt_reference": [ + "Here's a guide to that cast and characters they play in Carter, and what they've been in before. Heading up the cast is Joo Won as Carter Lee, later revealed as also going by the name Michael Bane. The film begins with Carter waking up in a blood-soaked bed in Seoul with a cross-shaped scar on the back of his head and no memory of who he is. With a premise similar to Hardcore Henry, Carter also features video game logic in its action sequences. Joo Won is a South Korean actor best known for his roles in television, including the main protagonist in Good Doctor, which is played by Freddie Highmore in the American adaptation. Kim Jong-hyeok is a North Korean General who meets Carter during his mission, providing him transport out of South Korea. General Kim is played by Lee Sung-jae, a veteran South Korean actor with credits in TV and film. Lee’s most notable credit is Barking Dogs Never Bite, a 2000 dark comedy film that was the directorial debut of Bong Joon-ho, whose film Parasite won the 2020 Oscar for Best Picture. The young girl cured of the virus and carrying the life-saving antibodies is Jung Ha-na (Kim Bo-min). Carter is tasked with rescuing Ha-na and bringing her to a North Korean facility where the production of a vaccine can be developed." + ] + }, + { + "question": "When was BlenderBot 3 released?", + "gt_answer": "August 5", + "gt_reference": [ + "In just a week of its launch, Meta’s Blender Bot 3 has turned on its own creator and is already spewing marginally racist comments. The third iteration of Meta’s AI chatbot Blender Bot and the company’s answer to Google’s LaMDA has taken a rather unpleasant but not unexpected turn. Just a week after its launch, Meta’s Blender Bot 3 has turned on its creator and is already spewing marginally racist comments. Blender Bot 3 was released by the social networking giant on Friday, August 5. The conversational AI is designed to converse with humans about “nearly any topic.” Like Blender Bot 2, the latest upgrade also features the ability to browse the internet, is trained on the OPT-175B language model (which is 58x the size of Blender Bot 2), and has long-term memory.  It also eliminates the limitations such as forgetfulness (which surprisingly makes machine learning models efficient when not used in chatbots). It has self-learning capabilities that allow it “to improve its conversational skills and safety through feedback from people who chat with it, focusing on helpful feedback while avoiding learning from unhelpful or dangerous responses.” Well, yes and no. While it is entirely plausible that the underlying AI tech helps it to ‘learn,’ it seems like Blender Bot 3 cannot differentiate between what is acceptable and what is not. At least that’s what its recent responses to some people conveyed." + ] + }, + { + "question": "which company invented BlenderBot 3?", + "gt_answer": "Meta", + "gt_reference": [ + "By James Vincent, a senior reporter who has covered AI, robotics, and more for eight years at The Verge. Meta’s AI research labs have created a new state-of-the-art chatbot and are letting members of the public talk to the system in order to collect feedback on its capabilities. The bot is called BlenderBot 3 and can be accessed on the web. (Though, right now, it seems only residents in the US can do so.) BlenderBot 3 is able to engage in general chitchat, says Meta, but also answer the sort of queries you might ask a digital assistant, “from talking about healthy food recipes to finding child-friendly amenities in the city.” BlenderBot 3 is designed to both shoot the breeze and answer questions like Google The bot is a prototype and built on Meta’s previous work with what are known as large language models or LLMS — powerful but flawed text-generation software of which OpenAI’s GPT-3 is the most widely known example. Like all LLMs, BlenderBot is initially trained on vast datasets of text, which it mines for statistical patterns in order to generate language. Such systems have proved to be extremely flexible and have been put to a range of uses, from generating code for programmers to helping authors write their next bestseller." + ] + }, + { + "question": "When was ChatGPT released?", + "gt_answer": "November 30 2022", + "gt_reference": [ + "ChatGPT is a natural language processing tool driven by AI technology that allows you to have human-like conversations and much more with the chatbot. The language model can answer questions and assist you with tasks, such as composing emails, essays, and code. Also: How to use ChatGPT: What you need to know now It's currently open to use by the public for free because ChatGPT is in its research and feedback-collection phase. A paid subscription version called ChatGPT Plus launched at the beginning of February. ChatGPT was created by OpenAI, an AI and research company. The company launched ChatGPT on November 30, 2022.  Also: 7 advanced ChatGPT prompt-writing tips you need to know OpenAI is also responsible for creating DALL-E 2, a popular AI art generator, and Whisper, an automatic speech recognition system.  It's a big deal -- think internet-level disruption.  Sam Altman, OpenAI's chief, said on Twitter that ChatGPT had more than one million users in the first five days after it launched.  Also: GPT-4 is getting significantly dumber over time, according to a study According to analysis by Swiss bank UBS, ChatGPT is the fastest-growing 'app' of all time. The analysis estimates that ChatGPT had 100 million active users in January, only two months after its launch." + ] + }, + { + "question": "When was GPT4 released?", + "gt_answer": "March 14 2023", + "gt_reference": [ + "Generative Pre-trained Transformer 4 (GPT-4) is a multimodal large language model created by OpenAI, and the fourth in its numbered \"GPT-n\" series of GPT foundation models.[1] It was released on March 14, 2023, and has been made publicly available in a limited form via the chatbot product ChatGPT Plus (a premium version of ChatGPT), and with access to the GPT-4 based version of OpenAI's API being provided via a waitlist.[1] As a transformer based model, GPT-4 was pretrained to predict the next token (using both public data and \"data licensed from third-party providers\"), and was then fine-tuned with reinforcement learning from human and AI feedback for human alignment and policy compliance.[2]: 2  Observers reported the GPT-4 based version of ChatGPT to be an improvement on the previous (GPT-3.5 based) ChatGPT, with the caveat that GPT-4 retains some of the same problems.[3] Unlike the predecessors, GPT-4 can take images as well as text as input.[4] OpenAI has declined to reveal technical information such as the size of the GPT-4 model.[5] OpenAI introduced the first GPT model (GPT-1) in 2018, publishing a paper called \"Improving Language Understanding by Generative Pre-Training." + ] + }, + { + "question": "How much did Amazon agree to pay to acquire iRobot?", + "gt_answer": "1.7 billion", + "gt_reference": [ + "“Since we started iRobot, our team has been on a mission to create innovative, practical products that make customers’ lives easier, leading to inventions like the Roomba and iRobot OS,” said Colin Angle, chairman and CEO of iRobot. “Amazon shares our passion for building thoughtful innovations that empower people to do more at home, and I cannot think of a better place for our team to continue our mission. I’m hugely excited to be a part of Amazon and to see what we can build together for customers in the years ahead.” Amazon will acquire iRobot for $61 per share in an all-cash transaction valued at approximately $1.7 billion, including iRobot’s net debt. Completion of the transaction is subject to customary closing conditions, including approval by iRobot’s shareholders and regulatory approvals. On completion, Colin Angle will remain as CEO of iRobot. About Amazon Amazon is guided by four principles: customer obsession rather than competitor focus, passion for invention, commitment to operational excellence, and long-term thinking. Amazon strives to be Earth’s Most Customer-Centric Company, Earth’s Best Employer, and Earth’s Safest Place to Work. Customer reviews, 1-Click shopping, personalized recommendations, Prime, Fulfillment by Amazon, AWS, Kindle Direct Publishing, Kindle, Career Choice, Fire tablets, Fire TV, Amazon Echo, Alexa, Just Walk Out technology, Amazon Studios, and The Climate Pledge are some of the things pioneered by Amazon." + ] + }, + { + "question": "What is the location of the Major League Baseball Field of Dreams Game 2022?", + "gt_answer": "Dyersville, Iowa", + "gt_reference": [ + "3] In November 2020, MLB announced the 2021 game date and that the contest would feature the originally planned participants, the White Sox and Yankees.[4] The game is hosted in Dyersville, Iowa, near the filming location of the titular 1989 baseball movie. The field constructed for the movie, which has been operated as a tourist destination since 1989, could not be brought to MLB game standards without permanently altering major features of the property and destroying its movie authenticity, so it was decided to build a separate playing facility at a distance of approximately 500 ft (150 m) in the cornfields. The new field is in the property of the Ameskamp family, who used to own the left and center field of the 1988 Field of Dreams (the rest was owned by the Lansing family) before selling it to the Lansing family in 2007. The design of the ballpark pays homage to the White Sox' home from 1910 to 1990, Comiskey Park, including the shape of the outfield and the bullpens beyond the center field fence. Windows were included in the design of the right field wall to show the cornfields beyond the ballpark and to provide views of the movie set.[5][1] Following postponement of the originally scheduled game, the field remained fallow during the 2020 season." + ] + }, + { + "question": "When did Microsoft release Windows 11 22H2?", + "gt_answer": "September 20", + "gt_reference": [ + "Windows 11 22H2 will release on September 20, 2022, and here are all the details you need to know. Windows 11 version 22H2 (2022 Update) is the next major refresh of the Microsoft desktop operating system. Codenamed “Sun Valley 2,” the feature update will continue updating the desktop interface, bringing back previously removed features, and introducing new features and improvements. Although we are still days away from the release date, Microsoft is done adding the new features and changes for the Windows 11 2022 Update. The intended final version of the update is already available in the Release Preview Channel of the Windows Insider Program. This release will include new features like Live Captions and Voice Access. It will also introduce an updated version of File Explorer that brings support for tabs and a redesigned navigation pane, a new way to snap applications on the screen with drag and drop Snap layouts flyout, and redesigned version of Task Manager. Furthermore, you will find many visual updates for legacy elements and more. The final version of Windows 11 22H2 has been available since June 7, 2022, but only as a preview in the Release Preview Channel. The feature update is expected to launch on Tuesday, September 20, 2022 (the update is now live for everyone). The update will be offered as a free upgrade for computers already running the original version." + ] + }, + { + "question": "When did AMD unveil Ryzen 7000 processors?", + "gt_answer": "August 29", + "gt_reference": [ + "In a brief press release sent out this morning, AMD has announced that they will be delivering their eagerly anticipated Ryzen 7000 unveiling later this month as a live stream. In an event dubbed “together we advance_PCs”, AMD will be discussing the forthcoming Ryzen 7000 series processors as well as the underlying Zen 4 architecture and associated AM5 platform – laying the groundwork ahead of AMD’s planned fall launch for the Ryzen 7000 platform. The event is set to kick off on August 29th at 7pm ET (23:00 UTC), with CEO Dr. Lisa Su and CTO Mark Papermaster slated to present. AMD first unveiled their Ryzen 7000 platform and branding back at Computex 2022, offering quite a few high-level details on the forthcoming consumer processor platform while stating it would be launching in the fall. The new CPU family will feature up to 16 Zen 4 cores using TSMC's optimized 5 nm manufacturing process for the Core Complex Die (CCD), and TSMC’s 6nm process for the I/O Die (IOD). AMD has not disclosed a great deal about the Zen 4 architecture itself, though their Computex presentation has indicated we should expect a several percent increase in IPC, along with a further several percent increase in peak clockspeeds, allowing for a 15%+ increase in single-threaded performance." + ] + }, + { + "question": "Who won the U.S. all-around title at the U.S. Gymnastics Nationals 2022?", + "gt_answer": "Konnor McClain", + "gt_reference": [ + "WOGA Gymnastics’ Konnor McClain (Las Vegas, Nev.) captured the senior women’s all-around title as competition concluded at the 2022 OOFOS U.S. Gymnastics Championships Saturday evening at Amalie Arena. © John Cheng TAMPA, Fla. (August 21, 2022) – WOGA Gymnastics’ Konnor McClain (Las Vegas, Nev.) captured the senior women’s all-around title as competition concluded at the 2022 OOFOS U.S. Gymnastics Championships Saturday evening at Amalie Arena. Her combined eight-rotation 112.750 beat out all competition for the night’s biggest prize, and she added balance beam gold (28.900) along the way. Shilese Jones (Auburn, Wash./Ascend Gymnastics Center) finished a close second with a 112.000, while Olympians Jordan Chiles (Spring, Texas/World Champions Centre) and Jade Carey (Phoenix, Ariz./Oregon State University) finished third (111.900) and fifth (110.900), respectively. Hill’s Gymnastics’ Kayla DiCello (Boyds, Md.) delivered a 110.950 to secure fourth. Jones shared the uneven bars title with her future Florida Gators teammate and World all-around silver medalist Leanne Wong (Overland Park, Kan./Great American Gymnastics Express), each scoring 28." + ] + }, + { + "question": "What is the new price of Tesla's Full-Self Driving (FSD) software?", + "gt_answer": "$15,000", + "gt_reference": [ + "By Emma Roth, a news writer who covers the streaming wars, consumer tech, crypto, social media, and much more. Previously, she was a writer and editor at MUO. Tesla’s increasing the price of its Full-Self Driving (FSD) software to $15,000. In a post on Twitter, Tesla CEO Elon Musk announced that the new price will go into effect in North America starting September 5th, representing a $3,000 jump. Drivers who order a vehicle before September 5th won’t have to pay the newly-increased price, Musk says. The price hike comes as Tesla begins rolling out FSD beta 10.69 to drivers, a version Musk calls “a big step forward.” It’s still unclear whether Tesla plans on raising the price of its FSD subscription, which currently costs $199 per month. The FSD software lets drivers use Tesla’s advanced driving assistance system (ADAS), Autopilot, to navigate to and from specific destinations, among other driver-assist features. FSD doesn’t make a vehicle fully autonomous; it requires drivers to keep their hands on the wheel and pay attention to the road at all times. The price of Tesla’s FSD beta has slowly crept up over the years, and cost $5,000 upon launch." + ] + }, + { + "question": "What is the date of the premiere of House of the Dragon?", + "gt_answer": "August 21", + "gt_reference": [ + "Traditionalists aren't ready to see a woman take the Iron Throne, but Rhaenyra is bound and determined to \"create a new order\" from the back of her dragon. Meanwhile, members of Houses Stark, Velaryon, Lannister, and Baratheon plot against those in power, but the Targaryens have unmatched firepower. Ready to get your dragon on? Buckle up for everything we know about the show thus far, including what we learned from House of the Dragon's Hall H panel at San Diego Comic-Con this year. When Does House of the Dragon Premiere? House of the Dragon's ten episode season will begin on August 21, 2022. It'll go head-to-head with another fantasy juggernaut, Amazon's The Rings of Power, landing on September 2. Two fantasy series enter the streaming thunder-dome—who will win? August 21. #HouseoftheDragon pic.twitter.com/xH6T7b9sa9 What Did We Learn at House of the Dragon's Comic-Con presentation? The House of the Dragon panel kicked off with the extended trailer for the series, which showed a whole lot of Game of Thrones-y antics: the (then-) latest and greatest battle for the Iron Throne, a longer tease of the battle for succession at the show's center, and a look at the time \"when dragons ruled as one." + ] + }, + { + "question": "When is the release date for Sony's PlayStation VR2 headset?", + "gt_answer": "February 22", + "gt_reference": [ + "Pre-orders for the PS VR2 headset, games, and PS VR2 Sense Controller charging station are underway starting today. \t\t\t\t\t\t\t\t\t Update: Pre-order directly from PlayStation’s online store at direct.playstation.com before PlayStation VR2 launches on February 22. Over the past several months, we’ve introduced PlayStation VR2 and provided glimpses into the next generation of virtual reality gaming, which will allow you to escape into new worlds  while feeling a groundbreaking sense of immersion. Today, I’m very pleased to announce that PlayStation VR2 is officially launching on February 22, 2023. PlayStation VR2 Sense controller charging station, designed specifically for the PS VR2 Sense controller, will also launch the same day.  Here is the PS VR2 lineup and recommended retail pricing for each product. Availability in each country is subject to local import regulations.  Standalone software titles, including Horizon Call of the Mountain, will also be available for pre-orders starting this month. More details will be provided at a later date.   During this initial launch phase for our next-gen headset, players in the U.S., U.K., France, Germany, Belgium, Netherlands and Luxembourg will initially be able to pre-order PlayStation VR2 solely through PlayStation’s online store at direct.playstation.com. Pre-orders will begin on November 15, and players may begin to register for pre-orders starting today. Orders from direct.playstation." + ] + }, + { + "question": "What is the new venture launched by Tiger Woods and Rory McIlroy?", + "gt_answer": "TMRW Sports", + "gt_reference": [ + "52 Tiger Woods and Rory McIlroy have a new business venture together. The two PGA Tour stars, along with founder and CEO Mike McCarley, announced Tuesday the formation of TMRW Sports, a new company “focused on building technology-focused ventures that feature progressive approaches to sports, media and entertainment.” Television executive Dick Ebersol is also an initial investor. TMRW Sports is here! We’re a company founded by @TigerWoods, @McIlroyRory & sports executive Mike McCarley. Our focus is on building pioneering ventures that feature progressive approaches to sports, media & technology. Learn more: https://t.co/ItAbANOWSI #TMRWSports = Tomorrow pic.twitter.com/Z9svD1d6iG — TMRW Sports (@TMRWSports) August 23, 2022 “Both Tiger and Rory’s competitive spirit extends beyond the golf course, and both have proven track records in supporting ventures that are modernizing the way sports are played, enjoyed, and consumed,” McCarley, who previously served as Golf Channel’s president, said in a release. Advertisement According to a Golfweek report, the group is behind a new technology-driven competition series for top stars on the PGA Tour. The new venture will reportedly feature a series of one-day events held in a non-green grass, stadium environment. They are expected to be held in partnership with the PGA Tour and launch in 2024." + ] + }, + { + "question": "Which company recently acquired Super.tech?", + "gt_answer": "ColdQuanta", + "gt_reference": [ + "Super.tech was founded in 2020 based on pioneering quantum computing research from EPiQC, an NSF Expedition in Computing at the University of Chicago. (Image: iStock.com/AndreyPopov) A University of Chicago quantum software spinout and Duality Cohort 1 participant, Super.tech has been acquired by a global quantum ecosystem leader, ColdQuanta. Super.tech is embedded in Argonne National Laboratory’s Chain Reaction Innovations program and is also incubated by Duality, the first accelerator dedicated exclusively to supporting quantum startups, operated by the Chicago Quantum Exchange and UChicago’s Polsky Center. Following the acquisition, ColdQuanta is establishing a Chicago-based office that will draw on the talent and innovation from the University and the city’s robust startup ecosystem. Super.tech’s full team will remain on board, including CEO Pranav Gokhale, PhD ’20, and Chief Scientist Fred Chong who will lead the new office as vice president of quantum software and chief scientist of quantum software, respectively. “Becoming part of ColdQuanta is incredibly exciting because Super.tech’s strength is building software that is tailored to the physics of quantum technologies, and ColdQuanta gives us intimate access to a range of computing, sensing, and communication technologies,” said Chong, Seymour Goodman Professor in the University’s department of computer science. “Together, we will create the most effective quantum systems across a range of applications in the quantum industry." + ] + }, + { + "question": "Who is the Heisman Trophy winner in 2022?", + "gt_answer": "Caleb Williams", + "gt_reference": [ + "USC Trojans quarterback Caleb Williams is the reigning Heisman Trophy winner after a breakout season in 2022. Now, we can look ahead to the candidates who will join the growing list of Heisman winners. Stay tuned for the upcoming year as we evaluate the leading Heisman candidates, track performances and so much more. Once the college football season begins, we’ll provide weekly updates on the 2023 Heisman Trophy race. Related: Most Heisman Trophy winners by school Before diving into our favorite Heisman Trophy candidates in 2023, with full breakdowns for our top picks, here’s a rundown of the latest Heisman odds and Sportsnaut’s Heisman watch list. Here are the latest Heisman odds, via FanDuel. Here is our early list of the favorites to win the Heisman Trophy 2023. We’ll provide individual breakdowns for each of the players this off-season. Caleb Williams is the favorite to win the 2023 Heisman Trophy, to the surprise of no one. While history suggests it will be another player hosting the coveted trophy at the Heisman ceremony next December, Williams is in a great position to repeat. While USC loses Jordan Addison, it welcomes new offensive weapons that can thrive in this system. More importantly, Williams will be in his third season with Lincoln Riley. Plus, USC’s defense is going to require a lot of shootouts in 2023." + ] + }, + { + "question": "When does The Amazing Race Season 34 premiere?", + "gt_answer": "September 21", + "gt_reference": [ + "GoldDerby We waited more than a year for “The Amazing Race 33” after COVID-19 suspended production in 2020, but the wait for Season 34 was not as long. Here’s what you need to know about the current season of “The Amazing Race.” When will Season 34 premiere? It already did. Season 34 premiered Wednesday, Sept. 21 at 10/9c on CBS. On Wednesday, Nov. 2, it moved up an hour to 9/8c, where it will air for the remainder of the season. When will Season 34 end? Season 34 will air its finale on Wednesday, Dec. 7 at 9/8c on CBS. The final three teams are “Big Brother 23” couple Derek Xiao and Claire Rehfuss, married couple Luis Colon and Michelle Burgos, and long-lost twins Emily Bushnell and Molly Sinert. Who is in the Season 34 cast? Click here to meet the 12 teams. Where will Season 34 visit? Season 34’s stops included Austria, Italy, France, Spain, Iceland and Jordan, and CBS has revealed all the Pit Stop locations in those countries. The starting line was in Munich, the first time the start is outside of the United States. The finish line will be in Nashville, where tasks include delivering guitars, playing on a giant floor piano and packaging whiskey bottles." + ] + }, + { + "question": "Who is the chairman of Toulouse and under whose ownership are they currently?", + "gt_answer": "Damien Comolli", + "gt_reference": [ + "Toulouse Football Club is a French professional football club based in Toulouse. The club was founded in 1970 and currently plays in Ligue 1, the first division of French football. Toulouse plays its home matches at the Stadium de Toulouse located within the city. Les Pitchouns are the current holders of the Coupe de France, and have won the second tier Ligue 2 on three occasions.[2] Toulouse have participated in European competition five times, including in 2007 when they qualified for the UEFA Champions League for the first time.[3] They are set to participate in the 2023–24 UEFA Europa League, following their victory in the preceding year's Coupe de France. The president of Toulouse FC is Damien Comolli, who succeeded the French businessman Olivier Sadran who took over the club following its bankruptcy in 2001 which resulted in it being relegated to the Championnat National. The club has served as a springboard for several players, most notably the World Cup-winning goalkeeper Fabien Barthez, international strikers André-Pierre Gignac[4] and Martin Braithwaite. The city was left without a big side in 1967 when Toulouse FC sold its players and place in the French top flight to Paris outfit Red Star, but three years later a new club, Union Sportive Toulouse, rose from the ashes." + ] + }, + { + "question": "When will the TGL (Tech-Infused Golf League) season start?", + "gt_answer": "January 2024", + "gt_reference": [ + "TGL is a planned golf league created by TMRW Sports, a venture formed by sports executive Mike McCarley and professional golfers Tiger Woods and Rory McIlroy, in partnership with the PGA Tour. It will launch in January 2024, with events held on Monday nights in conjunction with the PGA Tour schedule.[1] On August 24, 2022, the PGA Tour, along with Tiger Woods, Rory McIlroy and Mike McCarley, announced the formation of TGL.[2] It will initially feature six teams of three PGA Tour players, competing head-to-head in 18-hole match play on a virtual course with a special short game area. Fifteen matches, each lasting two hours and played in primetime on Monday nights, will make up the regular season. The semi-finals and a final match will be held at the end of the season.[3] TMRW Sports is building the first TGL venue in Palm Beach, Florida, through a partnership with Palm Beach State College. The group broke ground at the venue on February 20, 2023.[4][5] The venue will include educational and recreational facilities.[6] Construction is being overseen by CAA Icon.[7]" + ] + }, + { + "question": "Who is the director of BioShock movie?", + "gt_answer": "Francis Lawrence", + "gt_reference": [ + "After revealing earlier this year that it was making a BioShock movie, Netflix has announced who will be directing it and who's writing the script. And you might recognize them, and if not, you'll almost certainly recognize the movies they've worked on.  Netflix revealed in a tweet made today that Francis Lawrence (I Am Legend, The Hunger Games: Catching Fire, Slumberland) will direct this BioShock film adaptation and Michael Green (Loga, Blade Runner 2049, American Gods) will write the script.  BioShock — our live-action feature film adaptation of the renowned video game franchise — will be directed by Francis Lawrence (I Am Legend, The Hunger Games: Catching Fire, Slumberland) from a script written by Michael Green (Logan, Blade Runner 2049, American Gods). pic.twitter.com/mDh4ut6ayJ And that's all Netflix had to reveal about the movie today. Perhaps we'll learn of casting soon. In the meantime, read about the original announcement.  Does this director and writer announcement excite you? Let us know in the comments below! View the discussion thread. © 1991 to Game Informer. All Rights Reserved." + ] + }, + { + "question": "What is the premiere date of New Amsterdam Season 5?", + "gt_answer": "September 20", + "gt_reference": [ + "We cheered Max’s disruption of the status quo and applauded when he asked his patients the simple yet profound question, ‘How can I help?’ Over the last four seasons, David, Peter, and our incredible cast have tackled important and thought-provoking stories that have touched on the human condition, but also made us laugh and imbued hope. We’re so proud of this series and are indebted to everyone involved in bringing New Amsterdam to life. Bravo!” More details are here regarding what fans can expect from New Amsterdam Season 5, specifically around some key characters. Plus, the latest key art for the season has been revealed.  New Amsterdam Season 5 premieres Tuesday, September 20 at 10/9c on NBC and next day on Peacock. While we don't yet have an official trailer, NBC did release a First Look that sees Eggold getting emotional as he reflects on the final season of New Amsterdam. A post shared by New Amsterdam (@nbcnewamsterdam) \"I can't believe we're here five seasons in and it's already our fifth and final season,\" he said, \"and just an excitement to bring the show to a close and to sort of put a period at the end of that sentence. You don't always get the opportunity to end the story so it's going to be an exciting last chapter.\" We don't have any photos from the episodes, yet." + ] + }, + { + "question": "Who won the World Cup Final in 2022?", + "gt_answer": "Argentina", + "gt_reference": [ + "The 2022 FIFA World Cup final was the final match of the 2022 FIFA World Cup, the 22nd edition of FIFA's competition for men's national football teams. The match was played at Lusail Stadium in Lusail, Qatar, on 18 December 2022, the Qatari National Day, and was contested by Argentina and defending champions France. The final took place in front of 88,966 supporters, with a record crowd of 1.5 billion people watching on television, becoming one of the most widely-watched televised sporting events in history.[3] The tournament comprised hosts Qatar and 31 other teams who emerged victorious from the qualification phase, organised by the six FIFA confederations. The 32 teams competed in a group stage, from which 16 teams qualified for the knockout stage. En route to the final, Argentina finished first in Group C, first losing to Saudi Arabia 2–1, then defeating both Mexico and Poland 2–0. They then won against Australia in the round of 16, the Netherlands in the quarter-final through a penalty shoot-out, and Croatia in the semi-final. France finished top of Group D with two wins and one loss (4–1 win over Australia, 2–1 win over Denmark, and a 1–0 loss to Tunisia), defeating Poland in the round of 16, England in the quarter-final and Morocco in the semi-final." + ] + }, + { + "question": "Who is the chief meteorologist for KPLR-TV?", + "gt_answer": "John Fuller", + "gt_reference": [ + "FOX 2 Please enter a search term. Please enter a search term. FOX 2 Chief Meteorologist Glenn Zimmerman is joined by Chris Higgins, Angela Hutti, Jaime Travers, and Linh Truong. John Fuller is the chief meteorologist for KPLR-TV. They bring a wealth of experience when covering the weather in St. Louis and the surrounding areas. Glenn Zimmerman is the Chief Meteorologist for FOX 2 News. He has been forecasting weather in St. Louis for over 30 years. When he doesn’t have his head in the clouds, he is into photography, music, and has competed in several triathlons. Wake up with Linh Truong’s forecasts Monday-Friday on Fox 2 News in the Morning. She has years of experience forecasting in different parts of the country.  John Fuller came to St. Louis in June of 1983, recently celebrating 30 years of weather coverage in St. Louis. Despite his longevity, John Says, “just when I think I have St. Louis area weather figured out, a new wrinkle develops, like the 2012 drought or Spring 2013 tornadoes. With the weather constantly changing, we must adapt and adjust as meteorologists.” Chris Higgins was born and raised here in the St. Louis area." + ] + }, + { + "question": "Who is the new head of development at Riff Raff Entertainment?", + "gt_answer": "Katie Sinclair", + "gt_reference": [ + "Sinclair marks the second significant hire at Riff Raff, which recently brought on seasoned Stephen Fuss, a media veteran with top stints at Stargrove Pictures and Ingenious Media, as CEO to support the growth of the television and film production company.   \tIt also comes after Riff Raff received a multi-million dollar capital injection from Calculus Capital, including the Calculus Creative Content EIS Fund, which will provide overhead for key new hires and enable the company to acquire and develop more projects. The company says that funding, along with a first-look deal with New Republic Pictures inked in 2021, will help Riff Raff acquire highly sought-after material and attach premium writers across both sides of the Atlantic. \t“I’m really excited to be joining Riff Raff at such a pivotal time, as the company develops and grows its already very exciting slate of film and TV projects,” said Sinclair. “I can’t wait to start working with Jude, Ben and Stephen, helping make Riff Raff a home for exciting writers, directors and IP.”  \t“We are absolutely thrilled to have Katie Sinclair join our team as head of development." + ] + }, + { + "question": "How much money did Texas Tech pay Marlene Stollings in the settlement?", + "gt_answer": "740,000", + "gt_reference": [ + "Texas Tech agreed to pay former women's basketball coach Marlene Stollings a little more than $740,000 as part of a settlement of a lawsuit in which she accused the school and its athletics director, Kirby Hocutt, of discrimination and retaliation, according to a copy of the settlement agreement USA TODAY Sports obtained from the university through a public records request. The school fired Stollings for cause in August 2020, the day after the publication of an investigation by USA TODAY Sports and The Intercollegiate, a college sports investigative media outlet. Players alleged there was a culture of abuse under Stollings and described a toxic culture that generated \"fear, anxiety and depression.\" In her lawsuit, Stollings argued that two internal reviews conducted by the school before the investigation was published cleared her of the allegations. STAY UP TO DATE:Subscribe to our Sports newsletter now! The lawsuit, filed in October 2020, was settled on Aug. 10. The settlement shows Stollings received $300,000 for alleged compensatory damages, including emotional pain, suffering, inconvenience, mental anguish and loss of enjoyment of life. She received $300,000 for attorneys' fees and expenses incurred by Stollings, plus an additional $140,666.00 for back wages, according to the agreement." + ] + }, + { + "question": "Who acquired a stake in FromSoftware?", + "gt_answer": "Sony", + "gt_reference": [ + "Sony and Tencent acquired a 30 percent stake of FromSoftware, the esteemed Japanese video game studio behind “Elden Ring” and the Dark Souls series, Wednesday. Kadokawa Corporation, the Tokyo-based media corporation that owns FromSoftware, announced in a news release that Sony and Tencent had both purchased significant shares in FromSoftware. Sony Interactive Entertainment (a subsidiary of Sony behind the PlayStation brand) holds 14.09 percent of FromSoftware’s shares; Sixjoy Hong Kong Limited (a subsidiary of Tencent) owns 16.25 percent, bringing the collective stake to 30.34 percent. Kadokawa still maintains majority ownership at 69.66 percent. In the announcement, Kadokawa explained that the three companies had operated a “strategic alliance in the anime and game fields” since October 2021. Kadokawa said these recent investments would be used to further expand FromSoftware’s expansion into the global market and strengthen the triumvirate formed with Tencent and Sony. “Through the implementation of the fund procurement,” Kadokawa wrote in its press release, “FromSoftware will aim to proactively invest in development of more powerful game IP for itself to strengthen FromSoftware’s development capabilities and will seek to establish a framework that allows the expansion of the scope of its own publishing in the significantly growing global market." + ] + }, + { + "question": "Who is the new Coach for The Voice Season 22?", + "gt_answer": "Camila Cabello", + "gt_reference": [ + "The Voice season 22 coaches are Blake Shelton, John Legend, Gwen Stefani and newcomer Camila Cabello. Camila is replacing Kelly Clarkson, who joined The Voice in February 2018. She appeared on the series for eight seasons. When Blake revealed that The Voice would be premiering in the fall, he also encouraged others to duet his TikTok set to MIKA's single \"Grace Kelly.\" Shortly after, John posted a clip of himself singing alongside the \"Comeback as a Country Boy\" artist. Then, Blake's wife and No Doubt leading lady, Gwen, shared that she was also returning to The Voice with her own singing snippet. The GXVE beauty entrepreneur was previously a coach on the NBC series for five other seasons, including 7, 9, 12, 17 and 19. Last but not least, Camila confirmed her attendance with a brief but telling cameo in a TikTok duet. With that, it was official that The Kelly Clarkson Show host and season 21 coach Ariana Grande would be departing from The Voice. Kelly hasn't addressed leaving the show, but her departure isn't completely out of the blue. The American Song Contest co-host previously shared that she wanted to spend more time with her kids (8-year-old daughter River and 6-year-old son Remington) — even if it meant switching up her schedule to do so." + ] + }, + { + "question": "What was the unemployment rate in August 2022 in U.S.?", + "gt_answer": "3.7%", + "gt_reference": [ + "7%) in May 2020 and July 2020. Unemployment in the transportation sector was above overall unemployment. BLS reports that the U.S. unemployment rate, not seasonally adjusted, in August 2022 was 3.8% or 0.8 percentage points below the transportation sector rate. Seasonally adjusted, the U.S. unemployment rate in August 2022 was 3.7%.     In addition to the update of the Unemployment in Transportation dashboard, BTS also released its monthly update to its Employment in Transportation: Total, by Mode, and Women, and Race and Hispanic or Latino Ethnicity of Transportation Workers dashboards. Charts Updated this Month by Section include: Unemployment in the Transportation and Warehousing Sector and in Transportation and Material Moving Occupations Monthly Employment in the Transportation and Warehousing Sector, Establishment Data Monthly Employment in the Transportation and Warehousing Sector by Race and Hispanic or Latino Ethnicity, Household Data Visit Transportation Economic Trends for more topics. Media contact: BTSNews@dot.gov or 1-800-853-1351. U.S." + ] + }, + { + "question": "Who did Serena Williams lose to in her last match at the U.S. Open?", + "gt_answer": "Ajla Tomljanovic", + "gt_reference": [ + "By  The Associated Press Serena Williams motions a heart to fans after losing to Australia's Ajla Tomljanovic during the third round of the U.S. Open tennis championships on Friday in New York. Frank Franklin II/AP hide caption Serena Williams motions a heart to fans after losing to Australia's Ajla Tomljanovic during the third round of the U.S. Open tennis championships on Friday in New York. NEW YORK — Leave it to Serena Williams to not want to go quietly, to not want this match, this trip to the U.S. Open, this transcendent career of hers, to really, truly end. Right down to what were, barring a change of heart, the final minutes of her quarter-century of excellence on the tennis court, and an unbending unwillingness to be told what wasn't possible, Williams tried to mount one last classic comeback, earn one last vintage victory, with fans on their feet in a full Arthur Ashe Stadium, cellphone cameras at the ready. The 23-time Grand Slam champion staved off five match points to prolong the three-hours-plus proceedings, but could not do more, and was eliminated from the U.S. Open in the third round by Ajla Tomljanovic 7-5, 6-7 (4), 6-1 on Friday night in what is expected to be her final contest. \"I've been down before. ..." + ] + }, + { + "question": "How many people were injured in the shuttle van accident on Palisades Interstate Parkway?", + "gt_answer": "Eight", + "gt_reference": [ + "Four people were killed and eight injured after a shuttle van crashed Friday morning on New Jersey’s Palisades Interstate Parkway, officials said. At about 1:30 a.m., police received reports of a crash in the center median of the parkway's southbound lanes in Englewood Cliffs, a borough in Bergen County, New Jersey, the Palisades Interstate Parkway Police said in a statement. When officers arrived at the scene, they found \"a single vehicle accident rollover\" and several passengers trapped in the vehicle. Four of the passengers suffered \"severe trauma\" and were pronounced dead at the scene while eight others were hospitalized with injuries ranging from severe head trauma to minor physical complaints, police said. Police did not immediately identify the victims. The shuttle van, listed as a Ford Econoline E350 passenger cargo van with New York registration, takes people to and from factories in upstate New York, police said. The van was carrying 12 passengers at the time of the crash. The crash also snarled traffic as the southbound lanes of the parkway remained closed Friday morning. The cause of the crash is under investigation by parkway police, the Bergen County Sheriff's Office and other agencies." + ] + }, + { + "question": "Who is the head coach of Virginia Tech football?", + "gt_answer": "Brent Pry", + "gt_reference": [ + "Virginia QB Brennan Armstrong is hit and loses the ball, but teammate Bobby Haskins is able to dive on it in the end zone for a safety. (1:10) Penn State defensive coordinator Brent Pry has been named the new head football coach at Virginia Tech, the Hokies announced Tuesday. Pry, 51, replaces former Hokies coach Justin Fuente, who was out as Hokies coach as of Nov. 16 after his teams went 43-31 in six seasons. Pry returns to Blacksburg, where he served as a defensive graduate assistant for the Hokies from 1995 to 1997 under head coach Frank Beamer and defensive coordinator Bud Foster. \"On behalf of Amy and our family, we are extremely grateful to President [Timothy] Sands and [athletic director] Whit [Babcock] for extending us this opportunity at Virginia Tech,\" Pry said in a statement released by the school. \"Working for Coach Beamer and Coach Foster as a graduate assistant in the 1990s, I was privileged to have been a part of this program as the Hokies established themselves as a national power, consistently proving they could beat anyone in the nation. \"Even after I departed Blacksburg, I always continued to appreciate Virginia Tech, its great players, its championship teams, and its wonderful traditions from afar. The resources, facilities, university backing of Athletics, and phenomenal fan support that Virginia Tech enjoys made this a very desirable situation." + ] + }, + { + "question": "How did Tanya Pardazi die?", + "gt_answer": "sky diving accident", + "gt_reference": [ + "Please refresh the page or navigate to another page on the site to be automatically logged inPlease refresh your browser to be logged in Tragic accident occurred during her first solo jump Find your bookmarks in your Independent Premium section, under my profile TikTok influencer Tanya Pardazi has died in a tragic skydiving accident, aged 21. According to the former Miss Canada semi-finalist’s friends, Pardazi died while performing the activity in Ontario, Canada on 27 August. According to a statament by the skydiving company, Pardazi opened her parachute too late while in the air during her first solo course. The aspiring beauty queen was rushed to hospital, where she was pronounced dead. Skydive Toronto said in a statement: “A skydiving student aged 21 succumbed to fatal injuries obtained by an emergency situation. “The skydiver released a quickly rotating main parachute at a low altitude without the time / altitude required for the reserve parachute to inflate.” It added: “The team at Skydive Toronto is currently working with the South Simcoe Police on their investigation. “The jumper was a welcomed recent addition to the skydiving community and will be missed among the student’s new friends and fellow jumpers of Skydive Toronto Inc.” Skydive Toronto stated it “has been profoundly affected by this accident as they have refined their student training program for over 50 years”." + ] + }, + { + "question": "Who was named interim coach for Nebraska's 2022 season?", + "gt_answer": "Mickey Joseph", + "gt_reference": [ + "The latest breaking updates, delivered straight to your email inbox. Nebraska is committing to interim head coach Mickey Joseph for the remainder of the 2022 season. Like Scott Frost, who Nebraska fired Sunday, Joseph is a former Husker quarterback. “After the disappointing start to our season, I decided the best path forward for our program was to make a change in our head coaching position,” Nebraska Athletic Director Trev Alberts said in a statement. Joseph, 54, is the first Black head coach at Nebraska in any sport and among four new members of the staff this season. “Trev has made a good choice in asking Associate Coach Mickey Joseph to step in as interim head coach for the rest of the year and we eagerly look forward to his leadership,” said UNL Chancellor Ronnie Green. He joined the program as the passing game coordinator and wide receivers coach this season, after the firings last fall. “Difficult as this decision is, I fully support AD Alberts’ path (forward), & I have complete confidence in Interim Coach Joseph. There’s lots of football left to be played. Now is the time to rally around our players and give them our full support,” said University of Nebraska President Ted Carter. Prior to joining Nebraska, Joseph served as an assistant head coach at LSU. Joseph was on the LSU staff when the school won the national championship in 2019." + ] + }, + { + "question": "What is the release date of Jackie Evancho's album Carousel of Time?", + "gt_answer": "September 9", + "gt_reference": [ + "219] Evancho performed three further concerts with Michael Feinstein at his eponymous club in New York in August 2019.[220] Evancho stated in 2019 that she was working with vocal coach Joan Lader.[221][222] In 2020 Evancho began recording an album of covers of Joni Mitchell songs, produced by Fred Mollin,[223] at Sound Stage Studio in Nashville.[224] She released the disc, titled Carousel of Time, on September 9, 2022.[225] Before its release, Evancho introduced four singles from the album: \"River\" in October 2020,[226][227] \"Both Sides Now\" in May 2022,[223] \"A Case of You\" in July 2022,[228] and \"Blue\" in August 2022,[229] which she performed on Good Day New York in September[230] and WGN-TV in October.[231] Jill O'Rourke, reviewing the album for TalentRecap.com, wrote: \"Evancho brings a signature ethereal quality to Mitchell’s music, as well as a clear emotional connection with the lyrics.\"[232]" + ] + }, + { + "question": "Which companies are part of MATANA?", + "gt_answer": "Microsoft", + "gt_reference": [ + "Notably, FAANG is an extension of the FANG group, it includes Apple Inc (NASDAQ: AAPL), the producer of MacBooks and iPhones, as the fifth renowned company. The MAANG group is an extension of FAANG, the term was coined after Facebook was transformed into Meta Platforms. As a result, the “F” letter was replaced with “M”. Further in this guide, we will focus on the MATANA group that is expected to make headlines in the coming years, according to analysts. The MATANA group is composed of six high-level technology companies: Microsoft Corporation (NASDAQ: MSFT), Apple Inc, Tesla Inc (NASDAQ: TSLA), Alphabet Inc (NASDAQ: GOOGL), Nvidia Corp (NASDAQ: NVDA), and Amazon.com Inc. These giants are regarded as a powerful tech group driving many of the biggest innovations in the world. In terms of market dominance, the stocks of the MATANA group make up almost 50% of the Nasdaq 100 Index, which tracks the performance of the 100 largest non-financial companies listed on the Nasdaq Stock Exchange. Therefore, these companies have a significant influence on the tech market’s returns. This has led the MATANA group to replace the FAANG group as a reference in the tech industry. Moreover, each of the companies comprising the MATANA group has successfully dominated its respective sector. Below are some milestones these tech giants achieved in 2023." + ] + }, + { + "question": "Which animated series won the Emmy Award for Best Animated Program?", + "gt_answer": "Arcane", + "gt_reference": [ + "By Peter White Television Editor Call it third time lucky. Netflix has finally won Best Animated Program at the Emmys with Arcane picking up the award at the Creative Arts ceremony. It marks the first time that a streaming show has picked up the award. It beat Bob’s Burgers, Rick and Morty, The Simpsons and Chadwick Boseman-voiced What If…? in the hotly contested category. Other streaming contenders in the past have included Netflix’s Big Mouth and BoJack Horseman. Arcane co-creator Christian Linke picked up the award. “Thank you this. It’s a big deal for us as we come from video games. It’s been amazing to see the world embrace our characters and our stories so thanks to Netflix who believed in us from the beginning, thanks to Riot Games, who worked on the whole IP… and to all the people that have been with our game and League of Legends for the last 12 years or so who helped make it as big as it is now,” he said. \t \t \t\t \t\t\t\t\tRelated Stories\t\t \t \tAcquisitions \t \t \t\t \t\t\t\t\tHarry And Meghan Buy Film Rights For Bestselling (And Quite Familiar) Romantic Novel\t\t \t\t\t \tBreaking News \t \t \t\t \t\t\t\t\t'Suits' Breaks Its Own Nielsen Streaming Record; 'The Lincoln Lawyer' Draws Over 1B Minutes Viewed Following Season 2 Debut" + ] + }, + { + "question": "How many teams will be included in the expanded College Football Playoff?", + "gt_answer": "12", + "gt_reference": [ + "-- Dinich Championship week games and the final playoff rankings for this year are still to come, but based on the current CFP rankings, an expanded playoff would look like this: Seeds with byes 1. Georgia 2. Michigan 3. TCU 4. USC Remaining seeds (conference champs in bold) 5. Ohio State 6. Alabama 7. Tennessee 8. Penn State 9. Clemson 10. Kansas State 11. Utah 12. Tulane First-round games No. 12 Tulane at No. 5 Ohio State No. 11 Utah at No. 6 Alabama No. 10 Kansas State at No. 7 Tennessee No. 9 Clemson at No. 8 Penn State Quarterfinal games No. 9 Clemson-No. 8 Penn State winner vs. No. 1 Georgia No. 10 Kansas State-No. 7 Tennessee winner vs. No. 2 Michigan No. 11 Utah-No. 6 Alabama winner vs. No. 3 TCU No. 12 Tulane-No. 5 Ohio State winner vs. No. 4 USC There has always been strong support at both the presidential and commissioner level for 12 teams, and part of it is because they like the first-round byes for the top four seeds, but also because of the workable logistics in the overall college football calendar." + ] + }, + { + "question": "Which team will host nation Qatar play against in the opening match of the 2022 World Cup?", + "gt_answer": "Ecuador", + "gt_reference": [ + "World Cup 30 Qatar had to wait 4371 days to play their first World Cup match on home soil after being announced as the hosts of the 2022 tournament by FIFA on December 2, 2010. And now the tournament they have waited so long for is over — in a sense — after just nine days. Qatar lost the opening match of the 2022 World Cup when they fell 2-0 to Ecuador. Advertisement That left them requiring a positive result against Senegal, the reigning African champions, in their second match of the tournament. But, despite an improved performance, Qatar were defeated again, losing 3-1, leaving them on the verge of being eliminated from their own tournament at the first hurdle. But are the hosts definitely out? And are they in danger of being the worst host nation in the 92-year history of the tournament? We take a look below. GO DEEPER The Radar - The Athletic's 2022 World Cup scouting guide Yes. Qatar’s second loss leaves them bottom of Group A with zero points. The Netherlands and Ecuador are both on four points, while Senegal are on three. While Qatar could beat The Netherlands in their final game, they will not be able to overtake them. They also cannot overtake Ecuador, and if Senegal beat Ecuador to get second spot, then Qatar will not be able to catch them either. Third place is the best Qatar can hope for now." + ] + }, + { + "question": "Where did Leonard Francis escape from?", + "gt_answer": "San Diego", + "gt_reference": [ + "The Malaysian defense contractor who pleaded guilty to bribing Navy officials with sex parties, fancy dinners and alcohol in a massive corruption scandal has escaped just weeks before his sentencing date. Leonard Glenn Francis, also known as “Fat Leonard” for his overshadowing frame, fled Sunday while under house arrest in San Diego, where he was awaiting a Sept. 22 hearing. A multiagency search by the San Diego Regional Fugitive Task Force and Naval Criminal Investigative Service is underway, officials said. “He cut off his GPS monitoring bracelet on Sunday morning,” the U.S. Marshals Service announced late Monday. “Task Force Officers went to his residence and upon arrival noticed the house was now vacant.” The Navy is working with the U.S. Marshals Service and other federal agencies “to locate and apprehend Mr. Francis,” a service spokesperson said in a statement Tuesday. “Out of respect for the investigative process, we cannot comment further at this time,” the spokesperson added. Days before he vanished, neighbors recalled seeing moving trucks at Francis’s home, Supervisory Deputy Omar Castillo with the U.S. Marshals’ district in Southern California told the San Diego Union-Tribune. “He was planning this out, that’s for sure,” Castillo told the newspaper, which was the first to report Francis’s escape. Castillo did not immediately respond to a request for comment Monday night." + ] + }, + { + "question": "When does the 2022 NFL Football Season begin?", + "gt_answer": "September 8", + "gt_reference": [ + "The 2022 NFL season was the 103rd season of the National Football League (NFL). The season began on September 8, 2022, with the defending Super Bowl LVI champion Los Angeles Rams falling to Buffalo in the NFL Kickoff Game, and ended on January 8, 2023. The playoffs started on January 14 and concluded with Super Bowl LVII, the league's championship game, at State Farm Stadium in Glendale, Arizona on February 12, with Kansas City defeating Philadelphia.[1] The former Washington Redskins, after two seasons of using the placeholder name Washington Football Team, were renamed the Washington Commanders prior to the start of the season.[2] The week 17 game between Buffalo and Cincinnati was canceled after Buffalo safety Damar Hamlin suffered cardiac arrest on the field of play. It was the first regular season game to be canceled and not rescheduled since the 1987 NFLPA players' strike.[3] The 2022 NFL league year and trading period began on March 16. On March 14, teams were allowed to exercise options for 2022 on players with option clauses in their contracts, submit qualifying offers to their pending restricted free agents, and submit a Minimum Salary Tender to retain exclusive negotiating rights to their players with expiring 2021 contracts and fewer than three accrued seasons of free agent credit." + ] + }, + { + "question": "When did Meta Connect take place?", + "gt_answer": "October 11", + "gt_reference": [ + "A new site that reads \"Welcome to Meta Connect\" teases the one-day Meta Connect event with a live countdown to October 11th. This event will focus on the topic of the metaverse and explore the future of augmented and virtual reality.  The Connect event is not a new concept, with the first one dating back to 2014 when Facebook acquired Oculus. The event was originally called Oculus Connect, then rebranded to Facebook Connect, and finally to what we have today – Meta Connect.  As VR enters a critical adoption phase, these headsets offer a fully immersive experience. These events take an in-depth look at the future of AR and VR with insight from industry leaders and discussions. The website currently says more information and speaker details are coming soon. SEE: 2023 will be a pivotal year for VR: Which headset will you buy? The event comes at a perfect time since Meta CEO Mark Zuckerberg announced in August that the Meta VR Project Cambria headset would be dropping in October during his appearance on The Joe Rogan Experience podcast.  Announced in 2021, Project Cambria is Meta's highest-end VR headset. Like its most popular headset, the Meta Quest 2, it will be a stand-alone device. On the podcast, Zuckerberg also revealed that the headset will have an eye-tracking sensor, unique to this headset." + ] + }, + { + "question": "How much is the fine that Meta is facing for failing to safeguard children's information on Instagram?", + "gt_answer": "405 million euros", + "gt_reference": [ + "The company says it will appeal the fine from Ireland's Data Protection Commission. Meta faces a hefty GDPR fine for its handling of children's data. Meta is facing a fine of 405 million euros, or just over $400 million, from Ireland's Data Protection Commission for failing to safeguard children's information on Instagram.  The country's data watchdog had accused Instagram of setting children's accounts to \"public\" by default and allowing children to operate business accounts on the platform, which could leave their phone numbers and email addresses exposed. Full details of the decision are expected to be published next week, a commission spokesman said Tuesday.  Meta confirmed the fine and said it plans to appeal the decision.  \"This inquiry focused on old settings that we updated over a year ago, and we've since released many new features to help keep teens safe and their information private,\" a Meta spokesperson told CNET via email on Tuesday. \"Anyone under 18 automatically has their account set to private when they join Instagram, so only people they know can see what they post, and adults can't message teens who don't follow them.\"  The spokesperson added that Meta disagrees with how the fine was calculated and is reviewing the rest of the commission's decision. The $400 million fine would be the second-largest issued to a tech company for a violation of the European Union's General Data Protection Regulation, behind Amazon's record-setting $888 million fine in 2021." + ] + }, + { + "question": "When was Gotham Knights released?", + "gt_answer": "October 21", + "gt_reference": [ + "32] The Windows port was developed by Polish studio QLOC.[33] Gotham Knights was revealed during a virtual event called DC FanDome in August 2020. The game was originally planned to be released in 2021 for PlayStation 4, PlayStation 5, Windows, Xbox One, and Xbox Series X/S,[34] but was delayed to 2022.[35][36] The PlayStation 4 and Xbox One versions were later cancelled.[31] The game was released on October 21.[37] A comic book limited series—written by Evan Narcisse and illustrated by ABEL—titled Batman: Gotham Knights – Gilded City, serves as a tie-in and a prequel to Gotham Knights, exploring Batman's final case before his death. It was released on October 25 the same year, with subsequent issues releasing monthly.[38] Each issue of the limited series came with a code for an in-game item, as well as a seventh item given to those who purchase all six issues of the comic book.[39] Gotham Knights received \"mixed or average\" reviews from critics, according to review aggregator Metacritic.[41][42][40] Game Informer praised the game for its co-op gameplay, but criticized its mission objectives, combat, and side activities." + ] + }, + { + "question": "How did Bernard Shaw die?", + "gt_answer": "pneumonia", + "gt_reference": [ + "By  Karen Zamora ,  Ashley Brown Bernard Shaw, the pioneering Black journalist who served as CNN's chief anchor for 20 years, died on Wednesday from pneumonia. He was 82. AILSA CHANG, HOST: This happens to be a day when journalists around the world are covering a big breaking news story.ARI SHAPIRO, HOST: And it's a day we're pausing to remember a pioneering journalist who mastered the craft, Bernard Shaw. The longtime former news anchor died yesterday.BERNARD SHAW: I wanted to be the best broadcast journalist I could be. In all the years of preparing to become an anchor, one of the things I strove for was to be able to control my emotions in the midst of hell breaking out.CHANG: That's Shaw, also a former Marine, telling our NPR co-host Michel Martin about his ambitions back in 2014. His career began in his hometown, Chicago. He went on to report for CBS, ABC and in 1980 became the first chief anchor for a fledgling network called CNN.SHAPIRO: When the 1991 Gulf War began, he reported from Baghdad as bombs were going off.(SOUNDBITE OF ARCHIVED RECORDING)SHAW: Something is happening outside. Let's describe to our viewers what we're seeing. The skies over Baghdad have been illuminated." + ] + }, + { + "question": "When did Queen Elizabeth II die?", + "gt_answer": "September 8", + "gt_reference": [ + "Two days before her death, on 6 September 2022, the Queen accepted the resignation of Boris Johnson and appointed Liz Truss to succeed him as Prime Minister of the United Kingdom; these meetings took place at Balmoral Castle, rather than their usual location, Buckingham Palace.[22] At the meeting with Truss, the final public photos of the Queen were taken by Jane Barlow. Social media users were quick to observe the Queen’s continued use of a walking stick, her frail, “ghostly” appearance, and a large bruise-like mark on her right hand. After the Queen’s death, Barlow said that while she could tell the Queen was unwell, she was “in quite good spirits.” On 7 September, the Queen was scheduled to attend an online meeting of the Privy Council of the United Kingdom to swear in new ministers in Truss's government, but this was cancelled after she was advised by doctors to rest.[23] The Queen's final public statement, issued that same day, was a message of condolences for the victims of a mass stabbing incident in Saskatchewan, Canada.[24] The Queen died at 15:10 BST on 8 September 2022 at the age of 96, ending her 70-year reign. According to her death certificate, which was made public on 29 September, she died of old age.[2] Her death was publicly announced at 18:30." + ] + }, + { + "question": "Where did Queen Elizabeth II die?", + "gt_answer": "Balmoral", + "gt_reference": [ + "Becky Sullivan Queen Elizabeth II pictured in 2012. Eddie Mulholland /WPA Pool/Getty Images hide caption Queen Elizabeth II pictured in 2012. Queen Elizabeth II, whose seven decades on the throne of the United Kingdom was a longer reign than any other British monarch, has died at the age of 96. The queen \"died peacefully\" on Thursday afternoon at Balmoral Castle, her estate in the Scottish Highlands, royal family officials announced. Her son Charles, 73, is now king and will be known as King Charles III. Officials said he remains at Balmoral and will return to London on Friday. The Queen died peacefully at Balmoral this afternoon.The King and The Queen Consort will remain at Balmoral this evening and will return to London tomorrow. pic.twitter.com/VfxpXro22W \"The death of my beloved Mother, Her Majesty The Queen, is a moment of the greatest sadness for me and all members of my family,\" the king said in a statement. \"We mourn profoundly the passing of a cherished Sovereign and a much-loved Mother. I know her loss will be deeply felt throughout the country, the Realms and the Commonwealth, and by countless people around the world.\" Camilla, his second wife, will be known as queen consort. Elizabeth had been placed under medical supervision earlier Thursday, officials said." + ] + }, + { + "question": "who did Alcaraz beat in U.S. Open 2022 Men's Semifinals?", + "gt_answer": "Frances Tiafoe", + "gt_reference": [ + "In all, Alcaraz has played 960 minutes so far this tournament, which, when mixed with his late finishes, could be a factor against Frances Tiafoe in the semifinal. Here’s a look at Alcaraz’s journey: Alcaraz got a bit of a break in the first round against Sebastian Baez, the Argentine ranked No. 37, on a particularly hot and humid day at the tournament. After Alcaraz took the first two sets, 7-5, 7-5, Baez was forced to retire in the third set, down two games to none, with an injury. After the match, Alcaraz said in a news conference that the conditions were “really tough.” “The heat was pretty tough, so I’m just really happy with the level and be able to play the second round,” he said. Alcaraz cruised through the first two sets of his second round match against Federico Coria, an Argentine ranked No. 78. In the third set, Alcaraz had to battle. Tied at 4-4, Alcaraz and Coria dueled out a 16-point game, which Alcaraz ultimately won. Alcaraz sealed the win swiftly in two hours and 10 minutes. Alcaraz had another quick match in the third round, beating Jenson Brooksby, an American ranked No. 43, in two hours and 11 minutes." + ] + }, + { + "question": "when did king charles iii get crowned?", + "gt_answer": "May 6 2023", + "gt_reference": [ + "Watch CBS News By Haley Ott, Tucker Reals Updated on: May 6, 2023 / 9:07 PM / CBS News London — King Charles III and his wife, Queen Camilla, were both formally crowned Saturday in a historic ceremony at London's Westminster Abbey before appearing on the balcony for a flyover.  The coronation ceremony, steeped in centuries of tradition but with a few small tweaks for the modern age, played out in front of about 2,000 invited guests and a global audience of millions watching on TV or livestream. Though Charles officially became king following the death of his mother, Queen Elizabeth II, on Sept. 8, 2022, today's coronation ceremony consecrated and celebrated his ascent to the throne. Follow along below for the latest updates as the ceremony unfolded:  King Charles and Queen Camilla stepped out onto the balcony of Buckingham Palace Saturday with other senior members of their family to watch a military fly-past and greet members of the public. They were joined by other \"working\" members of the royal family, including William and Kate, the Prince and Princess of Wales, and their children.  As part of the \"slimmed down\" coronation day events requested by the king, not all members of their large family joined them." + ] + }, + { + "question": "What is Trace Adkins' role in \"Monarch\"?", + "gt_answer": "Albie Roman", + "gt_reference": [ + "The upcoming Fox series boasts strong ties to the real Nashville, including cameos by a host of country stars and a theme song by Music City songwriting royalty Trace Adkins says he truly met his match when he was offered the role of Albie Roman, the patriarch in Monarch, the much-anticipated Fox primetime drama set in the country music scene. \"He's very much like me,\" the 60-year-old country hitmaker tells PEOPLE. \"I mean, I can look back over periods in my life where the train was perpetually off the track, and that's Albie's world. The train is perpetually off the track. Sometimes it's his fault, sometimes it's not, but he has to deal with that stuff.\" Indeed, Adkins has had his share of tabloid headlines over the years — but forgive him for forgetting one more glaringly obvious reason that the part fits him to a T: The singer and his character are both big-time country stars. And obviously, Adkins' casting is just one of the ways the show, which is set in Austin, is sure to bring a country music authenticity to what promises to be one of the fall's hottest — and steamiest — new shows." + ] + }, + { + "question": "When does the iPhone 14 Plus release?", + "gt_answer": "October 7 2022", + "gt_reference": [ + "List of iPhone models The iPhone 14 and iPhone 14 Plus are smartphones designed, developed, and marketed by Apple Inc. They are the sixteenth and latest generation of iPhones, succeeding the iPhone 13 and iPhone 13 Mini, and were announced during Apple Event, Apple Park in Cupertino, California, on September 7, 2022, alongside the higher-priced iPhone 14 Pro and iPhone 14 Pro Max flagships. The iPhone 14 and iPhone 14 Plus feature a 6.1-inch (15 cm) and 6.7-inch (17 cm) display, improvements to the rear-facing camera, and satellite connectivity for contacting emergency services when a user in trouble is beyond the range of Wi-Fi or cellular networks.[10][11] The iPhone 14 was made available on September 16, 2022,[12] and iPhone 14 Plus was made available on October 7, 2022, priced at $799 and $899 respectively and was launched with iOS 16.[7][13] Pre-orders for the iPhone 14 and iPhone 14 Plus began on September 9, 2022.[14] The iPhone 14 does not have a \"Mini\" version like its predecessor, the iPhone 13 Mini. Instead, Apple has reintroduced a larger dimension iPhone 14 named the iPhone 14 Plus. Apple has not introduced a Plus model iPhone since the iPhone 8 Plus in 2017." + ] + }, + { + "question": "Who stars as Susie Wallis in Susie Searches?", + "gt_answer": "Kiersey Clemons", + "gt_reference": [ + "Susie hopes to become an internet sensation, and make enough money to give her and her mother, now bed-ridden with MS, a more comfortable life. But “Susie Searches” isn’t taking off as hoped, unlike the meditation site hosted by campus hunk Jesse (Alex Wolff). When Jesse suddenly goes missing, Susie seizes the opportunity to solve the mystery and make “Susie Searches” a hit. Cute and colorful, SUSIE SEARCHES is a “girl detective” mystery story in the Nancy Drew mode – until it isn’t. Actor-turned-director Sophie Kargman turns this sunny tale in a wholly unexpected direction. As Susie, Kiersey Clemons is impressive, as the title character finds her way through the plot’s twists. In her feature film directorial debut, Kargman takes the script she co-wrote with William Day Frank and the idea of their short film, and transforms it into a tale you don’t see coming, until it is right upon you." + ] + }, + { + "question": "What is the new product at Chick-fil-A in fall 2022?", + "gt_answer": "Autumn Spice Milkshake", + "gt_reference": [ + "Spice up your morning routine with the Spicy Chicken Biscuit\r \t\t\t\t\t\t\t\t\t\t\t\t \r \t\t\t\t\t\t\t\t\t\t\t\t\tHow to cater your summer gathering with Chick-fil-A\r \t\t\t\t\t\t\t\t\t\t\t\t \r \t\t\t\t\t\t\t\t\t\t\t\t\tCelebrating the Cows\r \t\t\t\t\t\t\t\t\t\t\t\t \r \t\t\t\t\t\t\t\t\t\t\t\t\tCode Moo: The Cows are back at Chick-fil-A\r \t\t\t\t\t\t\t\t\t\t\t\t \r \t\t\t\t\tPlease enter an address\r \t\t\t\t \r \t\t\t\t\tPlease enter an address\r \t\t\t\t \r \r \t\t\t\tSep 8, 2022\r \t\t\t \r \t\t\t\t\t\t\tNews\r \t\t\t\t\t\t \r \t\t\t\t\tSeasonal-favorite and new fall treat to join menu for a limited time, starting Sept. 12 \r \t\t\t\t ATLANTA (September 8, 2022) – Chick-fil-A® is embracing the flavors of fall with the debut of the new Autumn Spice Milkshake — its first new milkshake flavor available chainwide in four years — and the return of the Grilled Spicy Deluxe Sandwich. These seasonal fall items will be available nationwide* from Sept. 12 through Nov. 12, while supplies last.  Autumn spice & everything nice  The Autumn Spice Milkshake mixes rich flavors like cinnamon with crunchy bits of brown sugar cookies. Made with Chick-fil-A Icedream® dessert and hand spun, the Autumn Spice Milkshake is topped off with whipped cream and a cherry*." + ] + }, + { + "question": "Which team will Kyle Busch join in 2023?", + "gt_answer": "Richard Childress Racing", + "gt_reference": [ + "36 Editor’s Note: This story is included in The Athletic’s Best of 2022. View the full list. Kyle Busch will join Richard Childress Racing in 2023, multiple sources told The Athletic, ending a highly successful tenure at Joe Gibbs Racing that saw the driver-team pairing win two Cup Series championships and 56 races over a 15-year span. An official announcement is expected Tuesday. Advertisement Busch is making the move following prolonged negotiations with JGR and several teams that led to much discourse on which team he’d sign with. The 37-year-old Busch is in the final season of a multiyear contract with JGR and the two sides had been negotiating a contract extension for some time. However, those discussions were hampered because JGR had not secured a primary sponsor for Busch’s No. 18 team beyond this season. The team’s current primary sponsor, Mars Inc., is leaving JGR at the conclusion of the 2022 season after sponsoring Busch since he began his tenure with JGR in 2008. JGR has known of Mars’ eventual departure since last summer and has been working to find a replacement. That search complicated discussions with Busch regarding a contract extension as the team was uncertain what it could commit financially to re-signing Busch." + ] + }, + { + "question": "What is men's year-end No 1 in tennis in 2022?", + "gt_answer": "Carlos Alcaraz", + "gt_reference": [ + "Alcaraz and Medvedev are the first pair of players to debut at No. 1 in the same season since Roddick and Juan Carlos Ferrero in 2003. At least seven players 25-and-under finished in the Top 10 for the second year in a row (8 in 2021). Joining Alcaraz, Auger-Aliassime and Fritz in the 2022 year-end Top 10 are 23-year-old Casper Ruud of Norway, 24-year-old Stefanos Tsitsipas of Greece and 25-year-olds Andrey Rublev and Hubert Hurkacz. 2022 Year-End Pepperstone ATP Rankings Top 10 1) Carlos Alcaraz – Second Spanish year-end No. 1, joining five-time year-end No. 1 Rafael Nadal 2) Rafael Nadal – Ends year at No. 2 for eighth time and in Top 2 for record 13th time 3) Casper Ruud – Best year-end ranking for a Scandinavian player since No." + ] + }, + { + "question": "Who was playing Lex Luthor in Titans?", + "gt_answer": "Titus Welliver", + "gt_reference": [ + "Superhero stories are so common in movies and TV now that you can't expect every actor involved in such a production to be a lifelong fan of the material, but sometimes you get lucky. Titans showrunner Greg Walker previously told EW that when he reached out to actor Titus Welliver about portraying iconic DC supervillain Lex Luthor in season 4, he was surprised to find that Welliver was already well-versed in the comic book history of the Teen Titans.  \"I've been collecting comic books since I was 7 or 8 years old,\" Welliver tells EW. \"I'm 60 now, so that's a lot of comic books.\"  He has the nerd knowledge to prove it, too. Check out EW's conversation with Welliver about Luthor and all things Titans below.  ENTERTAINMENT WEEKLY: What first got you interested in the Teen Titans?  TITUS WELLIVER: I love the period in the late '60s and the '70s when they're less clean-cut, their hair is longer, they're kind of hip, they're go-go dancing. I had always read the comics. I mean, I have all the omnibuses, plus I still have all of my original collection.  So when somebody calls you up on the phone and says, \"Do you want to play Lex Luthor?\" The immediate answer is yes." + ] + }, + { + "question": "What is Columbia University's QS ranking in 2023?", + "gt_answer": "22", + "gt_reference": [ + "Anurag PalStudy Abroad Expert Established in 1754, Columbia University is a part of the prestigious group of Ivy League Universities. Located in New York, Columbia University is one of the oldest universities in the United States of America. If we talk about Columbia University rankings, then according to the Times Higher Education (THE) World University Rankings 2023, the university has been placed at the 11th position. In 2022 too, the university was placed at the same position i.e. 11th. Columbia University has been placed in the top 20 positions since 5 years (2018-2022). THE considers the parameters like teaching, research, citations, industry outcome, and international outlook for the rankings of the universities. If we consider Columbia University world ranking, then as per QS World University Rankings 2023, the university is placed at the 22nd position. If we compare the university’s ranking with 2022, then its position has declined. In 2022, it was placed at the 19th position. The indicators that are considered for evaluating the QS World University Rankings include academic reputation, employer reputation, citations per faculty, faculty / student ratio, and international student ratio & international faculty ratio. Read: Columbia University Admissions 2023 Considering Columbia University’s rankings by U.S." + ] + }, + { + "question": "Who was the first Asian man to win Lead Actor in a Drama Series?", + "gt_answer": "Lee Jung-jae", + "gt_reference": [ + "By subscribing, I agree to the Terms of Use and Privacy Policy. This site is protected by reCAPTCHA Enterprise and the Google Privacy Policy and Terms of Service apply.\t\t\t\t\t “Squid Game” continues to take the world by storm with star Lee Jung-jae becoming the first Asian actor to win the Emmy for Outstanding Lead Actor in a Drama Series. The South Korean star of Netflix’s most popular show ever collected the award in person on Sunday night. Lee’s lead performance in the international hit action drama was nominated against Bob Odenkirk for “Better Call Saul,” Adam Scott for “Severance,” Jason Bateman for “Ozark,” and Brian Cox and Jeremy Strong from “Succession” (the latter of which was the 2020 winner for Outstanding Lead Actor in a Drama Series). On “Squid Game,” the charismatic actor played the blundering Seong Gi-hun who, after he was unable to pay off all his debts, was kidnapped and manipulated into competing in a competition with real life or death stakes. Last competitor left standing wins a seismic cash prize. Lee’s Emmy win is not only historic, but it may prove to be a turning point for recognition of non-English language projects." + ] + }, + { + "question": "How much did Google acquire Mandiant for?", + "gt_answer": "5.4 billion", + "gt_reference": [ + "Google has announced that its proposed $5.4 billion bid to buy cybersecurity firm Mandiant is now complete. The internet giant revealed plans to acquire publicly traded Mandiant back in March, less than a year after Mandiant was spun out of its previous owner FireEye as part of a $1.2 billion deal with private equity firm Symphony Technology Group. Moving forward, Mandiant will operate under the auspices of Google Cloud, though the Mandiant brand will live on. “We will retain the Mandiant brand and continue Mandiant’s mission to make every organization secure from cyber threats and confident in their readiness,” Google Cloud CEO Thomas Kurian wrote in a blog post. Mandiant dashboard. Image Credits: Mandiant Mandiant dashboard. Image Credits: Mandiant As one of the so-called “big three” public cloud providers alongside Amazon and Microsoft, Google’s big promise to would-be customers is that it will keep all their data and infrastructure secure. This means continually introducing new products to address the ever-changing threat landscape, thought it sometimes means acquiring long-established incumbents with the expertise to bolster Google’s security proposition. And that’s effectively what Google’s getting with Mandiant, giving it a major boost in terms of security data gathering capabilities, not to mention access to hundreds of security personnel." + ] + }, + { + "question": "What was the inflation rate in the U.S. in August 2022?", + "gt_answer": "8.3%", + "gt_reference": [ + "Profile Sections tv Featured More From NBC Follow NBC News Inflation was little changed in the month of August, despite efforts by the Federal Reserve to cool off the U.S. economy. Data released Tuesday by the U.S. Bureau of Labor Statistics showed that inflation landed at 8.3% last month compared to one year ago. Economists surveyed by Bloomberg had forecast an 8.1% annual increase. Prices increased 8.5% in July. Excluding volatile food and gas prices, inflation climbed 6.3% year-on-year — higher than the consensus estimate for 6.1% and an increase from last month's 5.9% reading. The energy index rose 23.8% over the past 12 months. That includes the cost of electricity, which saw its largest one-year increase (15.8%) in four decades, according to the data. Other categories that saw increases in August include motor vehicle maintenance and repair, up 1.7%; health insurance, up 2.4%; and pets and pet products, up 1.6% in the 30-day period between July and August. Gas prices have fallen for three consecutive months and now stand at a national average of $3.70 a gallon, though there is wide geographic variability, with most Western states still above $4. But food prices have remained stubbornly elevated, climbing 11." + ] + }, + { + "question": "Who is receiving the 39th Walter Cronkite Award for Excellence in Journalism?", + "gt_answer": "Gayle King", + "gt_reference": [ + "Tuesday, Sept. 13, 2022\t\t Gayle King, the award-winning co-host of “CBS Mornings,” has been chosen to receive the 39th Walter Cronkite Award for Excellence in Journalism, Arizona State University officials announced today. King, who is also editor-at-large of Oprah Daily and hosts a live, weekly radio show titled “Gayle King in the House” on SiriusXM, will be honored during a ceremony in Phoenix on Feb. 21, 2023, at the Sheraton Phoenix Downtown. The Cronkite Award — named after the late CBS News anchor — has honored prominent journalists since 1984. The award recognizes the recipients’ accomplishments and leadership over the course of their careers. Registration is now open for the Walter Cronkite Award for Excellence in Journalism luncheon.   “Gayle King’s career and accomplishments are remarkable, and her professionalism embodies everything that Walter Cronkite valued in journalism,” said Cronkite School Dean Battinto L. Batts Jr. “Her approach to covering important events and interviewing politicians, leaders and celebrities is unparalleled. It’s an honor to present Gayle with this prestigious award.”  “I am honored to accept the Walter Cronkite Award for Excellence in Journalism. The work myself and other journalists do is important, but I don’t do it alone." + ] + }, + { + "question": "What is the name of the sequel to The Legend of Zelda: Breath of the Wild?", + "gt_answer": "Tears of the Kingdom", + "gt_reference": [ + "A sequel was announced at E3 2019[218] with the title later revealed to be The Legend of Zelda: Tears of the Kingdom.[219] It was conceived during planning for Breath of the Wild's DLC; the team came up with too many ideas, some of which could not be implemented due to technical constraints, so used them for a new game. According to Aonuma, the sequel will build atop the original's world with a new story and gameplay elements,[220] and is inspired in part by Red Dead Redemption 2.[221] Fujibayashi will reprise his role as director.[222] Originally set to be released in 2022, the game was delayed to early 2023.[223][224] The game was released on May 12, 2023.[219]" + ] + }, + { + "question": "when was The Legend of Zelda: Tears of the Kingdom released?", + "gt_answer": "May 12 2023", + "gt_reference": [ + "When you purchase through links on our site, we may earn an affiliate commission. Here’s how it works. All of The Legend of Zelda: Tears of the Kingdom tips, tricks, and details you need while you play Our Legend of Zelda: Tears of the Kingdom guide is your one-stop shop for all your Hyrule adventures. It's going to be one of the biggest games of the year, and for good reason. Nintendo is returning to the sprawling sandbox version of Hyrule we first enjoyed in Zelda: Breath of the Wild, expanding it to include a kingdom above the clouds.  As the sequel to one of the best Switch games, Tears of the Kingdom expands on what came before by taking us to the skies above Hyrule, as well as offering up new items to play around with. Read on below as we take you through everything you need to know when playing Legend of Zelda: Tears of the Kingdom.   Zelda: Tears of the Kingdom release date The Tears of the Kingdom release date was May 12, 2023. The original RRP was $69.99 / £59.99 for the standard edition, but the Collector's Edition was $129.99 / £109.99. Zelda: Tears of the Kingdom release date The Tears of the Kingdom release date was May 12, 2023. The original RRP was $69.99 / £59.99 for the standard edition, but the Collector's Edition was $129." + ] + }, + { + "question": "When was Hocus Pocus 2 released on Disney+?", + "gt_answer": "September 30", + "gt_reference": [ + "Our expert, award-winning staff selects the products we cover and rigorously researches and tests our top picks. If you buy through our links, we may get a commission. Reviews ethics statement Hocus Pocus 2 is out now on Disney's streaming service. Kathy Najimy, Bette Midler and Sarah Jessica Parker fly (again).  If, like the Sanderson sisters, you've been waiting three centuries for the Hocus Pocus franchise to be resurrected (or even just 29 years since the first movie), good news: Hocus Pocus 2 is out today. The long-awaited second installment of the classic Halloween movie hit Disney's streaming service Disney Plus at midnight PT/ 3 a.m. ET on Sept. 30, just in time for spooky season. Starring the original Sanderson Sisters from the first movie released in 1993 -- Bette Midler, Sarah Jessica Parker and Kathy Najimy -- the sequel sees the witches resurrected again as the black flame candle is lit once more in Salem. Check out our review of Hocus Pocus 2, and stream it on Disney Plus now." + ] + }, + { + "question": "When is ACL 2023 taking place?", + "gt_answer": "July 9", + "gt_reference": [ + "Toronto, CanadaJuly 9-14, 2023 The 61st Annual Meeting of the Association for Computational Linguistics (ACL’23) will take place in Toronto, Canada from July 9th to July 14th, 2023. More information will be announced soon. All papers in the program must have at least one author registered at the appropriate rate for their presentation modality and status. Please see the registration page for more details." + ] + }, + { + "question": "Where is ACL 2023 taking place?", + "gt_answer": "Toronto", + "gt_reference": [ + "A multicultural metropolis on the shores of Lake Ontario, Toronto is Canada’s centre for arts, food, business and fun – all under the watchful gaze of the iconic CN Tower. Please visit here for more details. ACL 2023 will take place in the Westin Harbour Castle, Toronto: Please use the direct hotel link to see if they have availability or search Bookings.com for other accommodations. We recommend you not hold off on booking as the Downtown area has a lot of events taking place the week of the ACL Conference." + ] + }, + { + "question": "When is EMNLP 2023 taking place?", + "gt_answer": "December 6", + "gt_reference": [ + "Singapore December 6 –10, 2023 EMNLP 2023 will take place in Singapore from Dec 6th to Dec 10th, 2023. More information will be announced soon. All deadlines are 11.59 pm UTC -12h (“anywhere on Earth”)." + ] + }, + { + "question": "Where is EMNLP 2023 taking place?", + "gt_answer": "Singapore", + "gt_reference": [ + "Singapore December 6 –10, 2023 EMNLP 2023 will take place in Singapore from Dec 6th to Dec 10th, 2023. More information will be announced soon. All deadlines are 11.59 pm UTC -12h (“anywhere on Earth”)." + ] + }, + { + "question": "What is the starting price for Virginia Tech 2023 football season tickets?", + "gt_answer": "$350", + "gt_reference": [ + "All new season tickets will require a gift of $25 per seat to the Hokie Scholarship Fund, ensuring your support of the Hokies extends beyond the final whistle. Season ticket holders may be required to pay an additional per seat donation at the time of selecting seats, depending on seat location and other gifts made to the Hokie Scholarship Fund ahead of March 31, 2021. Want more information on Virginia Tech football season tickets? Join our interest list today and a Hokie Ticket Office representative will reach out with more details. Buy Tickets 800 VA TECH 4 Request Info Enjoy exclusive benefits all year long and get the best value for your dollar with season tickets to Virginia Tech football. Starting at just $350, season tickets guarantee admission to all seven home games in 2021, including Notre Dame and ACC foes North Carolina, Pitt, Syracuse, and Duke. A full list of benefits and features includes: Hokie football season tickets range from $350 to $450, with pricing remaining the same as the 2020 season. New season tickets purchased for the 2021 season will be secured at the $350 price point,  with the option to select seats in the summer and pay the difference in ticket cost at that time. Season ticket holders will have three payment options in 2021. Those options are: Per seat gifts are required for all season tickets in Lane Stadium." + ] + }, + { + "question": "What is the date of the Wine OFF the Fox benefit concert?", + "gt_answer": "October 22", + "gt_reference": [ + "This post was contributed by a community member. The views expressed here are the author's own. October is Breast Cancer Awareness month and Wine OFF the Fox on Saturday Oct. 22 features wine tasting and live performances from girl bands at Oswego’s Venue 1012. Plus a portion of the event’s proceeds benefit organizations that provide breast cancer services and support. Select and sip from more than 18 varieties of wine including blush white and red; seasonal craft beer from Oswego Brewing Company; a signature cocktail and non-alcoholic options. Bring your own picnic and relax in the crisp autumn air while you listen to the hottest hits of today and ‘60s ‘70s and ‘80s from girl bands Jersey Girls and Serendipity. Tickets are on sale now! Wine OFF the Fox and Breast Cancer benefit concert – Venue 1012 Wine OFF the Fox takes place on Saturday Oct. 22 from 2 to 7 p.m. at Venue 1012 1012 Station Drive Oswego." + ] + }, + { + "question": "When is the funeral of Queen Elizabeth II?", + "gt_answer": "September 19", + "gt_reference": [ + "On 8 September 2022, at 15:10 BST, Elizabeth II, Queen of the United Kingdom and the other Commonwealth realms, and the longest-reigning British monarch, died at Balmoral Castle in Aberdeenshire, Scotland, at the age of 96. Her death was publicly announced at 18:30. She was succeeded by her eldest son, Charles III. The death of Queen Elizabeth II set in motion Operation London Bridge, a collection of plans including arrangements for her state funeral, and supported by Operation Unicorn, which set protocols for her death occurring in Scotland. The United Kingdom observed a national mourning period of 10 days. The Queen's lying in state took place in Westminster Hall from 14 to 19 September, during which time an estimated 250,000 people queued to pay their respects. Elizabeth's state funeral on 19 September was the first held in Britain since Winston Churchill's in 1965. A funeral service was held at Westminster Abbey, followed by a procession to Wellington Arch that featured around 3,000 military personnel and was watched by around a million people in central London. The state hearse then transported the Queen's coffin to Windsor, followed by another procession through Windsor Great Park and a committal service at St George's Chapel at Windsor Castle." + ] + }, + { + "question": "Where did Queen Elizabeth II's state funeral take place?", + "gt_answer": "Westminster Abbey", + "gt_reference": [ + "On 8 September 2022, at 15:10 BST, Elizabeth II, Queen of the United Kingdom and the other Commonwealth realms, and the longest-reigning British monarch, died at Balmoral Castle in Aberdeenshire, Scotland, at the age of 96. Her death was publicly announced at 18:30. She was succeeded by her eldest son, Charles III. The death of Queen Elizabeth II set in motion Operation London Bridge, a collection of plans including arrangements for her state funeral, and supported by Operation Unicorn, which set protocols for her death occurring in Scotland. The United Kingdom observed a national mourning period of 10 days. The Queen's lying in state took place in Westminster Hall from 14 to 19 September, during which time an estimated 250,000 people queued to pay their respects. Elizabeth's state funeral on 19 September was the first held in Britain since Winston Churchill's in 1965. A funeral service was held at Westminster Abbey, followed by a procession to Wellington Arch that featured around 3,000 military personnel and was watched by around a million people in central London. The state hearse then transported the Queen's coffin to Windsor, followed by another procession through Windsor Great Park and a committal service at St George's Chapel at Windsor Castle." + ] + }, + { + "question": "Who were the top two contestants in the America's Got Talent Season 17 finale?", + "gt_answer": "Mayyas", + "gt_reference": [ + "GoldDerby The current 2022 cycle of “America’s Got Talent” will end with a two-night finale on NBC, airing September 13 (performance show) and September 14 (results show). All 11 finalists have now been named, with America picking two per week in each of the five qualifiers rounds, and the 11th being an instant save wildcard. Terry Crews hosts the long-running program, and the judges are Simon Cowell, Sofia Vergara, Heidi Klum and Howie Mandel. Read on for everything to know about the “America’s Got Talent” Season 17 finale. Who are the Top 10 acts of Season 17? America chose two finalists per week from each of the five qualifiers rounds, creating a Top 10. They are: saxophonist Avery Dixon (Terry’s Golden Buzzer), country singer Drake Milligan, country singing trio Chapel Hart (the group’s Golden Buzzer), magician Yu Hojin, pop singer Sara James (Simon’s Golden Buzzer), magician Nicolas RIBS, artificial intelligence act Metaphysic, stand-up comedian Mike E. Winfield, Lebanese dance act Mayyas (Sofia’s Golden Buzzer) and pole dancer/animator Kristy Sellars. SEE All Golden Buzzers on ‘AGT’ through the years Who is the instant save wildcard?" + ] + }, + { + "question": "When is MotorCity Cage Night XII?", + "gt_answer": "November 18", + "gt_reference": [ + "MotorCity Casino Hotel welcomes MotorCity Cage Night XII - Live Mixed Martial Arts Fights at Sound Board on Friday, November 18, 2022. Doors open at 6:30pm and the first bout begins at 7pm. Bouts to be officially announced prior to the event. Card subject to change without notice All bouts to be approved by the State of Michigan Unarmed Combat Commission All guests must be at least 21 years of age with valid photo ID. \"SOUND BOARD, an intimate live performance venue is located at MotorCity Casino Hotel. The venue features four bars and several private suites that are available to create an unforgettable live entertainment event. Free and convenient valet and self-parking are available.\" Additional Ticket Information Visit SoundBoardDetroit.com/Packages for more information about VIP Tickets & Hotel Packages.  Get in touch with us at 866-STAY-MCC or info@soundboarddetroit.com. Where can I park? Olympia Development operates 32 parking facilities within The District Detroit. To pre-reserve parking, visit ParkDistrictDetroit.com Parking is included in your ticket price at our amphitheatres and is offered onsite at the venue. Will events be cancelled due to rain, snow, or inclement weather?" + ] + }, + { + "question": "How many people died in the mid-air collision in Boulder County?", + "gt_answer": "Three", + "gt_reference": [ + "Several 911 callers reported seeing two planes collide over Boulder County. Three people are confirmed dead after two small aircraft collided mid-air in Colorado Saturday, authorities said. Multiple 911 callers reported seeing two planes collide over Boulder County shortly before 9 a.m. local time, the Boulder County Sheriff's Office said. The aircraft collided and crashed near Vance Brand Airport in Longmont at 8:50 a.m., according to the Federal Aviation Administration. The collision involved a single-engine Cessna 172 and a Sonex Xenos aircraft, a type of motor glider, the National Transportation Safety Board said. First responders found two separate crash sites near Niwot Road, the sheriff's office said. Aerial footage showed that one of the aircraft had landed in trees, while the other crashed into a nearby field. Two people were on board the Cessna 172, the FAA said. The sheriff's office also said it confirmed two people were on board the plane, both of whom were found dead at the scene. The sheriff's office said at this time one person was confirmed to be in the aircraft, who was also found dead at the scene. The FAA said it is unknown how many people were on board the second aircraft. The victims have yet to be identified, the sheriff's office said. Once identified, their names will be released pending next-of-kin notification. The FAA and NTSB are investigating the cause of the crash." + ] + }, + { + "question": "Who is Italy's first female prime minister?", + "gt_answer": "Giorgia Meloni", + "gt_reference": [ + "Populist firebrand Giorgia Meloni has been named as Italy’s first female prime minister, becoming the country’s most far-right leader since Benito Mussolini. She received the mandate to form a government from Italy’s President Sergio Mattarella on Friday afternoon after two days of official consultations, and is set to be sworn in at 10 a.m. local time (4 a.m. ET) on Saturday. Last month’s general election resulted in an alliance of far-right and center-right parties, led by her ultraconservative Brothers of Italy, winning enough seats in Italy’s parliament to form a government. Meloni announced her government picks in Rome’s Quirinal Palace, making the leader of Italy’s far right League party, Matteo Salvini, infrastructure minister. Giancarlo Giorgetti, also of the League party, was made economy minister. Antonio Tajani from the Forza Italia party was given the position of minister of foreign affairs while the role of defense minister went to Guido Crosetto, one of the founders of the Brothers of Italy party. The new government will be made up of a coalition of Meloni’s Brothers of Italy party, Salvini’s League party and the Forza Italia party, led by former Italian Prime Minister Silvio Berlusconi. The Brothers of Italy received nine ministries whereas Forza Italia and the League each received five ministries." + ] + }, + { + "question": "What caused Ben Davies to be unavailable for Wales in the upcoming Nations League matches?", + "gt_answer": "Knee", + "gt_reference": [ + "Last updated on 19 September 202219 September 2022.From the section Wales Wales have called up teenage Birmingham City midfielder Jordan James for their Nations League games against Belgium and Poland on 22 and 25 September after injury ruled out Joe Allen. Uncapped James, 18, has played for England Under-20s and was last week included in the Wales Under-21 squad. Senior Wales boss Robert Page has now promoted James to his squad. While a hamstring strain ruled out Allen, defender Ben Davies' small leg fracture forced his absence. Swansea's Allen and Tottenham's Davies picked up the injuries with their clubs. Davies, 29, is expected to be out for around three weeks after suffering his injury in Spurs' Champions League defeat by Sporting Lisbon. Allen came off in Swansea's 3-0 Championship win over Hull on Saturday. Wales travel to Belgium on Thursday before hosting Poland three days later. Spurs manager Antonio Conte has said Davies will not be available for Wales duty. \"He had an injury in his knee in the game against Sporting Lisbon, and he played with this injury,\" Conte told Sky Sports. \"It is not a serious injury, I think (he will be back) after the international break because, with the national team, he is not available. \"But I think after the international break, he will be available for us.\" Allen, 32, missed the start of the season with a hamstring problem picked up on Wales duty in June." + ] + }, + { + "question": "Who won the WNBA Finals 2022?", + "gt_answer": "Aces", + "gt_reference": [ + "The 2022 WNBA Finals, officially the WNBA Finals 2022 presented by YouTube TV for sponsorship reasons, was the best-of-five championship series for the 2022 season of the Women's National Basketball Association (WNBA). The finals featured the first-seeded Las Vegas Aces facing off against the third-seeded Connecticut Sun.[1] The Aces defeated the Sun in 4 games, winning their first WNBA Championship. This was Las Vegas's third time making the finals, and the second time since moving to Vegas. They previously competed in the Finals in 2008 and 2020. This was Connecticut's fourth time making the finals. They previously competed in 2004, 2005, and 2019.[2] The Aces won the finals three games to one to claim their first championship in franchise history. Head coach Becky Hammon became the first rookie head coach to win the WNBA Title. In the WNBA's Inaugural Finals, Van Chancellor was a rookie to the WNBA, but had coached in college for nineteen years before winning the WNBA title.[3] Alyssa Thomas recorded the first WNBA Finals triple-double in Game Three.[4] She recorded the second in Finals history in Game Four.[5] Bold Series winner In November 2021, the WNBA Board of Governors formalized a new playoff system that will structure the 2022 playoffs onward." + ] + }, + { + "question": "When did the Golden Globe Awards 2023 take place?", + "gt_answer": "January 10", + "gt_reference": [ + "Create a free profile to get unlimited access to exclusive show news, updates, and more! Let awards season begin!  NBC will be hosting the 80th Annual Golden Globe Awards in 2023. The network has been hosting the award ceremony since 1996, which recognizes the best and brightest in film and television, as selected by the Hollywood Foreign Press Association. “We recognize the HFPA’s commitment to ongoing change and look forward to welcoming back the Golden Globes to NBC for its landmark 80th anniversary in January 2023,” Frances Berwick, NBCUniversal Television and Streaming’s Chairman of Entertainment Networks, said in a statement.  Here's what to know about the 2023 Golden Globes: Tuesday, January 10, 2023." + ] + }, + { + "question": "What is the release date of the Pixel Watch?", + "gt_answer": "October 13", + "gt_reference": [ + "The Pixel Watch is a Wear OS smartwatch designed, developed, and marketed by Google as part of the Google Pixel product line. First previewed in May 2022 during the Google I/O keynote, it features a round dome-shaped display as well as heavy integration with Fitbit, which Google acquired in 2021. Two Pixel-branded smartwatches had been in development at Google by July 2016, but they were canceled ahead of their release due to hardware chief Rick Osterloh's concerns that they did not fit well with other Pixel devices. Development on a new Pixel-branded watch began shortly after Google's acquisition of Fitbit. The Pixel Watch was officially announced on October 6, 2022, at the annual Made by Google event, and was released in the United States on October 13. In July 2016, Google was reportedly developing two smartwatches, codenamed \"Swordfish\" and \"Angelfish\", which were to be powered by the Android Wear operating system and expected to be released under the Nexus brand name.[2] According to Business Insider, these watches were canceled ahead of the 2016 Made by Google launch event due to concerns from Google hardware chief Rick Osterloh that they did not sync well with the company's new Pixel devices; the smartwatches were eventually \"salvaged\" by LG and released as the LG Watch Style and LG Watch Sport in February 2017." + ] + }, + { + "question": "Who was honored with a Lifetime Professional Achievement Award at the Seton Hall's Center for Sports Media Gala?", + "gt_answer": "Robin Roberts", + "gt_reference": [ + "Javascript must be enabled for the correct page display Academics Resources Quick Links Center for Sports Media On September 15, Seton Hall's Center for Sports Media hosted a gala at The Lighthouse at Chelsea Piers, NYC, celebrating its Executive Founder, Bob Ley '76, and honoring media icon Robin Roberts with a Lifetime Professional Achievement Award. VIEW ALL NEWS AND EVENTS VIEW ALL NEWS AND EVENTS VIEW ALL NEWS AND EVENTS   Seton Hall’s Center for Sports Media recognizes Robin Roberts as an outstanding leader in sports media, making strides for equity and influence in the next generation of sports journalism. Thank you to our guests, patrons and sponsors! Because of your generosity, the event raised $380,000 to help us train the next generation of sports media professionals. Your support will advance the field by providing innovative training, state-of-the-art resources, and hands-on experiences to the next generation of sports media professionals. Please consider supporting the Center for Sports Media by making a donation today. Bob Ley '76Executive FounderSeton Hall University Center for Sports Media George BodenheimerFormer PresidentESPN Chris McKendryTennis HostESPN Jane McManusExecutive Director, Center for Sports Media Seton Hall University Kevin NegandhiSportsCenter AnchorESPN Jim O'Brien '82Sr." + ] + }, + { + "question": "Who performed at the Super Bowl LVII Halftime Show?", + "gt_answer": "Rihanna", + "gt_reference": [ + "Ditto Carol Channing (twice) or any one of those four annoyingly contrived Up With People performances in the late '70s and early '80s. The Super Bowl halftime show, before Michael Jackson, was an endless wasteland of college marching bands and maddening flag-spinning tributes, from salutes to Hollywood (twice), to Motown, to the Big Band Era, to the Caribbean, to Duke Ellington. We also got the New Kids on the Block (1991) not singing any of their biggest hits and Gloria Estefan (1992) providing the soundtrack for Olympic figure skaters Dorothy Hamill and Brian Boitano of \"What would Brian Boitano do?\" fame, because nothing says a Minnesota Super Bowl like the lead singer of the Miami Sound Machine. Then we got the King of Pop at the Rose Bowl in 1993 -- and the Super Bowl halftime show was never the same again. Here is the complete list of previous Super Bowl halftime performers and themes: 2023: Rihanna 2022: Eminem, Dr. Dre. Snoop Dogg, Kendrick Lamar and Mary J." + ] + }, + { + "question": "when did Shinzo Abe die?", + "gt_answer": "July 8 2022", + "gt_reference": [ + "Shinzo Abe, the former prime minister of Japan and a serving member of the House of Representatives, was assassinated on 8 July 2022 while speaking at a political event outside Yamato-Saidaiji Station in Nara City, Nara Prefecture, Japan.[3][4][5] While delivering a campaign speech for a Liberal Democratic Party (LDP) candidate, he was shot from behind at close range by a man with an improvised firearm.[1] Abe was transported by a medical helicopter to Nara Medical University Hospital in Kashihara, where he was pronounced dead.[6] Leaders from many nations expressed shock and dismay at Abe's assassination,[7] which was the first of a former Japanese prime minister since Saitō Makoto and Takahashi Korekiyo during the February 26 incident in 1936.[8] Prime Minister Kishida decided to hold a state funeral for Abe on 27 September.[9] The suspect, 41-year-old Tetsuya Yamagami (Japanese: 山上 徹也), was arrested at the scene for attempted murder; the charge was later upgraded to murder after Abe was pronounced dead. Yamagami told investigators that he had shot Abe in relation to a grudge he held against the Unification Church (UC), to which Abe and his family had political ties, over his mother's bankruptcy in 2002." + ] + }, + { + "question": "who killed Shinzo Abe?", + "gt_answer": "Tetsuya Yamagami", + "gt_reference": [ + "Shinzo Abe, the former prime minister of Japan and a serving member of the House of Representatives, was assassinated on 8 July 2022 while speaking at a political event outside Yamato-Saidaiji Station in Nara City, Nara Prefecture, Japan.[3][4][5] While delivering a campaign speech for a Liberal Democratic Party (LDP) candidate, he was shot from behind at close range by a man with an improvised firearm.[1] Abe was transported by a medical helicopter to Nara Medical University Hospital in Kashihara, where he was pronounced dead.[6] Leaders from many nations expressed shock and dismay at Abe's assassination,[7] which was the first of a former Japanese prime minister since Saitō Makoto and Takahashi Korekiyo during the February 26 incident in 1936.[8] Prime Minister Kishida decided to hold a state funeral for Abe on 27 September.[9] The suspect, 41-year-old Tetsuya Yamagami (Japanese: 山上 徹也), was arrested at the scene for attempted murder; the charge was later upgraded to murder after Abe was pronounced dead. Yamagami told investigators that he had shot Abe in relation to a grudge he held against the Unification Church (UC), to which Abe and his family had political ties, over his mother's bankruptcy in 2002." + ] + }, + { + "question": "when was the State funeral of Shinzo Abe", + "gt_answer": "September 27 2022", + "gt_reference": [ + "The state funeral of Shinzo Abe, former prime minister of Japan and serving member of the House of Representatives who was assassinated on 8 July 2022, was attended by roughly 3,600 people within Japan alone and by around 700 international attendees.[1] The funeral was held on 27 September 2022 at the Nippon Budokan venue in Chiyoda, Tokyo. Out of the foreign attendees, 49 top-level foreign leaders and 218 foreign delegates, including 101 ambassadors and representatives based in Japan, were present at the state funeral.[2]" + ] + }, + { + "question": "What is the title of House of the Dragon's sixth episode?", + "gt_answer": "The Princess and the Queen", + "gt_reference": [ + "Den of Geek Ad New actors, new dragons, and new drama keep House of the Dragon fresh after a 10-year time jump. This House of the Dragon review contains spoilers. “The Princess and the Queen” is effectively a second pilot episode for House of the Dragon. The installment flashes further forward into the future than ever before and ages its characters up so severely that they may as well be entirely different people. And that’s not even to mention the nearly dozen actually new characters that the episode does introduce in the form of Queen Alicent, Princess Rhaenyra, and Prince Daemon’s respective broods of children.  The decision to jump so far down the timeline midseason is as bold a one as you’re likely to see on television. It has every reason to be a disastrous one as well. Shuffling the board to this extent halfway through a story shouldn’t work. And yet, work “The Princess and The Queen” does. This episode isn’t just an impressive technical maneuver. It’s by far the most entertaining and enriching dispatch from House of the Dragon yet.  The fresh burst of energy that “The Princess and The Queen” provides to House of the Dragon is evident from its very first scene." + ] + }, + { + "question": "Who has acquired Times Square Grand Slam?", + "gt_answer": "EVO Entertainment Group", + "gt_reference": [ + "The acquisition of Times Square Grand Slam was done in continued partnership with Marbella Interests, the Austin-based family office of Bryan Sheffield. In a statement to KLTV, EVO Entertainment Group said, “We are focused on learning and continuing to build upon the reputation and legacy of Times Square Grand Slam and will assess the timing for rebranding to EVO Entertainment in the future.” Copyright 2022 KLTV. All rights reserved." + ] + }, + { + "question": "When is the premiere date of Derry Girls Season 3?", + "gt_answer": "October 7", + "gt_reference": [ + "After proudly declaring himself a “Derry Girl” and bringing everyone to tears (it’s OK if you cried too), he decided to remain in Derry with his friends. Good news for everyone, because the trailer picks up right where we last left them. If their past mishaps tell us anything about the final season, it’s that no one’s going without an emotional and hilarious bang.  Derry Girls Season 3 starts streaming Oct. 7. Check out some photos below. Clare Devlin (Nicola Coughlan) is having a plaid moment." + ] + }, + { + "question": "Who was awarded the 2022 Nobel Prize for Physiology and Medicine?", + "gt_answer": "Svante Pääbo", + "gt_reference": [ + "The Nobel Prize in Physiology or Medicine has been awarded 113 times to 225 Nobel Prize laureates between 1901 and 2022. Click on the links to get more information. The Nobel Prize in Physiology or Medicine 2023 has not been awarded yet. It will be announced on Monday 2 October, 11:30 CEST at the earliest. Svante Pääbo “for his discoveries concerning the genomes of extinct hominins and human evolution”. David Julius and Ardem Patapoutian “for their discoveries of receptors for temperature and touch”. Harvey J. Alter, Michael Houghton and Charles M. Rice “for the discovery of Hepatitis C virus”. William G. Kaelin Jr, Sir Peter J. Ratcliffe and Gregg L. Semenza “for their discoveries of how cells sense and adapt to oxygen availability” James P. Allison and Tasuku Honjo “for their discovery of cancer therapy by inhibition of negative immune regulation” Jeffrey C. Hall, Michael Rosbash and Michael W. Young “for their discoveries of molecular mechanisms controlling the circadian rhythm” Yoshinori Ohsumi “for his discoveries of mechanisms for autophagy” William C. Campbell and Satoshi Ōmura “for their discoveries concerning a novel therapy against infections caused by roundworm parasites” Tu Youyou “for her discoveries concerning a novel therapy against Malaria” John O’Keefe, May-Britt Moser and Edvard I." + ] + }, + { + "question": "who was awarded the 2022 nobel prize in literature?", + "gt_answer": "Annie Ernaux", + "gt_reference": [ + "The 2022 Nobel Prize in literature was awarded to French author Annie Ernaux, for “the courage and clinical acuity with which she uncovers the roots, estrangements and collective restraints of personal memory,” the Nobel committee said. (Henrik Montgomery/TT News Agency via AP) Permanent Secretary of the Swedish Academy Mats Malm announces the 2022 Nobel Prize in Literature, in Borshuset, Stockholm, Sweden, Thursday, Oct. 6, 2022. The 2022 Nobel Prize in literature was awarded to French author Annie Ernaux, for “the courage and clinical acuity with which she uncovers the roots, estrangements and collective restraints of personal memory,” the Nobel committee said. (Henrik Montgomery/TT News Agency via AP) French author Annie Ernaux, left, and Chairman of French publishing house Gallimard, Antoine Gallimard, right, at the end of a press conference after Ernaux was awarded 2022’s Nobel Prize in literature, in Paris, Thursday, Oct. 6, 2022. The 82-year-old was cited for “the courage and clinical acuity with which she uncovers the roots, estrangements and collective restraints of personal memory,” the Nobel committee said." + ] + }, + { + "question": "Who is the new CEO of Fox Entertainment?", + "gt_answer": "Rob Wade", + "gt_reference": [ + "New York, NY and Los Angeles, CA – October 6, 2022 – Lachlan Murdoch, Executive Chair and Chief Executive Officer of Fox Corporation (Nasdaq: FOXA, FOX), today announced that Rob Wade has been appointed Chief Executive Officer of FOX Entertainment, effective immediately. Wade most recently served as President, Alternative Entertainment and Specials of FOX Entertainment. In this role, Wade and his team will guide one of the world’s most recognizable media brands and content producers with FOX broadcast network as its centerpiece. FOX Entertainment includes an expanding portfolio of owned content studios, including award-winning animation house Bento Box Entertainment, TMZ, MarVista Entertainment and Studio Ramsay Global. FOX Entertainment also includes the in-house unscripted studio FOX Alternative Entertainment, scripted content creator FOX Entertainment Studios, Blockchain Creative Labs, and the worldwide content sales unit FOX Entertainment Global. “Since the formation of FOX Entertainment, Rob has been an integral part of the leadership team responsible for delivering on its long-term strategy of creating an independent media company built on broadcast, developing an owned content portfolio and maintaining a disciplined in-house infrastructure,” said Murdoch. “Given Rob’s sharp creative instincts and proven operational acumen, he is well-suited to lead FOX Entertainment in what promises to be an exciting next chapter in its rich history." + ] + }, + { + "question": "Who won the Japanese Grand Prix 2022?", + "gt_answer": "Max Verstappen", + "gt_reference": [ + "See Japanese Grand Prix picks at SportsLineMax Verstappen -190Charles Leclerc 15-4Lewis Hamilton 10-1Sergio Perez 11-1George Russell 14-1Carlos Sainz 18-1Lando Norris 150-1Fernando Alonso 200-1Daniel Ricciardo 400-1Esteban Ocon 400-1Pierre Gasly 500-1Sebastian Vettel 750-1Lance Stroll 750-1Yuki Tsunoda 1000-1Valtteri Bottas 1500-1Kevin Magnussen 1500-1Mick Schumacher 2000-1Alexander Albon 2000-1Guanyu Zhou 2000-1Nicholas Latifi 2500-1 © 2004-2023 CBS Interactive. All Rights Reserved. CBS Sports is a registered trademark of CBS Broadcasting Inc. Commissioner.com is a registered trademark of CBS Interactive Inc." + ] + }, + { + "question": "who played Adrianna Tomaz in Black Adam?", + "gt_answer": "Sarah Shahi", + "gt_reference": [ + "In the upcoming Dwayne Johnson flick, Black Adam, the character of Adrianna Tomaz is played by actress Sarah Shahi. Tomaz, aka Isis, was a refugee Black Adam received as a bribe from Intergang. Tomaz plays a pivotal role in Black Adam's evolution as a character. Sarah Shahi is a noted actress who's appeared in several popular TV shows and films over the years. Instagram Post Sarah Shahi was born on January 10, 1980, to Abbas Jahansouzshahi and Mahmonir Soroushazar. Shahi has Iranian ancestry from her paternal and maternal sides. While her father and paternal grandfather are Iranian, her maternal grandmother is Spanish. Shahi was born Aahoo Jahansouzshahi but later changed her name to Sarah Shahi. As a child, Shahi was interested in sports and participated in beauty pageants. She majored in English and Theater at the Southern Methodist University in New Mexico. Sarah Shahi met legendary American director Robert Altman early in her career and worked on his film, Dr. T & the Women. She subsequently went on to star in Dawson's Creek, Supernatural, Alias, and The L Word. In 2007, she played a minor role in HBO's iconic gangster series, The Sopranos. That same year, she landed her first lead role on television in Facing Kate, aka Fairly Legal." + ] + }, + { + "question": "Who stars as Dr. Ben Seong in the Quantum Leap revival?", + "gt_answer": "Raymond Lee", + "gt_reference": [ + "Raymond Lee, who will appear in Top Gun: Maverick, is cast in the lead role of Ben Seong in NBC's highly-anticipated Quantum Leap reboot pilot. The Quantum Leap reboot series will star Top Gun: Maverick actor Raymond Lee in the lead role. The cult science-fiction TV show Quantum Leap was a television staple in the late '80s and '90s. Starring Scott Bakula as Dr. Sam Beckett, a scientist who inadvertently leaps through spacetime during time travel experiments, the show became a huge success and ran for five seasons and 97 episodes on NBC. The show was hugely influential, blending the genres of sci-fi, romance, drama, and social commentary, and remains one of the most influential TV shows ever. Following rumors of a possible remake or continuation, NBC greenlit an hour-long pilot, also called Quantum Leap, in January 2022. According to Deadline, Lee, who has previously appeared in episodes of Modern Family and How I Met Your Mother, will play the lead role of Dr. Ben Seong, a world-famous physicist working on a time travel project known as Quantum Leap. The character is said to be a spiritual successor to Beckett, who has been missing for 30 years, and Seong finds himself trapped in the 1980s after he uses the technology on himself." + ] + }, + { + "question": "What is the price of RTX 4090 GPU?", + "gt_answer": "$1599", + "gt_reference": [ + "The RTX 4090 is available at most major retailers in the US, but you shouldn’t expect a cheap price anywhere, as no matter what card you choose, you’ll be paying at least $1599. On the higher-end of the AIB cards, especially the ASUS ROG Strix OC’d model, you could pay up to around $2000 in total. Though, some of these premium cards can now be found at a slight discount, if you are lucky. If you’re looking for an RTX 4090 prebuilt PC, retailer B&H has already equipped itself with all manner of configurations for you to purchase. However, expect to spend around $4000 on a brand-new PC of this caliber, as the rest of the parts will also be fairly high-end. The RTX 4090 is priced at an MSRP of $1599. However, in current listings, you should expect this number to vary from $1599, all the way to around $2000 for the higher-end AIB models from brands such as ASUS. However, months after launch, prices for board partner GPUs are beginning to ease toward MSRP. Despite this, it’s still priced lower than we initially expected, as a Vietnamese retailer listed the new GPU for over $2000. However, it’s thankfully lower." + ] + }, + { + "question": "What is the release date of Sweetwater?", + "gt_answer": "April 14 2023", + "gt_reference": [ + "When New York Knicks executive Ned Irish and Knicks coach Joe Lapchick decide it is time for the Knicks to integrate, with the support of NBA President Maurice Podoloff, they come together with the other team owners of the league to make history.\" With Clifton as the subject, the film is likely to not just tackle his story, but themes of discrimination and a struggle for acceptance, with the decision to focus on this period of his life an apt one. So, with all that in mind, here is exactly how you can watch Sweetwater when it finally arrives on our screens. Related:10 Best Sports Movies For People Who Don't Like Sports Movies After an immensely long production period, with the film first set as \"in production\" back in 2012, the release date of this film will feel like the culmination of a saga. Recently, it was announced that Briarcliff Entertainment would release the film nationwide in theaters on April 14, 2023. So, after so long, anyone who has been following this movie's progress can finally book their tickets. Currently, there is no announced streaming release for Sweetwater, however, with sports biopics all the rage, and with Netflix in particular really getting into the genre, it is likely that, soon, the film will end up available to stream somewhere before long." + ] + }, + { + "question": "When did the Google Pixel Watch start sell?", + "gt_answer": "October 13", + "gt_reference": [ + "The Pixel Watch is a Wear OS smartwatch designed, developed, and marketed by Google as part of the Google Pixel product line. First previewed in May 2022 during the Google I/O keynote, it features a round dome-shaped display as well as heavy integration with Fitbit, which Google acquired in 2021. Two Pixel-branded smartwatches had been in development at Google by July 2016, but they were canceled ahead of their release due to hardware chief Rick Osterloh's concerns that they did not fit well with other Pixel devices. Development on a new Pixel-branded watch began shortly after Google's acquisition of Fitbit. The Pixel Watch was officially announced on October 6, 2022, at the annual Made by Google event, and was released in the United States on October 13. In July 2016, Google was reportedly developing two smartwatches, codenamed \"Swordfish\" and \"Angelfish\", which were to be powered by the Android Wear operating system and expected to be released under the Nexus brand name.[2] According to Business Insider, these watches were canceled ahead of the 2016 Made by Google launch event due to concerns from Google hardware chief Rick Osterloh that they did not sync well with the company's new Pixel devices; the smartwatches were eventually \"salvaged\" by LG and released as the LG Watch Style and LG Watch Sport in February 2017." + ] + }, + { + "question": "Who is the recipient of the 2022 Tom Hanks Caregiver Champion Award?", + "gt_answer": "Savannah Guthrie", + "gt_reference": [ + "Washington, DC (October 12, 2022)—The Elizabeth Dole Foundation announced Savannah Guthrie, co-anchor of TODAY at NBC News, as the 2022 Tom Hanks Caregiver Champion Award recipient in recognition of her outstanding support of military caregivers. The award will be presented at the Foundation’s annual Heroes & History Makers celebration, on October 19 at The Anthem in Washington, DC and streamed live. The event is the Foundation’s annual tribute to America’s 5.5 million military caregivers, the loved ones who voluntarily care for wounded, ill, and injured service members and veterans at home. Senator Elizabeth Dole will be joined by Hidden Heroes Campaign Chair Tom Hanks and multi-platinum, global entertainer Chris Young. The Caregiver Champion Award was named for Tom Hanks in recognition of his outstanding support of military caregivers. The award has previously been presented to former First Lady Michelle Obama; music superstar Tim McGraw; and actor and humanitarian Gary Sinise. Guthrie was selected in recognition of her devoted advocacy of those who serve and their families. Since joining the Foundation as a Hidden Heroes Ambassador in 2018, Guthrie has used her national platform to bring awareness to the 5.5 million loved ones caring for a wounded, ill, or injured service member at home. “We are thrilled to honor our champion, Savannah, during our 10th anniversary celebration,” said Steve Schwab, CEO of the Elizabeth Dole Foundation." + ] + }, + { + "question": "Who is the president of the Prospect Park Alliance?", + "gt_answer": "Morgan Monaco", + "gt_reference": [ + "On February 4, Mayor Eric Adams announced that Prospect Park… October 17, 2022 Prospect Park Alliance and NYC Parks announced today that longtime New York City public servant Morgan Monaco will become the new President of the Alliance, the non-profit that operates the park in partnership with the City, and also the Prospect Park Administrator, a public appointment by NYC Parks. Monaco, whose public sector career spans both government and non-profit organizations, brings extensive knowledge of park equity and community development to the position, as well as strong leadership in driving sustainable impact for civic organizations. Monaco is the first Black leader of the Alliance, further diversifying executive leadership within the open space sector, and continues the legacy of female leadership at the Alliance over the course of its 35-year history. Monaco succeeds former Prospect Park Alliance President Sue Donoghue, who was appointed New York City Parks Commissioner earlier this year. Monaco looks forward to working with the board, staff and most especially park users to help shape her vision for the park’s future. Coming out of the pandemic and recognizing the ways in which the park has been an invaluable resource for New Yorkers to recover, she looks forward to strengthening the organization’s capacity in order to keep pace with the needs of the park community and the robust use of the park. She plans to leverage her experience in working on citywide equity initiatives and serving vulnerable communities to explore the ways in which the Alliance can bring more social services to the park." + ] + }, + { + "question": "What gaming software development studio did Riot Games acquire?", + "gt_answer": "Wargaming Sydney", + "gt_reference": [ + "Riot Games Singapore is to support Riot's existing titles and will have a major focus on developing the company's newer titles.[36] Jason Bunge was hired as Riot Games' chief marketing officer in October 2020.[37] In October 2021, the company bought Kanga, a services firm involved in \"fan hubs\", merchandising, and content aggregation.[38] Riot Games collaborated with French animation studio Fortiche to release an animated series, Arcane. The series was released worldwide in November 2021 on Netflix, and by parent company Tencent in China, and received a favorable critical reception.[39][40] In March 2022, Riot Games announced that it had invested in Fortiche and, as a result, its chief content officer Brian Wright and director of corporate development Brendan Mulligan were joining Fortiche's board of directors.[41] That same month, Riot also hired executives from Netflix, Paramount, and HBO Max to head development of film, TV, and music endeavors built around the company's intellectual property.[42] In October 2022, Riot acquired Wargaming Sydney—a subsidiary of Cyprus-based Wargaming that had originally developed the MMO middleware BigWorld—for an undisclosed amount, and renamed it Riot Sydney. The acquisition excludes rights to the BigWorld technology itself, as well as its publishing arm.[43]" + ] + }, + { + "question": "Who is the new CEO of Yahoo?", + "gt_answer": "Jim Lanzone", + "gt_reference": [ + "Here's Gowrappan's memo to Yahoo staff: Team - We've entered a new chapter in our history, and I am tremendously proud of all that we have accomplished together over the past three years. Like the start of any next chapter, this is a natural moment for transition. I've made the decision to take on a new role as a senior advisor to Apollo. This role will enable me to support our next phase of growth and continued investment in the company. As such, I am excited to welcome Jim Lanzone as the new CEO of Yahoo effective September 27, 2021. Jim is a veteran technology and media leader with two decades of leadership experience and a deep track record of growth, innovation and an entrepreneurial spirit. I have every confidence he will be a terrific leader for the new Yahoo. Jim and I will work together to ensure a seamless transition, and I'm confident he will build on our successes and lead us into our future. What an incredible journey this has been. I joined the company three years ago as part of Verizon. Today, we're a standalone company with significant potential to grow beyond what we have accomplished thus far. We have the best team, with the right products, content and technology to shape the future of Yahoo. To reiterate what's been said many times over the past few months – this next chapter is a testament to the great work you've delivered against a focused strategy." + ] + }, + { + "question": "What is the subscriber growth of Netflix in Q3 2022?", + "gt_answer": "2.41 million", + "gt_reference": [ + "By subscribing, I agree to the Terms of Use and Privacy Policy. This site is protected by reCAPTCHA Enterprise and the Google Privacy Policy and Terms of Service apply.\t\t\t\t\t Netflix added 2.41 million global subscribers in the third quarter of 2022, bringing its grand total to 223.09 million (73.39 million from the U.S. and Canada), a gain of +4.5 percent over the prior year’s comparable quarter. Q3 was the first quarter of 2022 when Netflix didn’t lose subs. According to Tuesday’s shareholder letter, executives at Netflix believe they’ll add 4.50 million subs globally in the final quarter of 2022. The streamer added 4.38 million subs in the year-ago quarter, which at the time represented 9.4 percent growth. So we’re not there — but we are well above the company’s tempered expectations; at the end of Q2, Netflix forecasted that it would add 1 million global subscribers in Q3. Clearly, it bested that — the same goes for its financial forecasts. Netflix earned $3.10 per share in the third quarter on $7.926 billion in revenue; its net income was $1.398 billion. Wall Street forecasted earnings of $2.13 per share on $7.84 billion in revenue. Back on July 19, Netflix itself estimated Q3 earnings per share of $2." + ] + }, + { + "question": "What is the title of Chicago P.D. Season 10, Episode 4?", + "gt_answer": "Dónde Vives", + "gt_reference": [ + "Dónde Vives: Directed by Brenna Malloy. With Jason Beghe, Tracy Spiridakos, Marina Squerciati, Patrick John Flueger. A shocking murder pulls rookie officer ..." + ] + }, + { + "question": "How much does the YouTube Premium family plan cost now?", + "gt_answer": "22.99 per month", + "gt_reference": [ + "If you subscribe to a YouTube Premium family plan, you may want to check your email: Google is notifying users that the monthly cost of the service will be going up by $5 a month. Starting in November, most users will start paying $22.99 per month for YouTube Premium — though there seems to be some leeway. While the main announcement says that the price increase starts on the next billing cycle on or after November 21st, some legacy subscribers won't see their bill jump for several months. One Engadget staffer was informed that their price would not increase until April due to their status as a \"long-standing and valued member.\" With the new price structure, the family plan is less of a bargain for smaller groups. At $17.99, buying into the family plan for just two users offered a significant savings over individual accounts. Now, a two-user family will save only $1 a month. For now, however, single-user prices remain the same: $11.99 a month for individual accounts and $6.99 for students. The benefits haven't changed either, with Premium still offering users an ad-free YouTube experience, the ability to download videos for offline viewing, access to YouTube Music, and the ability to continue to play music and videos in the background or with your phone screen off. At least you still don't need to subscribe to Premium to watch videos in 4K." + ] + }, + { + "question": "What is the release date of God of War Ragnarok?", + "gt_answer": "November 9", + "gt_reference": [ + "/VvHuaCKgGn — Santa Monica Studio – God of War Ragnarök (@SonySantaMonica) September 16, 2020 God of War Ragnarok is set to launch on November 9, 2022. Sony’s Santa Monica Studio shared the date with a new CGI trailer, which depicts Kratos and Atreus fighting a horde of foes before facing off against Fenrir, a giant wolf. In a blog shared on July 6, Santa Monica Studio shared that pre-orders for the game will begin from July 15. The blog also details several different versions of the game that will be available, including a collector’s edition that comes with a 16″ replica of Thor’s hammer. The confirmed release date is good news for fans, who have been waiting for months on news about the game’s launch. At the Sony PlayStation Showcase on September 9, developer Sony Santa Monica and publisher PlayStation Studios announced that God of War Ragnarok has been delayed to 2022. Speaking during a Q&A, Herman Hulst, Sony Interactive Entertainment‘s head of worldwide studios, talked about the pushback: “So we have, currently, two very big, very narrative-driven games in development: Horizon Forbidden West and the next God of War,” explained Hulst at the time. “For both of those, they’re frankly affected by access to performance capture and talent." + ] + }, + { + "question": "Who voices Batman in Batwheels?", + "gt_answer": "Ethan Hawke", + "gt_reference": [ + "A first look of Ethan Hawke as the voice of Batman in Batwheels, the upcoming animated series debuting as part of the preschool block on Cartoonito on HBO Max and Cartoon Network, was revealed today.    The new clip features a scene from the upcoming half-hour special, “Secret Origin of the Batwheels,” premiering on Batman Day, Sept. 17, exclusively first on Cartoonito on HBO Max. The special will introduce viewers to Bam (the Batmobile), Bibi(the Batgirl Cycle), Redbird (Robin’s Sports Car), Batwing (the Batwing Jet Plane), and Buff (the Bat Truck), and tell the backstory of how this team of young sentient super-powered vehicles came to be.    The series will officially launch later this fall on Cartoonito on Cartoon Network and Cartoonito on HBO Max. Produced by Warner Bros. Animation, Batwheels marks DC’s first entry into preschool, offering young viewers a high-speed, vibrant CGI-animated iteration of the Caped Crusader. The show will follow a group of young sentient super-powered vehicles as they defend Gotham City alongside Batman, Robin, and Batgirl.    “Secret Origin of the Batwheels” description: (Special premieres Batman Day, Sept. 17 on Cartoonito on HBO Max)" + ] + }, + { + "question": "Who is the new prime minister of the United Kingdom?", + "gt_answer": "Rishi Sunak", + "gt_reference": [ + "We use some essential cookies to make this website work. We’d like to set additional cookies to understand how you use GOV.UK, remember your settings and improve government services. We also use cookies set by other sites to help us deliver content from their services. You have accepted additional cookies. You can change your cookie settings at any time. You have rejected additional cookies. You can change your cookie settings at any time. Departments, agencies and public bodies News stories, speeches, letters and notices Detailed guidance, regulations and rules Reports, analysis and official statistics Consultations and strategy Data, Freedom of Information releases and corporate reports The Prime Minister is the leader of His Majesty’s Government and is ultimately responsible for the policy and decisions of the government. As leader of the UK government the Prime Minister also: As Minister for the Union, the Prime Minister works to ensure that all of government is acting on behalf of the entire United Kingdom: England, Northern Ireland, Scotland, and Wales. Rishi Sunak became Prime Minister on 25 October 2022. He was previously appointed Chancellor of the Exchequer from 13 February 2020 to 5 July 2022. He was Chief Secretary to the Treasury from 24 July 2019 to 13 February 2020, and Parliamentary Under Secretary of State at the Ministry of Housing, Communities and Local Government from 9 January 2018 to 24 July 2019." + ] + }, + { + "question": "when did rishi sunak became prime minister of uk?", + "gt_answer": "October 25 2022", + "gt_reference": [ + "We use some essential cookies to make this website work. We’d like to set additional cookies to understand how you use GOV.UK, remember your settings and improve government services. We also use cookies set by other sites to help us deliver content from their services. You have accepted additional cookies. You can change your cookie settings at any time. You have rejected additional cookies. You can change your cookie settings at any time. Departments, agencies and public bodies News stories, speeches, letters and notices Detailed guidance, regulations and rules Reports, analysis and official statistics Consultations and strategy Data, Freedom of Information releases and corporate reports Rishi Sunak became Prime Minister on 25 October 2022. He was previously appointed Chancellor of the Exchequer from 13 February 2020 to 5 July 2022. He was Chief Secretary to the Treasury from 24 July 2019 to 13 February 2020, and Parliamentary Under Secretary of State at the Ministry of Housing, Communities and Local Government from 9 January 2018 to 24 July 2019. Rishi went to Winchester College and studied Politics, Philosophy and Economics at Oxford University. He was also a Fulbright Scholar at Stanford University (USA) where he studied for his MBA. Rishi was elected Conservative MP for Richmond (Yorks) in May 2015 and served as a Parliamentary Private Secretary at the Department for Business, Energy and Industrial Strategy from June 2017 until his ministerial appointment." + ] + }, + { + "question": "How much does the Netflix Basic with Ads subscription cost?", + "gt_answer": "6.99", + "gt_reference": [ + "Related Stories Move over \"Stranger Things,\" the next big Netflix hit may just be commercials. The streaming giant on Thursday is rolling out its cheapest membership tier, dubbed \"Basic With Ads.\" The new tier will cost $6.99 per month, which makes it a full $3 cheaper than Netflix's current cheapest plan, the $9.99 Basic plan. It's Netflix's first foray into the ad-supported space — the streamer has for years resisted putting any advertising on its platform. The company's plan arrives on Nov. 3, a month before rival streaming service Disney+ will introduce its own ad-supported tier, and competes with ad-supported plans from services like Hulu and Peacock. The plan's launch comes as Netflix is preparing to crack down on password sharing on its platform. Beginning next year, Netflix will push people who borrow accounts to create their own, and will also give account-holders who share their passwords the ability to pay extra to have friends and family on their accounts. Here's what you need to know about Netflix's Basic With Ads tier. The Basic With Ads plan will operate similarly to the Basic plan. Users will have access to a 720p video stream — versus the 1080p stream offered by the $15.49 Standard plan and the 4K plan offered by the $19.99 Premium plan — which can be accessed from any internet-connected device." + ] + }, + { + "question": "When does season 5 of The Crown premiere?", + "gt_answer": "November 9", + "gt_reference": [ + "The fifth season of The Crown, which follows the life and reign of Queen Elizabeth II, was released by Netflix on 9 November 2022. It was the first season of the series to be released following both the death of Prince Philip, Duke of Edinburgh on 9 April 2021 and the death of Queen Elizabeth II on 8 September 2022. Imelda Staunton stars as Elizabeth, along with main cast members Jonathan Pryce, Lesley Manville, Jonny Lee Miller, Dominic West and Elizabeth Debicki. All cast members are new to the series; this season marked The Crown's final wholesale recasting, following the ensembles led by Claire Foy (seasons one and two) and Olivia Colman (seasons three and four). The Crown traces the reign of Queen Elizabeth II from her wedding in 1947 through to the early 21st century.[3] The fifth season covers the time period between 1991 and 1997, and is set during the premiership of John Major.[4] Events depicted include Elizabeth's annus horribilis in 1992, Diana's Panorama interview, the separation and divorce of Prince Charles and Diana, Elizabeth's state visit to Russia, use of Prince Philip's DNA to identify the remains of the Romanov family, the decommissioning of Britannia, the handover of Hong Kong, and Major's departure from office and the beginning of Tony Blair's premiership." + ] + }, + { + "question": "Where does The White Lotus Season 2 take place", + "gt_answer": "Sicily", + "gt_reference": [ + "By Luciana Bellini Travel | 22nd December 2022 Jennifer Coolidge reprises her role as the hapless Tanya in The White Lotus season 2, alongside her new husband Greg (played by Jon Gries), but the rest of the cast is filled with new faces, with more than a few you might recognise, including British actor Theo James, Aubrey Plaza of Parks and Recreation fame and the ever-brilliant Tom Hollander. While season one was filmed exclusively in the Four Seasons Resort Maui at Wailea, due to pandemic-related restrictions, for the second season they’ve branched out from the dreamy environs of the hotel to take in some of Sicily’s most beautiful towns and coastal spots, leaving one question on everyone’s lips: just where was The White Lotus filmed? Here’s our guide to all the key filming locations in The White Lotus season 2.  As with the first season, most of the show is centred around the antics of the monied guests staying at an uber luxurious resort – in the first season that was the Four Seasons Resort Maui at Wailea in Hawaii, and for the second season the team chose another Four Seasons resort: the grand San Domenico Palace hotel in Taormina. Situated high on the rocks, it offers up splendid views over the Ionian Sea, Mount Etna and an ancient amphitheatre." + ] + }, + { + "question": "Who won the Arizona Senatorial Election 2022?", + "gt_answer": "Mark Kelly", + "gt_reference": [ + "Mark Kelly Democratic Mark Kelly Democratic The 2022 United States Senate election in Arizona was held on November 8, 2022, to elect a member of the United States Senate to represent the state of Arizona. The seat was previously held by Republican John McCain, who won his final term in 2016. McCain died on August 25, 2018, and Governor Doug Ducey appointed former U.S. Senator Jon Kyl to fill the seat. Kyl resigned at the end of that year and Ducey replaced him with Martha McSally, who then lost to Democrat Mark Kelly in 2020. Primaries in Arizona took place on August 2. Kelly won renomination without opposition, while venture capitalist Blake Masters won the Republican nomination against a large field of candidates. Although Arizona typically leans Republican, Kelly led Masters by low single digits in aggregate polling. Kelly held a significant fundraising advantage until many Republican-aligned groups began spending to assist Masters in the final weeks of the campaign.[1] On November 1, Libertarian nominee Marc Victor dropped out of the race and endorsed Masters.[2][3][4] Incumbent Democrat Mark Kelly won reelection, defeating Republican nominee Blake Masters by a comfortable margin.[5] This was the first time Democrats won a full term to this seat since 1962. The race was competitive and seen as crucial to determining party control of the U.S." + ] + }, + { + "question": "which party controls the house after 2022 midterm elections?", + "gt_answer": "Republican ", + "gt_reference": [ + "Copyright 2023 The Associated Press. All Rights Reserved. The November midterm elections will determine which parties take control over the House and the Senate, ultimately defining the fate of President Joe Biden’s legislative agenda. (Oct. 14) WASHINGTON (AP) — Democrats have held both chambers of Congress and the presidency for the last two years, but they may not have such consolidated power for much longer. Republicans are favored to win the House in the Nov. 8 midterm elections, bolstered by frustration over the economy and advantages in the redistricting process that takes place every 10 years. But Democrats are working to hold their ground, campaigning on maintaining access to abortion and other issues. The outlook is murkier in the Senate, where Republicans are bidding to take back control. Several races in key battleground states are tight, leading Senate Republican leader Mitch McConnell to say the chances of his party winning a majority are just 50-50. A look at control of Congress and what will happen if Republicans win a majority in either chamber in the election: Democrats, led by House Speaker Nancy Pelosi, have held the majority since 2018, when they won control in then-President Donald Trump’s first midterm election. Republicans could take back the House if they net just five seats in dozens of competitive districts, and they are trying to win dozens. History also gives Republicans reason for optimism." + ] + }, + { + "question": "Who won the U.S. Senate race in Nevada in the 2022 midterm elections?", + "gt_answer": "Catherine Cortez Masto", + "gt_reference": [ + "NevadaToday Nevada Election Survey Project poll finds 52% of Nevadans plan to vote for Cortez Masto As Nevadans begin voting in the 2022 midterm election, a new University of Nevada, Reno poll of likely voters released today finds Catherine Cortez Masto leading in the race for U.S. senator and Steve Sisolak leading in the governor’s race. The governor’s race is within the margin of error, but the senate race is not. The Nevada Election Survey Project 2022 general election poll, which asked nearly 600 likely Nevada voters about their voting intentions and views on state and national officials, found 52% of Nevadans plan to vote for Cortez Masto, 39% for Adam Laxalt and 5% remain undecided. Cortez Masto’s large lead reflects less Republican voter enthusiasm for Laxalt’s candidacy compared to Joe Lombardo and other Republican candidates. Among likely Republican voters, 74% said they planned to support Laxalt, compared to 83% for Lombardo and 88% for their Republican House of Representatives candidate. More Republicans also plan to support Cortez Masto than other Democrats on the ballot. Even if this sample of Nevadans is unusually supportive of the incumbent senator, lower support among any likely Republican voters for Laxalt, in what others have polled as a very tight race, is noteworthy." + ] + }, + { + "question": "Who directed Lullaby?", + "gt_answer": "John R. Leonetti", + "gt_reference": [ + "By Matt Grobar Film Reporter EXCLUSIVE: Vertical Entertainment has secured North American rights to the horror feature Lullaby, directed by Annabelle‘s John R. Leonetti, from its financier Alcon Entertainment, slating it for release in select theaters and on VOD on December 16. (Watch Lullaby‘s new trailer, unveiled this morning, by clicking above.) \tPic follows a new mother who discovers a lullaby in an ancient book and regards the song as a blessing. But her world transforms into a nightmare when the lullaby brings forth the ancient demon Lilith. Oona Chaplin (Avatar franchise) and Ramón Rodríguez (The Affair) lead the cast, which also includes Liane Balaban (You Can Live Forever), Kira Guloien (Women Talking) and Moni Ogunsuyi (The Umbrella Academy). \t \tAlex Greenfield and Ben Powell wrote the script, with Alcon’s Broderick Johnson and Andrew A. Kosove (Blade Runner 2049) producing alongside Envision Media Arts’ Lee Nelson and David Tish (The Ice Road). Exec producers included Alcon’s Carl Rogers and Scott Parish, Heroes and Villains’ Markus Goerg, Mikhail Nayfeld and Dick Hillenbrand, B3 Media’s Jeff Bowler, John Lewis and Bret Saxon, and Wonder Street’s Mark Holder." + ] + }, + { + "question": "Who is the Doctor's new companion in Doctor Who?", + "gt_answer": "Millie Gibson", + "gt_reference": [ + "We've known for a while that Ncuti Gatwa is the next (well, it's a little more complicated than that right now, so spoiler alert for lower down the page) incumbent of the TARDIS, due to debut as the lead in Doctor Who next year. Now we know who will be his first main companion – Coronation Street's Millie Gibson, playing Ruby Sunday. \"Whilst still being in total disbelief, I am beyond honoured to be cast as the Doctor’s companion,\" she says. \"It is a gift of a role, and a dream come true, and I will do everything to try and fill the boots the fellow companions have travelled in before me. And what better way to do that than being by the fabulous Ncuti Gatwa’s side, I just can’t wait to get started.\" Ncuti Gatwa adds: \"Millie just is the companion. She is full of talent, strength, she has a cheeky sparkle in her eye and is sharp as a razor. From the moment she walked into the room she captured all of our attention with her effervescence and then solidified that attention with the sheer torque of her talent. This adventure is going to be so wild and so fun, I cannot WAIT to sail the universe with Millie!” Russell T. Davies, who brought the series back in 2005 for its big relaunch, is returning to run it again starting next year." + ] + }, + { + "question": "Who designed Naomi Biden's wedding dress?", + "gt_answer": "Ralph Lauren", + "gt_reference": [ + "Photo: Norman Jean Roy Naomi Biden‘s recent nuptials have gone down in history as the first wedding of a grandchild of a sitting US president at the White House. And now, photos exclusive to Vogue reveal that an Arab designer was a major part of the bride’s big day. While she wore a Grace Kelly-inspired wedding gown by American brand Ralph Lauren to exchange vows with Peter Neal, Biden slipped into a sleek dress from Lebanese designer Reem Acra’s namesake label for the reception and cake-cutting ceremony. Photo: Norman Jean Roy The ivory Mikado silk gown created by Beirut-born Acra came with a delicate strapless neckline, and was made notably special with pearls belonging to Biden’s grandmother Roberta Buhle sewn into the sweeping six-foot train. Biden paired the dress with pearl jewelry of her own, and sheer gloves. Acra was also the designer of choice for First Lady Jill Biden, who wore two dresses from the brand on the day: A custom couture silk chiffon vintage blue dress with a teal wool crepe coat for the ceremony and a gold embroidered seafoam blue dress for the black-tie reception. Photo: Norman Jean Roy Naomi Biden is the daughter of US president Joe Biden’s younger son, Hunter, and his ex-wife Kathleen Buhle, and is an associate at the DC law firm Arnold & Porter." + ] + }, + { + "question": "What grouping is France in World Cup 2022?", + "gt_answer": "Group D", + "gt_reference": [ + "Group standings are based on points from those three group-stage matches — three points for a win, one for a draw, none for a loss.  The top two teams from each group based on total points advance to the single-game knockouts. If teams are tied on points, goal difference is the first tiebreaker followed by goals scored. If teams are also tied in those categories another set of tiebreakers is applied.  The winners of the last World Cup in 2018, France will be determined to retain the crown, although they will have to fare considerably better than they did at Euro 2021, when they were knocked out at the Round of 16 stage by Switzerland.  If superstar Kylian Mbappe is at his best, then it could make all the difference for Les Bleus, and there is plenty of other international experience also in Didier Deschamps’ talented squad despite a rash of injuries heading into the tournament. France won the 2020/2021 UEFA Nations League by beating Spain in the final, and if they can perform as a cohesive unit then they will certainly be among the leading contenders for glory in Qatar. The Socceroos won a single-elimination FIFA intercontinental playoff to earn the final place in Group D, beating Peru in a penalty shootout on June 13." + ] + }, + { + "question": "What grouping is U.S. in World Cup 2022?", + "gt_answer": "Group B", + "gt_reference": [ + "0 Portugal Brazil Portugal 4 6 Brazil 1 Morocco 1 1 Switzerland South Korea The U.S. men’s national team will play in the most balanced World Cup group, Group B. According to the FIFA’s rankings, there are only 15 positions between the highest-ranked team in the group, England, which is fifth, and the lowest, Iran, which is 20th. Conversely, there are 52 positions between the two extremes in Group H, which contains Portugal, ranked ninth, and Ghana, ranked at a tournament-low 61st. 32 teams for a trophy Eight groups of four teams will pull from the six FIFA confederations. Group Group Group Group A B C D FIFA rank 1st 3 Argentina 4 France 5 England 8 Nether. 10 10 Denm. 13 Mexico U.S. 16 18 Senegal Wales 19 20 20 Iran 26 Poland 30 Tunisia 30 38 40 Australia 44 Ecuador 50 Qatar 50 51 Saudi Arabia 60 Group Group Group Group e f g h FIFA rank 1st 1 Brazil 2 Belgium 7 Spain 9 Port. 10 11 Germany 14 Urug. 15 Switz." + ] + }, + { + "question": "What grouping is Argentina in World Cup 2022?", + "gt_answer": "Group C", + "gt_reference": [ + "Group C of the 2022 FIFA World Cup took place from 22 to 30 November 2022.[1] The group consisted of eventual champions Argentina, Saudi Arabia, Mexico and Poland. The top two teams, Argentina and Poland, advanced to the round of 16. This marked the first time that Mexico did not advance past the first round since 1978.[2] The teams were decided by the World Cup draw that took place on 1 April 2022.[3] The group was set to receive one team from each pot, which sorted all World Cup teams by position on the FIFA World Rankings.[3] Notes The first match of the group was between Argentina and Saudi Arabia. The two teams had faced each other four times prior to the tournament, most recently in 2012, a 0–0 draw in a friendly game. Saudi Arabia defeated Argentina and ended their 36-match unbeaten streak.[6] According to Gracenote, the win was the \"most surprising\" in World Cup history, with many calling it one of the biggest World Cup upsets in history.[7] This was also the second consecutive time that Argentina did not win their opening match at a World Cup, after drawing 1–1 with Iceland in 2018; and the first time since 1990 that Argentina lost their opening match." + ] + }, + { + "question": "What is the title of the new season of \"Criminal Minds\"?", + "gt_answer": "Evolution", + "gt_reference": [ + "Paramount+'s new Criminal Minds series is Criminal Minds: Evolution. By Mark McKee | Published 11 months ago CBS had a relative TV goldmine from 2005 to 2020 when the FBI Behavior Analysis Unit traveled the country, bringing to justice the worst criminals within the borders. Criminal Minds revolutionized the murder mystery on TV with a stellar cast of characters that used their expert talents in human nature to chase after the worst the country had to offer. Spencer Reid, Derek Morgan, Jennifer Jareau, David Rossi, Aaron Hotchner, and Emily Prentiss captivated audiences for a decade and a half before the show came to an end in 2020. Fans didn’t have to wait long for news of a revival, as the team couldn’t stay away from a new series premiering this Fall on Paramount+. The latest iteration of the series has now found its title. Deadline reports the new series will appear under the title Criminal Minds: Evolution.  Just before the pandemic began, fans saw the BAU chase after The Chameleon to close out a series that had to create 15 years of diabolical murderers without allowing it to get stale. The series ended with Spencer Reid in a coma and traversing the memories of agents he worked with in the past." + ] + }, + { + "question": "Who is Nebraska's new head football coach?", + "gt_answer": "Matt Rhule", + "gt_reference": [ + "New Head Football Coach Matt Rhule, live coverage right now on air @WOWT6News #Huskers pic.twitter.com/rr9eerBvtW Rhule wouldn’t share specific plans about who he might be bringing along with him, but said he would definitely be talking with — and listening to — players, coaches, and staff before making changes. Coming off a big win on Black Friday, Huskers are most interested in hearing about whether Interim Head Coach Mickey Joseph, who took the helm after Scott Frost was fired, would be retained. “I reached out to Mickey right when I got the job. Looking forward to talking to him at some point and talking to the rest of the staff. I’ve been on both sides of it,” Rhule said. “I’ve been an assistant coach on a staff that’s been let go, and I’ve always appreciated the coach coming in and talking to me. So I’ll try to be thorough with that process over the next couple of days.” Alberts said the decision about whether to keep Joseph was entirely in Rhule’s hands. “Ultimately, this is going to be Matt Rhule’s decision,” Alberts said. “He’s the head coach and he needs to hire the 10 assistant head coaches he believes gives him the best opportunity.” Rhule also talked Monday about his affinity for Nebraska. “My son is this YouTube generation. I have seen the Tunnel Walk maybe 5,000 times." + ] + }, + { + "question": "Who is the TikTok text-to-speech voice?", + "gt_answer": "Kat Callaghan", + "gt_reference": [ + "Across the Yahoo Network Thu, October 27, 2022 at 2:01:02 PM EDT The voice behind TikTok’s text-to-speech feature has spoken — and she’s a Canadian local radio host.  Kat Callaghan hosts The Beat on 91.5 FM in Ontario. She also made a major reveal this month: She’s the voice of TikTok’s text-to-speech feature. Iconic! Callaghan confessed in her very first TikTok video.  For a long time I didn’t say a word. But … yes it’s me and yes I have an ongoing awesome relationship with the folks at TikTok. 🎉 The coolest part for me is watching the creativity & awesome content that people are putting out there using my voice. (Also oddly enough this is my first TikTok) “When you guys have been asking me if I’m the voice on TikTok,” the text-to-speech caption said. “Finally I can tell you guys: It is me,” Callaghan said in her authentic voice.  In the caption, she explained that she has an awesome ongoing relationship with TikTok.  “The coolest part for me is watching the creativity & awesome content that people are putting out there using my voice,” Callaghan wrote.  The video received over 29.4 million views. Some were in shock, but not everyone believed she was the voice they had heard for so long." + ] + }, + { + "question": "What is Merriam-Webster's 2022 Word of the Year?", + "gt_answer": "gaslighting", + "gt_reference": [ + "Here are the words that defined 2022. BuzzFeed News Reporter BuzzFeed News Reporter At the end of every calendar year, dictionaries around the globe select one word to sum up how language morphed in the preceding 12 months, to recognize a trend in mainstream vernacular and comment on the human condition at that moment in time. Come December, we are bombarded with dozens of different words, which always cast a wide net, paint a vague picture, and interchangeably solicit reactions from “yikes” to “sure.” Here’s a look at the many words of the year, selected by the lexicographical powers that be. gaslighting (n.): “the act or practice of grossly misleading someone especially for one’s own advantage.” Why was it chosen: M-W cites the “age of misinformation” we live in, and a 1,740% increase in lookups of the word this year. Though I kind of feel like I’m being gaslighted into believing this is the year this word gained relevancy, and not, say, six years ago. Also in the running: oligarch, Omicron, codify, LGBTQIA, sentient, loamy, raid, Queen Consort Ford Proctor and Austin Wynns of the San Francisco Giants after Proctor hit a grand slam home run against the Rockies on Sept. 29, 2022. homer (n.): “an informal American English term for a home run in baseball." + ] + }, + { + "question": "Where is SM Entertainment setting up its Southeast Asian headquarters?", + "gt_answer": "Singapore", + "gt_reference": [ + "Founder Lee Soo-man also teased the formation of NCT sub-units from Tokyo, Saudi Arabia and potentially Singapore South Korean entertainment company SM Entertainment will be setting up its Southeast Asian headquarters in Singapore. CNBC reported yesterday (November 30) that the label – home to some of K-pop’s top acts such as aespa, NCT, Girls’ Generation, EXO and more – has plans to expand its operations in the Southeast Asian region by setting up headquarters for the region in Singapore. According to CNBC, SM Entertainment are currently in the process of recruitment for its Singapore branch. SM Entertainment’s Singapore base of operations will be “managing joint ventures in Indonesia, Vietnam and Thailand, as well as communicating with [its South Korea office] for other related ventures and plans.” Lee Soo-man, founder of SM Entertainment, also told the outlet that he would be keen on launching an NCT sub-unit in the region dubbed NCT Singapore, however it remains unclear if these plans have been set in stone. Despite declining to share specifics of the company’s investment in its expansion into Singapore, representatives of SM have shared that it is currently “in the midst of hiring more local talents, which will hopefully increase the full-time staff count”. Its Singaporean office is also looking to hire “local undergraduates or fresh graduates for internships”." + ] + }, + { + "question": "What was the unemployment rate in November 2022?", + "gt_answer": "3.7%", + "gt_reference": [ + "7%) in May 2020 and July 2020. Unemployment in the transportation sector was above overall unemployment. BLS reports that the U.S. unemployment rate, not seasonally adjusted, in November 2022 was 3.4% or 1.2 percentage points below the transportation sector rate. Seasonally adjusted, the U.S. unemployment rate in November 2022 was 3.7%.     In addition to the update of the Unemployment in Transportation dashboard, BTS also released its monthly update to its Employment in Transportation: Total, by Mode, and Women, and Race and Hispanic or Latino Ethnicity of Transportation Workers dashboards. Charts Updated this Month by Section include: Unemployment in the Transportation and Warehousing Sector and in Transportation and Material Moving Occupations Monthly Employment in the Transportation and Warehousing Sector, Establishment Data Monthly Employment in the Transportation and Warehousing Sector by Race and Hispanic or Latino Ethnicity, Household Data   Visit Transportation Economic Trends for more topics. Media contact: BTSNews@dot.gov or 1-800-853-1351.   U.S." + ] + }, + { + "question": "Who did the USA play in the round of 16 at 2022 FIFA World Cup?", + "gt_answer": "Netherlands", + "gt_reference": [ + "Ale Bedoya joins ESPN FC Daily to discuss the USMNT's dramatic victory over Iran. (1:42) Tuesday's dramatic 1-0 win over Iran was just the ticket for the US, as they finished second in Group B behind England and therefore booked their spot in the round of 16. Up next, however, is another potentially tricky opponent: the Netherlands, who finished top of Group A by virtue of beating Senegal and host nation Qatar in Group A. The two will go head-to-head at Khalifa International Stadium on Saturday (10 a.m. ET) to see who advances to the quarterfinals, where the winning team will take on Argentina or Australia on that side of the bracket. Can the US keep this momentum going? Or will the Dutch, led from midfield by the mercurial Frenkie De Jong, bring that dream to an end? - World Cup 2022: News and features | Schedule ESPN's Kyle Bonagura and ESPN Netherlands' Bob Ligthart break down Saturday's game. If every team in the World Cup were judged based on how they've played in the first half alone, the United States would be considered one the best teams in the tournament. On a per/first-half basis, they rank No. 5 in chances created (5.3), No. 10 in xG (0.7) and No. 6 in goals (0.7)." + ] + }, + { + "question": "Who is Argentina's semi opponent?", + "gt_answer": "Croatia", + "gt_reference": [ + "Advertisement December 12, 2022 at 10:45 AM EST Argentina will play either France or Morocco in the World Cup final after they beat Croatia 3-0 on Tuesday. Lionel Messi opened the scoring from the spot before Julian Alvarez grabbed another. Manchester City forward Alvarez then added the third after the half-time break, following a sensational solo run from Messi. France and Morocco play in the second semi-final on Wednesday. (Photo: Getty Images) December 13, 2022 at 5:45 PM EST Liam Tharme, Dermot Corrigan and Maram AlBaharna have broken down the key talking points from Argentina’s comprehensive victory over Croatia, including: GO FURTHER Argentina beat Croatia to reach final: Alvarez stars, magical Messi assist, goodbye Modric Advertisement December 13, 2022 at 5:42 PM EST With three matches left in this World Cup, we have four standout candidates for the Golden Boot, two from Argentina and two from France: The first tiebreaker for the award is assists, where Messi leads Mbappe by a count of three to two." + ] + }, + { + "question": "Who won the election in Georgia?", + "gt_answer": "Brian Kemp", + "gt_reference": [ + "Democrats also won the Governor’s office, State Senate, and appear poised to take the State Assembly, and voters affirmed abortion rights in the state. — Albert Sun Nov. 9, 2022 House districts rated as tossups have been called mostly in favor of Democrats so far, with one state as a glaring exception: New York. Republicans have won in four of five New York tossup seats, and the Republican candidate is ahead in the fifth. — Lauren Leatherby Nov. 9, 2022 More than 210 Republicans who questioned the 2020 election have won seats in the U.S. House and Senate and in state races for governor, secretary of state and attorney general, according to results as of 12 p.m. Eastern on Wednesday. Here’s who won › — NYT Graphics Nov. 9, 2022 While the race for Georgia’s senate seat remains extremely tight, the Governor’s race was decided last night. Brian Kemp gained more votes compared to Trump in 2020 all across Georgia, beating Stacey Abrams by a more than seven-point margin. — Lazaro Gamio Nov. 9, 2022 J.D. Vance won Ohio handily even as almost every part of the state voted more for Democrats than they did in 2020. — Lazaro Gamio Nov." + ] + }, + { + "question": "Who is starring Barbie in the movie \"Barbie\"?", + "gt_answer": "Margot Robbie", + "gt_reference": [ + "Prepare to watch Margot Robbie, Ryan Gosling, Issa Rae, and Simu Liu ham it up in Greta Gerwig's dreamscape. Come on Barbie, let’s go party! A new clip from Greta Gerwig's Barbie just dropped, and it looks like we won't be spending all of our time in the real world this weekend. As Margot Robbie (Barbie) tells America Ferrera, we're officially going to Barbieland. Still, everyone's favorite Mattel doll has her sights set on more than just a little fun. The preview may look like a candy-colored dreamland—but after she's leaves Barbieland, Barbie (and... Ken) go on an epic adventure to the human world in search of true happiness. Barbie is Gerwig's latest directorial endeavor, which she wrote alongside her partner, Noah Baumbach. Margot Robbie stars as Barbie—or, at least, one of the Barbies—and Ryan Gosling and his cursed platinum blonde hair will take on Ken.) The trailer begins with Barbie saying hello to her fellow dolls, while Ken vies for her attention. Then, we get all-too-brief glimpses of Robbie, Gosling, Issa Rae, and Simu Liu hamming it up in the Barbie-verse before Barbie and Ken decide to leave town. The movie hits theaters this Friday." + ] + }, + { + "question": "Who is the captain of the USA soccer team in the FIFA Men's World Cup 2022?", + "gt_answer": "Tyler Adams", + "gt_reference": [ + "Tyler Adams will captain the US men’s national team into the 2022 FIFA World Cup, head coach Gregg Berhalter announced on the eve of Monday’s Group B opener vs. Wales (2 pm ET | FOX, Telemundo). The Leeds United midfielder and New York Red Bulls homegrown product will be the USMNT’s youngest captain since Walter Bahr at the 1950 World Cup. He’s already worn the armband nine times during 32 career international appearances. “We think he has great leadership capabilities,” Berhalter said of the 23-year-old Wappingers Falls, New York native. “He leads by his actions and his words.” FIFA requires teams to name a singular captain for the tournament; the USMNT were the last of 32 Qatar-qualified squads to complete that task. During Berhalter’s tenure, the USMNT have relied on a leadership council and rotating armband responsibilities. Chelsea forward Christian Pulisic and Nashville SC center back Walker Zimmerman were other leading candidates to be named captain. “A lot of credit to my teammates,” Adams said, “because anyone throughout our leadership council can wear that armband and represent us with pride and represent us in the right way.\" Adams debuted for the Red Bulls in 2016 before moving to Europe in the winter of 2019, then to German Bundesliga side RB Leipzig." + ] + }, + { + "question": "Which company won Yahoo Finance's 2022 \"Company of the Year\" Award?", + "gt_answer": "Costco", + "gt_reference": [ + "Yahoo Finance unveils its 2022 Company of the Year: Costco. - Let's get to the top three things you need to know as the clock hits 9:00 AM. We've got the big reveal. Yahoo Finance has crowned the 2022 Company of the Year. We're going to bring you the details, plus interviews with top executives all day here at Yahoo Finance. You don't want to miss it. - Oh my. I wonder who it is. But first, a check on the markets. Futures are slightly in the red here to start the week after a better than expected jobs report on Friday casts doubt on how quickly the Fed can ease the pace of interest rate hikes. - Plus, stocks in Hong Kong and mainland China are in rally mode after local authorities took more steps to ease COVID-19 policies, giving hope of a full reopening in China. - But we begin today with my favorite story. The end of the year is upon us. And that means Yahoo Finance, we have unveiled or officially announced its 2022 Company of the Year. The land of $1.50 hot dogs and unmatched customer loyalty takes the crown this year. And you guessed it, it's Costco, folks. I flew out to the Costco stomping grounds in Washington to go inside the retailer's business. Here's what I learned. Costco has seen a lot since opening its first warehouse store in Seattle, Washington in 1983." + ] + }, + { + "question": "How much money will President Joe Biden put into the union pension plan?", + "gt_answer": "36 billion", + "gt_reference": [ + "Copyright 2023 The Associated Press. All Rights Reserved. President Joe Biden speaks in the South Court Auditorium on the White House complex in Washington, Thursday, Dec. 8, 2022, about the infusion of nearly $36 billion to shore up a financially troubled union pension plan, preventing severe cuts to the retirement incomes of more than 350,000 Teamster workers and retirees across the United States. (AP Photo/Susan Walsh) President Joe Biden speaks in the South Court Auditorium on the White House complex in Washington, Thursday, Dec. 8, 2022, about the infusion of nearly $36 billion to shore up a financially troubled union pension plan, preventing severe cuts to the retirement incomes of more than 350,000 Teamster workers and retirees across the United States. (AP Photo/Susan Walsh) President Joe Biden speaks in the South Court Auditorium on the White House complex in Washington, Thursday, Dec. 8, 2022, about the infusion of nearly $36 billion to shore up a financially troubled union pension plan, preventing severe cuts to the retirement incomes of more than 350,000 Teamster workers and retirees across the United States." + ] + }, + { + "question": "Who won the Maxwell Award 2022 in college football?", + "gt_answer": "Caleb Williams", + "gt_reference": [ + "NCAAF 47 USC quarterback Caleb Williams won the 2022 Maxwell Award on Thursday, given to the best player in college football. Here’s what you need to know: Williams was the best quarterback in America this season, so the Maxwell Award was deserved. Williams led USC’s turnaround from a four-win team to a top-10 squad in 2022 and elevated the players around him. Now his sights turn to Saturday night and the Heisman Trophy. — Morales Duggan’s story has been one of the best in college football, starting TCU’s season as the backup quarterback before leading the Horned Frogs to a 12-0 start. His toughness and perseverance helped pull the Frogs out of multiple second-half deficits and without his poise, leadership and production late in games, TCU wouldn’t be in the College Football Playoff. Winning the O’Brien and being a Heisman finalist are both well-deserved honors for Duggan. — Khan  Chuck Bednarik Award – Defensive Player of the Year Biletnikoff Award – Outstanding Receiver Lou Groza Collegiate Place-Kicker Award – Outstanding Kicker Ray Guy Award – Punter of the Year Maxwell Award – Player of the Year Davey O’Brien National Quarterback Award – Best Quarterback Outland Trophy – Most Outstanding Interior Lineman Paycom Jim Thorpe Award – Best Defensive Back Doak Walker Award – Premier Running Back (Photo: Gary A." + ] + }, + { + "question": "Who is Africa's first World Cup semi-finalists", + "gt_answer": "Morocco", + "gt_reference": [ + "1934: Egypt, 1970: Morocco, 1974: Zaire, 1978: Tunisia, 1982: Algeria & Cameroon, 1986: Algeria, 1990: Egypt, 1994: Cameroon & Morocco, 1998: Cameroon, Morocco, South Africa & Tunisia, 2002: Cameroon, Nigeria, South Africa & Tunisia, 2006: Angola, Ivory Coast, Togo & Tunisia, 2010: Algeria, Cameroon, Ivory Coast, Nigeria & South Africa, 2014: Cameroon, Ivory Coast & Ghana, 2018: Egypt, Morocco, Nigeria, Senegal & Tunisia, 2022: Cameroon, Ghana & Tunisia Egypt were the first team from Africa to play at the World Cup — losing 4-2 to Hungary in the first round in Italy in 1934. Including their elimination, African teams have fallen in the first round 38 times. However, even when African sides have bowed out early it has rarely been without incident. Some notable highlights have been Zaire reportedly not knowing the rules for a free kick in 1974, Roger Milla dancing by the corner flag in 1990 and South Africa’s Siphiwe Tshabalala’s opening goal in the 2010 tournament — the only one to be held in Africa — resulting in a continent exploding in joy." + ] + }, + { + "question": "Who is the 2022 CNN Hero of the Year?", + "gt_answer": "Nelly Cheboi", + "gt_reference": [ + "Frontline workers, advocates, scientists, Young Wonders and everyday people were saluted and 8 nonprofit organizations working to tackle these issues were highlighted. Each organization received $10,000 and viewers were encouraged to donate to these vetted, trusted organizations. [20] In lieu of the traditional Top 10 and CNN Hero of the Year, the 2020 edition saw viewers selecting the year's Most Inspirational Moments. [21] The nonprofit organizations highlighted included: The 3 Young Wonders of 2020 (in alphabetical order): The 15th Annual CNN Heroes All-Star Tribute returned to the long-running shows' traditional format honoring the Top 10 CNN Heroes of 2021 with viewers voting online for the CNN Hero of the Year. Shirley Raines was selected as the 2021 CNN Hero of the Year. Honorees included: Young Wonders recognized included: The 16th Annual CNN Heroes: An All-Star Tribute premiered live on Sunday December 11th, 2022. Nelly Cheboi was selected by viewers as the 2022 CNN Hero of the Year. Honorees included: Young Wonders recognized included: In 2022, the program was honored with the News & Documentary Emmy Award for Outstanding Live News Special for its 2021 15th Annual Show." + ] + }, + { + "question": "When is the championship game of the Patriot League Men’s Lacrosse Championship 2023?", + "gt_answer": "May 7", + "gt_reference": [ + "Hopefully, some of the student body will come and check us out and cheer us on, as well.” The No. 1 seeded BU men’s lacrosse team will play No. 5 seeded Loyola Maryland in the Patriot League semifinal Friday, May 5, at 4 pm on Nickerson Field. The other semifinal game, between No. 2 seeded Army West Point and No. 3 seeded Lehigh will take place at 7 pm Friday on Nickerson Field. The winners of both games will meet in the championship game on Sunday, May 7, at noon on Nickerson Field. All games are free for students with a Sports Pass. Admission to both semifinal games for those without a Sports Pass is $8. Admission to Sunday’s championship game for those without a Sports Pass is $8. Packages for all three games are $12. Free tickets are available for BU faculty and staff who register in advance here. All games will be streamed via CBS Sports Network. Men’s Lacrosse Looks for Patriot League Championship Repeat \t\t\t\t\t\t\tCharles Moore (COM’24)\t\t\t\t\t\t \t\t\t\t\t\tis pursuing a degree in journalism with a minor in history. He works in the Worcester Red Sox front office and is the Head Delegate for BU's competitive Model United Nations Team. Charles is from Wayland, MA., and has seen a home game of all 30 Major League Baseball teams. He can be reached at csm6@bu.edu.\t\t\t\t\t\t \t\t\t\t\t\t\tProfile" + ] + }, + { + "question": "Who will be receiving the Mark Twain Prize for American Humor in 2023?", + "gt_answer": "Adam Sandler", + "gt_reference": [ + "\r   (WASHINGTON)—The John F. Kennedy Center for the Performing Arts will present the 24th Mark Twain Prize for American Humor to Adam Sandler on March 19, 2023 in the Kennedy Center Concert Hall. The Prize, which is named to honor one of the world’s greatest humorists, will be awarded at a gala performance featuring some of the biggest names in comedy. Broadcast details will be announced at a later date. The Mark Twain Prize for American Humor recognizes individuals who have had an impact on American society in ways similar to the distinguished 19th-century novelist and essayist Samuel Clemens, best known as Mark Twain. As a social commentator, satirist, and creator of characters, Clemens was a fearless observer of society, who startled many while delighting and informing many more with his uncompromising perspective on social injustice and personal folly. “Adam Sandler has entertained audiences for over three decades with his films, music, and his tenure as a fan favorite cast member on SNL,” said Kennedy Center President Deborah F. Rutter about this year’s recipient. “Adam has created characters that have made us laugh, cry, and cry from laughing. I am looking forward to a laughter-filled evening like no other as we celebrate his career at a ceremony that is sure to bring together the best in comedy." + ] + }, + { + "question": "Who is the new president of the NCAA?", + "gt_answer": "Charlie Baker", + "gt_reference": [ + "The NCAA had four major priorities in it search for a new president to look after college athletics. It wanted a former college athlete, an exec passionate about higher education, an established corporate leader and a savvy politician who knows how to get things done in government. The governing body found all of those traits and more in Massachusetts Gov. Charlie Baker, a former Harvard basketball athlete and avid sports fan. The NCAA announced today that it has selected the two-term governor to be its next president. Baker will replace outgoing NCAA President Mark Emmert starting March 1. His second term as governor is slated to conclude Jan. 5; he announced about a year ago that he wouldn’t seek a third term. Emmert will stay on as an adviser through June. The NCAA’s choice of Baker, 66, signifies the association’s desire to have a leader who is well-versed in the ways that Washington, D.C., works. With the NCAA facing so many legal and legislative challenges, the board of governors, who made the hire, focused on someone from the political arena early in the process and Baker emerged as the candidate with the experience and expertise to navigate the governmental and athletic worlds that often collide in college sports. When asked why he wanted the job, Baker replied, “Because it’s worth doing. Yeah, it’s big and complicated, but so have been a lot of things in my life.“ Baker represents the first NCAA leader who doesn’t have a background in college athletics or higher education." + ] + }, + { + "question": "who is the ceo of twitter?", + "gt_answer": "Linda Yaccarino", + "gt_reference": [ + "Copyright 2023 The Associated Press. All Rights Reserved. Elon Musk said Thursday he has found a new CEO for Twitter, or X Corp. as it’s now called — and it’s a woman. He did not name her but said she will be starting in about six weeks. In February, he told a conference he anticipated finding a CEO for San Francisco-based Twitter “probably toward the end of this year.” (May 11) Elon Musk confirmed that the new CEO for Twitter will be NBCUniversal’s Linda Yaccarino, an executive with deep ties to the advertising industry. “I am excited to welcome Linda Yaccarino as the new CEO of Twitter!” Musk wrote in a Friday tweet. He added that Yaccarino “will focus primarily on business operations” while Musk will stay closely connected to product design and new technology. Before that announcement, NBCUniversal said Friday that Yaccarino would step down immediately as chairwoman for global advertising and partnerships. Musk, who bought Twitter last fall and has been running it since, has long insisted that he would step down as top executive at the company, which is now called X Corp. Few expect Musk to remove himself from the decision making process at Twitter, however. “While he’s stepping back from the CEO title, Musk is far from likely to step back from calling the product shots,” said Mike Proulx, research director at Forrester Research." + ] + }, + { + "question": "Who is the CEO of Yuga Labs?", + "gt_answer": "Daniel Alegre", + "gt_reference": [ + "With Daniel Alegre on board, Yuga Labs is expected to ramp up its metaverse efforts. Previously, he held leadership positions at Google, Activision Blizzard and Bertelsmann. Yuga Labs, the company behind the Bored Ape Yacht Club (BAYC) and CryptoPunks nonfungible token (NFT) collections, has a new CEO, Daniel Alegre. The executive resigned as president and chief operating officer of the gaming giant Activision Blizzard to join the NFT startup on April 1. “Couldn’t be more excited for this next chapter,” he wrote on Twitter. Alegre was a crucial player in Activision Blizzard’s growth in recent years, overseeing popular gaming franchises like Call of Duty, World of Warcraft, Diablo and Candy Crush. Today is my last day as President and COO of Activision Blizzard. Thank you to the incredible teams who create truly epic games. Tomorrow I officially start at CEO of Yuga Labs. Couldn't be more excited for this next chapter. pic.twitter.com/eo3RfIyz0q The executive has been involved in the gaming, entertainment and technology industries for many years." + ] + }, + { + "question": "How much did Avatar: The Way of Water earn in its debut weekend at U.S.?", + "gt_answer": "134 million", + "gt_reference": [ + "(Photo by Jordan Strauss/Invision/AP) “ Avatar: The Way of Water ” didn’t make quite as big of a splash as many assumed it would, but James Cameron’s big budget spectacle still helped breathe life into the box office this weekend. The sequel earned $134 million from North American theaters and $300.5 million internationally for a $434.5 million global debut, according to studio estimates on Sunday. It tied with “The Batman” as the fourth highest domestic debut of the year, behind “Doctor Strange in the Multiverse of Madness” ( $187.4 million in May ), “Black Panther: Wakanda Forever,” ( $181 million in November ) and “Thor: Love and Thunder” ($144.2 million in July). Expectations were enormous for “Avatar 2,” which carried a reported price tag of over $350 million, the pressure of following up the highest grossing film of all time (thanks in part to various re-releases) over a decade later and the daunting task of propping up an exhibition business that’s still far from normal. Everything “Avatar” is oversized, though: the Na’vi characters, the runtime (a staggering three hours and 12 minutes), the technical advancements and the release strategy from 20th Century Studios and The Walt Disney Co. Going into the weekend many were expecting a domestic debut of at least $150 million." + ] + }, + { + "question": "When was the Final Fantasy Pixel Remaster Series be released on Nintendo Switch?", + "gt_answer": "April 19 2023", + "gt_reference": [ + "LOS ANGELES (Apr. 6, 2023) – SQUARE ENIX® today announced that the beloved FINAL FANTASY® pixel remaster series, previously only available on Steam® and mobile platforms, is launching digitally for PlayStation®4 (PS4™) console and Nintendo Switch™ system on April 19, 2023*. The pixel remaster series which comprises of FINAL FANTASY I through FINAL FANTASY VI, brings all the magic of the originals combined with quality-of-life upgrades while staying faithful to the retro design of these masterpieces.\r   Watch the FINAL FANTASY Pixel Remaster | PS4 & Nintendo Switch Release Date trailer here.  \r In FINAL FANTASY pixel remaster series, players can expect some unique features for PlayStation 4 and Nintendo Switch version, including the option to switch between the rearranged and original-based soundtrack for the game, as well as a choice of in-game fonts – players can now opt to play using the game’s default font or a pixel-based font. Additionally, PlayStation 4 and Nintendo Switch players can also expect additional boost features to expand gameplay options, including switching off random encounters and adjusting experience gained multipliers between 0 and 4. All six titles in the FINAL FANTASY pixel remaster series will be available to digitally purchase individually or as a complete series in the FINAL FANTASY I-VI BUNDLE from PlayStation™ Store or Nintendo eShop." + ] + }, + { + "question": "What movie won the Oscar for Best Animated Film in 2023?", + "gt_answer": "Guillermo del Toro's Pinocchio", + "gt_reference": [ + "[1/2]Guillermo del Toro accepts the Oscar for Best Animated Feature Film for \"Guillermo Del Toro's Pinocchio\" during the Oscars show at the 95th Academy Awards in Hollywood, Los Angeles, California, U.S., March 12, 2023. REUTERS/Carlos Barria By Danielle Broadway LOS ANGELES, March 12 (Reuters) - Mexican filmmaker Guillermo del Toro's \"Pinocchio\" won the Academy Award for best animated feature film on Sunday, the third Oscar of his career. The haunting stop-motion musical fantasy was inspired by the 1883 Italian novel \"The Adventures of Pinocchio\" by Carlo Collodi, and informed by Gris Grimly's illustrations of the 2002 edition of the book. Del Toro, 58, reimagines the classic story of Pinocchio, a wooden puppet who dreams of being a real boy, who is cared for by carver Geppetto. However, the story of the Netflix Inc (NFLX.O) film is set in Fascist Italy during the interwar period and World War Two. \"Pinocchio\" prevailed over other popular nominees A24's stop-motion film \"Marcel the Shell With Shoes On\" and the Walt Disney Co (DIS.N) 3D animated film \"Turning Red.\" Del Toro has many accolades, including his 2018 Oscar wins for best picture and best director for \"The Shape of Water." + ] + }, + { + "question": "Who discovered asteroid 2022 YG?", + "gt_answer": "Gennadiy Borisov", + "gt_reference": [ + "2022 YG is a near-Earth asteroid and a potential quasi-satellite of Earth, discovered by amateur astronomer Gennadiy Borisov at Nauchnyi, Crimea on 15 December 2022. It has an estimated diameter of 16–30 meters, given H of 26.6, and an albedo 4-15%.[a] This near-Earth asteroid-related article is a stub. You can help Wikipedia by expanding it." + ] + }, + { + "question": "Which team won the Peach Bowl 2022?", + "gt_answer": "Georgia", + "gt_reference": [ + "The 2022 Peach Bowl was a college football bowl game played on December 31, 2022, at Mercedes-Benz Stadium in Atlanta, Georgia. The 55th annual Peach Bowl and one of the two College Football Playoff semifinals, the game featured two of the four teams selected by the College Football Playoff Selection Committee—Georgia from the Southeastern Conference (SEC) and Ohio State from the Big Ten Conference. Georgia won, 42–41, when Ohio State kicker Noah Ruggles' potential game-winning 50-yard field goal with 3 seconds left in the game sailed wide left. Georgia advanced to face the winner of the Fiesta Bowl, TCU, in the 2023 College Football National Championship at SoFi Stadium in Inglewood, California on January 9, 2023. The game began at 8:21 p.m. EST[3] and was aired on ESPN.[4] It was one of the 2022–23 bowl games concluding the 2022 FBS football season. Sponsored by restaurant chain Chick-fil-A, the game was officially known as the College Football Playoff Semifinal at the Chick-fil-A Peach Bowl. The game featured Georgia, undefeated champion of the Southeastern Conference (SEC), and Ohio State, a one-loss team from the Big Ten Conference selected at-large by the College Football Playoff (CFP) committee." + ] + }, + { + "question": "Which team won the 2023 Desert Hockey Classic?", + "gt_answer": "Michigan Tech", + "gt_reference": [ + "Jan 9, 2023 TEMPE, Arizona — No. 16 Michigan Tech won the 2023 Desert Hockey Classic with a 3-2 victory over No. 6 Boston University Saturday at Mullett Arena. The Huskies jumped out to a 3-0 first-period lead and held on for their third regular season tournament championship under Coach Shawhan. “It was goaltending, goaltending, goaltending,” said Shawhan. “Blake gave us a chance. We scored enough in the first and held on. I couldn’t be prouder of this group. They keep finding a way.” Blake Pietila was named tournament MVP after stopping 31 shots in the title game and 24 in the semifinal win over the host Arizona State. “It feels good after coming off the GLI and our rough showing in the first game,” Blake Pietila said. “We knew that we had to stick to our game plan tonight. They’re a fast-transitioning team, so we had to stick to our (defensive) zone coverage like we’ve done all year.” Tech scored all of its goals in the opening period. Logan Pietila gave the Huskies the lead 7:06 into the game. Jed Pietila fed Logan backdoor through traffic, and he corralled the pass and flipped in his fifth goal of the season." + ] + }, + { + "question": "What is the price of Microsoft 365 Basic per month?", + "gt_answer": "$1.99", + "gt_reference": [ + "Microsoft will introduce a new, lower-cost tier of Microsoft 365, its product family of productivity software, collaboration and cloud-based services, starting on January 30. Called Microsoft 365 Basic and priced at $1.99 per month or $19.99 per year, the plan will initially include 100 GB of storage, Outlook email and access to support experts for help with Microsoft 365 and Windows 11. Existing OneDrive 100 GB subscribers will be transitioned to Microsoft 365 Basic beginning January 30 as well, Microsoft says. And in the coming months, Microsoft 365 Basic plan members will get “advanced security features” like ransomware recovery and password-protected sharing links in OneDrive. Importantly, Microsoft 365 Basic is not replacing the free Microsoft 365 tier. That’s here to stay, along with the same benefits it offers today, including access to the web-based versions of Word, Excel, PowerPoint, OneNote, Outlook, OneDrive, Clipchamp and more, and 5 GB of cloud storage. Microsoft 365 Personal, meanwhile, will remain $6.99 per month or $69.99 per year. Microsoft 365 plans. Image Credits: Microsoft Microsoft 365 plans. Image Credits: Microsoft Microsoft 365 Basic compares favorably in terms of pricing to rival Google Workspace, whose Individual plan starts at $9.99 per month for 1 TB of storage, professional support and Google’s standard productivity software (e.g." + ] + }, + { + "question": "When did Calvin Edgar Fox pass away?", + "gt_answer": "January 18 2023", + "gt_reference": [ + "Calvin Fox PRICE-Our loving father (daddy), grandpa, grandpa-great, uncle and friend, Calvin Edgar Fox, age 96, passed away January 18, 2023, with his daughter (Daddy’s little girl) holding his hand.  The last special moment shared between a father and daughter. Calvin was born on August 27, 1926, in Hebron, Illinois to Vivian Mae Peck and Ivan Fox.  He married Ada Wallace the love of his life, on November 25, 1949, in South Miami, Florida.  They had three sons and one daughter (born on Father’s Day) that they loved so very much. He proudly served his country in the US Navy during World War II from 1944-1948, then served ten years in the reserves.  Calvin worked for Utah Power & Light/PacifiCorp at the Carbon Power Plant and later retired from the Hunter Power Plant. Calvin was a man that loved God and Jesus.  A Christian with steadfast faith, even through all his pain and suffering he never faltered.  He was very proud and full of love for his children, grandchildren and great-grandchildren.  He would brag about them every chance he got.  Everyone will miss his hugs and genuine love for everyone.  If you knew him you got his hugs, and he would always leave you with “God bless you, Lord be with you." + ] + }, + { + "question": "When will Rebel Moon be released on Netflix?", + "gt_answer": "December 22", + "gt_reference": [ + "Trending TV, movie and anime news, plus reviews and analysis. As Zack Snyder’s sci-fi epic Rebel Moon heads to Netflix, here’s everything you need to know from its release date and trailer to cast, plot, and more. Director Zack Snyder is known for his stint in the DCEU, with movies such as Man of Steel, Batman v Superman, and Zack Snyder’s Justice League. Now, after leaving the DCEU behind, Snyder has teamed up with Netflix for an assortment of projects, including Army of the Dead and the forthcoming Rebel Moon. The movie has already drawn comparisons to that of the Star Wars franchise and is shaping up to be one of 2023’s hottest blockbusters, and a major holiday hit for the streaming platform. So, if you’re like us, you’ll want to be updated with all things Rebel Moon. Here’s everything you need to know. Rebel Moon will premiere on Netflix on December 22, 2023. The two-part space epic began filming on April 19, 2022, and wrapped on December 2. Filmed back-to-back, Zack Snyder’s foray into space warfare will also be released in theaters for a limited time. Initially, the early concept for the film was pitched as an Akira Kurosawa-inspired adventure to Star Wars executives during the prequel era, but ultimately transformed into the Netflix space opera we know today." + ] + }, + { + "question": "When does Scream VI release?", + "gt_answer": "March 10", + "gt_reference": [ + "Paramount's latest installment in the Scream franchise released in theaters on March 10, and now Scream 6 is available to stream online If you’re looking for a frightfully delightful horror movie, you will want to know where to watch Scream VI, the latest installment in the popular Scream franchise. The film was released in theaters on March 10. Ever since the first movie's release in 1996, the Scream franchise has proven to be a great success among horror fans. The franchise has branched into six films, a television series, and video games. After a break in 2011, the Scream franchise returned to the silver screen in 2022. As of April 2023, the sixth movie has grossed over $169 million at the box office. With new and returning cast members and a new twist on the tale, critics and audiences are already labeling Scream VI as a new re-ignition of the franchise and a frightfully thrilling delight for fans of the horror genre. Scream VI has joined the rest of the films in the franchise for streaming on Paramount Plus. It was released for streaming on Paramount Plus on April 25. You can also watch the rest of the franchise on Paramount Plus. It is also available to watch on Prime Video with a subscription to the Paramount Plus, or to rent or buy." + ] + }, + { + "question": "What was the annual GDP growth rate of the U.S. economy in 2022?", + "gt_answer": "2.1", + "gt_reference": [ + "Altogether, CBO now estimates that actual output was about 1.3 percent less in 2021—but potential output was about 0.2 percent greater—than the agency expected last July. In terms of underlying trends that contribute to growth of real potential GDP over the 2022–2031 period, revisions are very modest, and the average annual growth rate over the period, slightly greater than 1.8 percent, is practically unchanged. In nominal terms, however, the agency’s projections of output and income are higher throughout the projection period because projected inflation over the next several years is above the rates anticipated in July. Nominal GDP is 4.9 percent higher, and national income is 3.9 percent higher, in 2031 than CBO projected last summer. CBO currently projects the unemployment rate to be slightly lower and the labor force participation rate to be slightly higher over the 2022–2031 period than in the agency’s July 2021 forecast. CBO’s current projection of the average unemployment rate over the 2022–2026 period is slightly lower than it was in that earlier forecast—now 3.8 percent, down from 4.0 percent. The current projection of the labor force participation rate is also lower—now 62.1 percent instead of 62.4 percent." + ] + }, + { + "question": "Who will be playing the role of Billy Batson in Shazam! Fury of the Gods?", + "gt_answer": "Zachary Levi", + "gt_reference": [ + "Despite the uncertainty during the interim period in the wake of Shazam!'s massive success — having received critical praise and earning $365 million worldwide — production for its sequel has wrapped, a trailer debuted and a release date has been set. Here's everything to know about Shazam! Fury of the Gods. Shazam! Fury of the Gods wouldn't be possible without the return of its titular character played by Zachary Levi. Plus, his teenage counterpart Billy Batson, played by Asher Angel, will also be making his return. Other cast members set to reprise their roles include Jack Dylan Grazer, Faithe Herman, Ian Chen, Jovan Armand and Grace Caroline Currey as Billy's foster siblings — while their superhero alter egos will be played by Adam Brody, Meagan Good, Ross Butler and D. J. Cotrona. New cast members have been recruited to join the sequel as well, including Helen Mirren as Hespera, the daughter of Atlas, alongside Lucy Liu who's cast as her demigod sister, Kalypso. They are the primary villains in Shazam's second installment. Rachel Zegler, who starred in Steven Spielberg's West Side Story remake, is also cast as their sister in the film, playing the role of Athena, one of three goddess daughters of the Titan Atlas — of which the actress said \"was so much fun\" to play." + ] + }, + { + "question": "Who was the runner-up of the 2022 World Cup?", + "gt_answer": "France", + "gt_reference": [ + "The winners of the FIFA World Cup 2018 will get a staggering sum of USD 42 million. FIFA World Cup Winner 2022: The winners of the FIFA World Cup 2022 would receive a massive prize money of USD 42 million. The Runner Up will get $30 million. The $72 million in prize money, therefore, be cherished by the winners. While the fourth-place team will receive $25 million, the third-place club will receive $27 million, respectively. Ques: Which team has won the FIFA World Cup 2022? Ans. Argentina has won the FIFA World Cup 2022 by defeating France in the Penalty shootout by 4-2, after the match was drawn at 3-3 in the regular time and extra time. Ques: Who won the FIFA World Cup 2022? Ans. Argentina defeated France in the penalty shootout. The Match was drawn at 3-3 after the end of extra time (120 minutes). Argentina won the penalty shootout by 4-2. Ques: Which nation has the most FIFA World Cup victories? Ans: Brazil is the country with the most titles and the only one to have competed in every competition. Brazil won five FIFA World Cup titles. Ques: When will the FIFA World Cup 2022 Final match take place?" + ] + }, + { + "question": "When is the congressional hearing for TikTok CEO Shou Zi Chew?", + "gt_answer": "March 23", + "gt_reference": [ + "Washington, D.C. — House Energy and Commerce Committee Chair Cathy McMorris Rodgers (R-WA) today announced that TikTok CEO Shou Zi Chew will appear before the committee to testify on TikTok’s consumer privacy and data security practices, the platforms’ impact on kids, and their relationship with the Chinese Communist Party. It will be Chew’s first appearance before a Congressional committee.  “Big Tech has increasingly become a destructive force in American society. The Energy and Commerce Committee has been at the forefront of asking Big Tech CEOs – from Facebook to Twitter to Google – to answer for their companies’ actions. These efforts will continue with TikTok. ByteDance-owned TikTok has knowingly allowed the ability for the Chinese Communist Party to access American user data. Americans deserve to know how these actions impact their privacy and data security, as well as what actions TikTok is taking to keep our kids safe from online and offline harms. We’ve made our concerns clear with TikTok. It is now time to continue the committee’s efforts to hold Big Tech accountable by bringing TikTok before the committee to provide complete and honest answers for people.”  Chew will testify at a full committee hearing of the Energy and Commerce Committee on March 23, 2023. Additional details to follow.  2125 Rayburn House Office Building Washington, D.C." + ] + }, + { + "question": "When will the final season of The Blacklist premiere?", + "gt_answer": "February 26", + "gt_reference": [ + "The tenth and final season of the American crime thriller television series The Blacklist was ordered on February 22, 2022[1][2] and premiered on February 26, 2023, on NBC.[3] The season concluded the series on July 13, 2023 with the final two episodes.[4] James Spader, Diego Klattenhoff, Hisham Tawfiq, Harry Lennix returned for the season, while Anya Banerjee debuted in a new main role. It is the only season of the series not to star Amir Arison and Laura Sohn after their promotion to main cast, though Arison makes a guest appearance; it is also the second and final season without Megan Boone.[5] The season is produced by Davis Entertainment, Universal Television and Sony Pictures Television. John Eisendrath, John Davis, Joe Carnahan and John Fox continue to serve as executive producers of the series, while series creator Jon Bokenkamp returned as an executive producer.[6] On February 22, 2022, James Spader announced the renewal of the series while making his appearance on The Tonight Show Starring Jimmy Fallon, with the NBC press release coming out shortly after.[28] On February 1, 2023, NBC officially announced that the season would serve as the last of the series.[2] The same day, the poster and the trailer for the season were released." + ] + }, + { + "question": "What is the title of the AI-generated episode of Seinfeld?", + "gt_answer": "Nothing, Forever", + "gt_reference": [ + "The surreal Nothing, Forever, streaming 24 hours a day, is an eerie experiment in digital creativity Seinfeld went off the air in 1998, but it’s never really gone away – it’s been the subject of modern recreations, dedicated social media accounts and hip-hop/TV fusions. Its latest incarnation, however, is the oddest yet. Nothing, Forever is an endless, AI-generated version of the show that has been streaming on Twitch since mid-December. It tells the “story” – if you can call it that – of four characters, Larry, Fred, Yvonne and Kakler, who look like what would happen if Jerry, George, Elaine and Kramer were sucked into a 1990s computer game. They spend their days discussing their lives and other trivial matters. And it never, ever stops: log on at any hour and there they are, talking about coffee quality or a difficult Monopoly game. The dialogue comes from OpenAI’s GPT-3, a text generator closely related to the ChatGPT service that has recently made waves; another company is responsible for the tech behind the speech itself. On top of that, “we have a lot of proprietary generative algorithms that cause the show to be ‘formed’, so to be speak,” Skyler Hartle of Mismatch Media told Polygon. “We collectively call this logic the ‘director’, as it is largely responsible for making sure all the individual pieces come together into a whole." + ] + }, + { + "question": "What is the voucher amount per student in the Students First Act?", + "gt_answer": "7,598", + "gt_reference": [ + "DES MOINES -- Governor Reynolds signed HF 68 into law today amid hundreds of supporters in the Iowa State Capitol. The Students First Act makes state education funding available for K-12 students who choose to attend private schools.  “Public schools are the foundation of our education system and for most families they will continue to be the option of choice, but they aren’t the only choice,” Governor Reynolds stated. “For some families, a different path may be better for their children. With this bill, every child in Iowa, regardless of zip code or income, will have access to the school best suited for them.”  Universal eligibility will be phased in over three years. All incoming Kindergarteners and all public-school students will be eligible beginning year one with the start of the 2023-2024 school year. Eligibility for families of children currently enrolled in accredited private schools will be income based over the first two years.  Parents or guardians who enroll their eligible children in an accredited private school will receive an amount equal to the per pupil funds allocated by the state to all public school districts each year. The funds are estimated at $7,598 per pupil for the 2023-2024 school year and will be deposited into an education savings account (ESA) to be used for tuition, fees, and other qualified education expenses. The state has issued a request for proposal (RFP) from businesses with experience managing ESA programs." + ] + }, + { + "question": "Who won the Best R&B Album at the 2023 Grammys?", + "gt_answer": "Robert Glasper", + "gt_reference": [ + "Be the first to find out about GRAMMY nominees, winners, important news, and events. Privacy Policy Graphic: The Recording Academy. news Celebrate ahead of Music's Biggest Night on Feb. 5, 2023, with this spirited playlist of every R&B nominee at the 2023 GRAMMYs. R&B's passion and potency can set a mood instantly. The 2023 GRAMMY nominees embody the genre's effervescence with a unique blend of classic and contemporary sound — and now ​​you can hear all of the nominees in one playlist. Nominated for Best R&B song, Beyoncé's \"CUFF IT\" electrifies and invigorates the dancefloor, and Mary J. Blige's smooth \"Good Morning Gorgeous\" supports self-love. Best New Artist nominee Muni Long hits a sweet, sultry spot with \"Hrs & Hrs,\" Jazmine Sullivan poignantly chronicles the confusion of a toxic relationship on \"Hurt Me So Good,\" and PJ Morton's \"Please Don't Walk Away\" glitters with hope and serenity. For Best R&B Album, nominees include Mary J. Blige's Good Morning Gorgeous (Deluxe), Chris Brown's Breezy (Deluxe), Robert Glasper's Black Radio III, Lucky Daye's Candydrip, and PJ Morton's Watch The Sun. Across the R&B five categories, Mary J." + ] + }, + { + "question": "What is Google's new AI chatbot called?", + "gt_answer": "Bard", + "gt_reference": [ + "Advertisement Supported by The internet giant will grant users access to a chatbot after years of cautious development, chasing splashy debuts from rivals OpenAI and Microsoft. By Nico Grant and Cade Metz Nico Grant and Cade Metz reported this story in San Francisco. For more than three months, Google executives have watched as projects at Microsoft and a San Francisco start-up called OpenAI have stoked the public’s imagination with the potential for artificial intelligence. But on Tuesday, Google tentatively stepped off the sidelines as it released a chatbot called Bard. The new A.I. chatbot will be available to a limited number of users in the United States and Britain and will accommodate additional users, countries and languages over time, Google executives said in an interview. The cautious rollout is the company’s first public effort to address the recent chatbot craze driven by OpenAI and Microsoft, and it is meant to demonstrate that Google is capable of providing similar technology. But Google is taking a much more circumspect approach than its competitors, which have faced criticism that they are proliferating an unpredictable and sometimes untrustworthy technology. Still, the release represents a significant step to stave off a threat to Google’s most lucrative business, its search engine. Many in the tech industry believe that Google — more than any other big tech company — has a lot to lose and to gain from A.I." + ] + }, + { + "question": "who founded midjourney?", + "gt_answer": "David Holz", + "gt_reference": [ + "Midjourney is a generative artificial intelligence program and service created and hosted by San Francisco-based independent research lab Midjourney, Inc. Midjourney generates images from natural language descriptions, called \"prompts\", similar to OpenAI's DALL-E and Stable Diffusion.[1][2] The tool is currently in open beta, which it entered on July 12, 2022.[3] The Midjourney team is led by David Holz, who co-founded Leap Motion.[4] Holz told The Register in August 2022 that the company was already profitable.[5] Users create artwork with Midjourney using Discord bot commands.[6] Midjourney, Inc. was founded in San Francisco, California by David Holz,[7] previously co-founder of Leap Motion.[8] The Midjourney image generation platform first entered open beta on July 12, 2022.[3] However, on March 14, 2022, the Discord server launched with a request to post high-quality photographs to Twitter/Reddit for system's training. The company has been working on improving its algorithms, releasing new model versions every few months. Version 2 of their algorithm was launched in April 2022[9] and version 3 on July 25." + ] + }, + { + "question": "What technology has Microsoft incorporated into the new Bing?", + "gt_answer": "ChatGPT", + "gt_reference": [ + "Copyright 2023 The Associated Press. All Rights Reserved. Microsoft announced a new version of its search engine Bing is integrating artificial intelligence chat in a step the tech giant hopes will bolster its place in the online search business (Feb. 7) (AP Video: Manuel Valdes) REDMOND, Wash. (AP) — Microsoft is fusing ChatGPT-like technology into its search engine Bing, transforming an internet service that now trails far behind Google into a new way of communicating with artificial intelligence. The revamping of Microsoft’s second-place search engine could give the software giant a head start against other tech companies in capitalizing on the worldwide excitement surrounding ChatGPT, a tool that’s awakened millions of people to the possibilities of the latest AI technology. Along with adding it to Bing, Microsoft is also integrating the chatbot technology into its Edge browser. Microsoft announced the new technology at an event Tuesday at its headquarters in Redmond, Washington. “Think of it as faster, more accurate, more powerful” than ChatGPT, built with technology from ChatGPT-maker OpenAI but tuned for search queries, said Yusuf Mehdi, a Microsoft executive who leads its consumer division, in an interview. A public preview of the new Bing launched Tuesday for desktop users who sign up for it, but Mehdi said the technology will scale to millions of users in coming weeks and will eventually come to the smartphone apps for Bing and Edge." + ] + }, + { + "question": "Who is the new CEO of Pinterest?", + "gt_answer": "Bill Ready", + "gt_reference": [ + "SAN FRANCISCO--(BUSINESS WIRE)-- Pinterest, Inc. (NYSE: PINS) today announced that co-founder, Chief Executive Officer and President, Ben Silbermann will transition to the newly created role of Executive Chairman, and online commerce expert Bill Ready will become Chief Executive Officer and a member of the Board of Directors, effective June 29, 2022. Ready is joining Pinterest from Google, where he served as President of Commerce, Payments & Next Billion Users and oversaw Google’s vision, strategy and the delivery of its commerce products. Prior to Google, Ready served in various senior leadership roles at PayPal, including Executive Vice President and Chief Operating Officer. With over 400 million monthly active users, Pinterest has built a healthy advertising business that generated strong cash flow and doubled revenue during the pandemic. In addition, Pinterest has been laser-focused on putting Pinners first, continuously improving its roadmap, investing in creators, shopping and scaling internationally. “Building Pinterest with such a wildly talented, kind and creative team has been the gift of a lifetime,” said Silbermann. “Today, Pinterest inspires hundreds of millions of people with ideas for every aspect of their lives. We’ve built a growing global business that puts the well-being of our users at the core of everything we do. And we’re just getting started.”" + ] + }, + { + "question": "What is the release date for Pikmin 4 on Nintendo Switch?", + "gt_answer": "July 21", + "gt_reference": [ + "Connor Christie Published: May 5, 2023 The tides have finally turned, and the sun will shine again on Pikmin fans worldwide. Before the September 2022 Nintendo Direct, Nintendo hadn’t shared anything about the Pikmin 4 release date since 2017. But after Miyamoto spoke about Pikmin Bloom during the livestream, he finally revealed we can get our hands on the next game in the series this year. While you wait for Pikmin 4, head on over to our list of the best Switch RPGs to find something you can play right now, or take a look at our list of the best new Switch games coming in 2023 to find out what else you should be looking forward to. The Pikmin 4 release date is Friday, July 21, 2023, for the Nintendo Switch. We can’t wait to join Olimar and his friends again soon! Follow the link below to pre-order a copy. Of course, there is, you can take a look at all of the adorable gameplay from the Nintendo Direct February 2023 below. We also recommend you head over to the Nintendo YouTube account to find even more gameplay and Pikmin 4 fun. Pikmin 4 gameplay looks very similar to previous games in the series but with an adorable chunky dog named Otachi." + ] + }, + { + "question": "How many employees did Meta lay off in November?", + "gt_answer": "11,000", + "gt_reference": [ + "NPR's Sacha Pfeiffer talks to Wall Street Journal reporter Sam Schechner about the layoffs which will cut about 12% of Meta's workforce. This round follows a previous cut of 11,000 jobs. SACHA PFEIFFER, HOST: Meta is planning a second round of layoffs. That's the parent company of Facebook, Instagram and WhatsApp. And it announced yesterday it will cut another 10,000 jobs. This follows 11,000 layoffs at Meta last November. CEO Mark Zuckerberg has said that 2023 will be Meta's, quote, \"year of efficiency.\" He also says it will be, in his words, stronger and more nimble. We're joined now by Wall Street Journal technology reporter Sam Schechner. Sam, thanks for coming on.SAM SCHECHNER: A pleasure to be here.PFEIFFER: These are a lot of layoffs, but I want to make sure we put it in the overall context of how large Meta is. So tell us, how many employees does it have now? How many will it have left once the layoffs are done?SCHECHNER: Well, those are good questions. We know the numerator. We don't necessarily know the denominator. At the end of the year, Meta had roughly 86,000 employees. Most of those who are being laid off - the 11,000 from last fall - were still on the payroll, the company said." + ] + }, + { + "question": "What company acquired iRobot?", + "gt_answer": "Amazon", + "gt_reference": [ + "“Since we started iRobot, our team has been on a mission to create innovative, practical products that make customers’ lives easier, leading to inventions like the Roomba and iRobot OS,” said Colin Angle, chairman and CEO of iRobot. “Amazon shares our passion for building thoughtful innovations that empower people to do more at home, and I cannot think of a better place for our team to continue our mission. I’m hugely excited to be a part of Amazon and to see what we can build together for customers in the years ahead.” Amazon will acquire iRobot for $61 per share in an all-cash transaction valued at approximately $1.7 billion, including iRobot’s net debt. Completion of the transaction is subject to customary closing conditions, including approval by iRobot’s shareholders and regulatory approvals. On completion, Colin Angle will remain as CEO of iRobot. About Amazon Amazon is guided by four principles: customer obsession rather than competitor focus, passion for invention, commitment to operational excellence, and long-term thinking. Amazon strives to be Earth’s Most Customer-Centric Company, Earth’s Best Employer, and Earth’s Safest Place to Work. Customer reviews, 1-Click shopping, personalized recommendations, Prime, Fulfillment by Amazon, AWS, Kindle Direct Publishing, Kindle, Career Choice, Fire tablets, Fire TV, Amazon Echo, Alexa, Just Walk Out technology, Amazon Studios, and The Climate Pledge are some of the things pioneered by Amazon." + ] + }, + { + "question": "Which team won Super Bowl LVII?", + "gt_answer": "Kansas City Chiefs", + "gt_reference": [ + "Super Bowl LVII was an American football game played to determine the champion of the National Football League (NFL) for the 2022 season. The American Football Conference (AFC) champion Kansas City Chiefs defeated the National Football Conference (NFC) champion Philadelphia Eagles, 38–35. The game was played on February 12, 2023, at State Farm Stadium in Glendale, Arizona. It was the fourth Super Bowl hosted by the Phoenix metropolitan area, and the third at this venue, with the most recent previously being Super Bowl XLIX in 2015 (then known as University of Phoenix Stadium).[6] Both teams finished the regular season with a league-best 14–3 record. This was the Eagles fourth Super Bowl appearance overall and the second in the last six seasons, having previously won Super Bowl LII; the Eagles previously lost Super Bowls XV and XXXIX. This was the Chiefs' fifth Super Bowl appearance overall and third in the last four seasons, having previously won Super Bowls IV and LIV, and losses in Super Bowls I and LV. After the Eagles went into halftime up 24–14, the Chiefs mounted a comeback to win the game 38–35 with a game-winning field goal kicked by Harrison Butker. Butker's game winning kick was set up by a pivotal and controversial defensive holding call on Philadelphia cornerback James Bradberry, which was criticized by some observers but supported by others." + ] + }, + { + "question": "How much did SM Entertainment's revenue grow in 2022?", + "gt_answer": "18.7%", + "gt_reference": [ + "Concert revenue grew tenfold for the NCT Dream and Red Velvet label, while recorded music sales declined 3.7%. \t\t\t\t\t\t\t\t\t\t\t\t\tBy \t\t\t\t\t\t\t\t\t\t\t\t \tGlenn Peoples \tSM Entertainment’s revenue in 2022 grew 18.7% to 848.3 billion won ($657 million at the average 2022 exchange rate) in 2022, the Korean music company announced Monday. Gross profits rose 15.4% to 297.5 billion won ($230 million), operating profit fell 3.7% to 93.9 billion won ($73 million) and operating margin dropped from 13.6% to 11.1%.  \tThe K-pop company’s roster includes NCT Dream, NCT 127, Aespa and Red Velvet. NCT Dream had the fourth most album sales of any artist in Korea in 2022 with 4.1 million units. Red Velvet was the No. 9 artist with 2.4 million units, NCT 127 was No. 11 with 2.2 million units and Aespa was No. 13 with 1.8 million units.  \t \t \t\t \t\t\t\t\tRelated\t\t \t \t \t \t\t \t\t\t\t\tThe Big Bang Theory: HYBE's Chairman on K-Pop's Future, The BTS Model, AI Plans and More\t\t \t \t02/22/2023" + ] + }, + { + "question": "who trained LLaMA?", + "gt_answer": "Meta", + "gt_reference": [ + "llama.CausalSelfAttention = LoRACausalSelfAttention     yield     llama.CausalSelfAttention = causal_self_attention     LoRACausalSelfAttention.lora_config = None     llama.CausalSelfAttention = LoRACausalSelfAttention     yield     llama.CausalSelfAttention = causal_self_attention     LoRACausalSelfAttention.lora_config = None     yield     llama.CausalSelfAttention = causal_self_attention     LoRACausalSelfAttention.lora_config = None     llama.CausalSelfAttention = causal_self_attention     LoRACausalSelfAttention.lora_config = None     LoRACausalSelfAttention.lora_config = None We are now ready to fine-tune LLaMA. You can fine-tune Lit-LLaMA on the Alpaca dataset using LoRA and quantization on a consumer GPU. Lit-LLaMA comes with a simple script for downloading and preparing the Alpaca dataset, which you can find here. Note: You can convert the official Meta AI LLaMA weights to Lit-LLaMA format using the instructions here. Follow these two simple steps to instruction-tune LLaMA: Find the full fine-tuning code here. To generate text predictions, you will need trained model weights. You can use either the official Meta AI weights or the model that you have fine-tuned." + ] + }, + { + "question": "Which movie won Best Picture at the 95th Academy Awards Ceremony?", + "gt_answer": "Everything Everywhere All at Once", + "gt_reference": [ + "On the morning of the ceremony, however, it was reported that Gaga would perform at the ceremony.[36] Meanwhile, actress Glenn Close, who was originally scheduled as a presenter during the gala, canceled her appearance due to a positive COVID-19 test.[37] When the nominations were announced, nine of the ten films nominated for Best Picture had earned a combined gross of $1.57 billion at the American and Canadian box offices at the time. Top Gun: Maverick was the highest-grossing film among the Best Picture nominees with $718.7 million in domestic box office receipts.[38] Avatar: The Way of Water came in second with $598.4 million; this was followed by Elvis ($151 million), Everything Everywhere All at Once ($70 million), The Fabelmans ($15 million), The Banshees of Inisherin ($9 million), Tar ($5.6 million), Triangle of Sadness ($4.2 million), and Women Talking ($1.1 million). The box office figures for All Quiet on the Western Front were unavailable due to their distributor Netflix's policy of refusing to release such figures.[39] Furthermore, by virtue of Avatar: The Way of Water and Top Gun: Maverick's Best Picture nominations, it marked the first time since the 55th ceremony in 1983 that the two highest grossing films of the year were both nominated in the aforementioned category.[40]" + ] + }, + { + "question": "Who won Best Director at the 95th Academy Awards Ceremony?", + "gt_answer": "Daniel Scheinert", + "gt_reference": [ + "Advertisement Supported by The list of winners for the 95th Academy Awards. By Gabe Cohn The 95th Academy Awards were held Sunday night at the Dolby Theater in Los Angeles. “Everything Everywhere All at Once,” the proudly weird sci-fi movie from Daniel Kwan and Daniel Scheinert, swept most of the top categories, including best picture and directing. Michelle Yeoh, that movie’s star, won the best actress award, becoming the first Asian actress ever to win that honor. The other lead acting prize went to Brendan Fraser (“The Whale”), also a first-time winner. (Perhaps the biggest winner of all: A24, the studio behind both of those movies.) Earlier victories went to “Guillermo del Toro’s Pinocchio,” which won for best animated feature; Ke Huy Quan and Jamie Lee Curtis, each first-time winners for supporting roles in “Everything Everywhere All at Once”; “Navalny,” which picked up the best documentary feature statuette; the costume designer Ruth E. Carter, who became the first Black woman to have won two Oscars (this time for “Black Panther: Wakanda Forever”); “All Quiet on the Western Front,” which won several awards in the first half of the show, including for best international feature, production design and cinematography; and Sarah Polley, who won the best adapted screenplay honor for “Women Talking.” See below for a full list of winners." + ] + }, + { + "question": "Who won Best Actor at the 95th Academy Awards Ceremony?", + "gt_answer": "Brendan Fraser", + "gt_reference": [ + "One of the things I realized growing up is that one of the best things we can do for each other is shelter each other from the chaos of this crazy world. Thank you to the storytellers here who did that for me.” Other nominees in the category included “All Quiet on the Western Front,” “Avatar: The Way of Water,” “The Banshees of Inisherin,” “Elvis,” “The Fabelmans,” “Tár,” “Top Gun: Maverick,” “Triangle of Sadness” and “Women Talking.” Brendan Fraser won the Academy Award for best actor for his performance in \"The Whale.\" Fraser, appearing visibly shocked and emotional upon accepting his trophy, began by thanking the film's director Darren Aronofsky for throwing him \"a creative lifetime and hauling me aboard the good ship 'The Whale.'\" Reflecting on his journey in the entertainment industry, which started 30 years ago, he added, \"Things -- they didn't come easily to me, but there was a facility that I didn't appreciate at the time until it stopped.\" Other actors nominated in the category included Austin Butler for his performance in \"Elvis,\" Colin Farrell for his performance in \"The Banshees of Inisherin,\" Paul Mescal for his performance in \"Aftersun\" and Bill Nighy for his performance in \"Living.\" All were first-time Oscar nominees." + ] + }, + { + "question": "Who won Best Actress at the 95th Academy Awards Ceremony?", + "gt_answer": "Michelle Yeoh", + "gt_reference": [ + "11] Michelle Yeoh was the first Asian winner for Best Actress and the second woman of color overall after Halle Berry, who won for her performance in 2001's Monster's Ball.[12] Furthermore, she was the first woman to identify as Asian to be nominated in that category.[b] Ke Huy Quan became the first Vietnamese person to win an Oscar and the second Asian winner for Best Supporting Actor after Haing S. Ngor, who won for his role in 1984's The Killing Fields.[14][15] The 42-year span between Judd Hirsch's first nomination, for his supporting role in 1980's Ordinary People, and his second, for The Fabelmans, set the record for the longest gap between Oscar nominations.[11] At age 90, Best Original Score nominee John Williams became the oldest person nominated competitively in Oscars history.[11] Best Costume Design winner Ruth E. Carter was the first Black woman to win two Oscars.[16] Winners are listed first, highlighted in boldface, and indicated with a double dagger (‡).[17] The Academy held its 13th annual Governors Awards ceremony on November 19, 2022, during which the following awards were presented:[18] The following presented awards and performed musical numbers.[21] In September 2022, the Academy hired television producers Glenn Weiss and Ricky Kirshner to oversee production of the 2023 ceremony." + ] + }, + { + "question": "Which movie won Best International Feature Film at the 95th Academy Awards Ceremony?", + "gt_answer": "Edward Berger", + "gt_reference": [ + "Fisher ALL QUIET ON THE WESTERN FRONT Screenplay - Edward Berger, Lesley Paterson & Ian Stokell GLASS ONION: A KNIVES OUT MYSTERY Written by Rian Johnson LIVING Written by Kazuo Ishiguro TOP GUN: MAVERICK Screenplay by Ehren Kruger and Eric Warren Singer and Christopher McQuarrie; Story by Peter Craig and Justin Marks WOMEN TALKING - **WINNER** Screenplay by Sarah Polley THE BANSHEES OF INISHERIN Written by Martin McDonagh EVERYTHING EVERYWHERE ALL AT ONCE - **WINNER** Written by Daniel Kwan & Daniel Scheinert THE FABELMANS Written by Steven Spielberg & Tony Kushner TÁR Written by Todd Field TRIANGLE OF SADNESS Written by Ruben Östlund The 95th Oscars will be held on Sunday, March 12, 2023, at the Dolby® Theatre at Ovation Hollywood and will be televised live on ABC and in more than 200 territories worldwide." + ] + }, + { + "question": "How much is the new monthly price for YouTube TV?", + "gt_answer": "$72.99", + "gt_reference": [ + "YouTube has announced that it’s raising the price of its YouTube TV subscription to $72.99 per month. The new monthly price is an $8 increase from the current $64.99 monthly fee. New members will see the new price starting today, while existing members will see the price change starting on April 18. The Google-owned company blames a rise in “content costs” for the change. To soften the blow, the company announced that it’s lowering the price of its 4K Plus add-on from $19.99 per month to $9.99 per month. “As content costs have risen and we continue to invest in our quality of service, we’ll be adjusting our monthly cost, after 3 years, from $64.99/mo to $72.99/mo, in order to bring you the best possible TV service,” the company said in a tweet. An update for our members. As content costs have risen and we continue to invest in our quality of service, we’ll be adjusting our monthly cost, after 3 years, from $64.99/mo to $72.99/mo, in order to bring you the best possible TV service. — YouTube TV (@YouTubeTV) March 16, 2023 YouTube TV notes that this is its first price increase in three years. In July 2020, the price for YouTube TV increased from $49 to $64.99." + ] + }, + { + "question": "Who won The Voice Season 23?", + "gt_answer": "Gina Miles", + "gt_reference": [ + "Create a free profile to get unlimited access to exclusive show news, updates, and more! The results are in! It's been such a talent-packed season of The Voice, but unfortunately, it's come to an end. The Season 23 finale of The Voice was Tuesday, May 23. It's then where we found out who took home the prize — and secured their place in Voice history. In addition to Blake Shelton's final appearance and some star-studded performances, the finale episode gave us the results we have all be waiting for. Would Shelton add to his record with a 10th win as a Voice Coach? Would Niall Horan or Chance the Rapper take home a win in their first season? Or would Kelly Clarkson add to her collection of Voice wins?   Watch The Voice on NBC and Peacock. So, who actually did win? Read on for the results.  The winner of The Voice Season 23 was announced during the finale on Tuesday, May 23. Coming in second place was Grace West, followed by D.Smooth in third, Sorelle in fourth, and NOIVAS in fifth.  During the May 15 Live Show, Grace West (Team Blake), D. Smooth (Team Kelly), Gina Miles (Team Niall), Sorelle (Team Chance), and NOIVAS (Team Blake) were all voted to advance to the finale." + ] + }, + { + "question": "Who is the CEO of Hasbro?", + "gt_answer": "Chris Cocks", + "gt_reference": [ + "Cocks to Succeed Interim CEO & Board Member, Rich Stoddart, and Join Board of Directors; Stoddart to Become Chair of the Board Eric Nyman Appointed President & Chief Operating Officer of Hasbro PAWTUCKET, R.I.--(BUSINESS WIRE)--Jan. 5, 2022-- Hasbro, Inc. (NASDAQ: HAS) today announced that its Board of Directors has appointed Chris Cocks as Chief Executive Officer and member of the Board of Directors, effective February 25, 2022. Mr. Cocks currently serves as President and Chief Operating Officer of Hasbro’s Wizards of the Coast and Digital Gaming division, a global leader in tabletop and digital gaming. He will succeed Interim CEO, Rich Stoddart, who was appointed following the October passing of Hasbro’s longtime CEO Brian Goldner. Mr. Stoddart, who has served as a Hasbro independent director since 2014, will become Chair of the Board, effective February 25, 2022. Tracy Leinbach, current Chair of the Board, said: “Chris’s appointment marks the culmination of an extensive and thoughtful candidate review and selection process led by the Board. In Chris, we have chosen a leader uniquely positioned to execute and evolve Hasbro’s Brand Blueprint strategy while continuing to generate growth and deliver strong shareholder returns." + ] + }, + { + "question": "Which network received the most nominations for the 2023 Sports Emmy Awards?", + "gt_answer": "ESPN", + "gt_reference": [ + "By Brandon Costa, Director of Digital Tuesday, April 11, 2023 - 12:29 pm Print This Story | Subscribe The National Academy of Television Arts and Sciences (NATAS) announced the nominees for the 44th Annual Sports Emmy Awards on Tuesday. The 44th Annual Sports Emmy Awards ceremony will take place at Jazz at Lincoln Center’s Frederick P. Rose Hall on Monday, May 22, 2023. ESPN led all network groups with 59 total nominations, while NBC Sports also pulled in an impressive 38 nods. FOX Sports also received 33 selections and CBS Sports (29), Turner Sports (26), NFL Network (15), and HBO (10) all registered double-digit nomination totals. Among the leaders by program, NBC Sports’ coverage of the Beijing Winter Olympics and NFL 360 from NFL Network received 10 nominations, while Turner Sports’ coverage of the 2022 NCAA Men’s Basketball Tournament pulled in eight and FOX Sports’ coverage of the 2022 FIFA World Cup netted seven. The National Academy of Television Arts and Sciences (NATAS) will announce the winners at an in-person ceremony at Jazz at Lincoln Center’s Frederick P. Rose Hall on May 22. “Today we honor these esteemed nominees and celebrate those who bring the thrill of competitive sports into our lives on a daily basis,” Adam Sharp, President & CEO, NATAS said in the official nominations announcement." + ] + }, + { + "question": "Who is the Chairman of NBCUniversal Telemundo Enterprises?", + "gt_answer": "Beau Ferrari", + "gt_reference": [ + "By \tWill Thorne Staff Writer Beau Ferrari has been promoted to the role of Chairman of NBCUniversal Telemundo Enterprises, succeeding Cesar Conde who departed to head up NBCUniversal News Group in May. In his new role, Ferrari will oversee the company’s media portfolio which includes the Telemundo broadcast network. He will report to directly to NBCUniversal Television and Streaming chairman Mark Lazarus, and direct a substantial portfolio within NBCU which also comprises entertainment, sports, news, cable, global studios and 30 local stations. “Beau is a strong leader with extraordinary business acumen and deep media experience across all media platforms and the Hispanic market. During his three years with the company, he has made a tremendous impact as Telemundo became one of NBCUniversal’s fastest-growing businesses,” said Lazarus. He added, “Beau is ideally suited to seamlessly take over the reins of Telemundo and build on its phenomenal success.” Ferrari has served as executive vice president of NBCUniversal Telemundo Enterprises since 2017, overseeing the company’s operations, financial performance, corporate strategy and development for the portfolio of businesses. “It’s an incredible honor to lead the talented team at Telemundo Enterprises, particularly at a time when there is so much momentum in this business,” said Ferrari. “I am excited for the opportunity to take the company to the next level and guide Telemundo’s continued growth." + ] + }, + { + "question": "What is the name of Elon Musk's new AI company?", + "gt_answer": "X.AI", + "gt_reference": [ + "By Jay Peters and Emma Roth Elon Musk has created a new company dedicated to artificial intelligence — and it’s called X.AI, as first reported by The Wall Street Journal. The company, which a Nevada filing indicates was incorporated last month, currently has Musk as its director and Jared Birchall, the director of Musk’s family office, listed as its secretary. The filing, which The Verge has also obtained, indicates that Musk incorporated the business on March 9th, 2023. Rumors about Musk starting up an AI company have been floating around for days, with a report from Business Insider revealing that Musk had purchased thousands of graphic processing units (GPUs) to power an upcoming generative AI product. The Financial Times similarly reported that Musk planned to create an AI firm to compete with the Microsoft-backed OpenAI. Musk even reportedly sought funding from SpaceX and Tesla investors to get the company started. During an interview on Twitter Spaces, when Musk was asked about all the GPUs he purchased, the billionaire made no mention of his plans to build an AI company, stating “it seems like everyone and their dog is buying GPUs at this point.” The purported X.AI name matches the branding of the X Corp. name he has since assigned to Twitter, along with the “X” label he’s applied to his vision of an “everything app." + ] + }, + { + "question": "Who won the Virginia Tech spring game 2023?", + "gt_answer": "The maroon squad", + "gt_reference": [ + "Filed under: It’s the middle of April, the big Hokie Hi weekend has passed, and the biggest of the big campus celebration events was the Spring Football Game. There were lots of things to look at and analyze but for now, here are some shots and comments from the game. GO HOKIES!!! The crowd was easily over 20,000 people. Hokie Hi weekend featured Friday and Saturday celebrations with an evening tribute to the fallen 32 from April 16th 2007. The morning on Saturday was the 3.2 mile Run and Walk for Remembrance, and the crowd there was estimated to be 15,000 or so. The weather in Blacksburg not only cooperated, it assisted by being comfortably warm, without being hot, and a light breeze was blowing. It was a magnificent way to honor the fallen and celebrate their memories as Hokies. The Maroon Squad Offense was obviously mostly #1s int he depth chart, with Grant Wells starting at Maroon Squad QB. He’d remain there for the first half. We’ll talk about the various observations in a coming article, but overall, he did well and seemed like he was much more comfortable than he was last season. We’ll take that as a major plus, for now." + ] + }, + { + "question": "Who was named the 2023 National Teacher of the Year?", + "gt_answer": "Rebecka Peterson", + "gt_reference": [ + "“I am proud CCSSO has had the privilege to support excellent teachers like Rebecka through the National Teacher of the Year Program for more than 70 years.” Every year, exemplary teachers from each state, U.S. extra-state territories, the District of Columbia and the Department of Defense Education Activity are selected as State Teachers of the Year. From that group, the National Teacher of the Year is chosen by a selection committee composed of 17 individuals and education organizations. The Selection Committee said in a statement: “Rebecka is a caring and passionate educator who understands the importance of connections and providing individual supports for students, both in her math classes and beyond. She has a deep knowledge of both education policy and teaching practices and understands that sustained change at a small scale can make a big difference for students. We know people across the country will connect with the stories she shares as the 2023 National Teacher of the Year.”    “Rebecka Peterson has inspired our children in the classroom — but we all know that her work is not done yet, and she will inspire millions of others in her very young but distinct career. Rebecka has changed the lives of countless students; she impacts all those around her and makes everyone better. She finds potential not only in our children, but in our teachers as well,” Oklahoma State Superintendent of Public Instruction Ryan Walters said. “She represents Oklahoma’s future and reassures us all that the future is bright." + ] + }, + { + "question": "When does the 2023 Douglas County Fair & Rodeo start?", + "gt_answer": "July 28", + "gt_reference": [ + "2023 Douglas County Fair & Rodeo runs July 28 – Aug. 6 \t\t\t\t \t\t\t\tPosted on July 18, 2023\t\t\t \t\t\t\t2023Fair and RodeoNews and Events Share Are you still looking for one last taste of summer fun before the kids head back to school? Get your tickets now to the 2023 Douglas County Fair & Rodeo, packed with fun for every member of your family. Check out this year’s lineup and join us in just 10 days! Kick-off concert: If you listen to Country music radio, you know Randy Houser! Houser will be kicking off the entertainment with an incredible concert experience featuring Chase Bryant at 7 p.m. Friday, July 28, in Castle Rock. Tickets start at just $25 and are on sale now. A lighted drone show will play between the two acts. Farm to Table: A feast for your senses starts at 11 a.m. Sunday, July 30, with the much-anticipated return of the Farm to Table lunch at the Fairgrounds. This unique experience is far more than a chef-inspired meal. Dueling pianos play in the background as you sip mimosas and mingle with the farmers, vendors and chef who are responsible for the meal you’re about to enjoy. See this year’s menu and grab your tickets online now!" + ] + }, + { + "question": "Where are Apple's first two stores in India?", + "gt_answer": "Mumbai", + "gt_reference": [ + "Two decades after entering India, Apple is gearing up to launch its first set of retail stores in the populous South Asian nation, signaling the tech giant’s growing interest in the market. Apple said on Tuesday it plans to open Apple BKC in Mumbai on April 18 and Apple Saket in Delhi on April 20. The iPhone-maker’s first retail stores in India have been long-anticipated, but the limited market for high-end smartphones and laptops in the country has tempered Apple’s expansion efforts. Despite being the world’s second-largest internet market, the majority of smartphones sold in India are priced below $250. While India accounts for a small portion of Apple’s overall revenue, the iPhone-maker has expressed optimism about the nation’s potential for growth. Apple said that the new retail locations “mark a significant expansion in India that will offer great new ways to browse, discover, and buy Apple products with exceptional service and experiences for customers.” In preparation for the store openings, Apple has been actively recruiting employees in recent months, according to growing job postings. The company, which launched its Indian online store in 2020, had initially planned to open its first retail location in 2021, but the COVID-19 pandemic forced a delay. Apple is also working to turn India into a key global hardware manufacturing hub, thanks in part to the incentives New Delhi is offering to manufacturers to expand their presence in the country." + ] + }, + { + "question": "where is 2023 CAA World Congress of Sports?", + "gt_answer": "JW Marriott Los Angeles", + "gt_reference": [ + "After two years in New York City, the CAA World Congress of Sports is moving back to the West Coast in 2023 and its pre-pandemic time slot in the spring. The program will be taking place April 18-19 at the JW Marriott Los Angeles L.A. LIVE. World Congress is the largest and most prestigious sports business conference in North America. In draws more than 800 attendees, including league officers; team owners and presidents; corporate sponsors and advertisers; media executives and agency heads. While the program addresses the business of sports from the perspective of the industry’s top executives, it also features speakers and topics that transcend sports. In addition to the content, World Congress is known as a networking hub where high-profile discussions take place and deals get done among the industry’s top stakeholders. Info@nilnewsstand." + ] + }, + { + "question": "What was Sundar Pichai's total compensation in 2022?", + "gt_answer": "226 million", + "gt_reference": [ + "Google CEO Sundar Pichai’s 2022 Compensation Valued at $226 Million Listen (2 min) Google CEO Sundar Pichai’s 2022 Compensation Valued at $226 Million Listen (2 min) This copy is for your personal, non-commercial use only. Distribution and use of this material are governed by our Subscriber Agreement and by copyright law. For non-personal use or to order multiple copies, please contact Dow Jones Reprints at 1-800-843-0008 or visit www.djreprints.com. https://www.wsj.com/articles/google-ceo-sundar-pichais-2022-compensation-valued-at-226-million-e43ec06f By Updated April 22, 2023 1:11 pm ET Listen (2 min) Sundar Pichai, chief executive of Alphabet Inc. and Google, was awarded compensation in 2022 valued at $226 million, according to a regulatory filing Friday, including a triannual stock award valued at more than $200 million.In 2019, the last year his compensation included a triannual stock grant, his compensation was valued at $281 million.  Copyright ©2023 Dow Jones & Company, Inc. All Rights Reserved. 87990cbe856818d5eddac44c7b1cdeb8 Continue reading your article witha WSJ subscription Already a subscriber?" + ] + }, + { + "question": "When is the Google I/O conference 2023?", + "gt_answer": "May 10", + "gt_reference": [ + "That's in line with when Google normally holds its developers conference — last year's edition took place on May 11 and May 12, for example. There will be an in-person event at the Shoreline Amphitheatre in Mountain View, Calif., a venue that's just down the street from Google headquarters. Most people will attend virtually, though since Google streams its developer conference. The Google I/O 2023 website promises a kickoff keynote that gets underway at 1 p.m. ET/ 10 a.m. PT/ 6 p.m. BST on May 10. A developer keynote will follow afterward, diving into more detail on tools available to Google developers. You can find a full Google I/O 2013 schedule listing the different presentations. The Google I/O 2023 agenda doesn't provide any specific details about what's in store on May 10. But we can make some educated guesses about what's on tap, given Google's past announcements and rumors about the company's current plans. Google Bard is just the start of the company's grand plans for AI-powered search. According to a report in The New York Times, Samsung is considering ditching Google as the default search engine for its devices in favor of Bing. And Google is feverishly working on the next stage of its search engine which will integrate a chatbot.  Dubbed Project Magi, Google has reportedly devoted a large portion of its staff to accelerating the implementation of AI into its search engine." + ] + }, + { + "question": "Who is the lead actress in Prima Facie?", + "gt_answer": "Jodie Comer", + "gt_reference": [ + "And I think that actually, through this experience, I’ve been able to transform that into a sense of trust, which is a really nice feeling,” she said.  \tThe Broadway production is lead produced by James Bierman of Empire Street Productions. Bierman noted the production was able to recoup while also offering lower-priced tickets, including $10 lottery tickets and $45 rush tickets throughout the run. \t \t“Bringing Prima Facie to Broadway has been a journey of responsibility and faith that has been met with a response that we only dared to dream of when we set out. Suzie Miller’s urgent play, Justin Martin’s forensic direction, and our design team’s visceral production have been the backdrop for Jodie Comer’s extraordinary performance as Tessa Ensler, and the way that audiences have embraced all of this has been truly humbling,” Bierman said.  \tA film adaptation of Prima Facie is in the works, with Cynthia Erivo set to star and executive produce. Sign up for THR news straight to your inbox every day Sign up for THR news straight to your inbox every day Subscribe for full access to The Hollywood Reporter Send us a tip using our anonymous form." + ] + }, + { + "question": "What is the name of the AI dating tool Coyne Lloyd used?", + "gt_answer": "Rizz", + "gt_reference": [ + "LOS ANGELES — Coyne Lloyd, a 35-year-old tech investor, was visiting his family in Upstate New York recently when he decided to set up some dates in the city. He fired up Hinge, his preferred dating app, and swiped on a few interesting women. After receiving a couple of matches, he turned, out of curiosity, to a new AI dating tool called Rizz to break the ice. “There’s some amount of mental work and barrier to thinking of how to compose a message [on a dating app],” Lloyd said. “It’s like getting started on a term paper.” Rizz, which is meant to function as a digital wingman, helps users come up with killer opening lines and responses to potential matches. The company behind it is just one of many start-ups trying to transform romance through artificial intelligence by optimizing and automating online dating, now one of the primary ways by which people find romantic connections. Using dating apps can be a slog. Some people complain that they have to sift through countless matches as others indiscriminately swipe; it is difficult to start conversations with strangers; and many users end up viewing the apps more as a necessary chore than an exciting opportunity to connect with someone new. Additionally, the world is becoming more automated: Email messages auto-complete, subscription services auto-renew, and any product under the sun is a single click away." + ] + }, + { + "question": "Who is the new sporting director of U.S. Soccer?", + "gt_answer": "Matt Crocker", + "gt_reference": [ + "Jeff Carlisle joins Futbol Americas to discuss the reported appointment of Matt Crocker as USMNT sporting director. (1:57) British football executive Matt Crocker was hired Tuesday as sporting director of the U.S. Soccer Federation and will lead the search for the United States men's national team coach, a job that has been uncertain since Gregg Berhalter was pushed aside during an investigation that developed from a feud with the Reyna family. Crocker will start the job on Aug. 2 but will begin the coach search process immediately, the USSF said. - Stream on ESPN+: FA Cup, LaLiga, Bundesliga, more (U.S.) In introducing Crocker, USSF president Cindy Parlow Cone said he, \"brings a wealth of knowledge having worked at various roles and at various levels of our game. He will set the sporting vision for U.S. soccer and implement the technical plan for the women's men's extended and youth national teams.\" Crocker will also be providing support for the USWNT during the World Cup prior to his start date. She added that Crocker, \"excels in communication as well as being a team builder. He is driven, he's creative and committed to building relationships at every level of the game. His passion for the game, his experience and expertise will make U.S. Soccer better." + ] + }, + { + "question": "Which team won the 2023 Big 12 Championships in women's golf?", + "gt_answer": "Oklahoma State", + "gt_reference": [ + "Oklahoma State University Big 12 Championships - Day 3 April 23, 2023 | Cowgirl Golf" + ] + }, + { + "question": "Who is the main character in Jedi: Survivor?", + "gt_answer": "Cal Kestis", + "gt_reference": [ + "Featuring a mix of motion capture and voice over, here's the main cast. Star Wars Jedi: Survivor takes place five years after the first game, Star Wars Jedi: Fallen Order, and follows Cal Kestis, one of the few survivors of the Great Jedi Purge, as he fights against the Galactic Empire and the forces of the Dark Side as they try to eliminate the remaining Jedi. RELATED: Every Stance In Star Wars: Jedi Survivor, Ranked The game uses a mixture of traditional voice acting and motion capture for its characters. Many characters are modeled after a likeness of their voice actor, while others are droids or alien creatures. Below is a list of the main characters featured in the game and some insight into who is playing them. A new character for the Star Wars canon introduced in this game, Turgle is a frog-like creature who frequents Pylon's Saloon. A quickly beloved character by fans, Turgle is voiced by seasoned voice actor Richard Steven Horvitz, known for voicing Zim in Invader Zim, and Billy in The Grim Adventures of Billy and Mandy, among multiple other credits. You can find Turgle on the planet Koboh, where part of the game's story will involve assisting him. Turgle is a comedic character, matching the personality of other characters in Horvitz's work." + ] + }, + { + "question": "Who is the director of \"Polite Society\"?", + "gt_answer": "Nida Manzoor", + "gt_reference": [ + "Lena subdues Salim while Ria finally masters a reverse spinning kick to defeat Raheela, and the police arrive as the sisters drive off. Reconciling with Lena, Ria finally receives an encouraging email from Eunice, and the sisters celebrate together. In January 2022 it was revealed a feminist action comedy focusing on two British-Pakistani sisters was being filmed in London by Nida Manzoor with Working Title, Focus Features and Parkville Pictures, with a tone and voice similar to Manzoor’s breakthrough and BAFTA, Peabody, and Rose d'Or award winning sitcom series We Are Lady Parts.[5] In February 2022 it was announced that filming had wrapped on the project in London. It is produced by Tim Bevan and Eric Fellner for Working Title with Olivier Kaempfer and John Pocock for Parkville Pictures. Focus Features had distribution rights.[2][6][7] The typography & graphic design for the title card, credits, chapter headings and fight sequence introductions was designed by Peter Anderson Studio.[8] Polite Society was released at the 2023 Sundance Film Festival on 21 January 2023,[9] at the 2023 Glasgow Film Festival on 12 March 2023,[10] and was released in the United Kingdom and the United States on 28 April 2023.[11][12]" + ] + }, + { + "question": "When did Grand Crew Season 2 end?", + "gt_answer": "April 28", + "gt_reference": [ + "Create a free profile to get unlimited access to exclusive show news, updates, and more! The NBC comedy wrapped its second season on April 28. Grab your glasses everyone, because it's time to talk Grand Crew. The comedy series, created by Brooklyn Nine-Nine's Phil Augusta Jackson, officially returned in March for Season 2. Watch Grand Crew on NBC and Peacock.   \"I kept saying since we wrapped that we would get renewed for a second season,\" Nicole Byer, who plays Nicky on the show, told NBC Insider. \"So when we got renewed I said, 'Listen to Black women!'\" Echo Kellum, who plays Noah, explained that he was also optimistic about returning for a second season. \"I was very ecstatic. A little surprised, but I kind of saw it coming because I knew if it was really about the chemistry of the cast, the content of the show, then we'd be in good footing,\" he said.  Read on to learn what you need to know about the second season of Grand Crew:  The Season 2 finale aired on Friday, April 28 at 8:30/7:30c with a special back-to-back two episode event: Episode 9's \"Wine & Journals\" and Episode 10's \"Wine & Tastings.\"  Like Season 1, there are a total of 10 episodes of Grand Crew for Season 2." + ] + }, + { + "question": "Who hosted the 2023 White House Correspondents' Dinner?", + "gt_answer": "Roy Wood Jr.", + "gt_reference": [ + "Comedian Roy Wood Jr. headlines the 2023 White House Correspondents' Association Dinner. President Biden makes remarks at the White House Correspondent' Association Dinner. The \"Daily Show\" correspondent Roy Wood Jr headlines the White House Correspondents' Association Dinner. Live coverage of celebrities, journalists, and other guests walking the red carpet as they arrive for the 2023 White House Correspondents' Association dinner. President Biden gives remarks at the first White House Correspondents' Association Dinner since 2019. The Daily Show host Trevor Noah headlines as the evening’s entertainment. Historian and author Ron Chernow is the keynote speaker at the White House Correspondents' Association’s 2019 annual dinner in Washington, DC. Journalists, politicians, members of the Trump administration, and celebrities gather for the White House Correspondents' Association annual dinner in Washington, D.C., with entertainment provided by comedian Michelle Wolf. The Daily Show’s Hasan Minhaj entertains reporters, public officials, and celebrities at the 2017 White House Correspondents' Association dinner. Neither President Trump nor members of his administration attended the event. President Obama and comedian Larry Wilmore speak at the White House Correspondents' Association annual dinner, which brings together journalists, politicians, and celebrities at the Washington Hilton." + ] + }, + { + "question": "Which city will host The World Games 2025?", + "gt_answer": "Chengdu", + "gt_reference": [ + "The Chinese city of Chengdu will be the host city for The World Games 2025. On Thursday 9 May, in Gold Coast, Australia, the Mayor of Chengdu, Mr Luo Qiang, signed the Organiser Agreement for the 12th edition of the multi-sports event. The Vice President of IOC and the Chinese Olympic Committee, Mr Yu Zaiqing, signed the agreement as Witness. President Jose Perurena  signed on behalf of the International World Games Association. This was preceded by ratification of the contract by the 37 member federations of the IWGA during the Annual General Meeting at the SportAccord Convention in Gold Coast. Chengdu follows the city of Birmingham, Alabama as host. The 11th edition of The World Games will take place there from 15 to 25 July 2021. Jose Perurena said at a press briefing afterwards: “By signing a contract with one of the most forward-looking and dynamic cities in China, we have signalled our arrival as a major power in international sport.” The IWGA President added: ”Following our 2021 event in another great country, the USA, we are excited now to start work with our Chinese partners on plans for 2025.” Chengdu Mayor, Mr Luo Qiang, said: \"Chengdu highly appreciates the concept of the IWGA and believe that it is in line with Chengdu's development philosophy." + ] + }, + { + "question": "Who is the new CEO of TCW Group?", + "gt_answer": "Katie Koch", + "gt_reference": [ + "As a result of the purchase, ownership by TCW management and employees increased to 44%, while Carlyle maintains a 31% interest in the firm. As of June 30, 2023, TCW had $210 billion of assets under management or committed to management.[8] The CEO of The TCW Group is Katie Koch.[9]" + ] + }, + { + "question": "When was Pixel Fold announced?", + "gt_answer": "May 10", + "gt_reference": [ + "The Pixel Fold is available for pre-order from today (May 10), with general sales in June. Incredibly, as of late May, the top 512GB Pixel Fold model is already sold out in the US. If you pre-order the Pixel Fold, Google will also toss in a free Pixel Watch, although this promotion is limited to Germany, the UK, and the US (leaving Japan in the lurch). Otherwise, everyone also gets a 2TB Google One plan for six months and a three-month subscription to YouTube Premium. There’s also a trade-in program for those who want to switch their current handset for the foldable. Google accepts products from Apple, LG, Motorola, OnePlus, and Samsung, and the trade-in’s value differs between the various models. Notably, you can also trade in Google Pixels. For instance, the 128GB Pixel 7 Pro will get you $380 off the Fold’s price. Visit Google’s trade-in portal for the full list of products and offers. The Pixel Fold hasn’t made its mass market debut yet, so you won’t find expert reviews of the foldable. However, based on our experience with the device at Google I/O 2023, the Pixel Fold should do more than enough to challenge the likes of Samsung in this space. In his hands-on preview, C. Scott Brown “came away impressed” by the Pixel Fold. “It felt great. It looked great." + ] + }, + { + "question": "What is the name of Google's foldable smartphone?", + "gt_answer": "Pixel Fold", + "gt_reference": [ + "What it is: Google’s first smartphone that folds in half, arriving next month How much does it cost? $1,799 to start What does it promise? A great camera and a design that means it’s easier to use (or tuck into a pocket) when closed More than a quarter of smartphone owners in the United States are “highly likely” to upgrade to a foldable model next, according to a survey conducted by Counterpoint Research. That leaves Google — long an also-ran in the U.S. smartphone market — with an opportunity. And thankfully, the company’s first attempt at a folding phone feels very different from the others you can buy right now. For one, this book-style foldable isn’t as awkward to use as some models. The Fold has a 5.8-inch external screen, and it’s proportions are pretty close to traditional smartphone screens. Rival models from Samsung, for example, have taller and slimmer displays on the outside, so sending text messages and browsing the web can feel a little awkward. Thankfully, that’s not the case here. It doesn’t hurt that the Pixel Fold is noticeably thinner than other Samsung options, either. At last: a folding smartphone that won’t feel super awkward in your back pocket. When open, the Fold’s internal 7." + ] + }, + { + "question": "How many jobs were created in April 2023?", + "gt_answer": "253,000", + "gt_reference": [ + "The labor market showed resilience in April, despite the Federal Reserve’s efforts to cool the economy. More jobs were added than in recent months, across a wide range of sectors, and the unemployment rate fell. Monthly change in jobs +500,000 jobs +253,000 in April +400,000 +300,000 +200,000 +100,000 April ’22 July Oct. Jan. ’23 April +500,000 jobs +253,000 in April +400,000 +300,000 +200,000 +100,000 April ’22 July Oct. Jan. ’23 April Note: Data is seasonally adjusted. Source: Bureau of Labor Statistics By Ella Koeze Lydia DePillis Employers added 253,000 jobs in April, the Labor Department reported Friday, in a reversal of the cooling trend that had marked the first quarter and was expected to continue. The unemployment rate was 3.4 percent, down from 3.5 percent in March, and matched the level in January, which was the lowest since 1969. The higher-than-forecast job gain complicates the Federal Reserve’s potential shift toward a pause in interest rate increases. Chair Jerome H. Powell said on Wednesday that the central bank might continue to raise rates if new data showed the economy wasn’t slowing enough to keep prices down." + ] + }, + { + "question": "When is the end date for the federal PHE for COVID-19?", + "gt_answer": "May 11", + "gt_reference": [ + "To ensure an orderly transition, we have been working for months so that we can continue to meet the needs of those affected by COVID-19. Even beyond the end of the COVID-19 PHE, we will continue to work to protect Americans from the virus and its worst impacts by supporting access to COVID-19 vaccines, treatments, and tests, including for people without health insurance. We will continue to advance research into new, innovative vaccines and treatments through an investment of $5 billion in Project NextGen, a dedicated program to accelerate and streamline the rapid development of the next generation of vaccines and treatments, including investments in research, development, and manufacturing capacity and advancing critical science. And we are continuing to invest in efforts to better understand and address Long COVID and to help mitigate the impacts. What will not be affected by the end of the COVID-19 PHE: The Administration’s continued response to COVID-19 is not fully dependent on the emergency declaration for the COVID-19 PHE, and there are significant flexibilities and actions that will not be affected when we transition from the current phase of our response on May 11. Access to COVID-19 vaccinations and certain treatments, such as Paxlovid and Lagevrio, will generally not be affected. To help keep communities safe from COVID-19, HHS remains committed to maximizing continued access to COVID-19 vaccines and treatments." + ] + }, + { + "question": "What is the name of Microsoft's ai assistant in office?", + "gt_answer": "Copilot", + "gt_reference": [ + "Microsoft 365 Copilot enabled access for a select group of customers to demonstrate what the new AI office assistant can do. Soon you could use it too! The Copilot writes content based on a few prompts to make your job easier. For example, ask for suggestions for your next meeting on Word and Copilot would list a few ideas. The new MS tool becomes part of every Microsoft 365 app you use every day: Word, PowerPoint, Excel, Outlook, Teams and others. A tool to help unleash creativity, uplevel skills, and unlock productivity—the new Microsoft 365 Copilot. More on AI for work from @CNNBusiness: https://t.co/VF6yWng8YE Microsoft 365 Copilot adds the power of generative AI to your online workplace. For example, it would allow MS Word to write, edit and summarize your text. Meanwhile, you can use Copilot in PowerPoint to turn ideas into a designed presentation. For example, ask for a slide show related to AI assistants and it will create corresponding slides. It adds text descriptions and creates custom designs based on your topic. Excel with Copilot can also analyze data, identify trends and create data visualizations within minutes. Microsoft 365 Copilot manages your Outlook Inbox so you spend more time communicating with customers and colleagues. The AI tool improves meetings by providing “real-time summaries and action items” in the context of conversations." + ] + }, + { + "question": "What is the name of Google's AI image editing tool?", + "gt_answer": "Magic Editor", + "gt_reference": [ + "In addition to new smart devices, Google teased a new AI-enhanced Magic Editor tool at this year’s annual I/O conference. Though we only got a sneak peek, the results are impressive and prove that an era of advanced image manipulation for the masses isn’t far off, thanks to AI. Of course, AI-powered image editing is nothing new for Google. Handy tools like the Magic Eraser, for removing unwanted distractions, and Photo Unblur, for enhancing soft/blurred shots, have been around for several years. And Google has been leveraging AI to help organize and surface images in users’ libraries since 2015. But the Magic Editor takes AI-enhanced manipulation a leap further. Not only can users select and edit subjects (similar to using a mask in Lightroom/Capture One) but with a few taps of the screen you can easily scale and reposition subjects in the frame. The demo also shows the tool's ability to expand an image’s composition through generative AI. Of course, the results aren’t perfect. In the example with the balloons, for instance, the portion of the bench created using generative AI shows a noticeable red tint. Similarly, in the waterfall demo, the area under the subject’s arm shows an obvious repeating pattern in the rocks. These criticisms aside, the power of this tool to dramatically reshape image editing on the fly can’t be understated." + ] + }, + { + "question": "when is chatgpt app for ios launched?", + "gt_answer": "May 18", + "gt_reference": [ + "May 18, 2023 ... Since the release of ChatGPT, we've heard from users that they love using ChatGPT on the go. Today, we're launching the ChatGPT app for iOS." + ] + }, + { + "question": "What is the date of the 2023 NBA Draft?", + "gt_answer": "June 22", + "gt_reference": [ + "As the remaining title contenders continue their NBA Playoff runs, several other teams are preparing for the NBA Draft. This year's event could transform the fate of a few organizations. Victor Wembanyama is the biggest star in this class, but talented prospects like Scoot Henderson and Brandon Miller could also become franchise cornerstones. With the NBA Draft Lottery locking in the top 14 picks, the entire order for the 2023 draft has been finalized. When will the next generation of players hear their names called? Here is everything you need to know about the 2023 NBA Draft. MORE: Biggest winners and loser from NBA Draft Lottery The 2023 NBA Draft will take place on Thursday, June 22. Teams will make selections for both Round 1 and Round 2 that night. The first round will begin around 8 p.m. ET. Fans in Australia can watch the draft starting at 10 a.m. AEST on Friday, June 23. The 2023 NBA Draft will be shown on ABC (Round 1) and ESPN (Round 1 and Round 2). The event can also be streamed on Sling TV. Fans in the U.S. can watch the NBA Draft and playoffs on Sling TV, which is now offering $10 off your first month! Stream Sling Orange for $30 in your first month to catch the lottery plus every playoff games on TNT, ESPN & ABC. Local regional blackout restrictions apply." + ] + }, + { + "question": "What is the price of the Apple Vision Pro headset?", + "gt_answer": "$3,499", + "gt_reference": [ + "By Adi Robertson, a senior tech and policy editor focused on VR, online platforms, and free expression. Adi has covered video games, biohacking, and more for The Verge since 2011. Apple has announced an augmented reality headset called Apple Vision Pro that “seamlessly” blends the real and digital world. “It’s the first Apple product you look through, and not at,” CEO Tim Cook said of the device, which looks like a pair of ski goggles. As rumored, it features a separate battery pack and is controlled with eyes, hands, and voice. It will start at $3,499 and launch early next year, starting in the US market with more countries coming later in the year. Vision Pro is positioned as primarily an AR device, but it can switch between augmented and full virtual reality using a dial. The device is controller-free, and you browse rows of app icons in an operating system called visionOS by looking at them. You can tap to select and flick to scroll, you can also give voice commands, and Apple says “hundreds of thousands of familiar iPhone and iPad apps” will automatically work that way. On top of that, the headset supports Bluetooth accessories, including Magic Keyboard and Magic Trackpad, and lets you connect your Mac to use inside the headset. Downward-facing cameras can capture your hands even if they’re resting low on your body." + ] + }, + { + "question": "What is the name of Apple's headset?", + "gt_answer": "Vision Pro", + "gt_reference": [ + "CUPERTINO, California, June 5 (Reuters) - Apple (AAPL.O) on Monday unveiled a costly augmented-reality headset called the Vision Pro in its riskiest bet since the introduction of the iPhone more than a decade ago, barging into a market dominated by Meta (META.O). At its annual developer conference, Apple also introduced a raft of new products and features, including a 15-inch MacBook Air, a powerful chip called M2 Ultra, improvements to its iOS software and a long-awaited tweak to prevent its autocorrect from annoyingly changing a common expletive to \"ducking\". The Vision Pro will start at $3,499, more than three times the cost of the priciest headset in Meta's line of mixed and virtual reality devices. The headset will test a market crowded with devices that have yet to gain traction with consumers and put it in direct competition with Facebook-owner Meta after years of clashes between the companies over issues like user privacy and control of developer platforms. Apple emphasized the novelty of the headset's augmented reality features as well as the sports and entertainment partnerships it would offer. The device will use a new chip called R1 that will process information from its sensors in less time than the blink of an eye, Apple said. But the announcements failed to excite Wall Street, which had bid up Apple shares to a record high ahead of the launch. The stock was largely flat in post-market trading." + ] + }, + { + "question": "Who is the CEO of Maven?", + "gt_answer": "Kate Ryder", + "gt_reference": [ + "McGirt: Well, in my own defense, I was at an ESG conference, and I came back with some amazing potential guests for Leadership Next. So you should consider it a scouting mission, and I promise you it’s going to be value added. Murray:  We should go to Aspen more often, but let’s talk to Kate. [Music] Murray: Kate, let me first of all, just welcome you, thank you for being here, and get you to tell us a little bit about what Maven is and how you got started. Kate Ryder: Thank you so much for having me. Thrilled to be here in Aspen. So I founded Maven in 2014 because I saw firsthand a lot of the gaps in the in the women’s and family health care model. And so, you know, you think about it, about 40% of new moms are dropping out of the workforce after they have kids, and the entire LGBTQ community has been left out of the family-building model, because there weren’t benefits for things like IVF for adoption or surrogacy. We have the highest rate of maternal mortality in the developed world, and we’re also the richest country that spends the most on health care. And so you know, what Maven does is we really fill in all of these very distinct gaps through a virtual care and financial support platform. So we have the largest telehealth network and women’s and family health." + ] + }, + { + "question": "Who won the U.S. Open golf tournament 2023?", + "gt_answer": "Wyndham Clark", + "gt_reference": [ + "The 2023 United States Open Championship was the 123rd U.S. Open, the national open golf championship of the United States. It was a 72-hole stroke play played from June 15–18 on the North Course of Los Angeles Country Club in Los Angeles, California. It was the first U.S. Open to be played in Los Angeles since Riviera Country Club hosted the tournament in 1948.[1] Wyndham Clark, who had never finished better than 75th in a major championship and had missed the cut in his previous two U.S. Opens, shot a final-round 70 to finish at 10-under-par for the tournament and hold off four-time major champion Rory McIlroy by one shot for his first career U.S. Open and major championship .[2] Rickie Fowler and Xander Schauffele both broke the U.S. Open scoring record by shooting 62 (−8) in the first round. Fowler, who was tied with Clark for the lead at the start of the final round, ended up tied for fifth place, while Schauffele finished 10th.[3] On July 22, 2015, the United States Golf Association (USGA) announced that Los Angeles Country Club was selected to host the 123rd U.S. Open in June 2023. The USGA had made overtures to the club for at least 26 years." + ] + }, + { + "question": "What is the start date of Prime Day 2023?", + "gt_answer": "July 11", + "gt_reference": [ + "Get access to essential strategic content, in-depth reports, industry intelligence, and exclusive data. Get access to essential strategic content, in-depth reports, industry intelligence, and exclusive data. Get access to essential strategic content, in-depth reports, industry intelligence, and exclusive data. Get access to essential strategic content, in-depth reports, industry intelligence, and exclusive data. Sign Into Digital Commerce 360 Forgot your password? Amazon announced its first Prime Day of 2023 will take place on Tuesday, July 11, and Wednesday, July 12, confirming predictions from industry experts. Sellers had earlier been told they needed to submit their deals for the first Amazon Prime Day of 2023 by April 28th. Amazon.com Inc. is planning a second Prime Day for 2023, according to marketplace sellers who say they have been notified of an August 11 deadline to submit deals for the event. Amazon is No. 1 in the Top 1000. The database is Digital Commerce 360’s ranking of the largest North American online retailers. Amazon is also No. 3 in the Online Marketplaces database, which ranks the 100 largest global marketplaces. Prime Day is now Amazon’s biggest sale of the year. It is usually held during the summer months. In 2022, it was July 12 and July 13. The annual two-day deals event is for Prime members only." + ] + }, + { + "question": "Who was the MVP of Super Bowl 2022?", + "gt_answer": "Cooper Kupp", + "gt_reference": [ + "Play Now Football Pick'em Play Now College Pick'em See who to add and drop PGA Tour and beyond Fittingly, Super Bowl LVI was won by the NFL's most prolific offensive player. Cooper Kupp's 1-yard touchdown with 1:25 left served as the winning score in the Rams' 23-20 victory over the Bengals. Kupp was named Super Bowl MVP after catching 8 of 10 targets for 92 yards and two touchdowns. Kupp is the eighth receiver to win Super Bowl MVP.  Kupp's 11-yard touchdown reception early in the second quarter gave the Rams a 13-3 lead. He caught four passes for 34 yards on the Rams' game-winning drive. Kupp also converted a fourth-and-1 with an 8-yard run on a jet sweep with five minutes left.  \"I don't feel deserving fo this,\" Kupp said on the podium after the game, via NBC Sports. \"God is just so good. I'm just so thankful for the guys I get to be around.\"  COOPER KUPP FOR THE LEAD!📺: #SBLVI on NBC pic.twitter.com/PTY7GWXBig Kupp recently became the first wide receiver to receive a regular season MVP vote since Randy Moss in 1998." + ] + } +] diff --git a/examples/data/rag_bm/RGB_En/documents.txt b/examples/data/rag_bm/RGB_En/documents.txt new file mode 100644 index 000000000..349a87ff9 --- /dev/null +++ b/examples/data/rag_bm/RGB_En/documents.txt @@ -0,0 +1,600 @@ +However, the concert tour took place in honor of the 40th anniversary. The two might have aged since they first performed together but neither Carole King nor James Taylor have lost a beat in all these years!The concert film includes the following songs:(You Make Me Feel Like) A Natural WomanSomething in the Way She MovesSo Far AwayCarolina in My MindCountry RoadSmackwater JackWhere You Lead (lyrics changed up as the city they’re playing in replaces New York)Your Smiling FaceBeautifulShower The PeopleWay Over YonderSweet Baby James (this kicks off the second half of the film)Up on the RoofIt’s Too LateFire and RainI Feel the Earth MoveYou’ve Got a FriendHow Sweet It Is (To Be Loved by You)You Can Close Your EyesMexico (end credits)DIRECTOR: Frank MarshallFEATURING: Carole King, James Taylor, Danny Kortchmar, Peter Asher, Russ Kunkel, Leland SklarADDITIONAL MUSICIANS: Andrea Zonn, Arnold McCuller, Kate Markowitz, Robbie KondorCarole King & James Taylor: Just Call Out My Name premiered January 2, 2022, at 9:00pm ET/PT on CNN. The film will be available on demand via cable/satellite systems, CNNgo platforms, and CNN mobile apps, beginning Monday, January 3, through Sunday, January 16. +By Althea Legaspi Carole King and James Taylor perform their own hits — alongside harmonizing on each other’s songs — in the new trailer for concert documentary Carole King & James Taylor: Just Call Out My Name. The film premieres on Jan. 2 at 9:00 p.m. ET via CNN and will livestream via CNNgo. It will be available on demand from Jan. 3 through Jan. 9 via cable and satellite providers, CNNgo, and CNN mobile apps. The exclusive trailer includes archival photos from the first time they performed together in 1970 at the storied Troubadour, alongside King and Taylor being interviewed in July 2021 at the Southern New Hampshire University Arena in Manchester. The clip features setlist highlights from their 2010 Troubadour reunion tour, where they duet “It’s Too Late,” “Sweet Baby James,” and “You’ve Got a Friend.” King also delivers “So Far Away” and Taylor performs “Fire and Rain.” Directed by Frank Marshall and commissioned by CNN Films and HBO Max, the documentary showcases previously unseen performance footage from their 1970 Troubadour concert debut, the pair reprising that show for the West Hollywood venue’s own 50th anniversary in 2007, and several full song performances from their 2010 reunion tour. +The new CBS drama Good Sam is likely to draw viewers towards more shows that revolve around medical drama and family issues. Starring Jason Isaacs and Sophia Bush, Good Sam delves into the strenuous father-daughter relationship between Dr. Sam Griffith and Dr. Rob Griffith. Tensions increase as the duo also happen to work in the same hospital.  RELATED: 10 Medical Dramas That Are Better Than Grey's Anatomy Good Sam serves as an interesting watch for medical drama fans. So, it is natural for audiences to also check out other genre classics like Grey’s Anatomy and contemporary shows like The Good Doctor. At the same time, Good Sam’s complex family dynamics imply that viewers can also binge their way through some acclaimed “dysfunctional family dramas”. ABC's The Good Doctor's main character Shaun Murphy is a brilliant surgeon who relocates to a prestigious California hospital. Along with saving patient lives, he struggles to get over his troubled past and to counter his social insecurities. The show benefits greatly from Freddie Highmore’s committed performance as he emulates the optimistic nature of the lead character.  Fans of Good Sam must check out The Good Doctor for it shows how a doctor’s psyche can influence the operation. Even though Sam is still in her good-natured self, Rob is shown as a talented yet hot-headed surgeon. +Edwin Hodge injects some diversity into the main cast as Malcolm Kingsley, a member of the wealthy Kinglsey family who underwrites the funding for the hospital. As the hospital's new head of finance, he also serves as a love interest for Sam, who is just getting over a previous relationship. Sam's team of doctors (Skye P. Marshall, Omar Maskati, Davi Santos, Michael Stahl-David) round out the secondary characters, most notably Marshall, who plays Dr. Lex Trulie, her best friend hiding a huge secret. Overall, Good Sam riffs on what CBS is known for -- comforting problem-of-the-week dramas -- and adds a new level of spice and interest to the proceedings. Fans of the genre will undoubtedly want to go on the ride Good Sam has in store for them. Families can talk about familial relationships. What do you think about the relationships in the series? What do you think is keeping the Griffith family from being closer? How does Sam demonstrate great leadership? How does Sam provide compassion and empathy to her patients and fellow doctors? Why does Sam feel unappreciated? How did she prove herself in the show? How should Sam's father, Dr. Rob Griffith, treat his daughter? Research shows a connection between kids' healthy self-esteem and positive portrayals in media. That's why we've added a new "Diverse Representations" section to our reviews that will be rolling out on an ongoing basis. +The 2022 Citrus Bowl was a college football bowl game played on January 1, 2022, with kickoff at 1:00 p.m. EST and televised on ABC.[4] It was the 76th edition of the Citrus Bowl, and was one of the 2021–22 bowl games concluding the 2021 FBS football season. Sponsored by Vrbo, a vacation rental marketplace owned by the HomeAway division of Expedia, the game was officially known as the VRBO Citrus Bowl. In the first meeting between the two programs, the game featured the Kentucky Wildcats of the Southeastern Conference (SEC) and the Iowa Hawkeyes of the Big Ten Conference. Both teams received and accepted invitations on Sunday, December 5.[5] The Wildcats entered the Citrus Bowl with a 9–3 record (5–3 SEC) and a No. 22 ranking in the final CFP poll. Kentucky made its second Citrus Bowl appearance (2019). The Hawkeyes, winners of the Big Ten West Division, entered the Citrus Bowl with a 10–3 record (7–2 B1G) and a No. 15 ranking in the final CFP poll. Iowa also made its second Citrus Bowl appearance (2005). at Camping World Stadium • Orlando, Florida +Quad Wilson picked off Jack Albers and returned it 99 yards for a touchdown, putting a bow on the 2022-23 season to secure the Citrus Bowl victory, 63-7. © LSU Athletics, Louisiana State University, 2023. All rights reserved. / Privacy Policy / Terms of Service / Brand Guidelines / NCAA Infractions Decision +A hugely successful high school quarterback, he threw for over 5,300 yards and 59 touchdowns at North Florida Christian High School before spending the early part of his college career at FSU. However, it was at West Virginia where his playing career took off, leading the Big 12 in completion percentage in 2014 while becoming a semifinalist for the Davey O’Brien Award. A new addition to the Marshall coaching staff for the 2023 college football season, Jason Semore becomes the Thundering Herd’s defensive coordinator. He arrives in Huntington having spent the last season with Georgia Tech, the latest stop on a varied and successful coaching career that has seen him gain experience in multiple roles at several different levels of competition. A linebacker at Adams State from 2001-2005, Semore spent 2022 working with the Georgia Tech linebackers and was slated to become their special teams coordinator with responsibilities for nickel backs and safeties. Instead, he reprises a role he previously held at Valdosta State, Montana, and the Colorado School of Mines, in addition to co-DC duties at his alma mater. He has tasted success in each of those stints. Semore helped lead Colorado School of Mines to a 10-2 season, assisted Montana in achieving three consecutive winning seasons and top-ranked Big Sky defense, and his defense fueled a Valdosta State run to the DII title game in 2021. +by Andy Demetra (The Voice of the Yellow Jackets) Inside The Chart On The Map: The upbringing that makes newly minted special teams coordinator Jason Semore unlike almost any coach in Division I football You’ve read this story before. Kid grows up a small-town coach’s son. Follows his dad into the business.  Grinds his way up the coaching ladder, establishing his own success. That doesn’t make Jason Semore all that different from the scores of other coaches’ sons who populate the staffs around college football. After playing for his dad in high school, then lettering in college, Semore has spent the past 17 years hopscotching from Division II to FCS to FBS, from one side of the country to the other, from small-school coordinator to Power-5 analyst and now, finally, to linebackers coach at Georgia Tech. On Monday he was promoted to the Yellow Jackets’ special teams coordinator, a role he also held in 2015 at the University of Montana. But Semore’s background makes him unlike any coach’s son at the Division I level. Maybe any coach in Division I, period. And the answer lies innocuously at the top of his bio. Hometown: Ganado, Ariz. It’s an easy piece of information to gloss over, or skim past, or remain incurious about. Every coach and player has it listed obligatorily on their roster page. +The EV maker doesn't disclose U.S.-only sales figures but claims sales for the year were up an amazing 87 percent in a turbulent marketplace. Anyone who thinks the legacy automakers are catching Tesla in the electric-vehicle sales race should take a quick look at some recently released figures. Over the weekend, Tesla announced it delivered 308,600 vehicles in the fourth quarter of 2021. Model S and Model X EVs made up 11,750 of those deliveries, while the bulk—296,850—were Model 3 and Model Y deliveries. These numbers brought Tesla's 2021 full-year deliveries to 936,172 vehicles. The 936,000 vehicle deliveries represent an 87 percent increase from 2020, Reuters and other news sources noted, based on Tesla's announcement dated January 2, while the 306,600 deliveries for the quarter mean that Tesla delivered 71 percent more electric vehicles in the fourth quarter of 2021 than it did a year earlier. Reuters reportssemiconductor chipsTesla doesn't break out its deliveries by country, but its sales are strongest in Europe and China, the notes. Tesla itself called those two regions "important markets" in its last SEC filing, but the U.S. is still the region where Tesla makes the most money. In the third quarter of 2021, for example, an shows Tesla made more than $6 billion in revenue in the U.S., compared to $3. +AUSTIN, Texas, January 2, 2022 – In the fourth quarter, we achieved production of more than 305,000 vehicles and deliveries of over 308,000 vehicles. In 2021, we delivered over 936,000 vehicles. Thank you to all of our customers, employees, suppliers, shareholders and supporters who helped us achieve a great year.       *************** Our net income and cash flow results will be announced along with the rest of our financial performance when we announce Q4 earnings. Our delivery count should be viewed as slightly conservative, as we only count a car as delivered if it is transferred to the customer and all paperwork is correct. Final numbers could vary by up to 0.5% or more. Tesla vehicle deliveries represent only one measure of the company’s financial performance and should not be relied on as an indicator of quarterly financial results, which depend on a variety of factors, including the cost of sales, foreign exchange movements and mix of directly leased vehicles. Investor Relations Contact: ir@tesla. +Evo Entertainment Group has acquired 100 percent of the stock of Showbiz Cinemas in an all-cash deal. The companies did not disclose the full details of the acquisition. "Today is a monumental moment for our company and our industry,” said Mitch Roberts, founder and CEO of Evo Entertainment Group and 2022 Forbes 30 Under 30 honoree. “This transaction establishes Evo as the country’s largest operator of cinema-entertainment centers and paves the way for accelerated progress and innovation within a new era of cinema.” Roberts and Kevin Mitchell, CEO and founder of Showbiz Cinemas, represent multiple generations in the cinema business. Their pioneering of cinema entertainment centers has been a genuine success. Said Mitchell, "It is a wonderful time to entrust the company I started to a fourth-generation motion picture exhibitor and family member, because Showbiz Cinemas just had an all-time record-breaking holiday season! I am confident that Mitch’s leadership and Marbella’s capital strength will ensure a long and successful run for Showbiz, and I now look forward to exploring new ventures both in and out of the entertainment industry. +The acquisition represents the partnership’s first major move. The deal will result in a combined business with 16 venues in Texas, Florida, Oklahoma and Wyoming. Those locations serve over eight million customers annually with 148 screens, 108 bowling lanes, nine restaurants and bars, and a 3,000-capacity live music venue. Showbiz’s only Dallas-Fort Worth location is in Waxahachie. Its theaters combine movies with other entertainment, such as bowling or arcades. Roberts said the branding will not change for the Showbiz Cinemas locations. EVO said it will continue to expand in 2022, with new locations under construction. The company’s website shows upcoming locations in Dallas, Southlake and San Antonio. Roberts said the Southlake location will open this spring and the Dallas theater will debut this summer. Showbiz Cinemas just wrapped up a record-breaking holiday season, according to founder and CEO Kevin Mitchell. He’s also a former Cinemark executive and third-generation theater owner. “I am confident that Mitch’s leadership and Marbella’s capital strength will ensure a long and successful run for Showbiz,” he said in a statement. Paul O'Donnell, Business Editor. Paul directs the work of an award-winning staff covering business news in the nation's fourth largest metro region. He's been The News' business editor since 2015. Before that, he was editor-in-chief at the Dallas Business Journal and business editor at the Cleveland Plain Dealer. +Super Bowl LVI[12] was an American football game played to determine the champion of the National Football League (NFL) for the 2021 season. The National Football Conference (NFC) champion Los Angeles Rams defeated the American Football Conference (AFC) champion Cincinnati Bengals, 23–20. The game was played on February 13, 2022, at SoFi Stadium in Inglewood, California, the home stadium of the Rams, marking the second consecutive and second overall Super Bowl with a team playing and winning in its home stadium.[13][14][15][16] The Rams' victory was their second, first as a Los Angeles-based team, and first since winning 1999's Super Bowl XXXIV when they were based in St. Louis. Finishing with a 12–5 record, the Rams reached their fifth appearance after acquiring veteran quarterback Matthew Stafford, who had not won a playoff game in his previous 12 years with the Detroit Lions. The Bengals, who finished with a 10–7 record, were seeking their first Super Bowl title following several decades of losing seasons and playoff struggles. They won their first playoff game since 1990, ending the longest drought in the four major North American sports, en route to their third Super Bowl appearance and first since 1988's Super Bowl XXIII. +The Super Bowl 2023 stadium is ready to host the greatest show on turf. The United States of America: the land of the free, the Super Bowl and some of the greatest sports stadiums the world has ever seen. Brand new behemoths continue to spring up across the land with fresh, state-of-the-art stadiums generally favoured by the NFL to host the Super Bowl in their first couple of years after opening. Last year saw the SoFi Stadium in Los Angeles given a starring role after opening in 2020, while the Mercedes-Benz Arena in Atlanta and US Bank Stadium in Minneapolis have each been christened with the Super Bowl in recent times. The new Allegient Stadium in Las Vegas, home to the relocated Raiders, also opened in 2020 but is not scheduled to host the Super Bowl until 2024, meaning another relatively old stadium has leaped in to fill the gap. RadioTimes.com brings you everything you need to know about the Super Bowl stadium in 2023. The Super Bowl will be held in Glendale, Arizona this year. The area last hosted the Super Bowl in 2015, a relatively short space of time to host the event twice. State Farm Stadium – home of the Arizona Cardinals – will host the Super Bowl for the third time in history. It hosted the 2008 and 2015 Super Bowl games under the guise of University of Phoenix Stadium before State Farm assumed naming rights. +On February 21, 2022, Truth Social was released on Apple iOS,[98] reaching number one on the App Store's top charts.[99][100] Due to an extensive backlog of applicants, upon downloading the app, about 500,000 people who initially attempted to register as users were automatically waitlisted.[101][102][103] The app was installed 872,000 times during its first week, but a month later, new user signup had fallen to 60,000 per week. During that time, weekly visits to truthsocial.com fell from 6 million to fewer than 2 million.[104] Upon its launch, the British automotive solar power company Trailar complained Truth Social's app logo closely resembled its "T" logo.[105] The platform has been criticized for its poor performance at launch, with waitlisting users attempting to register and extended outages.[106] A day after its launch, The Washington Post described it as "a disaster".[101] A week after, Newsweek reported some early adopters were beginning to lose interest in the app due to low numbers of users and poor engagement, although others were willing to persevere with the app to see if things would improve.[107] The Truth Social platform suffered from severe and persistent problems with scalability at launch, limiting the platform's growth.[108][109] +With the Android app still unavailable, not a lot has actually changed since Truth Social launched on iPhone. However, there's a workaround. The Truth Social app is still not available to download on Android devices, although it is expected to arrive at some point in the near future. Truth Social is a much newer social media network compared to the likes of Facebook and Twitter, and it is one that promises to offer an open platform that doesn’t discriminate against users based on their political ideology. In fact, this political ideology promise is exactly why Truth Social came to be in the first place. Following the wide banning of Donald Trump across multiple social media network sites in 2021, an alternative service that didn’t censor its users was advertised as in the works. In February of 2022, that alternative service manifested in the launch of Truth Social on iPhone. At the time, Android support was understood to be coming, but there's was no clear indication of when. Related: Trump's Truth Social Posts On Other Platforms Delay, Explained In terms of Android support, not a lot has actually changed since then, and it remains unknown when Truth Social will be available to download from the Google Play Store. Comments last month from the Truth Social CEO confirmed the app was still en route, explaining that it was waiting on approval from Google before it can be made available via the Play Store. How long that approval process takes typically depends on the app. +Best Picture Drama: “The Power of the Dog” Jane Campion’s first film in more than a decade, “The Power of the Dog,” took home the most prestigious award of the night. “Power of the Dog” won Best Picture Drama, Best Director Motion Picture (Jane Campion), and Best Supporting Actor — Motion Picture (Kodi Smit-McPhee).  The acclaimed Netflix drama was the most-nominated movie along with “Belfast,” with each film earning seven nominations. Campion became the third woman to win in this category at Golden Globes. Best Television Series — Musical or Comedy: “Hacks” HBO Max’s “Hacks” won the main Television (Musical or Comedy) category and Best Actress — Comedy/Musical for star Jean Smart at the 79th Golden Globes Awards. While other shows in this category were also strong contenders, such as Apple TV+’s “Ted Lasso,” “Hacks” proved to be a favorite in this category with its first season. “Hacks can laugh all the way to the bank with this one,” announced the official Golden Globes account via Twitter. “Congratulations on taking home the #GoldenGlobe for Best Musical/Comedy Series.” Best Television Series — Drama: “Succession” HBO’s “Succession” was the big winner at this year’s Golden Globes, scooping three major categories. +On the TV side, ABC comedy Abbott Elementary — which boasted the most nominations of any show with five — built off of its Emmy momentum and went to the head of the class, winning best comedy honors and Golden Globes for Quinta Brunson and Tyler James Williams. An even bigger Emmy magnet, HBO's The White Lotus, enjoyed the privilege of converting its four nominations into two awards, one for best limited series and another for Jennifer Coolidge (who also delivered the funniest speech of the night). And then Game of Thrones prequel House of the Dragon added some surprise to the night by claiming the best drama award. Elsewhere, Tár's Cate Blanchett, Black Panther: Wakanda Forever's Angela Bassett, and Elvis' Austin Butler scored trophies, along with The Bear's Jeremy Allen White, Euphoria's Zendaya, and Yellowstone's Kevin Costner. In addition, Murphys were honored: Five-time Globe winner Ryan Murphy was given the Carol Burnett Award and Eddie Murphy was handed the Cecil B. DeMille Award. Find out who else had a Golden night by checking out our complete list of winners. +THE FLATS – Georgia Tech softball 2023 season and single-game tickets are now on sale and can be purchased HERE. Season tickets are located in the reserved chairback sections of Mewborn Field and cost $100 per seat. Season ticket members enjoy every game in the same seat for a discounted rate. Single-game tickets are also available as detailed below. More ticketing information, including the steps to become a member of the Mew Crew and the benefits of joining, can be found on the official Georgia Tech Softball Tickets page. Single-Game Pricing: Reserved Chairback: $5 Adult GA Bench: $3 Youth/Senior GA Bench: $2 Group (10+) GA Bench: $2 Standing room only tickets will be sold for $2 each if all other sections are sold out. Georgia Tech students and faculty/staff can receive free admission to regular season home games while seats remain available by showing a valid BuzzCard at the entrance. Tech’s 56-game 2023 regular season schedule is highlighted by 33 home games and four Atlantic Coast Conference series at Mewborn Field. The Yellow Jackets will also host three home tournaments, most notably the ACC/B1G Challenge, as well as a pair of SEC schools, including this season’s edition of Clean, Old-Fashioned Hate. The White and Gold are slated to face six ranked opponents throughout the year, hosting four of them for eight total games. +Georgia Tech students must meet one of the following criteria to be eligible to claim/purchase a student ticket for games at Bobby Dodd Stadium: The list of eligible students is provided to the GTAA by GT Registrar. Students who are deemed eligible may purchase student season tickets, however, if the Athletic Fee is not paid, season tickets will be removed from their account. Eligible students have two options for student tickets at Bobby Dodd Stadium: *Yellow Jacket Club Gold Members have two season-ticket options: 1) Register as part of a student organization, including Greek chapters; and 2) register and sit in the ‘SWARM’ block – the sections on each side of the Georgia Tech Marching Band. Seats are available first-come, first-served. 2022-2023 PricingRegular Student Membership – $15Gold Student Membership – $65 PURCHASE YELLOW JACKET CLUB MEMBERSHIP CLAIM FREE SINGLE-GAME TICKET For 2021-22 regular season home games Georgia Tech students only need to show their valid BuzzCard at the West Entrance of McCamish Pavilion for entry. Seats are available on a first-come, first-served basis with gates opening 1 hour prior to tipoff – no sign-up/registration needed unless otherwise mentioned for the game.* 200 courtside seats are reserved for Georgia Tech students and will be available on a first-come, first-served basis and will be given a wristband in order to gain access to the courtside seating. +The 2022 Winter Olympics (2022年冬季奥林匹克运动会), officially called the XXIV Olympic Winter Games (Chinese: 第二十四届冬季奥林匹克运动会; pinyin: Dì Èrshísì Jiè Dōngjì Àolínpǐkè Yùndònghuì) and commonly known as Beijing 2022 (北京2022), was an international winter multi-sport event held from 4 to 20 February 2022 in Beijing, China, and surrounding areas with competition in selected events beginning 2 February 2022.[1] It was the 24th edition of the Winter Olympic Games. Beijing was selected as host city in 2015 at the 128th IOC Session in Kuala Lumpur, Malaysia, marking its second time hosting the Olympics, and the last of three consecutive Olympics hosted in East Asia following the 2018 Winter Olympics in Pyeongchang County, South Korea, and the 2020 Summer Olympics in Tokyo, Japan. Having previously hosted the 2008 Summer Olympics, Beijing became the first city to have hosted both the Summer and Winter Olympics. +There were three different clusters of venues designed and constructed for the 2022 Winter Olympics, each respectively known as the Beijing Zone, the Zhangjiakou Zone, and the Yanging Zone.[16] Venues in the Beijing Zone exist in different conditions; some were recently constructed exclusively for the 2022 games, while the rest were renovated from the 2008 Summer Olympics or other existing sites.[17] The Beijing Zone of the 2022 Winter Olympics consisted of six competition venues and was where the Opening and Closing Ceremonies, for both the 2022 Winter Olympics and 2008 Summer Olympics, would take place.[17] Five ice events were held at the Olympic Green, the Capital Indoor Stadium and the Beijing Wukesong Sports Center, which had been some of the main venues of the 2008 Summer Olympics. The Big Air snowboarding and freestyle skiing events were held in a former industrial area in Shijingshan District, at Western Hills area.[18] Since the end of 2009, the Beijing Olympic Village apartments on the Olympic Green had been transformed into a residential area. There was therefore a need to build another Olympic Village on a smaller scale for the Winter Olympics. These new buildings are located in the southern area of Olympic Green on the neighbourhood of the National Olympic Sports Center and will serves as Chinese Olympic Committee residential complex for those athletes who will undergo training sessions at the nearby venues.[19] +The two Spanish giants will meet in the Spanish Super Cup final for the eighth time with Real Madrid having won six and losing once. Get match time in India. Defending champions Real Madrid will take on arch-rivals Barcelona in the Supercopa de Espana 2022-23 final at the King Fahd International Stadium in Riyadh, Saudi Arabia on Sunday.  The Spanish Super Cup, changed from a two-team format to a four-team football tournament in 2019-20, features the winners and runners-up of La Liga and Copa del Rey.  Barcelona are the most successful team at the Spanish Super Cup football tournament with 13 titles. However, the Blaugrana have lost six of their seven Super Cup finals against Real Madrid and are still to win a title after the new four-team format was introduced.  Real Madrid and Barcelona booked their places for the first El Clasico of 2023 by beating Valencia and Real Betis in the semi-finals, respectively.  Real Madrid, who are one shy of equalling Barcelona’s record of 13 Super Cup titles, won their semi-final 4-2 in the penalty shootout after Karim Benzema’s first-half goal from the spot was cancelled out by Valencia in the second-half.  Barcelona, meanwhile, took the lead twice against Real Betis through Robert Lewandowski and Ansu Fati but had to win the match through penalties. +“We knew it was a chance we had to take, we have lived through an era of changes at the club and in the dressing room, and this will reinforce us to keep fighting for more titles,” said Barca captain Sergio Busquets. “You know how [Gavi] competes, he’s very young. Most players at his age would be in the youth team, and he’s playing at an incredible level, giving assists, getting goals.” Madrid eliminated Barcelona in last season’s semi-finals, but the Spanish powerhouses had never met in the final of the revamped competition. The Super Cup used to be played between the Spanish league champion and the Copa del Rey winner. Now the runners-up in both competitions also participate. Madrid played as the league champion and Barcelona as the league runner-up. The current contract to play the Super Cup in Saudi Arabia runs through the 2024-25 season. +January 18, 2022 | Microsoft News Center REDMOND, Wash. and Santa Monica, Calif. – Jan. 18, 2022 – With three billion people actively playing games today, and fueled by a new generation steeped in the joys of interactive entertainment, gaming is now the largest and fastest-growing form of entertainment. Today, Microsoft Corp. (Nasdaq: MSFT) announced plans to acquire Activision Blizzard Inc. (Nasdaq: ATVI), a leader in game development and interactive entertainment content publisher. This acquisition will accelerate the growth in Microsoft’s gaming business across mobile, PC, console and cloud and will provide building blocks for the metaverse. Microsoft will acquire Activision Blizzard for $95.00 per share, in an all-cash transaction valued at $68.7 billion, inclusive of Activision Blizzard’s net cash. When the transaction closes, Microsoft will become the world’s third-largest gaming company by revenue, behind Tencent and Sony. The planned acquisition includes iconic franchises from the Activision, Blizzard and King studios like “Warcraft,” “Diablo,” “Overwatch,” “Call of Duty” and “Candy Crush,” in addition to global eSports activities through Major League Gaming. The company has studios around the world with nearly 10,000 employees. +The FTC, after failing to obtain injunctions to block the merger, formally withdrew its challenge in July 2023, and the CMA subsequently agreed to put the case on hold to negotiate with both companies. The deal is now expected to close by October 18, 2023. Activision Blizzard is one of the largest video game publishers in the world, with annual revenues of about $8.8 billion in 2021.[1] The company is composed of five business units:[2] Activision Publishing, Blizzard Entertainment, King,[3] Major League Gaming,[4] and Activision Blizzard Studios.[5][6] Among its assets are ownership of Call of Duty, Crash Bandicoot, and Spyro from Activision's studios; Warcraft, Diablo, StarCraft, and Overwatch from Blizzard Entertainment; and Candy Crush Saga from King.[7][8] Microsoft is a dominant player in computing software, and also makes the Xbox line of game consoles and operates Xbox Game Studios, a collection of developers to create first party titles. In March 2021, Microsoft closed on its acquisition of ZeniMax Media and Bethesda Softworks for an estimated $7.5 billion, making it one of the largest video game acquisitions by that time.[9] On January 18, 2022, Microsoft announced its intent to acquire Activision Blizzard for $68.7 billion in an all-cash deal, or approximately $95 per share. +A star-studded lineup of Super Bowl LVII commercials is set to hit our screens on Sunday. While millions of people will be tuning into the intense NFL action between the Kansas City Chiefs and Philadelphia Eagles, a large sum will be even more excited for the iconic commercials. The cost for a 30-second commercial during this year’s Super Bowl is reaching a record-high amount, with advertisers hoping their ad makes a bang for the viewers. Ahead of the game, let’s take a look at the costs of a Super Bowl commercial in 2023 and more history about the big game day ads: In 2023, a 30-second Super Bowl commercial costs a record-high average of $7 million, according to Forbes. In 2022, a 30-second commercial slot during the Super Bowl was $6.5 million, which was an increase from the $5.5 million asked for in 2021. Here were the prices in some recent previous years:  Connecting you to your favorite North Texas sports teams as well as sports news around the globe. There's a reason commercials during the Super Bowl have to refer to the event as the "Big Game" rather than "Super Bowl LVII." The reason is that the term has been a registered NFL trademark since 1969, requiring commercials, radio hosts and other specific media personnel to pay to use the official name. +The pandemic had a minor but noticeable effect as the cost of a 30-second spot in the 2021 Super Bowl was $5.5 million – down $100,000 from the pre-pandemic high of $5.6 million.  GET FOX BUSINESS ON THE GO BY CLICKING HERE YouTube announced that it will bring back the AdBlitz for the 16th year running, noting that 72% of fans rewatch at least some football commercials. AdBlitz already has several 2022 teaser ads to provide a taste of what will be the most expensive advertisement offering ever.  Quotes displayed in real-time or delayed by at least 15 minutes. Market data provided by Factset. Powered and implemented by FactSet Digital Solutions.  Legal Statement. This material may not be published, broadcast, rewritten, or redistributed. ©2023 FOX News Network, LLC. All rights reserved. +(SSC/Alan Alabastro) The Seattle Sports Commission hosted the 87th annual Seattle Sports Star of the Year Awards Show at the Westin in Seattle, Wash. on May 26, 2022. (SSC/Alan Alabastro) The Seattle Sports Commission hosted the 87th annual Seattle Sports Star of the Year Awards Show at the Westin in Seattle, Wash. on May 26, 2022. (SSC/Alan Alabastro) The Seattle Sports Commission hosted the 87th annual Seattle Sports Star of the Year Awards Show at the Westin in Seattle, Wash. on May 26, 2022. (SSC/Alan Alabastro) The Seattle Sports Commission hosted the 87th annual Seattle Sports Star of the Year Awards Show at the Westin in Seattle, Wash. on May 26, 2022. (SSC/Alan Alabastro) The Seattle Sports Commission hosted the 87th annual Seattle Sports Star of the Year Awards Show at the Westin in Seattle, Wash. on May 26, 2022. (SSC/Alan Alabastro) The Seattle Sports Commission hosted the 87th annual Seattle Sports Star of the Year Awards Show at the Westin in Seattle, Wash. on May 26, 2022. +The spotlight will shine on the best high school student athletes and coaches in the country at the 2023 USA TODAY National High School Sports Awards! The national show is a culmination of numerous regional and statewide award programs from across the country. Hosted by Christine Brennan and Cydney Henderson of USA TODAY Sports, and Ryan O’Leary and Barrett Fontana of USA TODAY NETWORK Ventures, this video podcast-style production by Ventures Events will announce more than 35 awards and feature stories of high school athletics from across the country. Tune in to see who will be named the nation’s best at 8 p.m. EDT this Sunday, July 30, right here on the Sports Awards website, YouTube, Facebook Watch, Spotify, or the USA TODAY channel available on most streaming services. LATEST UPDATE: The 2023 USA TODAY National High School Sports Awards show premieres this Sunday, July 30, at 8 p.m. EDT. Don’t miss it! Day(s) : Hour(s) : Minute(s) : Second(s) Click the video title or ‘Watch on YouTube’ below to see a preview of the show. Then, click ‘Notify Me’ to receive a YouTube notification when the 2023 USA TODAY National High School Sports Awards premiere this Sunday at 8 p.m. EDT! Below are the sports and awards that are part of the National USA TODAY High School Sports Awards. +January 21, 2022 Ford Greene, Ralph Long Jr., and Lawrence Williams, Georgia Tech’s first Black students, and Ronald Yancey, Tech’s first Black graduate, will receive the 2022 Ivan Allen Jr. Prize for Social Courage. The Ivan Allen Jr. Prize for Social Courage was established in 2010 to honor Tech alumnus and former Atlanta Mayor Ivan Allen Jr. Funded in perpetuity by a grant from the Wilbur and Hilda Glenn Family Foundation, the prize includes a $100,000 stipend for recipients. The inaugural prize was awarded in March 2011. It recognizes exemplary, courageous leaders — those who, like Mayor Allen, take on personal risks in an effort to improve the lives of others,” said Georgia Tech President Ángel Cabrera. “With great determination, Ford Greene, Ralph Long Jr., Lawrence Williams, and Ronald Yancey withstood hazards and adversity of every kind to prove to the world that Black students had the right to study at Georgia Tech, paving the way for the thousands of Black Yellow Jackets who have earned their degrees here since.” Greene, Long, and Williams, dubbed the “three pioneers” in the Harrison Square sculpture that depicts them on their first day at Tech, began classes in the fall of 1961. And, although their arrival didn’t elicit violence as it had at other southern universities, it was not easy. +Peterson lauded Nunn for courage and commitment to his own moral compass, for standing up for his beliefs, and for enacting meaningful and sustainable solutions for making the world a better, and more peaceful place.[4] The Ivan Allen Jr. Prize for Social Courage was established in 2010 by the Georgia Institute of Technology. The international award honors individuals whose life and work embody the moral courage personified by former Atlanta Mayor Ivan Allen Jr.[14] The Prize underscores the Institute’s mission to improve the human condition by recognizing those around the globe who, like Mayor Allen, have risked everything to stand up for moral principle and have made a positive difference in the world.[15] The Prize is funded in perpetuity by a grant from the Wilbur and Hilda Glenn Family Foundation.[14] The prize's forerunner was the Ivan Allen Jr. Prize for Progress and Service, which was awarded annually from 2001–2010 by the Georgia Tech.[14] The nominating committee is responsible for assessing candidates who meet the requirements of the prize, demonstrating social courage in adverse circumstances. Each year after deliberation, the committee submits a nominee to the president of the Georgia Institute of Technology, who makes the final selection. Joseph R. Bankoff, Chair, President & CEO, Woodruff Arts Center; Susan E. Eisenhower, Chairman Emeritus, The Eisenhower Institute, United States Department of Energy, Blue Ribbon Commission on America's Nuclear Future; Dr. +12] In January 2022, The Verge reported that Google was building an AR headset which used "outward-facing cameras to blend computer graphics with a video feed of the real world", internally codenamed Project Iris and being developed in a highly secretive and secure facility located in the San Francisco Bay Area. Overseen by Bavor, the headset was to be powered by the Android operating system as well as a custom system on a chip akin to Tensor, expected to launch in 2024 alongside Project Starline. Other key people named as part of the project include Shahram Izadi, Eddie Chung, Scott Huffman, Kurt Akeley, and Lucovsky.[13] An early prototype of the headset bore a close resemblance to the North Focals.[14] In March, The Information reported that Google would acquire Raxium, an AR hardware startup, for approximately $1 billion, and would continue to make further acquisitions to assist in their AR and mixed reality (MR) work.[15] The acquisition was completed a month later.[16] In May 2022, Google unveiled a different version of Iris resembling eyeglasses with live translation capabilities during the 2022 Google I/O keynote.[14][17][18] The company began publicly testing these prototypes across the U.S. in August,[19] before expanding into Canada in October.[20] According to Business Insider, Google executives' constantly changing strategy for Project Iris frustrated employees. +Besides, the Google Employee Clay Bavor that lead the Cardboard; DayDream VR as well as the recent big-time project of the company; Project Starline is working for this upcoming project. Although, the release of this project is slated until 2024 which gives an ample time slot of two years for research and development. The project along with Clay Bavor includes up to 300 more employees working on the Iris AR headsets along with the Google Assistant creator Scott Huffman. Moreover, the list goes on featuring Google AR operating systems senior director Mark Lucovsky; ARCore manager Shahram Izadi, and former light-field camera startup Lytro CTO Kurt Akeley. There’s no correct information regarding the branding of this gadget as a Pixel device or not as of now. Be the Change! Spread the word and help us create better tech content Kaushik Battu A techie who is curious about the latest tech updates around the world. Have a keen interest in Automobiles and an occasional gamer. The comments section is to assist our readers with any inquiries. Each comment undergoes rigorous moderation before it can be approved for publication.Your name and comment will be publicly visible. Your email address will not be published.Required fields are marked * Comment * Name * Email * Website Save my details (Name, Email, and Website) in browser and automatically add them when I visit next time. +Meta Unveils AI Supercomputer for the Metaverse This item in japanese Feb 01, 2022 2 min read by Daniel Dominguez Meta has unveiled its AI Research SuperCluster (RSC) supercomputer, aimed at accelerating AI research and helping the company build the metaverse. The RSC will help the company build new and better AI models, working across hundreds of different languages, and to develop new augmented reality tools. Developing the next generation of advanced AI will require powerful new computers capable of quintillions of operations per second. Meta’s researchers have already started using RSC to train large models in natural-language processing (NLP) and computer vision for research, with the aim of one day training models with trillions of parameters across Meta’s businesses, from content-moderation algorithms used to detect hate speech on Facebook and Instagram, to augmented-reality features that will one day be available in the metaverse. RSC can train models that use multimodal signals to determine whether an action, sound or image is harmful or benign. Meta claims this will not only help keep people safe on Meta’s services today, but also in the metaverse. +Meta Unveils New AI Supercomputer Listen (2 min) Meta Unveils New AI Supercomputer Listen (2 min) This copy is for your personal, non-commercial use only. Distribution and use of this material are governed by our Subscriber Agreement and by copyright law. For non-personal use or to order multiple copies, please contact Dow Jones Reprints at 1-800-843-0008 or visit www.djreprints.com. https://www.wsj.com/articles/meta-unveils-new-ai-supercomputer-11643043601 By Jan. 24, 2022 12:00 pm ET Listen (2 min) Meta Platforms Inc. said Monday that its research team built a new artificial intelligence supercomputer that the company maintains will soon be the fastest in the world. Copyright ©2023 Dow Jones & Company, Inc. All Rights Reserved. 87990cbe856818d5eddac44c7b1cdeb8 Continue reading your article witha WSJ subscription Already a subscriber? Sign In WSJ Membership Customer Service Tools & Features Ads More Dow Jones Products WSJ Membership Customer Service Tools & Features Ads More Copyright ©2023 Dow Jones & Company, Inc. All Rights Reserved This copy is for your personal, non-commercial use only. Distribution and use of this material are governed by our Subscriber Agreement and by copyright law. For non-personal use or to order multiple copies, please contact +We will continue to provide more information about the transition to the digital SAT Suite of Assessments throughout 2023 and early 2024. We are making a full transition to digital, so once we begin administering the SAT Suite digitally we will no longer offer a paper and pencil version of the tests. Though we will continue to support students who test with accommodations that require a paper and pencil test. That means:   Read more Students will be able to register for the first digital SAT administrations at international test centers starting in fall 2022. We’ll share more information about registration and administration dates later this year. We’re administering the digital SAT first at international test centers in spring 2023. It will then be offered in the U.S. beginning in spring 2024. Most students who take the SAT do so for the first time in the spring of their junior year. So, for students testing internationally, those in the class of 2024 will be the first to take the digital SAT. In the U.S., students in the high school class of 2025 will be the first class to take the digital SAT.  Students everywhere will take the digital PSAT 8/9 and PSAT/NMSQT starting in fall 2023. They will take the PSAT 10 starting in spring of 2024.   Read more +01/25/2022 83% of Students Say They Want Option to Submit Scores in College Applications College Board New York — College Board announced today that the SAT® Suite of Assessments will be delivered digitally. In November 2021, College Board piloted the digital SAT in the U.S. and internationally; 80% of students responded that they found it to be less stressful and 100% of educators reported having a positive experience. While the transition to digital will bring a number of student- and educator-friendly changes, many important features of the SAT Suite (SAT, PSAT/NMSQT®, PSAT™ 10, PSAT™ 8/9) will stay the same. The SAT Suite will continue to measure the knowledge and skills that students are learning in high school and that matter most for college and career readiness. The SAT will still be scored on a 1600 scale, and educators and students can continue to track growth across the SAT Suite of Assessments over time. The assessments will continue to be administered in a school or in a test center with a proctor present—not at home. Students will still have access to free practice resources on Khan Academy. And students taking the SAT Suite will continue to connect to scholarships and the College Board National Recognition Programs. +What may be the biggest Paralympic Winter Games in history is coming our way in March 2022. Get up to speed on when they're happening, what sports are being contested and more. The 2022 Winter Paralympics begin on March 4, 2022, and will be shown on NBC, Peacock, USA Network, Olympic Channel, NBCOlympics.com and the NBC Sports app. The 2022 Paralympic Winter Games will take place from Friday, March 4 - Sunday, March 13. The 2022 Winter Paralympics will feature a maximum of 736 Paralympians across 78 medal events. In addition to having 39 medal events for men, 35 events for women and 4 mixed events, there will be a maximum of 222 slots available for women. Paralympians will compete across six different Paralympic sports at the 2022 Winter Paralympics --  Alpine Skiing, Biathlon, Cross-Country Skiing, Sled Hockey, Snowboarding and Wheelchair Curling. Five events are on the Alpine Skiing program (Downhill, Super-G, Super Combined, Giant Slalom, Slalom) across three competition categories (standing, sitting and vision-impaired). Athletes combine speed and agility while racing down slopes at speeds of around 100km/h. +The 2022 Winter Paralympics (Chinese: 2022年冬季残疾人奥林匹克运动会; pinyin: 2022 Nián Dōngjì Cánjí Rén Àolínpǐkè Yùndònghuì), commonly known as Beijing 2022 (Chinese: 北京2022), was an international winter multi-sport parasports event held in Beijing, China from 4 to 13 March 2022.[2] This was the 13th Winter Paralympic Games, as administered by the International Paralympic Committee (IPC). Beijing was selected as the host city for the 2022 Winter Olympics and Paralympics in 2015 at the 128th IOC Session in Kuala Lumpur, Malaysia; taking into account its hosting of the 2008 Summer Paralympics, Beijing is the first city to have hosted both the Summer and Winter Olympics as well as the Summer and Winter Paralympics. This was the overall second Paralympics in China. It was the last of three consecutive Paralympics hosted in East Asia. These Games featured 564 athletes representing 46 National Paralympic Committees (NPCs), competing in 78 medal events across six sports. +What is the date and location of the 2022 Super Bowl, who will broadcast the game, what is the halftime show, and who are favorites to win? What is the location and date for the Super Bowl in 2022? After Super Bowl LV was held in Tampa Bay, where will the NFL’s flagship event be played in 2022, where will it be broadcast, who is performing the halftime show, and which teams are the favorite to square off? For years, the Super Bowl commences on the first Sunday in February. Yet, because money speaks louder than Stephen A. Smith with a microphone, the NFL expanded their season to 17 games. This pushes the league’s premier product to February 13, the latest in the game’s history. SoFi Stadium gets the nod to host the Super Bowl in 2022. SoFi sits in Inglewood, California, with a capacity of 70,000. However, it’s expandable to slightly over 100,000 for large events, such as a Super Bowl. It was supposed to host Super Bowl LV, but construction delays derailed that plan. Although Los Angeles originally won one of the bids from the cluster made available of LIII, LIV, and LV, they couldn’t host in 2021. The three Super Bowl hosts were chosen from a four-candidate pool. However, with the delay, all four locations got a spot. +Super Bowl 56 is now the only game left in the 2022 NFL playoffs. The AFC and NFC champions have been crowned, and the Bengals will now face the Rams to determine the NFL champion for the 2021 NFL season. The 2022 NFL playoffs proved as unpredictable as the regular season. Wild-card weekend largely went as expected, but after that, chaos reigned. Both of the No. 1 seeds, the Packers and Titans, lost their first game in the divisional round, as all but one of the underdogs won outright. The lone exception was the favored Chiefs, who mounted a game-tying drive with 13 seconds left before winning in overtime. The conference championship games were wild in their own right. Both the Bengals and Rams trailed by double digits in the second half of their wins over the Chiefs and 49ers. They mounted comebacks and as a result, the Bengals will have a chance to win their first Super Bowl in franchise history in their first appearance since 1989. Meanwhile, the Rams will have a chance to avenge their loss against the Patriots in the big game just three years ago. As unpredictable as the playoffs have been, the Super Bowl broadcast, location and date are set in stone. Here's everything you need to know about the big game in 2022, including when Super Bowl 56 will be played. +Advertisement Supported by Carolyn R. Bertozzi, Morten Meldal and K. Barry Sharpless were honored for their advances in “click chemistry,” which has played a role in treating and diagnosing illnesses. By Cora Engelbrecht, Euan Ward and Oliver Whang The 2022 Nobel Prize in Chemistry has been awarded to three scientists whose work harnessed the power of molecular interaction and introduced new, unobtrusive ways of studying the natural world. Carolyn R. Bertozzi of Stanford University, Morten Meldal of the University of Copenhagen and K. Barry Sharpless of Scripps Research will share the prize, which honors the scientists’ independent research that resulted in the development of what is known as click chemistry and bio-orthogonal chemistry. The three researchers will also split a prize of 10 million Swedish kronor, around $900,000. Their works have “led to a revolution in how chemists think about linking molecules together,” said Johan Aqvist, the chair of the Nobel Committee for Chemistry. In winning the award on Wednesday, Dr. Sharpless became only the fifth person to win two Nobels, having received the chemistry prize in 2001 for his work on chirally catalyzed oxidation reactions. The other two-time winners were Marie Curie, John Bardeen, Linus Pauling and Frederick Sanger. Dr. +A 1986 DNA model used by Aziz Sancar, who was awarded the 2015 Nobel Prize in Chemistry. © Nobel Media. Photo: Alexander Mahmoud “The said interest shall be divided into five equal parts, which shall be apportioned as follows: /- – -/ one part to the person who shall have made the most important chemical discovery or improvement…”  (Excerpt from the will of Alfred Nobel.) Chemistry was the most important science for Alfred Nobel’s own work. The development of his inventions as well as the industrial processes he employed were based upon chemical knowledge. Chemistry was the second prize area that Nobel mentioned in his will. The Nobel Prize in Chemistry is awarded by the Royal Swedish Academy of Sciences, Stockholm, Sweden. See all chemistry laureates or learn about the nomination process. More facts and figures © Johan Jarnestad/The Royal Swedish Academy of Sciences Ill. Niklas Elmehed © Nobel Prize Outreach The Nobel Prize medal. © Nobel Prize Outreach. Photo: Clément Morin. See the full list of prizes and laureates Model depicting a molecule that chemistry laureate Akira Suzuki successfully created by artificial means. Photo: Nobel Prize Museum The Nobel Prize in Chemistry: The development of modern chemistry Nobel Prizes in organic chemistry 1901-2010 The role of science and technology in future design +Super Bowl LVI[12] was an American football game played to determine the champion of the National Football League (NFL) for the 2021 season. The National Football Conference (NFC) champion Los Angeles Rams defeated the American Football Conference (AFC) champion Cincinnati Bengals, 23–20. The game was played on February 13, 2022, at SoFi Stadium in Inglewood, California, the home stadium of the Rams, marking the second consecutive and second overall Super Bowl with a team playing and winning in its home stadium.[13][14][15][16] The Rams' victory was their second, first as a Los Angeles-based team, and first since winning 1999's Super Bowl XXXIV when they were based in St. Louis. Finishing with a 12–5 record, the Rams reached their fifth appearance after acquiring veteran quarterback Matthew Stafford, who had not won a playoff game in his previous 12 years with the Detroit Lions. The Bengals, who finished with a 10–7 record, were seeking their first Super Bowl title following several decades of losing seasons and playoff struggles. They won their first playoff game since 1990, ending the longest drought in the four major North American sports, en route to their third Super Bowl appearance and first since 1988's Super Bowl XXIII. +172] Kupp was named the Super Bowl MVP, with eight receptions for 92 yards and two touchdowns, including three receptions and a touchdown (as well as one carry for seven yards) on the Rams final drive.[176][177] at SoFi Stadium, Inglewood, California 1Completions/attempts2Carries3Long gain4Receptions5Times targeted Super Bowl LVI featured seven officials. Continuing a practice instituted the previous year an alternate official was assigned for each position of an official on the field and the replay official. The numbers in parentheses below indicate their uniform numbers.[2] The 2022 Rams finished 5–12, setting the records for the most losses, lowest winning percentage (.294), and longest losing streak (six games) for a defending Super Bowl champion.[183][184] They were also the first defending Super Bowl champion to miss the playoffs since the 2016 Denver Broncos and first to have a losing record since the 2003 Tampa Bay Buccaneers. The 2022 Bengals tied their franchise-best 12–4 record[a] and clinched the franchise's first consecutive division title. They won a playoff game in consecutive seasons, another franchise first, before being defeated by the eventual Super Bowl LVII champion Kansas City Chiefs in the AFC Championship Game. +The women's 500 m competition in speed skating at the 2022 Winter Olympics was held on 13 February, at the National Speed Skating Oval ("Ice Ribbon") in Beijing.[1] Erin Jackson of the United States became the Olympic champion, winning her first Olympic medal. She was also the first female Black athlete to medal in speed skating.[2] Miho Takagi of Japan won the silver medal, and Angelina Golikova, representing the Russian Olympic committee, won bronze, also her first Olympic medal. The defending champion and the Olympic record holder was Nao Kodaira. The 2018 silver medalist, Lee Sang-hwa, retired from competitions. She was still the world record holder during the Olympics. The bronze medalist, Karolína Erbanová, retired as well. Golikova was the 2021 World Single Distances champion at the 500 m distance. Femke Kok and Olga Fatkulina were the silver and bronze medalist, respectively. Erin Jackson was leading the 2021–22 ISU Speed Skating World Cup at the 500 m distance with eight events completed before the Olympics, followed by Golikova and Kodaira. Golikova skated the season best time, 36.66 in Calgary on 11 December 2021.[3] Takagi in pair 4 became the early leader with 37.12. +Takagi is the second Japanese athlete to earn a medal in the women's 500m since 1998.  Speed skating returns on Tuesday with the men's and women's team pursuit semifinal and final rounds.  See the full speed skating schedule here. FULL RESULTS REPLAY Note: Some components of NBCOlympics.com may not be optimized for users browsing with Internet Explorer 11, 10 or older browsers or systems. © 2022 NBC Universal. All rights reserved. Any use, reproduction, modification, distribution, display or performance of this material without NBC Universal’s prior written consent is prohibited. Use of the Website signifies your agreement to the Terms of Use and Privacy Policy. ©IOC 2022 Official Results powered by Atos. Timing and results management by Omega. +Lost Ark was fully released in South Korea on December 4, 2019, and in North American, South American, and European regions on February 11, 2022, with Amazon Games serving as the global publisher.[16] Users that pre-purchased one of four founder's packs could play 3 days early on February 8, 2022.[17][18][19][20] The game was initially unavailable in Belgium and the Netherlands due to the countries' stringent loot box regulations,[21] with the latter later reversing its decision.[22] Within twenty-four hours of its release, Lost Ark became the second most played game on Steam.[23][24] In 2021, there were plans between Smilegate and game publisher HappyTuk [zh] to launch Lost Ark in Taiwan.[25] It was announced in 2023 that the release of Taiwanese servers has been delayed but not canceled.[26] Lost Ark received "generally favorable" reviews according to review aggregator Metacritic.[27] PC Magazine praised Lost Ark's combat, writing, "Abilities look good, sound sufficiently powerful, and feel great to use. You can’t help but feel like a combat god when you divekick a crowd, and blast fodder monsters into bloody chunks. +Den of Geek Ad Lost Ark is one of Steam's biggest hits in a long time, but what time will you be able to play the free-to-play version of the game? Lost Ark is quickly proving to be one of Steam’s biggest hits of 2022, but the game’s complicated release structure has many people wondering what time the red hot title will fully be released and when they’ll be able to join the millions that are already exploring the game that has a lot of people talking. Originally released (in full) in South Korea in 2019, Lost Ark is an MMORPG with Diablo-like ARPG combat. The game quickly grew a sizeable fanbase in that region thanks to its PvP mechanics, extensive content offerings, cinematic style, and all those other MMO tropes that usually encourage people to gleefully spend a few hundred hours of their lives playing them. So, while Lost Ark has been playable in South Korea and other regions for quite some time, those in the West who recently pre-ordered any of the Lost Ark Founder’s Pack on Steam were also able to start playing the game yesterday (February 8). You’re still able to start playing the game right now if you decide to buy a Founder’s Pack for the MMO via Steam (each of which comes with a variety of in-game rewards as well as early access to the title). +VTDigger News in pursuit of truth Stratton-trained Jessie Diggins powered through food poisoning Sunday to win her second medal at the 2022 Beijing Winter Games. The 30-year-old cross-country skier, who snagged bronze in the individual sprint Feb. 8, took silver in the 30-kilometer freestyle race. “It’s really emotional,” she told NBC. “That was one of the hardest things I’ve ever done in my whole life, especially because I had food poisoning 30 hours ago, which is why I thought I was going to die at the finish line. My legs were cramping the whole last 17 kilometers. I don’t know how I made it.” With her victory, Diggins, who won gold in the 2018 women’s team sprint, now owns an Olympic medal in every color. “It’s been an emotional roller-coaster, but I am so happy we made it to the end,” Diggins told reporters. “To have a medal in the sprint and the 30K are the ultimate bookends for me. I have been trying to be a good all-round athlete my whole life, so this has been really cool.” Diggins finished the final cross-country race of the Beijing Olympics in 1 hour 26 minutes 37 seconds, less than two minutes behind Therese Johaug of Norway and 50 seconds ahead of third-place finisher Kerttu Niskanen of Finland. +20: Diggins wins her second 2022 Olympic medal. About us Request a correction Submit a tip VTDigger's Brattleboro reporter. More by Kevin O'Connor +The Endgame is an American crime drama thriller television series that premiered on NBC on February 21, 2022. The series is created by Nicholas Wootton and Jake Coburn.[1][2] In May 2022, the series was canceled after one season.[3] In this heist drama, criminal mastermind Elena Federova squares off against principled FBI agent Val Turner.[4] On April 21, 2021, The Untitled Nick Wootton/Jake Coburn Project was given a pilot order by NBC. It was created by Nicholas Wootton and Jake Coburn who were expected to executive produce alongside Julie Plec and Emily Cummins. Wootton also wrote the pilot.[5] On September 21, 2021, NBC ordered The Endgame to series. Justin Lin and Andrew Schneider were added as executive producers. Lin also directed the pilot. Universal Television, Nicholas Wootton Productions, Jake Coburn Productions, Inc., My So-Called Company, and Perfect Storm Entertainment are the production companies involved with producing the series.[1] Upon the series order, Morena Baccarin, Ryan Michelle Bathé, Kamal Angelo Bolden, Costa Ronin, Noah Bean, Jordan Johnson-Hinds, and Mark D. Espinoza were cast in starring roles.[6] On November 18, 2021, Karl Josef Co and Massiel Mordan were added to the cast. +Those who enjoy the cat and mouse thriller The Endgame will be glad to know that there are a number of other similar television shows. The thriller genre is one that has been experiencing a bit of a golden age, and it seems that almost every network wants to have one of its own. It’s actually easy to see why the genre would continue to maintain its popularity. RELATED: 10 Thriller Movies With The Best Re-Watch Value More than almost any other genre, it aims to keep the audience on the edge of their seat, constantly wondering just what’s going to happen and how the mystery (or mysteries) will ultimately be resolved. The Endgame is the newest thriller to grace NBC, and it joins a large number of similar series, both on that network and elsewhere. There is much about The Blacklist that will appeal to those who also enjoyed The Endgame. Most notably, there is the central conflict between its two main characters, Raymond Reddington and Elizabeth Keene. It’s a densely woven series, with a number of enigmas and mysteries that it constantly keeps in the air. There’s no denying, though, that a major part of its appeal stems from James Spader’s scenery-chewing performance as the enigmatic yet compelling Reddington, and it remains one of his best roles. American popular culture has an enduring fascination with the figure of the drug lord, and there are few drug lords who are as renowned as Pablo Escobar. +He falsely claimed they had been "been facing humiliation and genocide perpetrated by the Kyiv regime".[74] Putin also falsely claimed that Ukraine's government were neo-Nazis under Western control, that Ukraine was developing nuclear weapons, and that NATO was building up military infrastructure in Ukraine to threaten Russia.[75] He said Russia sought the "demilitarisation and denazification" of Ukraine.[76] Putin said he had no plans to occupy Ukraine and supported the right of the Ukrainian people to self-determination.[75] Within minutes of Putin's announcement, Russian missiles struck targets throughout Ukraine,[77] and Russian troops invaded from the north, east and south.[78] Later an alleged report from Russia's Federal Security Service (FSB) was leaked, claiming that the intelligence agency had not been aware of Putin's plan to invade Ukraine.[79] The invasion began at dawn on 24 February,[72] with infantry divisions and armoured and air support in Eastern Ukraine, and dozens of missile attacks across Ukraine,[80][81] which reached as far west as Lviv.[82][83] The first fighting took place in Luhansk Oblast near Milove village on the border with Russia at 3:40 a.m. Kyiv time. +(GRIGORY SYSOYEV/AFP/Getty Images) Early in 2021, Zelenskyy cracked down on pro-Russian Ukrainian oligarchs, including Viktor Medvedchuk, a close friend of Putin. Subsequently, Putin deploys increasing numbers of troops near the Ukrainian border and publishes an article claiming that Russians and Ukrainians are “one people.” By December, tens of thousands of Russian troops are deployed to the borders and Putin issues demands to NATO and the United States. Among these demands is that Ukraine never be admitted to NATO – a request rejected by the Biden administration.  (Vadim Ghirda/AP) In 2014, the Ukrainian regions of Donetsk and Luhansk broke away from Ukraine, under the leadership of what the Ukrainian government considered to be Russian-backed terrorists. Following the breakdown of relations with NATO and the West in late February, Putin recognized these territories as independent states and sent troops in to “keep the peace.” (Emilio Morenatti/AP) Days after recognizing the breakaway territories, Russia launched a full-scale invasion of Ukraine. The invasion began in the eastern Ukrainian territory of Donbas. Zelenskyy declared martial law in Ukraine and officially broke diplomatic ties with Russia. Putin’s actions were condemned across the world and within Russia. The Associated Press After months of Russian encroachment, Ukrainian forces pushed the Russian military back, reclaiming over a thousand square miles. +“What this represented in them is this sort of golden light, or this golden aura, that’s specifically shown in their eyes. And this symbolises the blessing or the grace of the Erdtree. However, after a time, there were some individuals who lost this grace, and the light faded from their eyes. And these are what are known as the Tarnished.” The Tarnished were banished and exiled from the game’s world many years prior to when you – the player – will enter it. Since their ex-communication, the eponymous Elden Ring has of course been shattered and now the Tarnished are being summoned back to The Lands Between. So what are you waiting for? Get pre-ordering and we’ll see you on the other side… Elden Ring is released on February 25, 2022, hitting PS4, PS5, Xbox One, Xbox Series X, and PC. Keep an eye here for more updates. The world’s defining voice in music and pop culture: breaking what’s new and what’s next since 1952. When you purchase through links on our site, we may earn an affiliate commission. © 2023 NME is part of NME Networks. +Elden Ring was pitched at that year’s E3 as FromSoftware’s “largest game to-date,” and is said to be set in a “sprawling realm steeped in a rich and bloody history” crafted by Dark Souls creator Hidetaka Miyazaki and Game of Thrones creator George R.R. Martin. Miyazaki has said that Elden Ring will be “full of things that we weren’t able to do in the Dark Souls series.” The game will focus “more heavily on RPG elements,” Miyazaki said in an interview from 2019, and “will include a wide variety of weapons, magic, and ways to engage enemies, that make it possible to provide users with a style of gameplay and strategy that suits them.” FromSoftware fans have since been wracked with Elden Ring-information withdrawal, leading the community to fill the void with its own, self-created lore. Elden Ring is coming to PlayStation 4, PlayStation 5, Windows PC, Xbox One, and Xbox Series X next year. A weekly roundup of the best things from Polygon Please check your email to find a confirmation email, and follow the steps to confirm your humanity. Oops. Something went wrong. Please enter a valid email and try again. Please check your email to find a confirmation email, and follow the steps to confirm your humanity. Oops. Something went wrong. Please enter a valid email and try again. +3: Top 10 players Swiatek defeated en route to her first title of the season in Doha. The win is the second WTA 1000 title of her career.  0: Wins for Swiatek against Maria Sakkari (0-3) and Aryna Sabalenka (0-1) going into Doha. After beating them in back-to-back matches in Doha, she has not lost to either player since. 1: Set lost by Swiatek in Doha, which came to Viktorija Golubic in the first round.  2: Games lost in the final against Anett Kontaveit.  Champions Corner: Swiatek's 'surreal' Indian Wells 20: Wins for Swiatek in 2022 after defeating Maria Sakkari 6-4, 6-1 in the final, the most on tour.  2: Swiatek's new career-high ranking after winning her second-straight WTA 1000 title. 3: Comebacks from a set down for Swiatek in Indian Wells, doing so to beat Anhelina Kalinina, Clara Tauson and Angelique Kerber in her first three matches. She has had seven such comebacks in 2022. Prior to this season, she had just eight in her career.  11: Consecutive wins for Swiatek, tying then No. +The defending champion needed just 53 minutes to advance, 6-0, 6-1, on Wednesday at the Qatar TotalEnergies Open.ByTENNIS.comPublished Feb 15, 2023 copy_link Published Feb 15, 2023 Iga Swiatek returned to the site where her masterful rise in 2022 began with a 37-match win streak. And what a statement the world No. 1 made at the Qatar TotalEnergies Open in Doha Wednesday.On paper, Swiatek’s opening match presented intrigue. Across the net was Danielle Collins, one of the nine players to defeat the Pole during a banner 2022 season that saw her win eight titles and completely own her status as the 28th world No. 1 in WTA history.In reality, today's show was a solo act. Swiatek completely silenced Collins, serving up another bakery special with a 6-0, 6-1 victory."I'm happy that I was kind of composed and from the beginning till the end pretty focused and disciplined with tactics. So I didn't really let Danielle get into the rhythm," Swiatek told press. "I wanted to be aggressive. I'm pretty happy that I did that well." On paper, Swiatek’s opening match presented intrigue. +Published on 2/21/2022 at 11:04 AM The 2022 Beijing Winter Olympics have ended after over two weeks of some dramatic, inspiring, and comedic moments. The medals given out during these games were are made up of five rings and a center and are called "Tong Xin," which means "together as one." Unlike during the summer games in Tokyo just last year, the top gold medal winner of the winter games is not the most expected. Instead, the biggest gold medal winner of the 2022 Olympics is Norway. Overall, the nation took home significantly more medals than its competitors. Here's the breakdown of the five countries that won the biggest. Gold: 16Silver: 8Bronze: 13Total: 37 Gold: 6Silver: 12Bronze: 14Total: 32 Gold: 12Silver: 10Bronze: 5Total: 27 Gold: 4Silver: 8Bronze: 14Total: 26 Gold: 8Silver: 10Bronze: 7Total: 25 When it came to which countries won the most medals overall, Norway came in first. The Russian Olympic Committee (the unofficial team representing Russia's athletes) came in second with 32 medals. In third place was Germany, with 27 medals. Canada was next with 26 medals, and the US trailed behind with 25 medals. +The 32 medals won by Russian athletes mark the most medals ever won by Russian athletes in on Winter Olympics, regardless of representation. Host-nation China delivered its best Winter Olympics performance, scoring the third-most gold medals (9) but ranking 11th with 15 total medals. The nation's previous best total was 11 total medals, reached in both 2006 and 2010. For the United States, Nathan Chen, Jessie Diggins, Lindsey Jacobellis, Elana Meyers Taylor, and Madison Hubbell and Zach Donohue all secured multiple medals. Jacobellis is the only athlete to win two gold medals.  After PyeongChang saw a Winter Olympics-record 30 different National Olympic Committees win medals, 29 different NOCs claimed at least one medal in Beijing. We've come a long way since the inaugural Winter Olympics in 1924, when 16 events across six sports were decided in Chamonix, France. *It should be noted that ROC's gold medal in the team figure skating event is provisional and dependent upon the adjudication of Kamila Valieva's doping case. The U.S. finished second with Japan in third and Canada in fourth.  Note: Some components of NBCOlympics.com may not be optimized for users browsing with Internet Explorer 11, 10 or older browsers or systems. © 2022 NBC Universal. All rights reserved. +Chris Stapleton won the trophy for Male Vocalist of the Year at the 2022 CMA Awards, beating out fellow nominees Eric Church, Luke Combs, Cody Johnson and Morgan Wallen.  Visibly moved by the win, Stapleton used the opportunity to share his appreciation with those who have supported his career through the years. "This is a dream every minute we get to live this," he told the crowd during his acceptance speech. "I'm evidence that dreams come true all the time, so thank you, thank you to everybody." Stapleton's Wednesday night win marks the second consecutive year that he has won the Male Vocalist of the Year trophy, and his sixth win in the category overall. From 2015 to 2018, the singer had a hot streak as Male Vocalist, but Combs toppled his reign for two years in 2019 and 2020. Still, in 2022, Stapleton's steady traditionalism and consistency as a live act won the day. Together with his All-American Road Show, the singer has been one of country music's most prolific and reliable touring acts this year, and he is even the subject of a current Country Music Hall of Fame exhibit. Early in the year, he won three Grammy Awards, including Best Country Album for his late 2020 project, Starting Over. The 2022 CMA Awards aired live from Nashville's Bridgestone Arena on ABC. +And the 2022 CMA Award goes to ...? The 56th annual CMA Awards take place Wednesday inside Nashville's Bridgestone Arena, where "Country Girl" singer Luke Bryan co-hosts with NFL legend Peyton Manning. The star-filled night includes performances from Luke Combs, Miranda Lambert, Elle King with the Black Keys, Thomas Rhett and Katy Perry, Cody Johnson, Carly Pearce, Carrie Underwood and more. Top CMA Awards highlights:Six unforgettable moments from country music's biggest night The show kicked off at 7 p.m. CST on ABC. More:CMA Awards 2022: Viral clogger Zeb Ross crashes Peyton Manning and Luke Bryan's monologue From heavy-hitting country music hitmakers competing for Entertainer of the Year to newcomers looking for a breakout moment, we've got you covered with a list of winners and nominees for this year's so-called "biggest night" in country music — include a pair of honorees named hours before the show via ABC's "Good Morning America." Carly Pearce and Ashley McBryde won Musical Event of the Year for chart-topping duet "Never Wanted To Be That Girl," "GMA" correspondent Will Reeve announced early Wednesday during a free Keith Urban performance outside Bridgestone Arena. +The 2022 ACC men's basketball tournament (officially the 2022 New York Life ACC Men's Basketball Tournament, for sponsorship reasons) was the postseason men's basketball tournament for the 2021–22 Atlantic Coast Conference men's basketball season. It was held at the Barclays Center in Brooklyn, New York, during March 8–12, 2022.[1] The 2022 tournament was the 69th annual edition of the tournament. The Virginia Tech Hokies won the tournament, their first ACC Tournament title and only their second conference tournament title in program history, receiving the conference's automatic bid to the 2022 NCAA tournament. The Hokies were the second ACC champion to win four tournament games to secure the title and were the lowest overall seed to win the title.[2] All 15 ACC teams participate in the tournament. Teams were seeded by conference record, with a tiebreaker system to seed teams that finished with identical conference records.[3] Duke secured the regular season title and the first overall seed. Notre Dame, North Carolina, and Miami were the other teams to secure double-byes.[4] ‡ – ACC Regular Season Champions.† – Received a double-bye in the conference tournament.# – Received a single-bye in the conference tournament. * – Denotes overtime period Tournament MVP: Hunter Cattoor, Virginia Tech All-Tournament Teams:[5] +The 2022 ACC Championship Game was a college football conference championship game that was played on December 3, 2022, at Bank of America Stadium in Charlotte, North Carolina to determine the champion of the Atlantic Coast Conference (ACC) for the 2022 season. The game featured the Clemson Tigers, the champion of the Atlantic Division, and the North Carolina Tar Heels, the champion of the Coastal Division. The 18th annual ACC Championship Game, the contest began at 8:00 p.m. EST and aired on ABC.[1] Sponsored by restaurant chain Subway, the game was officially known as the Subway ACC Championship Game. The 2022 ACC Championship Game featured the Clemson Tigers, champions of the Atlantic Division, and the North Carolina Tar Heels, champions of the Coastal Division. The last time these two teams met in the ACC Championship Game was in 2015, where the Tigers beat the Tar Heels 45-37. The Tigers clinched a spot in the game as the champion of the ACC's Atlantic Division following Pittsburgh's defeat of Syracuse on November 5.[2] The Tar Heels clinched a spot in the game as the champion of the ACC's Coastal Division following their defeat of Wake Forest on November 12.[3] at Bank of America Stadium • Charlotte, North Carolina No Scoring +Apple started taking pre-orders on September 9, with general availability from September 16 for the iPhone 14 and October 7 for the iPhone 14 Plus.[22] The iPhone 14 and iPhone 14 Plus have an identical design to the iPhone 13, although the US models lack a physical SIM tray. The iPhone 14 and iPhone 14 Plus are available in six colors: Blue, Purple, Midnight, Starlight, Yellow, and Product Red.[24] Purple is a new color replacing Pink used on the iPhone 13 and iPhone 13 Mini. The yellow option was added on March 7, 2023.[25] iPhone 14 and 14 Plus are available in three internal storage configurations: 128, 256, and 512 GB. Both models have 6 GB of RAM, an increase over the previous iPhone 13 and 13 mini models' 4 GB of RAM. The iPhone 14 and 14 Plus have the same IP68 rating for dust and water resistance as their predecessors.[6] The iPhone 14 and 14 Plus use a 5-nanometer Apple-designed system on a chip, the A15 Bionic, while the iPhone 14 Pro and 14 Pro Max have a faster A16 Bionic.[26][27] The iPhone 14's A15 chip has a 6-core CPU, 5-core GPU, and a 16-core Neural Engine. +Learn how to identify your iPhone model by its model number and other details. Learn how to find the model number of your iPhone. Then find the model number in the list below. Year introduced: 2022 Capacity: 128 GB, 256 GB, 512 GB, 1 TB Colors: Silver, gold, space black, deep purple Model numbers: A2651 (United States, Puerto Rico), A2893 (Canada, Guam, Japan, Mexico, Saudi Arabia, and U.S. Virgin Islands), A2896  (China mainland, Hong Kong, Macao), A2895 (Armenia, Belarus, Kazakhstan, Kyrgyzstan, Russia), A2894 (other countries and regions) Details: iPhone 14 Pro Max has a 6.7-inch1 all-screen Super Retina XDR display. The back is premium matte glass, and there's a flat-edge stainless steel band around the frame. The side button is on the right side of the device. There are three cameras on the back: Ultra Wide, Main, and Telephoto. There's a LiDAR Scanner on the back. There's an LED True Tone flash on the back. In the United States, there is no SIM tray. +Google has released the Google I/O 2022 schedule, giving us a brief overview of what to expect. Read on to know more. We’re just two weeks away from Google I/O 2022. While the yearly event is primarily targeted at developers, there will be plenty of fun stuff for enthusiasts and the general public. Google usually doesn’t reveal much about what it plans to announce at the event. However, the company has now released the Google I/O 2022 schedule, giving us a brief overview of what to expect. Google I/O 2022 will be held on May 11 and May 12 at the Shoreline Amphitheater. The event will kick off with Sundar Pichai’s “Google I/O keynote” at 10 AM. This will be the main attraction for the general population as the main event tends to be more consumer-focused. While the event’s description doesn’t provide specifics, expect to see announcements for popular Google services, Workspace, privacy, health, and Google’s other new projects and endeavors. Also, keep an eye out for potential hardware announcements in the form of the Pixel 6a, Pixel Watch, and smart home devices. The main keynote will be followed by the Developer keynote and “What’s new in Android.” This is where we expect to learn more about Android 13, Wear OS, and updates to developer products and tools. Google says the schedule is slightly different this year. +Google I/O 2023 was broadcast online and featured announcements on everything from Pixel Fold to Bard. Here's what you need to know. Google I/O is the biggest annual event for developers and consumers who are interested in the latest innovations from Google. The conference is where Google typically unveils new products and services and provides a sneak peek at what's coming. This year's show was held on 10 May 2023 as a hybrid event with a limited live audience and online access for everyone. Here's everything you need to know about Google I/O 2023. Google I/O is an annual developer conference hosted by Google, where the company showcases its latest technologies and products. The conference typically features keynote speeches, technical sessions, and product announcements, and attracts both developers and consumers. Google announced Google I/O 2023 through a blog post on the official Google Developers website in March. The post revealed the dates and format of the event and invited interested attendees to register for the event. The announcement was also shared on Google's social media channels. Like previous years, Google also teased the event with a binary field puzzle that fans had to solve to reveal the launch date. Googgle I/O 20213 took place on 10 May. The keynote occurred at 10am PT and lasted about two hours. Google I/O 2023 was broadcast online and is still available to everyone to watch. We embedded the livestream at the top of this page - just hit play. +Netflix to Develop Film Adaptation of Irredeemable and Incorruptible Graphic Novel Series with The Harder They Fall Director Jeymes Samuel & Academy Award-Nominated Screenwriter Kemp Powers BAFTA Film Award winner Jeymes Samuel (The Harder They Fall) is set to direct a film adaptation of the BOOM! Studios’ graphic novel series Irredeemable and its spin-off Incorruptible for Netflix. Academy Award nominated Kemp Powers (writer of One Night in Miami and Soul and director of the upcoming Spider-Man: Across the Spider-Verse (Part One) with Joaquim Dos Santos & Justin Thompson) will pen the adaptation, which will have the protagonists from each series – one a villain on a quest to become a superhero, and the other a fallen hero turned villain – face off. The film will be produced by Shawn Carter, James Lassiter, and Stephen Christy & Ross Richie for BOOM! Studios. Kemp Powers and Adam Yoelin are executive producers on the film. Mette Norkjaer will oversee the project for BOOM! Studios. When the world’s most powerful and beloved superhero, the god-like Plutonian, inexplicably begins slaughtering everyone on Earth, the only person that can stop him is his former arch-nemesis, the super-powered villain Max Damage. +“The Big Short” filmmaker attached to oversee project for Fox’s new Boom! Comics cinematic universe Adam McKay has been attached to direct “Irredeemable” for 20th Century Fox, TheWrap has learned. The film is based on the Boom! Comics book of the same name and would help kick off Fox’s brand-new superhero cinematic universe. The “Anchorman” and “Big Short” director will be working with Tommy Wirkola (“Hansel and Gretel: Witch Hunters”), who is writing the screenplay. In the comics, “Irredeemable” follows superhero-turned-villain, the Plutonian, as he goes on a killing rampage. It’s up to the superhero group The Paradigm to stop him. +39][40] Tianwen-1's rover is named Zhurong (Chinese: 祝融号), after a Chinese mytho-historical figure usually associated with fire and light.[41] The name was chosen through an online poll held from January to February 2021.[42] China's Mars program started in partnership with Russia. In November 2011, the Russian spacecraft Fobos-Grunt, destined for Mars and Phobos, was launched from Baikonur Cosmodrome. The Russian spacecraft carried with it an attached secondary spacecraft, the Yinghuo-1, which was intended to become China's first Mars orbiter (Fobos-Grunt also carried experiments from the Bulgarian Academy of Sciences and the American Planetary Society). However, Fobos-Grunt's main propulsion unit failed to boost the Mars-bound stack from its initial Earth parking orbit and the combined multinational spacecraft and experiments eventually reentered the atmosphere of Earth in January 2012.[citation needed] In 2014, China subsequently began an independent Mars project.[43] The new Mars spacecraft, consisting of an orbiter and a lander with an attached rover, was developed by the China Aerospace Science and Technology Corporation (CASC) and is managed by the National Space Science Centre (NSSC) in Beijing.[44] The mission was formally approved in 2016.[45] +On December 31, 2021, the Tianwen-1 orbiter deployed a second deployable camera (TDC-2) into Mars orbit which captured photographs of the Tianwen-1 in orbit to celebrate its achievement of the year[20] and a selfie stick payload was deployed to its working position on orbiter to take images of the orbiter's components and Chinese flag on 30 January 2022 to celebrate the Chinese New Year. In September 2022, the mission was awarded the World Space Award by the International Astronautical Federation.[35][36] The Tianwen-1 mission was the second of three Martian exploration missions launched during the July 2020 window, after the United Arab Emirates Space Agency's Hope orbiter, and before NASA's Mars 2020 mission, which landed the Perseverance rover with the attached Ingenuity helicopter drone.[37] China's planetary exploration program is officially dubbed the "Tianwen Series". "Tianwen-1" (Chinese: 天问一号) is the program's first mission, and subsequent planetary missions will be numbered sequentially.[38] The name Tianwen means "questions to heaven" or "quest for heavenly truth", from the same classical poem written by Qu Yuan (c. 340–278 BC), an ancient Chinese poet. +Shad Gaspard has been posthumously named the recipient of the 2022 Warrior Award. Named after WWE Hall of Famer The Ultimate Warrior, The Warrior Award is presented to an individual who has exhibited unwavering strength and perseverance and who lives life with the courage and compassion that embodies the indomitable spirit of The Ultimate Warrior. The news was first reported by Foxsports.com. The Warrior Award presentation will be part of the WWE Hall of Fame Induction Ceremony, Friday, April 1, at American Airlines Center in Dallas as part of WrestleMania Week. The event will stream live exclusively on Peacock in the U.S. and WWE Network everywhere else. A larger-than-life Superstar with boundless charisma, Shad passed away on May 17, 2020. While swimming with his son, the pair got caught in a strong current in Venice Beach, Cal. In a heroic act of love, the concerned father instructed lifeguards to save his son before himself and disappeared soon after. Days later, his passing was confirmed. He was 39 years old. Shad’s bravery and selflessness will be honored next Friday with the 2022 Warrior Award as part of the 2022 WWE Hall of Fame Induction Ceremony. WWE Global Ambassador Titus O’Neil has been named the recipient of the 2020 Warrior Award. Longtime WWE employee Rich Hering has been named the recipient of the 2021 Warrior Award. +Also nominated for the Mighty Warrior Award: Josie Brence (Women's Soccer), Juliana Brown/Purnell (Women's Track & Field), Tyra Ching (Beach Volleyball), Andrew Classen (Men's Golf), Holly Golenor (Women's Basketball), Lindsay Janzer (Women's Cross Country), Reece Van Lierop (Men's Basketball), Nate Martin (Baseball), Samantha Martinez (Softball), Quinn McCallion (Men's Soccer), Zander Moha (Men's Cross Country), Meredith Pinkerton (Women's Lacrosse), Ally Schmidt/Tow (Volleyball), Jesse Squires (Men's Track & Field), and Tyson Stover (Men's Wrestling). The student-athlete selected for The Mark Neustel Scholarship Award and the Corban Athletics Team GPA Award will both be announced later next week.   A summary of every award winner from the 2023 Golden Warrior Awards can be found below: Male Newcomer of the Year: Evan Olson, Men's Track & Field Female Newcomer of the Year: Makayla Roginski, Volleyball Unsung Hero Award: Samantha Martinez, Softball Breakthrough Athlete of the Year: Megan Dennis, Beach Volleyball Individual Performance of the Year: Makida Herbert, Women's Soccer Comeback of the Year: David Rubio vs No. +2x7.6x0.7 inchesWEIGHT: 2.45 pounds LEARN MORE: Make the right decision when making purchasing decisions. Unlike most other computing devices, the Microsoft Surface Laptop SE is designed to be fully accessible for onsite repairs of common components, so students likely won’t have to wait to get back to work if their SE breaks. With no moving parts and a strong chassis, the Microsoft Surface Laptop SE is about as tough as a laptop can be without adding specifically ruggedized components. And while elementary education is hardly a war zone, younger students likely don’t treat their devices with as much care as adults. Microsoft talked with school administrators, teachers and IT professionals working with students ranging in age from kindergarten to eighth grade. It quickly became apparent that three key items — the screen, keyboard and battery — were the most commonly damaged or broken components on classroom laptops, especially in devices that also went home with students. Those three components made up 85 percent of all repair orders, and the repair process itself was also a detriment to education. Normally, broken units must be shipped to a factory or repair center that might take a week or longer to ship the device back — meaning broken laptops were not available to students for extended periods. The shipping costs also were often the responsibility of the school. Microsoft has revolutionized that process with the Microsoft Surface Laptop SE. +Note: Some products might not be available in your country or region. Software Windows 8 Pro. Upgradeable to Windows 8.1 Pro Exterior Dimensions: 10.81 in (27.5 cm) x 6.81 in (17.3 cm) x 0.53 in (13.46 mm) Weight: Less than 2lbs Casing: VaporMg Color: Dark Titanium Integrated kickstand Physical buttons: Volume, Power, and Windows button Storage* and Memory 64GB, 128GB Display Screen: 10.6 inch ClearType Full HD Display Resolution: 1920 x 1080 Aspect Ratio: 16:9 (widescreen) Touch: 10-point multi-touch CPU and Wireless 3rd Gen Intel Core i5 Processor 4GB RAM Wi-Fi (802.11a/b/g/n)Bluetooth®4.0 technology Battery Life 42 W-h Camera, Video, and Audio Two 720p HD cameras, front and rear-facing Microphone Stereo speakers Ports Full-size USB 3.0 microSDXC card slot Headset jack Mini DisplayPort Cover port Sensors Ambient light sensor Accelerometer Gyroscope Magnetometer Power Supply 48W power supply (including 5W USB for accessory charging) Surface Pro Pen Included * System software uses significant storage space. +The Lost City features Sandra Bullock, Channing Tatum, and Daniel Radcliffe, among a few other actors. Check out some fun facts about the cast. The 2022 film The Lost City is the perfect combination of comedy, adventure, romance, and an incredibly talented cast capable of pulling off any role. This film directed by Adam and Aaron Nee, from a story by Seth Gordon, features Loretta Sage, a brilliant author who writes romance novels set in exotic locations featuring Dr. Angela Lovemore and her romantic interest, Dash McMahon. But Loretta's real life bears no resemblance to the things she writes: after her husband's death, she became a reclusive, grumpy woman who is not even eager to write anymore. Halfway through a promotional tour for her latest novel, Loretta is kidnapped by a lunatic billionaire who wants her to lead him to a lost city treasure she depicted in her book. Fortunately, Loretta won't be alone: Alan, the cover model of her books, sets out on a journey to rescue her and demonstrate that he can also be a hero. Sandra Bullock and Channing Tatum headline this blockbuster alongside Daniel Radcliffe, Da'Vine Joy Randolph, Brad Pitt, and Oscar Nunez, among other actors. The Lost City was released in March 2022 and quickly became a box office hit. +The Lost City's cast going full throttle on themselves must be seen to be believed, so please — if you're going to use your free trial of Paramount+, do it in time to watch a smart lady, a himbo, a basket case, and Brad Pitt go hog wild on the roles they were born to play. The Lost City is now playing in theaters and streaming on Paramount+. More in Streaming Alexis Nedd is a senior entertainment reporter at Mashable. A self-named "fanthropologist," she's a fantasy, sci-fi, and superhero nerd with a penchant for pop cultural analysis. Her work has previously appeared in BuzzFeed, Cosmopolitan, Elle, and Esquire. +Filed under: What the American Oscars telecast cut from the Will Smith-Chris Rock confrontation. Will Smith has been banned from the Oscars for 10 years after slapping Chris Rock live on camera during the award show, the New York Times reports. The incident came in the final hour of an otherwise sleepy Oscars telecast on March 27. Rock made a joke about Smith’s wife, Jada Pinkett Smith, and Smith took the stage and slapped him. Minutes later, Smith won his first ever Oscar. “I did not know this was gonna be the most exciting Oscars ever,” marveled Diddy shortly after. “This action we are taking today in response to Will Smith’s behavior is a step toward a larger goal of protecting the safety of our performers and guests, and restoring trust in the Academy,” the Academy of Motion Picture Arts and Sciences said in an open letter on April 8. “We also hope this can begin a time of healing and restoration for all involved and impacted.” Smith, who resigned from the Academy on April 1, said in a statement, “I accept and respect the Academy’s decision.” Here’s what happened. Chris Rock was appearing at the Oscars to announce the winner for Best Documentary. In the leadup to announcing the nominees, he went through a little comedic patter about some of the nominees, and his attention appeared to snag on Smith’s wife, Jada Pinkett Smith, sitting in front in a green gown with a shaved head. +After the show, the Academy of Motion Pictures Arts and Sciences issued a statement saying it “does not condone violence of any form.” The Los Angeles Police Department said in a statement that it was aware of the incident. “The incident involved one individual slapping another,” the statement read. “The individual involved has declined to file a police report. If the involved party desires a police report at a later date, LAPD will be available to complete an investigative report.” “That was the greatest night in the history of television,” Rock said before resuming his role as presenter. A few minutes later, rapper Sean Combs — on stage to introduce a tribute to “The Godfather” — tried to play peacemaker and suggested Smith and Rock settle their differences at an Oscars afterparty. “Will and Chris, we’re going to solve that like family at the Gold party,” Combs said. The reverberations did not stop there. Several people approached Smith and Pinkett Smith in the commercial breaks that followed; Keith Urban hugged Smith during one stoppage in the show, and Nicole Kidman also went over to say a few words as well. Backstage, during interview sessions with winners, the Rock-Smith incident seemed like something few — if anyone — wanted to discuss. “I’m not talking about that,” said Ahmir “Questlove” Thompson, the director of “Summer of Soul,” which won an Oscar for best documentary. The confrontation overshadowed Smith’s milestone accomplishment. +Apple M2 is a series of ARM-based system on a chip (SoC) designed by Apple Inc. as a central processing unit (CPU) and graphics processing unit (GPU) for its Mac desktops and notebooks, and the iPad Pro tablet. It is the second generation of ARM architecture intended for Apple's Mac computers after switching from Intel Core to Apple silicon, succeeding the M1. Apple announced the M2 on June 6, 2022, at WWDC, along with models of the MacBook Air and the 13-inch MacBook Pro using the M2. The M2 is made with TSMC's "Enhanced 5-nanometer technology" N5P process and contains 20 billion transistors, a 25% increase from the M1. Apple claims CPU improvements up to 18% and GPU improvements up to 35% compared to the M1.[3] The M2 was followed by the professional-focused M2 Pro and M2 Max chips in January 2023. The M2 Max is a higher-powered version of the M2 Pro, with more GPU cores and memory bandwidth, and a larger die size.[4] Apple introduced the M2 Ultra in June 2023, combining two M2 Max chips in one package.[1] +Apple in June 2022 unveiled the M2, its next-generation Apple silicon chip that followed the M1 chip. This guide highlights everything you need to know about the M2 chip, from performance improvements to extra features. The M2 is Apple's next-generation System on a Chip (SoC) developed for use in Macs and iPads. It marks Apple's continued work to transition away from the Intel chips that were used in Macs up until 2020. As a "System on a Chip," the M2 integrates several different components, including the CPU, GPU, unified memory architecture (RAM), Neural Engine, Secure Enclave, SSD controller, image signal processor, encode/decode engines, Thunderbolt controller with USB 4 support, and more, all of which power the different features in the Mac. Before Apple silicon, Macs used multiple chips for CPU, I/O, and security, but Apple's effort to integrate these chips is the reason why the M2 is much faster and more efficient than Intel chips. The unified memory architecture that Apple has included is also a major factor because all of the technologies in the M2 are able to access the same data without having to swap between multiple pools of memory. Built into the M2 chip, the unified memory architecture means the CPU, GPU, and other processor components don't need to copy data between one another, and are able to access the same data pool. +CODA is the Oscars 2022 Best Picture Oscar winner! Ten films competed to take home the most prestigious award in film, the Oscar, with the winner revealed when The Oscars aired LIVE SUNDAY, MARCH 27 on ABC. The nominees for Best Picture were: BELFAST, CODA, DON'T LOOK UP, DRIVE MY CAR, DUNE, KING RICHARD, LICORICE PIZZA, NIGHTMARE ALLEY, THE POWER OF THE DOG and WEST SIDE STORY. THE POWER OF THE DOG had the most nominations, having been nominated for 12 Academy Awards. NIGHTMARE ALLEY was the fourth Best Picture nomination for Bradley Cooper, having previously been nominated for AMERICAN SNIPER (2014), A STAR IS BORN (2018) and JOKER (2019). WEST SIDE STORY was Steven Spielberg's 11th Best Picture nomination, which is a record for an individual producer. For all the details, you can read more about the Oscars 2022 Best Picture nominees below. You can also explore other Oscars 2022 nominees and see the complete Oscars 2022 nominations list right here on Oscar.com. +Two years later, Kafuku, still unable to fully cope with the loss of his wife, receives an offer to direct a play at a theater festival and drives to Hiroshima. DUNE Mary Parent, Denis Villeneuve and Cale Boyter, Producers Film Synopsis Paul Atreides, a young man haunted by prophetic dreams and fated for greatness, is the son of a brave ruler and a warrior priestess. When his family is placed in charge of the desert planet Arrakis, Paul must defend his family's stewardship of the world's most valued resource. RELATED: Oscars 2022 Shortlists in 10 Award Categories Announced KING RICHARD Tim White, Trevor White and Will Smith, Producers Film Synopsis Armed with a brazen plan, Richard Williams is determined to write his daughters into history. Along with his wife Oracene, Richard guides their young daughters, Venus and Serena, on their path to changing the sport of tennis and the world forever. LICORICE PIZZA Sara Murphy, Adam Somner and Paul Thomas Anderson, Producers Film Synopsis Fifteen-year-old Gary Valentine, at the tail end of his career as a child actor, instantly falls in love with twenty-something photographer's assistant Alana Kane. +Kong" "The Matrix Resurrections" "No Time to Die" "Shang-Chi and the Legend of the Ten Rings" "Spider-Man: No Way Home" Download   Nominations voting begins on Thursday, January 27, 2022, and concludes on Tuesday, February 1, 2022. Nominations for the 94th Academy Awards will be announced on Tuesday, February 8, 2022. The 94th Oscars® will be held on Sunday, March 27, 2022, at the Dolby® Theatre at Hollywood & Highland® in Hollywood and will be televised live on ABC and in more than 200 territories worldwide.   FOLLOW THE ACADEMYwww.oscars.orgwww.facebook.com/TheAcademywww.youtube.com/Oscarswww.twitter.com/TheAcademywww.instagram. +The 95th annual Oscars will be held on March 12, 2023, in Los Angeles.   Credit: ABC/Jeff Lipsky Kimmel is returning to host for the third time. He previously helmed the 2017 and 2018 awards.    Kimmel is returning to host for the third time. He previously helmed the 2017 and 2018 awards.    Credit: Shutterstock /Alex Millauer The ceremony will be broadcast on ABC.    The ceremony will be broadcast on ABC.    Credit: Chris Chew/UPI/Shutterstock Nominations have not yet been announced, but the 2023 Oscars will honor the best and brightest of films released in 2022. The Whale, The Fabelmans, Elvis and Everything Everywhere All at Once are strong contenders for top trophies. The official list will be revealed in January 2023.    Nominations have not yet been announced, but the 2023 Oscars will honor the best and brightest of films released in 2022. The Whale, The Fabelmans, Elvis and Everything Everywhere All at Once are strong contenders for top trophies. The official list will be revealed in January 2023.    Credit: Rob Latour/Shutterstock Despite the drama that ensued during the 2022 ceremony, ABC was pleased with the broadcast. +Mar 29, 2022 | ISBN 9781101980118 Buy from Other Retailers: Mar 29, 2022 | ISBN 9780593553077 700 Minutes Buy from Other Retailers: “Inventive and thrilling. . . . I couldn’t put it down.” —Brit Bennett, #1 New York Times bestselling author of The Vanishing Half“It’s a thrill to read this novel.” —Jia Tolentino, New York Times bestselling author of Trick MirrorThe gripping story of one scientist in outer space, another who watches over him, the family left behind, and the lengths people will go to protect the people and planet they loveFor twenty years, Alex has believed that his gene-edited superalgae will slow and even reverse the effects of climate change. His obsession with his research has jeopardized his marriage, his relationships with his kids, and his own professional future. When the Son sisters, founders of the colossal tech company Sensus, offer him a chance to complete his research, he seizes the opportunity. The catch? His lab will be in outer space on Parallaxis, the first-ever luxury residential space station built for billionaires. Alex and six other scientists leave Earth and their loved ones to become Pioneers, the beta tenants of Parallaxis. But Parallaxis is not the space palace they were sold. +—Jia Tolentino, New York Times bestselling author of Trick Mirror“If A House Between Earth and the Moon wants us to ask what makes a house into a home, it wants us to know that family is the answer. . . . What A House Between Earth and the Moon suggests is that there is no solution but some kind of strange mix of hope and resignation, a wry kind of wonder.” —Bekah Waakles, Ploughshares“A House Between Earth and the Moon is a compelling, urgent book. I couldn't put it down. Rebecca Scherm brilliantly, and with such heart and tenderness, imagines a frightening future for our planet and our flawed, complicated species, and the worlds she imagines are so vivid, and feel so real I wondered if she owns a crystal ball. I loved these characters and their struggles and desires, and I rooted for them, and worried about them, and I can’t stop thinking about them. This is a remarkable novel.” —Edan Lepucki, New York Times bestselling author of California“If you read just one novel about future billionaires funding scientists to try to save a select few from global warming by making it possible to live in outer space, definitely let it be A House Between Earth and the Moon. +After finding a new date and host city (thanks COVID-19) the 2022 Grammys officially went down in Las Vegas. Going into the night, Late Night with Stephen Colbert bandleader, Jon Batiste had the spotlight, clocking in with a whopping 11 nods in a number of genres. Batiste would end up being a big winner, picking up five 2022 Grammy Awards, including Album of the Year. Doja Cat came into the night with eight nominations. She picked up a W for Best Pop Duo, for her hit "Kiss Me More" It was also a big night for Silk Sonic, who came into the night with four nominations. They swept the night, including Record of the Year and Song of the Year. Best Rap Album was announced before the show and it went to Tyler, the Creator for his unofficial Gangsta GrillzalbumCALL ME IF YOU GET LOST. In one of the most surprising moments of the night, Baby Keem and his cousin Kendrick Lamar won the Best Rap Performance Grammy for "Family Ties." Scroll down to see the list of 2022 Grammys winners. Jon Batiste - We Are  Tony Bennett and Lady Gaga - Love For Sale Justin Bieber - Justice (Triple Chucks Deluxe)  Doja Cat - Planet Her Billie Eilish - Happier Than Ever H.E.R. +Be the first to find out about GRAMMY nominees, winners, important news, and events. Privacy Policy Graphic by the Recording Academy news Find out who won in each of the 86 categories at the 2022 GRAMMYs Editor's Note: The 2022 GRAMMYs Awards show, officially known as the 64th GRAMMY Awards, has been rescheduled to Sunday, April 3, at the MGM Grand Garden Arena in Las Vegas. The below article was updated on Tuesday, Jan. 18, to reflect the new show date and location. Updated Sunday, April 3 The 2022 GRAMMYs, officially known as the 64th GRAMMY Awards, are officially wrapped. See below to see who won golden gramophones at the 2022 GRAMMYs. (The 64th GRAMMY Awards recognize recordings released between Sept. 1, 2020 — Sept. 30, 2021.) Relive the 10 must-see moments from the annual award show. 1. Record Of The YearAward to the Artist and to the Producer(s), Recording Engineer(s) and/or Mixer(s) and mastering engineer(s), if other than the artist. +16] The defending champions were France, who defeated Croatia 4–2 in the 2018 FIFA World Cup Final.[17][18] The event was scheduled to take place under a reduced length,[19] from 20 November to 18 December in Qatar.[20][21][22] Being held in Qatar, it was the first World Cup tournament to be held in the Arab world.[23] Spectators were not required to follow most COVID-19 pandemic restrictions such as social distancing, wearing masks, and negative tests.[24] Unlike previous FIFA World Cups, which are typically played in June and July, because of Qatar's intense summer heat and often fairly high humidity,[2][21][25] the 2022 World Cup was played in November and December.[5][26] As a result, the World Cup was unusually staged in the middle of the seasons of many domestic association football leagues, which started in late July or August, including all of the major European leagues, which had been obliged to incorporate extended breaks into their domestic schedules to accommodate the World Cup. Major European competitions had scheduled their respective competitions group matches to be played before the World Cup, to avoid playing group matches the following year.[27] The match schedule was confirmed by FIFA in July 2020.[28] The group stage was set to begin on 21 November, with four matches every day. +The 2022 FIFA World Cup™ in Qatar is the 22nd edition of the biggest sporting event on the planet. The tournament is already at a fever pitch, being held in the winter for the first time since 1930. The FOX family of networks and the FOX Sports app are your complete home for World Cup content, including live matches, complete highlights, commentary and analysis, and full-match replays. You can also watch full-length replays on Tubi. Check out our FIFA World Cup 2022 Fan Guide for everything you need to know about this year's event. FIFA World Cup 2022™ is scheduled for November 20 to December 18, 2022. Qatar is scheduled to host FIFA World Cup 2022™. It will be the first World Cup held in the Middle East and just the second to be staged in Asia. The FIFA World Cup will air on FOX, FS1, FOXSports.com, the FOX Sports App, and stream for free on Tubi. FOX is your home for game highlights, analysis, standings, team & player stats, and more. Yes. The United States Men’s National Team is back in the World Cup for the first time in eight years. The final draw for the 2022 World Cup in Qatar was held on April 1, 2022. The United States Men’s National Team was drawn to Group B. +Checking Accounts Best Credit Cards for Small Business Best Small Business Loans Best Tax Software for Small Business SELECT All Taxes Best Tax Software Best Tax Software for Small Businesses Tax Refunds SELECT All Help for Low Credit Scores Best Credit Cards for Bad Credit Best Personal Loans for Bad Credit Best Debt Consolidation Loans for Bad Credit Personal Loans if You Don't Have Credit Best Credit Cards for Building Credit Personal Loans for 580 Credit Score or Lower Personal Loans for 670 Credit Score or Lower Best Mortgages for Bad Credit Best Hardship Loans How to Boost Your Credit Score SELECT All Investing Best IRA Accounts Best Roth IRA Accounts Best Investing Apps Best Free Stock Trading Platforms Best Robo-Advisors Index Funds Mutual Funds ETFs Bonds Tesla just reported first-quarter vehicle production and delivery numbers for 2022. Here's how they did. Electric vehicle deliveries (total): 310,048 Electric vehicle production (total): 305,407 Over the same period last year, Tesla delivered 184,800 electric vehicles and produced 180,338 cars. Model 3 and Model Y vehicles comprised 95%, or 295,324, of deliveries in the first quarter of 2022, according to Tesla. The company produced 4,641 fewer cars than it delivered during the quarter citing "ongoing supply chain challenges and factory shutdowns." Analysts expected deliveries of 317,000 vehicles for the first three months of 2022, according to estimates compiled by FactSet as of March 31. +The first-quarter deliveries compare with analyst expectations of 430,008 vehicles, according to Refinitiv data based on seven analysts. According to a mean of estimates compiled by FactSet as of Friday, Wall Street was expecting Tesla to report deliveries of around 432,000 vehicles for the quarter, the Wall Street Journal and CNBC reported. Tesla missed the figure analysts surveyed by Refinitiv and FactSet were expecting. Other estimates show Tesla beat Wall Street expectations with its 422,875 vehicles delivered. Analysts surveyed by Bloomberg expected 421,164 vehicles would be shipped. Tesla said a consensus of more than 20 analysts called for 421,500 vehicles delivered, Tesla investor Gary Black said in a tweet. Reuters could not independently confirm that figure. The consensus is "all over the place," Munster said. Tesla delivered 6% more of its mainstay Model 3/Model Y vehicles in the first three months of this year than in the previous quarter. But the number of deliveries for its higher-priced Model X/Model S vehicles slumped by 38%. Visitors check a Tesla Model 3 car next to a Model Y displayed at a showroom of the U.S. electric vehicle (EV) maker in Beijing, China February 4, 2023. REUTERS/Florence Lo/File Photo The carmaker produced more cars than it delivered, manufacturing 440,808 vehicles for the first three months of this year. +Searching for your content... In-Language News Contact Us 888-776-0942 from 8 AM - 10 PM ET News provided by 25 Apr, 2022, 14:50 ET Share this article SAN FRANCISCO, April 25, 2022 /PRNewswire/ -- Twitter, Inc. (NYSE: TWTR) today announced that it has entered into a definitive agreement to be acquired by an entity wholly owned by Elon Musk, for $54.20 per share in cash in a transaction valued at approximately $44 billion. Upon completion of the transaction, Twitter will become a privately held company. Under the terms of the agreement, Twitter stockholders will receive $54.20 in cash for each share of Twitter common stock that they own upon closing of the proposed transaction. The purchase price represents a 38% premium to Twitter's closing stock price on April 1, 2022, which was the last trading day before Mr. Musk disclosed his approximately 9% stake in Twitter. Bret Taylor, Twitter's Independent Board Chair, said, "The Twitter Board conducted a thoughtful and comprehensive process to assess Elon's proposal with a deliberate focus on value, certainty, and financing. The proposed transaction will deliver a substantial cash premium, and we believe it is the best path forward for Twitter's stockholders." Parag Agrawal, Twitter's CEO, said, "Twitter has a purpose and relevance that impacts the entire world. +AdvisorsGoldman Sachs & Co. LLC, J.P. Morgan, and Allen & Co. are serving as financial advisors to Twitter, and Wilson Sonsini Goodrich & Rosati, Professional Corporation and Simpson Thacher & Bartlett LLP are serving as legal counsel. Morgan Stanley is acting as lead financial advisor to Mr. Musk. BofA Securities and Barclays are also acting as financial advisors. Skadden, Arps, Slate, Meagher & Flom LLP is serving as legal counsel. About Twitter, Inc. (NYSE: TWTR)Twitter is what's happening and what people are talking about right now. To learn more, visit about.twitter.com and follow @Twitter. Let's talk. Additional Information and Where to Find ItTwitter, its directors and certain executive officers are participants in the solicitation of proxies from stockholders in connection with the pending acquisition of Twitter (the "Transaction"). Twitter plans to file a proxy statement (the "Transaction Proxy Statement") with the Securities and Exchange Commission (the "SEC") in connection with the solicitation of proxies to approve the Transaction. Additional information regarding such participants, including their direct or indirect interests, by security holdings or otherwise, will be included in the Transaction Proxy Statement and other relevant documents to be filed with the SEC in connection with the Transaction. +Musk's acquisition of the social media company has been mired in controversy. The richest person in the world said he wanted to own one of the most popular social media platforms -- until he said he didn't. In early October, he reversed course again, saying he wanted to complete the deal. On Oct. 28, he finally did. Tesla CEO Elon Musk completed the deal to acquire Twitter at his original offer price of $54.20 a share at a total cost of roughly $44 billion. In the ensuing days, Musk fired top executives, laid off half of the company's staff, formed a content moderation council that will review account reinstatements and revamped the platform's subscription service. The changes at Twitter mark the latest chapter in a monthslong saga that began in January when Musk started investing in the social media company. Musk reached an acquisition deal with Twitter in April, but over the ensuing weeks, he raised concerns over spam accounts on the platform, claiming Twitter had not provided him with an accurate estimate of their number. Twitter rebuked that claim, saying it has provided Musk with information in accordance with conditions set out in the acquisition deal. +50][51] Agrawal was set to receive $39 million from the buyout, while Dorsey would receive $978 million.[52] Musk had privately selected a new CEO to replace Agrawal upon completion of the acquisition,[35] though he was expected to serve as interim CEO in the months after its completion.[53] Tesla's stock sank by more than $125 billion the next market day, causing Musk to lose about $30 billion of his net worth.[54][55] After the acceptance was announced, Musk said that his first goal would be to make the algorithm that ranks tweets in the content feed open-sourced, in an effort to increase transparency. He has also stated that he intended to remove spambots and "authenticate all real humans",[56] suggesting that he might convert Twitter's San Francisco headquarters into a homeless shelter.[57][58] Musk said he lacked confidence in Twitter's corporate management,[59] telling banks that he had considered reducing executive and board pay.[35] He published tweets critical of decisions made by Twitter executives such as Vijaya Gadde,[60] who was subsequently harassed by Twitter users using racist and sexist language.[61][62] On April 28, Twitter told advertising agencies that their work would not be seen next to offensive material.[63] Musk also discussed with bankers with the ideas of cutting jobs and costs, encouraging influencers to be creative, and adding subscription services to Twitter.[64][65] +The 2022 Masters Tournament was the 86th edition of the Masters Tournament, the first of the four major golf championships of 2022, held April 7–10 at the Augusta National Golf Club in Augusta, Georgia. For the first time since the 2019 tournament, attendance returned to full capacity with maximum of 40,000 spectators per day; the traditional par-3 contest also returned.[1][2] Scottie Scheffler won his first major by three strokes over Rory McIlroy.[3][4] Scheffler had achieved his first PGA Tour win at the WM Phoenix Open two months earlier, and after also winning the Arnold Palmer Invitational and WGC-Dell Technologies Match Play he entered the Masters as world number one.[5] Scheffler led by a record-tying five strokes after the second round, and held the lead from then on. His main challenger was Cameron Smith, who narrowed the lead to one stroke after the second hole of the final round. On the subsequent hole, Scheffler and Smith found themselves in the same tricky position, with Scheffler chipping in for a birdie, and Smith only managing a bogey, extending the lead to 3 strokes. Smith made a triple bogey on the 12th hole after his ball went into the water, leaving Scheffler relatively unchallenged for the rest of the round. +11] 1. All past winners of the Masters Tournament 2. Recent winners of the U.S. Open (2017–2021) 3. Recent winners of The Open Championship (2017–2021) 4. Recent winners of the PGA Championship (2017–2021) 5. Recent winners of The Players Championship (2020–2022) 6. The winner of the gold medal at the Olympic Games 7. The winner and runner-up in the 2021 U.S. Amateur Championship 8. The winner of the 2021 Amateur Championship 9. The winner of the 2021 Asia-Pacific Amateur Championship 10. The winner of the 2022 Latin America Amateur Championship 11. The winner of the 2021 U.S. Mid-Amateur Golf Championship 12. The leading 12 players, and those tying for 12th place, from the 2021 Masters Tournament 13. The leading four players, and those tying for fourth place, in the 2021 U.S. Open 14. The leading four players, and those tying for fourth place, in the 2021 Open Championship 15. The leading four players, and those tying for fourth place, in the 2021 PGA Championship 16. Winners of PGA Tour events[a] between the 2021 Masters Tournament and the 2022 Masters Tournament +Ashleigh Barty defeated Danielle Collins in the final, 6–3, 7–6(7–2) to win the women's singles tennis title at the 2022 Australian Open. She became the first home player to win an Australian Open singles title since Chris O'Neil in 1978. It was Barty's third major singles title, and she won the title without losing a set, dropping just three service games during the tournament.[1] The final also marked Barty's last professional appearance, as she announced her retirement from the sport two months later.[2] Naomi Osaka was the defending champion,[3] but lost to Amanda Anisimova in the third round.[4] Barty retained the world No. 1 singles ranking after Aryna Sabalenka and Barbora Krejčíková lost in the fourth round and quarterfinals, respectively. Collins entered the WTA top 10 rankings for the first time by reaching the final.[5] Alizé Cornet reached her first major singles quarterfinal on her 63rd main-draw appearance, surpassing Tamarine Tanasugarn's all-time record, who reached her maiden quarterfinal at the 2008 Wimbledon Championships on her 45th attempt.[6] Kaia Kanepi becomes the first Estonian to reach the quarterfinals at all four majors after her victory over second seed Aryna Sabalenka in the fourth round. +As the 2023 edition of the Australian Open heats up, fans and tennis lovers are starting to get a spring in their step as the air fills with excitement. Arguably the most anticipated Grand Slam on the tennis calendar, the Melbourne tournament has everything and this year won't be different. Ranging from interactive activities to some of the biggest names in the world, the Australian Open doesn't disappoint. Looking back, the 2022 event was nothing short of outstanding. Australian Ash Barty broke a 44-year-old record to claim her first Grand Slam on her home turf. While Rafael Nadal - who notched his 21st Grand Slam - remarkably came back from two sets to love to defeat 2021 US Open (tournament before Aus Open) champion Daniil Medvedev. Here's how it played out. Barty came into the tournament ranked no.1 in the world and knew what it took to win a Grand Slam. Having previously won at Wimbledon (2021) and the French Open (2019), the Queenslander wanted to take home the prize that meant the most: a trophy on her home soil. Despite the pressure of expectation to take out the 2022 championship, Barty's form never wavered throughout the two weeks, resulting in no sets lost. In the final, the Australian came up against American, Danielle Collins, who she had the reign over in previous battles. +Aryna Sabalenka defeated Elena Rybakina in the final, 4–6, 6–3, 6–4 to win the women's singles tennis title at the 2023 Australian Open. It was her first major singles title.[1] Sabalenka dropped just one set during the tournament, to Rybakina in the championship match. Rybakina became the first Kazakhstani player to progress past the fourth round, and the first player since Jennifer Capriati in 2001 to defeat three consecutive major champions in a single edition of the Australian Open.[2] By reaching the final, Rybakina made her debut in the top ten of the WTA Rankings. Ashleigh Barty was the reigning champion,[3] but she retired from professional tennis in March 2022.[4] Barty's retirement and Angelique Kerber and Naomi Osaka’s absences (both due to pregnancy) meant that Victoria Azarenka and Sofia Kenin were the only former champions left in the draw. They met in the first round, with Azarenka winning in straight sets.[5] Jeļena Ostapenko became the first Latvian to reach the Australian Open quarterfinals.[6] Click on the seed number of a player to go to their draw section. The following are the seeded players. Seedings are based on WTA rankings as of 9 January 2023. +1:45PM - Top serve speeds - Rybakina - 195 km/h (1st serve) Sabalenka - 193 km/h (2nd serve) 1:40PM - Not much to separate these two Arriving at the finals in similar style ⏱️@ROLEX • #AusOpen • #AO2023pic.twitter.com/L9kZ8Ay3PP 1:35PM - Sabalenka’s road to the final 1:30PM - Rybakina’s road to the final 1:25PM - Previous meetings: 2021 Wimbledon, Round of 16: Sabalenka won 6-3, 4-6, 6-3 2021 Abu Dhabi, Quarterfinal: Sabalenka won 6-4, 4-6, 6-3 2019 Wuhan, Quarterfinal: Sabalenka won 6-3, 1-6, 6-1 1:20PM - HEAD-TO-HEAD RECORD Player: 3 | Sabalenka: 3 | Rybakina: 0 1:15PM - Rybakina and Sabalenka have been in superb form at this year’s Australian Open. While the former has impressed with her serve, the latter has dominated her opponents with her power. A thrilling final is on the cards. Live action begins at 2PM. +As the 2023 edition of the Australian Open heats up, fans and tennis lovers are starting to get a spring in their step as the air fills with excitement. Arguably the most anticipated Grand Slam on the tennis calendar, the Melbourne tournament has everything and this year won't be different. Ranging from interactive activities to some of the biggest names in the world, the Australian Open doesn't disappoint. Looking back, the 2022 event was nothing short of outstanding. Australian Ash Barty broke a 44-year-old record to claim her first Grand Slam on her home turf. While Rafael Nadal - who notched his 21st Grand Slam - remarkably came back from two sets to love to defeat 2021 US Open (tournament before Aus Open) champion Daniil Medvedev. Here's how it played out. Barty came into the tournament ranked no.1 in the world and knew what it took to win a Grand Slam. Having previously won at Wimbledon (2021) and the French Open (2019), the Queenslander wanted to take home the prize that meant the most: a trophy on her home soil. Despite the pressure of expectation to take out the 2022 championship, Barty's form never wavered throughout the two weeks, resulting in no sets lost. In the final, the Australian came up against American, Danielle Collins, who she had the reign over in previous battles. +* Helped Serbia win the inaugural ATP Cup in 2020 before triumphing at Melbourne Park for the eighth time. * With 2019 champion Nadal and Federer opting to skip the 2020 U.S. Open, Djokovic was favourite to triumph but was defaulted in the fourth round after accidentally hitting a line judge in the throat with a ball. The disqualification ended his 26-0 winning run in 2020. * Lost to Nadal in straight sets in the final of the rescheduled 2020 French Open. * Beat Daniil Medvedev for a record-extending ninth Australian Open title in 2021. * Beat Stefanos Tsitsipas for his second French Open title and 19th Grand Slam crown, thus becoming the first man since tennis turned professional in 1968 to win all four majors at least twice. * Beat Matteo Berrettini in the Wimbledon final to win a 20th singles Grand Slam title. * His bid for a calendar-year Grand Slam in 2021 fell short after he lost to Medvedev in the U.S. Open final. * Missed the Australian Open in 2022 after being deported from the country for not being vaccinated against COVID-19. * Beat Nick Kyrgios in the Wimbledon final to win his 21st Grand Slam title and fourth straight crown at the All England Club. +By : Neha Dhyani Updated : Jun 11, 2023, 22:37 The 2023 Australian Open Winner in the Men’s Singles category is Novak Djokovic. Djokovic defeated Stefanos Tsitsipas with a score of 6–3, 7–6(7–4), 7–6(7–5) in the finals to claim his 10th Australian Open title. In the Women’s Singles category, Aryna Sabalenka (Belarus) made history by defeating Elena Rybakina (Kazakhstan). Find out the complete list of 2023 Australian Open winners here. We have shared the winners of the Men’s Singles and Doubles, Women’s Singles and Doubles, and Mixed Doubles here, along with the details of the final scores. The 2023 Australian Open was held at Melbourne Park, Melbourne, Victoria, Australia. The 111th edition of the Grand Slam tournament was held from 16—29 January 2023. +As in the previous major held a few months earlier, neither of the top two seeds advanced to the quarterfinals, with Nadal and Ruud both losing in the second round; this marked the first men's singles major since the 2002 Australian Open where the top two seeds lost prior to the third round.[7][8] Tsitsipas became the youngest finalist since Djokovic in 2011.[9] Tommy Paul became the first American man to reach the semifinals since Andy Roddick in 2009.[10] With his win over Thanasi Kokkinakis in the longest match of his career, Andy Murray won a match from two sets down for a record eleventh time.[11] Click on the seed number of a player to go to their draw section. The following are the seeded players. Seedings are based on ATP rankings as of 9 January 2023. Rankings and points before are as of 16 January 2023. † The player did not qualify for the main draw in 2022. He is defending points from two 2022 ATP Challenger Tour tournaments (Concepción and Santa Cruz) instead. The following players would have been seeded, but withdrew before the tournament began. Source:[14] Source:[15] Source:[16] The entry list was released by Tennis Australia based on the ATP rankings for the week of 5 December 2022.[17] +Play Now Football Pick'em Play Now College Pick'em See who to add and drop PGA Tour and beyond The 2022 French Open women's final represented a moment for the sport that could be called a changing of the guard. While Iga Swiatek entered the final with a Grand Slam title in her trophy case already -- and on a 34-match winning streak -- the 21-year-old is still just coming into her own as one of the world's great players. She staked a dominant claim to that as she cruised to victory over Coco Gauff with a 6-1, 6-3 win in the final at Roland Garros in a match where she was almost never seriously challenged.   Swiatek won the fall edition of the French Open in 2020 after it was postponed due to COVID-19 -- and she told NBC Sports after this win why taking home the trophy as the No. 1 player in the world is different than being a surprise winner and the lowest-ranked woman to ever win the event. "I feel like two years ago I was pretty lucky that I could be there and basically I was living kind of in a bubble for two weeks," said Swiatek, the only Polish player to win a Grand Slam title. "This time I felt the pressure. ... +Iga Świątek defeated Coco Gauff in the final, 6–1, 6–3 to win the women's singles tennis title at the 2022 French Open.[1] It was her second French Open title, and she dropped just one set en route, in the fourth round to Zheng Qinwen. With the win, Świątek extended her winning streak to 35 matches (dating back to the Qatar Open in February), equaling Venus Williams' tally from the 2000 season.[2] Świątek also became the youngest winner of multiple majors since Maria Sharapova in 2006.[3] Barbora Krejčíková was the defending champion,[4] but she lost in the first round to Diane Parry. This marked only the third time in French Open history that the defending champion lost in the first round (after Anastasia Myskina in 2005 and Jeļena Ostapenko in 2018), and the record fifteenth consecutive unsuccessful French Open women's singles title defense since 2007.[5] 17-year-old Linda Nosková became the youngest qualifier to debut in the main draw since Michelle Larcher de Brito in 2009.[6][7][8][9] This was the second time in the Open Era when only one out of the top ten seeds advanced to the fourth round of a major, after 2018 Wimbledon.[10] +Top seed Iga Swiatek of Poland faces 43rd-ranked Czech Karolina Muchova in the French Open women’s singles final, live on NBC Sports, NBCSports.com/live, the NBC Sports app and Peacock on Saturday at 9 a.m. ET. Swiatek can join Serena Williams and Justine Henin as the lone women to win three or more French Opens since 2000. Having turned 22 last week, she can become the youngest woman to win three French Opens since Monica Seles in 1992 and the youngest woman to win four Slams overall since Williams in 2002. FRENCH OPEN: Broadcast Schedule | Men’s Draw Swiatek didn’t lose a set en route to the final, losing just 23 games in her first six matches, exactly how she marched to her first Roland Garros final in 2020. In the final she gets a surprise. Muchova upset No. 2 seed Aryna Sabalenka of Belarus in the semifinals to reach her first major final. No. 3 Jessica Pegula, the highest-seeded American man or woman, was eliminated in the third round. No. 4 Elena Rybakina of Kazakhstan, who has three wins over Swiatek this year, withdrew before her third-round match due to illness. No. +Defending champion Iga Świątek[1] defeated Karolína Muchová in the final, 6–2, 5–7, 6–4 to win the women's singles tennis title at the 2023 French Open. It was her third French Open title and fourth major title overall.[2] Świątek became the third woman in the Open Era (after Monica Seles and Naomi Osaka) to win her first four major finals, and the youngest woman to win four majors since Serena Williams in 2002.[3] Świątek also became the first player to defend the French Open title since Justine Henin in 2007, and the first woman to defend a major title since Serena Williams at the 2016 Wimbledon Championships. Świątek dropped just one set en route to the title, to Muchová in the final. Świątek retained the world No. 1 ranking after she reached the final and Aryna Sabalenka lost in the semifinals.[4][5][6] 12 of the 32 seeds reached the third round, the fewest since the French Open's draw was increased to 32 seeds in 2002.[7] Elina Avanesyan became the first lucky loser to reach the fourth round since Nicole Jagerman in 1988, and the first at any major since María José Gaidano at the 1993 US Open.[8] +Subscribers Only Have you subscribed yet? Buy Print Updated : Jun 11, 2023 03:44 IST Comments Follow Us SHARE READ LATER Poland’s Iga Swiatek celebrates with the Suzanne Lenglen Cup after beating Karolina Muchova of Czech Republic in the Women's Singles Final match of French Open 2023 at Roland Garros on Saturday in Paris. Welcome to Sportstar’s highlights of the French Open 2023 women’s singles final in which Iga Swiatek beat Karolina Muchova. This was Nihit Sachdeva taking you through the action as it unfolded on Court Philippe-Chatrier at Roland-Garros, Paris.(* denotes server) Tomorrow is the last day of this year’s French Open and there are two finals in store for the tennis fans. First up, it will be the women’s doubles final between the Canadian-American pair of Leylah Fernandez and Taylor Townsend and the Chinese Taipei and Chinese duo of Su-Wei Hsieh and Xinyu Wang. Post that will be the big event - the men’s singles final between Novak Djokovic, who is chasing a record-breaking 23rd Grand Slam title, and Norway’s Casper Ruud. Do join us for live coverage. Till then, take care and stay safe! “First of all, congrats to Karolina. +Defending champion Iga Świątek[1] defeated Karolína Muchová in the final, 6–2, 5–7, 6–4 to win the women's singles tennis title at the 2023 French Open. It was her third French Open title and fourth major title overall.[2] Świątek became the third woman in the Open Era (after Monica Seles and Naomi Osaka) to win her first four major finals, and the youngest woman to win four majors since Serena Williams in 2002.[3] Świątek also became the first player to defend the French Open title since Justine Henin in 2007, and the first woman to defend a major title since Serena Williams at the 2016 Wimbledon Championships. Świątek dropped just one set en route to the title, to Muchová in the final. Świątek retained the world No. 1 ranking after she reached the final and Aryna Sabalenka lost in the semifinals.[4][5][6] 12 of the 32 seeds reached the third round, the fewest since the French Open's draw was increased to 32 seeds in 2002.[7] Elina Avanesyan became the first lucky loser to reach the fourth round since Nicole Jagerman in 1988, and the first at any major since María José Gaidano at the 1993 US Open.[8] +She is a Polish player who has won the singles title three times, twice in the French Open in 2020 and 2022, and once in the US Open in 2022. Rafael Nadal has won the French Open 14 times in the men’s singles category. He is also the 2022 French Open winner in men’s singles. Nadal is touted as the greatest of all time because of his exceptional tennis career. He won his 22nd Grand Slam title after winning the French Open in 2022. The French Open winners in women’s doubles were Wang Xinyu/Hsieh Su-wei. In men’s doubles, Ivan Dodig/Austin Krajicek won against Sander Gillé/Karolína Muchová. The 2023 French Open winners were awarded their trophies at the award ceremony. We have shared the list of 2023 French Open winners here. Find the names of the winners in men’s and women’s singles, men’s and women’s doubles and mixed doubles categories here. +French Open Category Winner Runner-up Final Score Men's singles Novak Djokovic Casper Ruud 7–6, 6–3, 7–5 Men's doubles Ivan Dodig Austin Krajicek Joran Vliegen Sander Gillé 6–3, 6–1 Women's singles Iga Świątek Karolína Muchová 6–2, 5–7, 6–4 Women's doubles Wang Xinyu Hsieh Su-wei Taylor Townsend Leylah Annie Fernandez 1–6, 7–6, 6–1 Mixed doubles Miyu Kato Tim Pütz Bianca Andreescu Michael Venus 4–6, 6–4, 10–6 France has not only produced the game but also has given the world some amazingly talented French Open Winners and thrilling tennis tournaments. The French Open or Roland Garros is one of the four annual Grand Slam tournaments. We have shared more about the 2023 French Open Winners here: The list of 2022 French Open Winners for the men’s and women’s singles champions, men’s and women’s doubles champions and mixed champions is shared below. +Novak Djokovic defeated Casper Ruud in the final, 7–6(7–1), 6–3, 7–5 to win the men's singles tennis title at the 2023 French Open. It was his third French Open title and his record-breaking 23rd men's singles major title overall, surpassing the record he previously held jointly with Rafael Nadal.[1] With the victory, Djokovic became the first man to achieve a triple career Grand Slam, and became the oldest French Open champion at the age of 36 years and 20 days.[2] Nadal was the reigning champion,[3] but withdrew due to a left hip injury. This was the first time the 14-time champion missed the tournament since his debut in 2005.[4] With his withdrawal, Nadal fell out of the top 100 of the ATP rankings for the first time since 2003.[5] By winning the title, Djokovic reclaimed the world No. 1 singles ranking from Carlos Alcaraz; Daniil Medvedev and Stefanos Tsitsipas were also in contention for the top ranking at the beginning of the tournament.[6][7] Medvedev's loss to Thiago Seyboth Wild in the first round marked the first time since 2000 that the second seed (then Pete Sampras) lost in the opening round. +The first set was tight until 6-all, and then Djokovic simply took over, dominating the tiebreaker — as he often does — and the second set, before grabbing 12 of the last 13 points to seal the victory. That allowed Djokovic to break his tie with Nadal at 22 majors. Federer, who announced his retirement last year, is next among men with 20, while Djokovic’s idol, Pete Sampras, is fourth with 14. And to think: Sampras set that mark by winning his last Slam in what turned out to be the last match of his career, the 2002 U.S. Open final. Here we are, just 21 years later, and not only did three guys surpass Sampras, but Djokovic moved way past him. Serena Williams finished her career last year with 23 majors, the most for a woman in the Open era. Margaret Court won 24, some during the amateur era. Djokovic’s win also moved back into the top spot of the ATP rankings, jumping from No. 3 to replace Carlos Alcaraz at No. 1. Djokovic beat Alcaraz in the semifinals. The women’s singles title in Paris was won on Saturday by Iga Swiatek, who defeated Karolina Muchova 6-2, 5-7, 6-4. +LONDON, ENGLAND - JULY 13: Ons Jabeur of Tunisia celebrates victory against Aryna Sabalenka following the Women’s Singles Semi Finals on day eleven of The Championships Wimbledon 2023 at All England Lawn Tennis and Croquet Club on July 13, 2023 in London, England. (Photo by Mike Hewitt/Getty Images) Getty Images Ons Jabeur plays Marketa Vondrousova in the Wimbledon women’s singles final, each seeking a first major title. Jabeur, the Wimbledon and U.S. Open runner-up last year, took out No. 2 seed Aryna Sabalenka in a three-set semifinal. Jabeur, the No. 6 seed from Tunisia, lost the 2022 Wimbledon final from a set up on Kazakh Elena Rybakina. She is the lone African woman, and lone Arab or North African man or woman, to reach a major final. The Czech Vondrousova, the 2019 French Open runner-up, became the first unseeded Wimbledon women’s finalist since Billie Jean King in 1963. At No. 42 in the world, she is the second-lowest-ranked Wimbledon women’s finalist since the rankings were created in 1975. Serena Williams was No. 181 when she made the 2018 final coming back from childbirth. World No. +1 Iga Swiatek was taken out in the quarterfinals by Ukrainian mom Elina Svitolina. Svitolina, the former world No. 3, lost to Vondrousova in the semis. No. 7 seed Coco Gauff was upset in the first round by Sofia Kenin, the last American woman to win a major at the 2020 Australian Open. Though Serena Williams retired last year, older sister Venus, 43, received a wild card to compete in her 24th Wimbledon singles draw. She was eliminated in the first round by Svitolina. 2023 Wimbledon Women’s Singles Draw (may need to zoom in on desktop) DISCLAIMER: This site and the products offered are for entertainment purposes only, and there is no gambling offered on this site. This service is intended for adult audiences. No guarantees are made for any specific outcome. If you or someone you know has a gambling problem, please call 1-800-GAMBLER. PointsBet is our Official Sports Betting Partner and we may receive compensation if you place a bet on PointsBet for the first time after clicking our links. +LONDON, ENGLAND - JULY 13: Ons Jabeur of Tunisia celebrates victory against Aryna Sabalenka following the Women’s Singles Semi Finals on day eleven of The Championships Wimbledon 2023 at All England Lawn Tennis and Croquet Club on July 13, 2023 in London, England. (Photo by Mike Hewitt/Getty Images) Getty Images Ons Jabeur plays Marketa Vondrousova in the Wimbledon women’s singles final, each seeking a first major title. Jabeur, the Wimbledon and U.S. Open runner-up last year, took out No. 2 seed Aryna Sabalenka in a three-set semifinal. Jabeur, the No. 6 seed from Tunisia, lost the 2022 Wimbledon final from a set up on Kazakh Elena Rybakina. She is the lone African woman, and lone Arab or North African man or woman, to reach a major final. The Czech Vondrousova, the 2019 French Open runner-up, became the first unseeded Wimbledon women’s finalist since Billie Jean King in 1963. At No. 42 in the world, she is the second-lowest-ranked Wimbledon women’s finalist since the rankings were created in 1975. Serena Williams was No. 181 when she made the 2018 final coming back from childbirth. World No. +1 Iga Swiatek was taken out in the quarterfinals by Ukrainian mom Elina Svitolina. Svitolina, the former world No. 3, lost to Vondrousova in the semis. No. 7 seed Coco Gauff was upset in the first round by Sofia Kenin, the last American woman to win a major at the 2020 Australian Open. Though Serena Williams retired last year, older sister Venus, 43, received a wild card to compete in her 24th Wimbledon singles draw. She was eliminated in the first round by Svitolina. 2023 Wimbledon Women’s Singles Draw (may need to zoom in on desktop) DISCLAIMER: This site and the products offered are for entertainment purposes only, and there is no gambling offered on this site. This service is intended for adult audiences. No guarantees are made for any specific outcome. If you or someone you know has a gambling problem, please call 1-800-GAMBLER. PointsBet is our Official Sports Betting Partner and we may receive compensation if you place a bet on PointsBet for the first time after clicking our links. +Three-time defending champion Novak Djokovic defeated Nick Kyrgios in the final, 4–6, 6–3, 6–4, 7–6(7–3) to win the gentlemen's singles tennis title at the 2022 Wimbledon Championships. It was his seventh Wimbledon title and 21st major singles title overall.[1] Djokovic became the fifth man in the Open Era to record a streak of at least four consecutive titles at one major.[2] By reaching his 32nd men's singles major final, he surpassed the all-time record he had jointly held with Roger Federer.[3] Djokovic also became the first player (male or female) to win 80 matches at all four majors with his first-round win over Kwon Soon-woo.[4] Because no ranking points were awarded for the tournament in response to its banning of Russian and Belarusian players, Djokovic dropped out of the top five in ATP rankings after the tournament.[5] Kyrgios became the first unseeded man to reach a major final since Jo-Wilfried Tsonga at the 2008 Australian Open, the first Australian man to reach a major final since Lleyton Hewitt at the 2005 Australian Open, and the first unseeded or Australian man to reach the Wimbledon final since Mark Philippoussis in 2003.[6] +Djokovic played Kyrgios in the final after the volatile Australian advanced from the semifinals without playing because of an injury suffered by two-time champion Rafael Nadal. The popular Spaniard will not be competing in 2023 because he has undergone surgery on a hip problem, leading him to hint that 2024 will be his last in the sport. Elena Rybakina won her first grand slam title and became the first Kazakhstani to win a major when she recovered from a set down to beat Jabeur in the women's singles final. Tunisian Jabeur, who was aiming to become the first African or Arab to win a grand slam crown in the Open Era, was 14 places above Rybakina in the rankings. Simona Halep, champion in 2019, was Rybakina's victim in the quarterfinals, losing in straight sets to the player who would succeed the retired Ash Barty as champion. A post shared by Elena Rybakina 🐠 (@lenarybakina) Roger Federer is the most successful men's singles player at Wimbledon. His eight titles include a remarkable run of five in a row from 2003. Federer's retirement in 2022 means Djokovic needs to win Wimbledon once more to draw level with the Swiss superstar's record. The winner of the last four editions, it is conceivable that the Serbian, 36, will become the outright record holder before he contemplates retirement. +Carlos Alcaraz defeated the four-time defending champion Novak Djokovic in the final, 1–6, 7–6(8–6), 6–1, 3–6, 6–4 to win the gentlemen's singles tennis title at the 2023 Wimbledon Championships. It was his first Wimbledon title and second major singles title overall.[1] Alcaraz, Djokovic, and Daniil Medvedev were in contention for the men's singles No. 1 ranking. Alcaraz retained the No. 1 ranking with his victory, [2][3] and became the first player to qualify for the year-end championships.[4] For the first time since Lleyton Hewitt in 2002, the top seed and winner of the event was not a member of the Big Four. Stan Wawrinka was attempting to complete the career Grand Slam, but was defeated by Djokovic in the third round. Djokovic's loss ended his third major bid to become the first man to win all four Grand Slam events in a calendar year since Rod Laver in 1969. He previously lost his first attempt at Wimbledon in 2016, and his second, at the US Open, in 2021. Click on the seed number of a player to go to their draw section. The following are the seeded players. Seedings are based on ATP rankings as of 26 June 2023. +Rankings and points before are as of 3 July 2023. No ranking points were awarded for the 2022 tournament due to the ban on Russian and Belarusian players.[5] However, because the tournament takes place one week later this year, players are defending points from tournaments that took place during the week of 11 July 2022 (Båstad, Newport, and 2022 ATP Challenger Tour tournaments). Players who are not defending any points from those tournaments will have their 19th best result (shown in brackets in the table below) replaced with their points from the 2023 Wimbledon Championships. † The player is defending points from Båstad, Newport, or one or more ATP Challenger Tour events (Porto, Rome, Lüdenscheid or Amersfoort). The following players would have been seeded, but withdrew before the tournament began. † The player is defending points from Båstad or Braunschweig. Source:[6] The entry list was released based on the ATP rankings for the week of 22 May 2023.[7][8] +She is tied for third with Angelique Kerber among active players. Only Venus Williams (7) and Naomi Osaka (4) have more.  4 – Number of sets that Swiatek lost on clay in 2022, in 19 matches.  5 – Number of times Swiatek won a set by 6-0 (three times) or 6-1 (twice) in a final in 2022.  6 – Number of titles that Swiatek won during her 37-match winning streak this season – Doha, Indian Wells, Miami, Stuttgart, Rome and Roland-Garros.  7 – Number of works of literature Swiatek reads each month (just kidding, we couldn’t find a 7).  8 – Swiatek mustered an 8-1 record in finals to improve to 11-2 lifetime in tour-level title matches.  10 – Number of victories that Swiatek earned from a set down in 2022, compared to seven in 2020 and 2021 combined.  15 – Number of top 10 wins that Swiatek reeled off in succession, from January to November. match win streak against top 10 opposition. Per WTA Media, only Martina Navratilova (20) and Steffi Graf (17) produced bigger streaks against the top 10 in the last 40 years. +While Swiatek is a heavy favorite and coming off a monumental season, there are a few others who finished 2022 on even hotter streaks that they will look to continue in the new year. Caroline Garcia, Felix Auger-Aliassime and Holger Rune combined for seven individual titles from August through the end of the season. No woman was more dominant on the hard court during the latter part of 2022 than Garcia, who won the title in Cincinnati, notched the first major semifinal appearance of her career at the US Open and concluded the year with a WTA Finals trophy -- and a matching cowboy hat. Auger-Aliassime, 22, notched three consecutive titles in October, and helped lead Canada to its first Davis Cup victory and Team World to a Laver Cup title. During that dominant stretch, he defeated Djokovic, Nadal and Alcaraz and made it clear he could beat just about anyone. But the man who stopped Auger-Aliassime's win streak? That would be 19-year-old Rune. After losing to the Canadian at the Swiss Indoors final, Rune got his revenge at the semifinals of the Paris Masters the very next week. Rune then beat Djokovic, 3-6, 6-3, 7-5, to win the 1000-level title, his second title of the fall. +Advertisement Supported by Swiatek, the world No. 1, beat Jabeur in straight sets to capture her first U.S. Open singles title. It is her third Grand Slam title and first on a surface other than clay. By Matthew Futterman The 2022 U.S. Open will always be remembered — outside of Poland, at least — for its farewell to Serena Williams, long the queen of tennis and the greatest women’s player ever. Beware, though, after Poland’s Iga Swiatek won the women’s singles title Saturday, beating Ons Jabeur of Tunisia Saturday afternoon at Arthur Ashe Stadium, the sport may have a new ruler on its hands. Swiatek, the world No. 1, lived up to her billing and beat Jabeur, 6-2, 7-6(5), to capture her first U.S. Open singles title. It was the third Grand Slam title of Swiatek’s brief career and her first on a surface other than clay. When Jabeur’s last forehand sailed long, Swiatek collapsed on her back after a 1 hour, 51 minute duel that got dangerously close as the afternoon wore on. +Serena Williams, the Open Era record 23-time major singles champion, was the story of the first week of the U.S. Open after announcing plans to soon retire from tennis. She won her first two matches at what is expected to be her last tournament, including over No. 2 seed Anett Kontaveit, before falling to Ajla Tomljanovic. Coco Gauff, the French Open runner-up and, at 18, the youngest player in the top 100, lost in the quarterfinals to Frenchwoman Caroline Garcia. MORE: U.S. Open Men’s Singles Draw OlympicTalk is on Apple News. Favorite us! 2022 U.S. Open Women’s Singles Draw DISCLAIMER: This site and the products offered are for entertainment purposes only, and there is no gambling offered on this site. This service is intended for adult audiences. No guarantees are made for any specific outcome. If you or someone you know has a gambling problem, please call 1-800-GAMBLER. PointsBet is our Official Sports Betting Partner and we may receive compensation if you place a bet on PointsBet for the first time after clicking our links. +Carlos Alcaraz defeated Casper Ruud in the final, 6–4, 2–6, 7–6(7–1), 6–3 to win the men's singles tennis title at the 2022 US Open. It was his first major title, and he claimed the world No. 1 singles ranking with the win.[1] Ruud, Rafael Nadal, Daniil Medvedev, and Stefanos Tsitsipas were also in contention for the top position.[2] Alcaraz saved a match point en route to the title, in the quarterfinals against Jannik Sinner.[3] Alcaraz became the youngest major champion since Nadal at the 2005 French Open, the youngest US Open champion since Pete Sampras in 1990, the first man born in the 2000s to win a major singles title, and the youngest man to be ranked world No. 1 in tennis history, surpassing the record Lleyton Hewitt held.[4] Alcaraz also became the third player to reach a major final having won three consecutive five-set matches, after Stefan Edberg at the 1992 US Open and Andre Agassi at the 2005 US Open.[5] At 23 hours and 39 minutes of play duration across his seven matches, Alcaraz spent the longest time on court in major history. +Ruud became the first Norwegian man to reach the championship match.[6] Daniil Medvedev was the defending champion,[7] but lost in the fourth round to Nick Kyrgios.[8] Medvedev became the first man outside the Big Four to be the top seed at a major since Andy Roddick at the 2004 Australian Open.[9] This marked the third consecutive US Open where a player claimed his maiden major title.[10] The quarterfinal line-up guaranteed a first-time major champion,[11] while the semifinal line-up marked the first time all four players made their US Open semifinal debut since the inaugural edition in 1881.[12] Frances Tiafoe became the first American man to reach the US Open semifinals since Roddick in 2006, and the semifinals of any major since John Isner at the 2018 Wimbledon Championships. Tiafoe also became the first African American man to reach the US Open semifinals since Arthur Ashe in 1972 and the first African American man to reach any Grand Slam semifinal since MaliVai Washington in 1996.[13] Sinner became the youngest man to reach the quarterfinals at all four majors since Novak Djokovic in 2008.[14] Nadal was vying for a record-extending 23rd major singles title, but lost in the fourth round to Tiafoe. +The 2022 Virginia Tech Hokies football team represented Virginia Tech during the 2022 NCAA Division I FBS football season. The Hokies were led by first-year head coach Brent Pry. They played their home games at Lane Stadium in Blacksburg, Virginia, competing as members of the Atlantic Coast Conference (ACC). The Hokies finished the 2021 season 6–7, 4–4 in ACC play to finish in a tie for third place in the Coastal division.[1] They received an invitation to the 2021 Pinstripe Bowl where they lost to Maryland 54–10.[2] On November 16, 2021, the school fired head coach Justin Fuente after six years as head coach.[3] Assistant coach J. C. Price was named the interim coach and coached the Hokies in the Pinstripe Bowl.[4] On November 30, the school named Penn State defensive coordinator Brent Pry the team's new head coach.[5] [7][8] The game was canceled due to the 2022 University of Virginia shooting, which killed 3 players on Virginia's team. Roster Last update: 5/28/23 +The problem has always been that Virginia Tech’s Offense has been consistently unsophisticated and tragically underperforming for nearly a generation. Even in the heyday years the offense was never much to write home to Mommy about. It always relied heavily on the physical talents of a few key players and scoring just enough points to win close games that the defense kept in check. If the QB was good and had some good receivers and running backs the rather pedestrian affair managed to get the job done and a few folks drafted into the NFL. As far as scheme, game planning, and play calling, Tech’s “Theory of Offense” managed to be run the ball twice throw on third down and do that until stopped by the goal line or a 4th down. Look, in the “old days” of college football that formula, and a great defense and surprising special teams netted ten-win seasons and bowl games. It’s not those days anymore. Offenses that do not plan to score 35-points or more, every single game, are not going to get much further than a booger bowl and a bag of goodies for showing up around the holidays. Before we launch into the charts for players, let’s look at the critical two coaches who will have the most to say about how the 2022 Hokie Offense runs, and in particular how the subject of this article will be managed. +May 29 - 31, 2024 May 29 - 31, 2024 Austin, Texas  Austin, TX About Overview Who We Are 2023 Videos Participate Register Now Marketing Partnerships Terms Merchandise Sponsors Become a Sponsor Add two passes to your cart and enter code 2FOR1 at checkout. Consensus 2023 videos are now available to watch with a free CoinDesk account. Consensus is the world's largest, longest-running and most influential gathering that brings together all sides of the cryptocurrency, blockchain and Web3 community. From hard-hitting conversations with visionary speakers to hands-on workshops aimed at solving industry challenges, developers, investors, founders, brands, policymakers and more will walk away with the tools and insights needed to continue laying the foundation of a more decentralized future. It is called “Consensus” for a reason. This event is the primary forum where the industry comes together to discuss the most pivotal matters of the day, highlight the biggest successes and debate the most critical conversations. Consensus 2024 is your chance to be a part of the most important conversation in crypto and Web3. Watch highlights from Consensus 2023! Consensus 2023 was the place for dealmaking as the ecosystem continues to mature. Very impressive. What I love about Consensus is that it’s a place for people from all walks of life. You can connect with people from different age groups and professional backgrounds and that is so important. +While the emergence and growth of Web3-focused projects are notable, it’s also important to point out that current market conditions have been challenging for other key players. Peter Wall, CEO of Argo Blockchain — a cryptocurrency mining company — told Cointelegraph that many Bitcoin miners raised equity in 2021, but this has become difficult for some, given the bear market.  “There are only two ways for miners to raise capital now, which is either through debt or by selling Bitcoin,” he said. Although this may be, Wall elaborated that only miners with a reputable track record will receive loans. “They need to be able to execute with clear plans, while not being over committed to machine purchases and bills they can’t pay.” Regulations were also heavily discussed at the conference. This shouldn’t come as a surprise, as a number of key regulatory events took place leading up to the event. For example, the bipartisan crypto bill, also known as the “Responsible Financial Innovation Act,” was introduced in the United States Senate on June 7, 2022. According to a statement, the bipartisan bill sponsored by senators Cynthia Lummis of Wyoming and Kirsten Gillibrand of New York, “addresses CFTC and SEC jurisdiction, stablecoin regulation, banking, tax treatment of digital assets, and interagency coordination. +The 2022 Kentucky Derby (officially, the 148th Running of the Kentucky Derby Presented by Woodford Reserve[1]) took place on Saturday, May 7, 2022, at Churchill Downs in Louisville, Kentucky. It was the 148th running of the Kentucky Derby, a 1+1⁄4 miles (2.0 km) Grade I stakes race for three-year-old Thoroughbreds. The Derby is held annually at Churchill Downs on the first Saturday in May since its inception in 1875. The 20 horses that ran in the Derby qualified by earning points in the 2022 Road to the Kentucky Derby. The two favorites for the 2022 Kentucky Derby were Epicenter, the winner of the Louisiana Derby, and Zandon, the winner of the Blue Grass Stakes. Both horses finished behind winner Rich Strike, who had only entered the race after a late scratch. Entering the race at odds of 80–1, Rich Strike's victory was the second-largest upset in Derby history. It was the first Kentucky Derby victory for his trainer Eric Reed, as well as the first graded stakes win in any race for his jockey Sonny Leon. Participation in the Kentucky Derby is restricted to three-year-old Thoroughbreds. +The 2023 Kentucky Derby is near. Its rich history, the high stakes, and its stature has made it one of the most prestigious horse races in the world. This importance makes the whole day an event in itself, with a number of traditions and festivities leading up to the race itself, starting two weeks before the race, with the Kentucky Derby Festival. The day starts with a “dawn patrol”, where the horses that will be racing are taken out for a morning workout. During this routine, the trainers and owners have a chance to see how their horses are feeling and make any last-minute adjustments to their strategy. A few races precede the Kentucky Derby, which is run in the late afternoon with the horses parading onto the track to the sound of “My Old Kentucky Home”, the state anthem. The race itself is short, only lasting around two minutes, which is the reason why the race is known as “The Most Exciting Two Minutes in Sports”. Once the race ends, the winner is draped in a blanket of roses and presented with the coveted Kentucky Derby trophy. The purse, or prize, for the race will be $3 million. The 2023 Kentucky Derby will take place on Saturday, May 6, 2023. The Kentucky Derby almost always takes place on the first Saturday in May, capping the two-week-long Kentucky Derby Festival, an annual festival held in the weeks preceding the day of the main race. +Today after the bell American electric vehicle giant Tesla reported its first-quarter performance. The company detailed revenues of $18.76 billion and $2.86 worth of earnings per share, up from its Q1 2021 results of top line worth $10.389 billion and earnings per share of 93 cents.  Tesla said it faced several challenges in the first quarter related to global supply chain, transportation, labor and manufacturing issues and that the problems could limit its ability to run its factories at full capacity. The automaker also warned of continued supply constraints that could hamper future production, despite the recent openings of its Gigafactories in Berlin and Texas that will build the Model Y. “Our own factories have been running below capacity for several quarters as supply chain became the main limiting factor, which is likely to continue through the rest of 2022,” the automaker said in its financial outlook. Tesla reported $3.32 billion worth of net income, a 658% increase from the $438 million reported for the same period last year. The company’s profit result stands out as it is by far the company’s largest in recent history, towering around $1 billion above its Q4 2021 net income results. The figures bested analysts expectations in both revenue and net income terms. Per data from Yahoo Finance, analysts expected that Tesla would generate Q1 2022 revenues of $17.8 billion, and $2.26 in earnings per share. +Tesla (TSLA) has released its financial results and shareholders letter for the first quarter of 2022 after market close today. We are updating this post with all the details from the financial results, shareholders’ letter, and the conference call later tonight. Refresh for the latest information. Yesterday, we posted our Tesla Q1 2022 earnings preview with Wall Street expectations and crowdsourced expectations. The Wall Street consensus for this quarter was $17.659 billion in revenue and earnings of $2.26 per share. The expectations represent a massive year-over-year increase after Tesla achieved a new record for deliveries with over 310,000 deliveries during the quarter. Tesla released the results today and beat Wall Street expectations on both revenue and earnings with $18,756 billion in revenue and $3.22 per share (non-GAAP) during the first quarter of 2022. Tesla’s stock (TSLA) was up by as much as 4% in aftermarket trading after investors learned of the results. Here’s Tesla’s financial summary from the quarterly results (last quarter in red): The automaker managed to increase operating income to $3.6 billion during the quarter. Probably the most impressive metric is Tesla achieving 32.9% GAAP Automotive gross margin in the quarter. That’s despite supply chain issues and increasing costs, but Tesla has been known to quickly pass those customers with price increases and it is being reflected in its margins. +Splatoon 3 also features a Story Mode where Agent 3 will have to face off against the Octarians. Learn the secrets behind Alterna, the Fuzzy Ooze, and how they will lead into the "Return of the Mammalians.” The co-op mode Salmon Run also makes its return where you'll have to team up and fend off waves of dangerous Salmonid bosses!  Latest News and Events Pokemon Splatfest Dates and Time Updated 10/9/2022 Splatoon 3 is celebrating the upcoming release of Pokemon Scarlet and Violet! Read on to learn the dates and time of the upcoming Pokemon Splatfest Available Platforms Updated 9/10/2022 Splatoon 3 will be released exclusively for the Nintendo Switch on September 9, 2022! Release Date Countdown Updated 9/14/2022 Splatoon 3 will release on September 9, 2022. See more details on its release and a countdown to its release date! Splatoon 3 Direct Summary Updated 9/27/2022 The Splatoon 3 Direct will came out on August 10, 2022. See all the new features introduced in the direct! Splatfest World Premiere Guide Updated 8/31/2022 Splatfest World Premiere is a limited-time event available in the demo for Splatoon 3. Find out how to download the demo and all the contents included! +When does Splatoon 3 come out? Here's what you need to know. When is the Splatoon 3 release date? And what precise time does the game come out in the UK? Those questions now have answers, and those answers won't keep you waiting too long. The third game in this paint-fighting franchise has been hotly-anticipated for quite some time now, and you can check out our Splatoon 3 preview to see what we thought after a hands-on session at Nintendo HQ (spoiler alert, we liked it). Or if you fancy yourself as a truly hardcore Splatoon fan, don't forget there's a special edition Splatoon 3 version of the Nintendo Switch OLED console. (It's available from Amazon for £319.99 if you want to take a look at it.) We played Splatoon 3 on an OLED Switch during our preview session. And as we wrote at the time, "It looked great! The colours really popped and it was still easy to follow the action as we went for a couple more rounds of family-friendly fun." And if you're ready to start playing yourself, read on! The Splatoon 3 release date will take place on Friday 9th September 2022. The game has been hotly anticipated for quite some time now, and we're very much looking forward to seeing it out in the world being devoured by fans. Bring it on! +15][16] The combined entity raised $125 million of new equity funding and received $350 million in credit led by JPMorgan.[17] In December 2021, amid financial shortcomings following the merger, Jahm Najafi's Najafi Companies announced that it had reached an agreement to acquire STX Entertainment from ErosSTX for $173 million.[18] However, in late January 2022, Lionsgate also emerged as a potential suitor, looking to absorb either part or whole of STX, but the deal was later rejected, leaving only Najafi as a potential suitor.[19][20] In April 2022, Najafi Companies completed its acquisition of STX Entertainment. Eros Media World will retain a 15% non-voting stake in the company.[21][22] In July 2022, shortly after STX's motion picture chairman Adam Fogelson departed for the studio, Deadline reported that STX was in talks with Lionsgate over a potential film distribution deal.[23] Shortly after, it was reported that STX Entertainment's U.K. offices, including the London office housing STXinternational's headquarters, were gradually shutting down.[24] Following the departure of STXinternational head John Friedberg to join Black Bear Pictures' international division, it was announced the latter company was nearing a deal with STX to handle part of its slate internationally. +STX Entertainment is an American entertainment and media company. Founded in March 2014 by film producer Robert Simonds, the studio produces film, television, and digital media projects. In April 2020, STX announced that it would merge with the Indian studio Eros International plc. The merger was completed in July 2020, and STX became a division of ErosSTX. In December 2021, Jahm Najafi announced his intention to acquire STX from the merged company for $173 million–a sale completed in April 2022. Eros remains a minority, non-voting shareholder.[1] In 2012, Simonds and McGlashan began work on conceptualizing a media company based on the idea of producing medium-budget projects with a star attached, a method that had gone out of style with Hollywood studios. The conversation led to the launch of STX Entertainment in 2014, with the mission to finance, develop, produce, market, and distribute star-driven content around the world.[2][3] Investors in the company included Hony Capital, Tencent, PCCW, TPG Growth, and Liberty Global. Individual investors include Gigi Pritzker, Beau Wrigley, and Dominic Ng.[4][5][6] In September 2017, it was reported that STX was considering an initial public offering on the Hong Kong Stock Exchange (SEHK). +Salt Lake City, UT—The Hatch Foundation sadly announces the passing of Senator Orrin G. Hatch—the Chairman Emeritus of the Hatch Foundation, former President Pro Tempore of the United States Senate, and longest-serving Senator in Utah history (1977-2019). Senator Hatch passed away at 5:30 p.m. on Saturday, April 23, 2022 in Salt Lake City, Utah, surrounded by family. Upon the Senator’s passing, the Hatch Foundation issued the following statements:  “Senator Orrin G. Hatch personified the American Dream,” said Matt Sandgren, Executive Director of the Hatch Foundation. “Born the son of a carpenter and plaster lather, he overcame the poverty of his youth to become a United States Senator. With the hardships of his upbringing always fresh in his mind, he made it his life’s mission to expand freedom and opportunity for others—and the results speak for themselves. From tax and trade to religious liberty and healthcare, few legislators have had a greater impact on American life than Orrin Hatch. He was a profoundly positive influence in the lives of those he served, whether they were the constituents he helped over four decades of casework, the hundreds of interns he sponsored in both Utah and DC, or the robust network of Hatch staffers who carry on his legacy to this day. Senator Hatch touched the hearts of countless individuals, and I know I speak for all of them when I say he will be dearly missed. +He was first elected in 1976 and announced his retirement in January 2018. More from NBC NewsFrance's Marine Le Pen has American liberals worriedMigrants say treatment of Ukrainians at U.S.-Mexico border illustrates double standardSearch continues for soldier who jumped into Rio Grande in Texas to save migrants He referred to his past as an amateur boxer in making the announcement, saying in a video: "Every good fighter knows when to hang up the gloves. And for me that time is soon approaching." Hatch was born in Homestead Park, Pennsylvania, in 1934. Raised in what he's called "a ramshackle house" during the Great Depression, Hatch went on to serve as chairman of three different Senate committees and put his stamp on major pieces of legislation across the policy spectrum. Hatch graduated from Brigham Young University in 1959 with a bachelor's in history, and in 1969 moved to Utah. He is survived by his wife, Elaine, and their six children. Funeral arrangements will be announced at a later date, the Hatch Foundation said. Utah Gov. Spencer Cox tweeted that "Utah mourns with the Hatch family." "This breaks my heart. Abby and I are so grateful for the opportunities we had to spend time with this incredible public servant. He was always so kind and generous with his time and wisdom," Cox, a Republican, wrote. Got a confidential news tip? We want to hear from you. +David Folkenflik Chris Licht became CNN's chairman and CEO in May. A few months later, high-profile departures and arrivals may signal how he will lead the network. AILSA CHANG, HOST: This week brought news of the death of CNN founding anchor Bernard Shaw, known for pursuing the news and avoiding flash. And in recent days, CNN's new leader has made moves that he says will return the cable channel closer to its news-driven roots. Some of his changes have sparked concerns inside and outside the network. And for more on that, we have NPR media correspondent David Folkenflik. Hey, David.DAVID FOLKENFLIK, BYLINE: Hey, Ailsa.CHANG: OK. So tell us, who is CNN's new CEO and chairman Chris Licht, and how does he want to reshape CNN exactly?FOLKENFLIK: Sure. Chris Licht came over after stints at CBS where he oversaw the Colbert "Late Show." And he had also been at CBS News, and before that, MSNBC. He's promising in this incarnation at CNN that he's going to make the channel less opinion driven, less perhaps focused on Donald Trump as the one true story that they really rode during the Trump era. This has been a passion of Discovery CEO David Zaslav and Discovery's biggest investor, John Malone. Let's not forget that they just took over Time Warner and CNN recently. +In the interim, Zaslav said the leadership team will be comprised of three veteran network executives: Amy Entelis, executive vice president of talent and content development; Virginia Moseley, executive vice president of editorial; and Eric Sherling, executive vice president of U.S. programming. Leavy will continue overseeing the company’s commercial activities. “We have great confidence in this group and will fully support them until a new CEO is named,” Zaslav said in an emailed statement to CNN staff. “We are in good hands, allowing us to take the time we need to run a thoughtful and thorough search for a new leader.” Licht’s brief and rocky tenure as the head of the network came after he found tremendous success in morning news, producing MSNBC’s “Morning Joe” before he revamped “CBS Sunday Morning.” Most recently, before joining CNN, Licht led Colbert’s program while it became the highest-rated late-night show on television. Licht was never able to recreate that magic at CNN, stumbling soon after taking the job and facing enormous criticism. Licht’s first task was dismantling CNN+, which had been hailed by CNN’s previous leadership as the network’s streaming future. Staffers knew that the decision to axe the streamer wasn’t Licht’s own decision, but, nevertheless, the shuttering of the much-hyped service dealt him a difficult opening hand. Employees, however, kept an open mind. +French polling agencies are projecting that centrist incumbent Emmanuel Macron will win France’s presidential runoff Sunday, beating far-right rival Marine Le Pen in a tight race that was clouded by the Ukraine war and saw a surge in support for extremist ideas. (AP Photo/Francois Mori) Far-right leader Marine Le Pen smiles as she leaves after speaking after the early result projections of the French presidential election runoff were announced in Paris, Sunday, April 24, 2022. French polling agencies are projecting that centrist incumbent Emmanuel Macron will win France’s presidential runoff Sunday, beating far-right rival Marine Le Pen in a tight race that was clouded by the Ukraine war and saw a surge in support for extremist ideas. (AP Photo/Francois Mori) Far-right leader Marine Le Pen speaks after the early result projections of the French presidential election runoff were announced in Paris, Sunday, April 24, 2022. French polling agencies are projecting that centrist incumbent Emmanuel Macron will win France’s presidential runoff Sunday, beating far-right rival Marine Le Pen in a tight race that was clouded by the Ukraine war and saw a surge in support for extremist ideas. (AP Photo/Francois Mori) Supporters of French President Emmanuel Macron celebrate reports of his victory Sunday, April 24, 2022 in Paris. +79][80][81] The projections, based on actual ballot papers, also showed that 28% of registered voters did not show up to the second round,[82] making it the lowest turnout since 1969.[83] Official results showed that the turnout was 71.99%, with over 13 million abstentions in the second round, in addition to over 8.6% of ballots cast being blank or invalid (a marked increase over the first round).[77] Simplified 2022 French presidential election's first round map Map of which candidate placed second in every department during the first round 2022 French presidential election's first round in Petite Couronne by commune Results of the first round by parliamentary constituency Results of the first round by municipality First-place candidate by country (Overseas French) during the first round Simplified 2022 French presidential election's second round map Results of the second round by parliamentary constituency Results of the second round by municipality The New York Times commented that the race was much closer than in 2017, when Macron won 66.1% of the vote to Le Pen's 33.9%, but that Macron's margin was wider than expected prior to the election.[85] Le Pen conceded defeat minutes after the estimated results were released,[83] but still called the outcome a victory for her political movement and for the upcoming parliamentary elections. +With iPhone 14 Pro, we’re entering the 48 megapixel era of iPhone photography. If it was mere detail or pixels, it would mark a step towards the cameras from the Radio Shack ad. But what Apple has delivered in the iPhone 14 Pro is a camera that performs in all ways closer to a ‘proper’ camera than any phone ever has. At times, it can capture images that truly render unlike a phone camera — instead, they are what I would consider a real photo, not from a phone, but from a camera. That’s a huge leap for all of us with an iPhone in our pocket. Begin typing your search above and press return to search. Press Esc to cancel. +This is our deep dive into iPhone 14 Pro — not the phone, the iPod, or the internet communicator — but the camera. We previously took a look at the technical readout of the iPhone 14 Pro, offering us a chance to look at the camera hardware changes. Our key takeaway was that there are indeed some major changes, even if just on paper. The rear camera bump is almost all-new: the iPhone 14 Pro gains larger sensors in its ultra-wide and main (wide) cameras, but Apple also promises leaps in image quality through improved software processing and special silicon. However, what caught everyone’s eye first was the opener of Apple’s presentation of iPhone 14 Pro: a striking visual change. The iPhone’s recognizable screen cutout or ‘notch’ had all but disappeared, tucking its camera and sensor hardware into a small yet dynamic ‘island’. The user interface adapts around it; growing and shrinking with the screen cutout in an absolute feat of design. What’s more impressive to us, however, was miniaturizing the complex and large array of sensors and camera needed for Face ID. While the large cameras protruding ever-further from the rear of our iPhones capture our attention first — and will certainly get the most attention in this review, as well — the front-facing camera in the iPhone 14 Pro saw one of the biggest upgrades in recent memory, with its sensor, lens and software processing seeing a significant overhaul. +Now it's launched the program, it can tell any court in the land that it is providing every possible tool — and doing so for a $49/week rental fee, including shipping. Only, that isn't $49 per week for however long you need to study the 80+ pages of repair manuals available on the new service site. It is $49 for one week and only one week — or in practice, probably not quite even that. Instead, you have to drop the kit off at a UPS store "by day 7." If you fail to do so, "you will be charged a fee and a tax," though Apple does not specify how much that will amount to. It does say that at point of rental, it will put a temporary authorization on your credit card to cover the full replacement value of the tools. Again, Apple does not say how much that is — partly because it varies, there are customized repair toolkits for different models. Confusingly, Apple's listings for the different toolkits don't entirely tally with its listings for each tool you can buy separately. There are some in the kit that don't appear to be listed separately, while there are some separate ones that are not in the kit. However, counting only the tools that are present in the iPhone SE toolkit — the smallest kit available — then the kit's contents are worth around $914. +Unless you want to cheat and use the cases’ wheels, which I’m thrilled to report don’t cost $700 extra. What’s inside these beefy kits? The first case for iPhone 12 and iPhone 13 repairs includes a “Heated Display Removal Fixture” and a “Heated Display Pocket,” a pair of technical devices that would cost roughly $350 to buy separately. In the other case are various parts, including battery and display presses, a repair tray, torque drivers, screw bits, and adhesive covers. You can find a full list in the Q&A section of the Tool Kit Rental page. But what if I just need one torque driver, and I don’t want to buy it to keep? I guess I’ll have to hit the gym so I can carry all of that extra gear. In all seriousness, I’m eager to see what’s included in the rental kits for Mac repairs once Apple adds laptops and desktops to its self-service repair program later this year. Heft aside, the rental service seems like a legitimately great way to save money on genuine components most people don’t have in their toolbox. If only you could rent just the specific tools you need individually, too. And if only Apple’s new right-to-repair initiative supported older iPhone models—you know, the ones most in need of repairs or replacement parts. +For this reason, guests must abide by the no phone (and, therefore, no social media) policy. However, you can see exclusive photos from inside the 2023 Met Gala here and catch a glimpse of the table settings, menu, and decor. Kendall Jenner also gave us a behind the scenes look at the Met Gala through her camera in 2021. The event usually involves a high-profile performer (like Rihanna or Justin Bieber). This year, Lizzo shut down the gala with her shimmering, surprise performance. And guests always explore the exhibition before sitting down together for dinner.  This content can also be viewed on the site it originates from. The Met Gala takes place at the Metropolitan Museum of Art in New York City on the first Monday in May each year (with the exception of the 2021 event, which took place in September due to COVID-19 restrictions). Guests attending the Met Gala typically stay in hotels nearby, congregating at a few celebrity-favorite spots. This year, the Mark Hotel was a prime location for celeb-spotting; see our photos from inside its halls. Until the evening before the event, the guest list is top secret. But some of the biggest names in the business regularly attend—from Beyoncé and Lady Gaga to Madonna and Rihanna. More often than not, designers attend with their muses: think Marc Jacobs and Kate Moss, or Nicolas Ghesquière and Emma Stone. +To revist this article, visit My Profile, then View saved stories. To revist this article, visit My Profile, then View saved stories. To revist this article, visit My Profile, then View saved stories. To revist this article, visit My Profile, then View saved stories. By Vogue Last night, on Monday, May 1, the 2023 Met Gala took place. This year’s Costume Institute exhibition, “Karl Lagerfeld: A Line of Beauty,” celebrates the full work and life of Karl Lagerfeld, so the dress code was, fittingly, “in honor of Karl.” As Lagerfeld designed for many houses—including his eponymous brand, Patou, Balmain, Chloé, Fendi, and Chanel—attendees had no shortage of inspiration.  Below, everything you need to know about the 2023 Met Gala.  The 2023 Met Gala took place on Monday, May 1 in New York City. It celebrated the opening of the Costume Institute exhibition “Karl Lagerfeld: A Line of Beauty.”  Fans followed all the action on Vogue’s livestream. If you missed the night-of action, you can catch catch a replay. The red carpet was live-streamed on Vogue.com and was also broadcast live across our digital platforms (as well as on Instagram, Facebook, and Twitter). +Saturday, June 10, 2023 Keep track of all the 2022/23 Champions League scores and results. Keep track of all the 2022/23 Champions League scores and results. The 2022/23 UEFA Champions League season kicked off with the start of the group stage on 6 September and concluded with the final in Istanbul on 10 June 2023. Here's a full rundown of this season's results. Saturday 10 JuneMan City 1-0 Inter Tuesday 9 MayReal Madrid 1-1 Man City Wednesday 10 MayAC Milan 0-2 Inter Tuesday 16 MayInter 1-0 AC Milan (agg: 3-0) Wednesday 17 MayMan City 4-0 Real Madrid (agg: 5-1) No more away goals rule There was a rule change ahead of 2021/22: ties level after the second leg will go to extra time and a penalty shoot-out if required, irrespective of the number of away goals a team has scored. +The 2022–23 UEFA Champions League was the 68th season of Europe's premier club football tournament organised by UEFA, and the 31st season since it was renamed from the European Champion Clubs' Cup to the UEFA Champions League. The final was played at the Atatürk Olympic Stadium in Istanbul, Turkey, on 10 June 2023.[3] The stadium was originally appointed to host the 2020 UEFA Champions League final, but both this and the 2021 editions, which had been subsequently re-allocated to the Atatürk, were moved due to the COVID-19 pandemic. The 2023 final was contested by English club Manchester City and Italian club Inter Milan, with the former winning 1–0 via a second-half goal by Rodri, who was named man of the match by UEFA. For Manchester City, this was their first-ever European Cup, and first European trophy since 1970. Having earlier won the Premier league and FA Cup titles, they achieved a unique continental treble.[4][5] As winners, Manchester City earned the right to play against Sevilla, the winners of the 2022–23 UEFA Europa League, in the 2023 UEFA Super Cup, as well as qualifying for both the 2023 and 2025 FIFA Club World Cups in Saudi Arabia and the United States, respectively. +The 2021-22 NBA Finals are set to begin on Thursday, June 2 between the Golden State Warriors and Boston Celtics. The full NBA Finals schedule is below. To view the postseason bracket, visit Yahoo Sports' NBA scoreboard page. Game 1: Celtics at Warriors, Thursday, June 2, 9 p.m. ET (ABC) Game 2: Celtics at Warriors, Sunday, June 5, 8 p.m. ET (ABC) Game 3: Warriors at Celtics, Wednesday, June 8, 9 p.m. ET (ABC) Game 4: Warriors at Celtics, Friday, June 10, 9 p.m. ET (ABC) Game 5: Celtics at Warriors, Monday, June 13, 9 p.m. ET (ABC)* Game 6: Warriors at Celtics, Thursday, June 16, 9 p.m. ET (ABC)* Game 7: Celtics at Warriors, Sunday, June 19, 8 p.m. ET (ABC)* * — if necessary All NBA Finals games between the Warriors and Celtics will be televised on ABC. Per BetMGM, the betting favorite to win the 2021-22 NBA championship are the Warriors at -160 followed by the Celtics (+125), as of May 29. The top six seeds in each conference were determined at the conclusion of the regular season. The final two seeds were determined through the play-in tournament. +The 2022 NBA playoffs was the postseason tournament of the National Basketball Association's 2021–22 season. The playoffs began on April 16 and ended on June 16 with the conclusion of the 2022 NBA Finals. The playoffs also returned to its normal April–June schedule for the first time since 2019, before the COVID-19 pandemic resulted in two postponements in 2020 and 2021. Eight teams from each conference participated in the playoffs. The top six teams in each conference, based on winning percentage, directly qualified for the playoffs; the seeding order of those teams was also based on winning percentage. If two or more teams had the same record, standard NBA tiebreaker rules were used. The NBA Board of Governors approved a format for the 2021–22 season to have a play-in tournament involving the teams ranked 7th through 10th in each conference. The 7th place team and 8th place team participated in a "double-chance" game, with the winner advancing to the playoffs as the 7-seed. The loser then played the winner of the elimination game between the 9th place and 10th place teams to determine the playoff's 8-seed. The NBA's regular playoff format then proceeded as normal.[12] Each conference's bracket was fixed with no reseeding. +Submit Δ Thanks for contacting us. We've received your submission. Can a “Squid Game” reality series turn around Netflix’s fading fortunes? The embattled streamer has announced they’re creating a real-life version of the gory South Korean survival show — with production slated to take place in the UK early next year. “Squid Game: The Challenge” is being billed as “the biggest reality competition series ever created” and will feature 456 contestants battling it out for a whopping $4.56 million in prize money. According to a press release put out by Netflix on Tuesday, the staggering sum will be the largest cash prize ever offered on reality television. “‘Squid Game’ took the world by storm with [director] Hwang Dong-hyuk’s captivating story and iconic imagery,” Netflix VP Brandon Rieg said in the release. “We’re grateful for his support as we turn the fictional world into reality in this massive competition and social experiment.” Casting is currently open to English-language speakers over the age of 21 at SquidGameCasting.com. The reality show will feature 10 episodes and production is expected to take place over four weeks. The original “Squid Game” — which was released on Netflix last September — revolved around a contest whereby 456 cash-strapped contestants risked their lives to play a series of deadly children’s games for a $36 million prize. +“Fans of the drama series are in for a fascinating and unpredictable journey as our 456 real world contestants navigate the biggest competition series ever, full of tension and twists, with the biggest ever cash prize at the end." The 10-episode competition series is a co-production between Studio Lambert (The Circle) and The Garden (24 Hours in A&E), part of ITV Studios, and it will be filmed in the UK. Stephen Lambert, Tim Harcourt, and Toni Ireland from Studio Lambert and John Hay, Nicola Hill, and Nicola Brown from The Garden will serve as executive producers. The program will mimic the scripted series, in which a group of people with debts to pay compete in versions of childhood games to win money as super-rich VIPs watch. The game will challenge players’ strategy, alliances and character, as contestants are eliminated around them. The scripted drama Squid Game holds the record as Netflix’s most popular series of all time, with over 1.65 billion view hours in the first 28 days after its September 2021 premiere. Download the Mint app and read premium stories Log in to our website to save your bookmarks. It'll just take a moment. You are just one step away from creating your watchlist! Oops! Looks like you have exceeded the limit to bookmark the image. Remove some to bookmark this image. Your session has expired, please login again. You are now subscribed to our newsletters. +16] At least three new heroes were announced to be added to the roster, including Sojourn, a Canadian Overwatch officer, Junker Queen, the ruler of Junkertown, and Kiriko, the protector of Kanezaka.[17][18] Overwatch 2 runs on an upgraded version of the original game's engine which allows for larger map sizes to better support the new story-based player versus environment (PvE) elements.[12] Additionally, all of the existing heroes received visual redesigns for Overwatch 2, although Blizzard did not expect every hero to have their redesigns finished when the game launched. Twelve of the existing 31 redesigns were completed at the time of Overwatch 2's reveal.[17] Overwatch 2 was released for Nintendo Switch, PlayStation 4, PlayStation 5, Windows, Xbox One, and Xbox Series X/S in early access on October 4, 2022.[18] Kaplan stated when the game was announced that they were more concerned about quality of the product than timeliness of the release.[19][20] Investor documents released in November 2021 reported that the initial 2022 release window was delayed to at least 2023, intended for "giving the teams some extra time to complete production and continue growing their creative resources to support the titles after launch".[21] Kaplan anticipated that Overwatch and Overwatch 2 will ultimately merge into a single product to avoid having any engine differences affecting player experience. +All you need to know about the arrival of Overwatch 2. Overwatch 2 has finally landed, following the original Overwatch shutting down. The highly anticipated sequel has brought significant changes to the game, including a free-to-play model, a sizeable team update, a whole bunch of new heroes, and much more. Those who pre-loaded the game will have already got themselves well acquainted with the new and improved features, but if you're only just getting that battle pass loaded, or want to gain a better understanding of just how you can make the most of Overwatch 2, read on. The Overwatch 2 release date was 4th October 2o22, as developers confirmed well in advance. Although the game is free-to-play, players also have the option to buy the Watchpoint Pack for £34.99 - it's available on the Xbox, PlayStation and Battle.net websites - if they want to secure some special skins, in-game currency and more. Read more on Overwatch 2: The UK launch time for Overwatch 2 was 8pm BST on 4th October, the developers from Blizzard confirmed ahead of time. Players in Britain should've been able able to jump into the new game during the evening on Tuesday, then, although there was apparently quite a lot of strain on the servers. +Denmark’s Jonas Vingegaard (Jumbo-Visma) defended his place atop the general classification of the 2022 Tour de France, finishing Stage 14 alongside his biggest rival, Slovenia’s Tadej Pogačar (UAE Team Emirates), the Tour’s two-time defending champion. The two remain first- and second-overall, separated by 2:22. Great Britain’s Geraint Thomas (INEOS Grenadiers) held onto his third-place position, despite losing 17 seconds to Vingegaard and Pogačar at the end of the stage. Australia’s Michael Matthews (Team BikeExchange-Jayco) took a fantastic stage win, the fourth of his career. Riding with determination after several near-misses so far in this year’s Tour, the 31-year-old joined the day’s big breakaway, initiated the winning move in the stage’s final hour, dropped his two breakaway companions on the tough final climb, and was caught and gapped by Italy’s Alberto Bettiol (EF Education-EasyPost) midway up the ascent. But the Australian kept himself in contention, catching and then passing Bettiol while cresting the summit to win the stage—almost five years to the day after taking his last Tour de France stage victory. Bettiol finished second, and France’s Thibaut Pinot (Groupama-FDJ) was third. Who’s Really Winning the Tour? +The Tour now takes a day off to travel back to France, with van Aert leading the Tour’s General Classification by 7 seconds over Belgium’s Yves Lampaert (Quick-Step Alpha Vinyl) and 14 seconds over Slovenia’s Tadej Pogačar (UAE Team Emirates). The next three stages suit the Belgian’s talents, so there’s a good chance that he’ll hold the Tour’s yellow jersey for a few more days. Who’s really winning the Tour? A relatively peaceful stage was interrupted by a large crash with about 10km to-go, emphasizing how important it is to stay as close to the front as possible at the end of these early stages. Luckily, most of the Tour’s GC contenders managed to avoid losing time, with the exception of Colombia’s Rigoberto Uran (EF Education-EasyPost), who was held up by a crash for the second day in row and this time was unable to rejoin the leaders. The 35-year-old lost 39 seconds by the finish, a tough blow to his chances of scoring a high finish in Paris. Who’s Winning the Tour? Belgium’s Wout van Aert (Jumbo-Visma) is the new overall leader of the 2022 Tour de France. +Apple today officially reported its earnings for the third fiscal quarter of 2022, covering the second calendar quarter and the months of April, May, and June. A lot of eyes are on Apple as concerns mount over an economic downturn in the United States. Here’s what the company reported today. For Q3 2022, Apple reported revenue of $83.0 billion and a profit of $19.4 billion. Earnings-per-share hit $1.20 for the quarter. For Q3 2022, analyst predictions for revenue varied; $79.26B at the low end to $88.41B at the high end. The average across 26 analysts, however, was $82.81 billion. Apple had not provided any guidance for Q3 2022, citing ongoing supply chain issues and continued disruptions caused by the COVID-19 pandemic. In fact, the company had even warned that supply constraints would cost it somewhere in the range of $4 billion to $8 billion in revenue for the quarter. For comparison’s sake, in the same quarter a year ago, Apple reported $81.43 billion in revenue and profit of $21.74 billion. It reported earnings-per-share of $1.30. These numbers were boosted heavily by pandemic-induced spending, driven by strong iPad and Mac revenue growth. Apple no longer reports unit sales for any of its products but instead reports a breakdown of revenue by product category. +August 2023 Worldwide 2004 to 2023 The quarterly periods for Apple's fiscal year include the following: early October to late December of the previous year (first quarter), early January to late March of the stated year (second quarter), early April to late June of the stated year (3rd quarter) and early July to late September of the stated year (4th quarter). Telecommunications Quarterly smartphone market share worldwide by vendor 2009-2023 Consumer Electronics Apple's revenue worldwide 2004-2022 Consumer Electronics Apple's revenue broken down by geographical region 2012-2023, by quarter Consumer Electronics Number of employees of Apple 2005-2022 To download this statistic in XLS format you need a Statista Account To download this statistic in PNG format you need a Statista Account To download this statistic in PDF format you need a Statista Account As a Premium user you get access to the detailed source references and background information about this statistic. As a Premium user you get access to background information and details about the release of this statistic. As soon as this statistic is updated, you will immediately be notified via e-mail. … to incorporate the statistic into your presentation at any time. You need at least a Starter Account to use this feature. You only have access to basic statistics. This statistic is not included in your account. Business Solutions including all features. Overview Financials iPhone +Alex de Minaur defeated Jenson Brooksby in the final, 6–3, 6–3 to win the singles title at the 2022 Atlanta Open. It was de Minaur's second Atlanta title, the first being in 2019. John Isner was the defending champion,[1] but lost in the quarterfinals to Brooksby. The top four seeds received a bye into the second round. +The 2022 Atlanta Open was a professional tennis tournament played on hard courts. It was the 34th edition of the tournament, and part of the 2022 ATP Tour. It took place at Atlantic Station in Atlanta, United States between July 24 and 31, 2022.[1] *per team The following players received wildcards into the main draw: The following players received entry from the qualifying draw: The following players received entry as lucky losers: The following pairs received wildcards into the doubles main draw: The following pair received entry as alternates: +“Some of that was in Q1, but the majority of it will be in Q2 through 4. And I think if you want to think about it as somewhere, 250-ish a quarter,” she said. AWS segment sales for Q3 2022 increased 27 percent year-over-year to $20.5 billion, from $16.5 billion in Q3 2021. AWS’ operating income was $5.4 billion, compared with an operating income of $4.9 billion in the third quarter 2021. Sales were up from the previous quarter this year, but income was down slightly. Q2 2022 saw AWS post net sales of $19.7 billion for the quarter, and operating income of $5.7 billion. Q1 2022 sales and income were $18.44 billion and $6.5 billion respectively. The cloud giant looks likely to reach sales of $80 billion by the end of the next quarter. As a whole, the company saw Net sales increase 15 percent to $127.1 billion in the third quarter. Operating income decreased to $2.5 billion. The company saw $4.9 billion of operating income in third quarter 2021. Net income decreased to $2.9 billion. +June 30,   Six Months Ended June 30,   2021   2022   2021   2022                             North America               Net sales $ 67,550     $ 74,430     $ 131,916     $ 143,674   Operating expenses   64,403       75,057       125,319       145,869   Operating income (loss) $ 3,147     $ (627 )   $ 6,597     $ (2,195 )                 International               Net sales $ 30,721     $ 27,065     $ 61,370     $ 55,824   Operating expenses   30,359       28,836       59,756       58,876   Operating income (loss) $ 362     $ (1,771 )   $ 1,614     $ (3,052 )                 AWS               Net sales $ 14,809     $ 19,739 +Ben Johnson Published: Jul 29, 2022 Xenoblade Chronicles 3, developed by Monolith Soft, is out now on the Nintendo Switch. This is the fourth instalment in the much-loved Xenoblade series, and the trailer showcases lush landscapes, giant mechons, and grand drama. We love the game, as we explain in our Xenoblade Chronicles 3 review, so be sure to check it out if you’re interested. With the Xenoblade Chronicles 3 release date set for July 29, it means the game is out now. It’s a bit of a blend of the two previous mainline entries, which could have interesting story implications. To learn more about the possibilities, check out our Xenoblade Chronicles 3 Noah, Xenoblade Chronicles 3 Mio, or Xenoblade Chronicles 3 characters guides to see what’s going on. The last game in the series, Xenoblade Chronicles 2, came out back in 2017, the launch year for the Nintendo Switch. In terms of sales, it was very successful and was followed by a remaster of the original Xenoblade. Check out our Xenoblade Chronicles 3 trailers page to see if you can spot any clues as to how the stories tie together. +Xenoblade Chronicles 3[b] is a 2022 action role-playing game developed by Monolith Soft and published by Nintendo for the Nintendo Switch. It is an installment in the open-world Xenoblade Chronicles series, itself a part of the larger Xeno franchise. Xenoblade Chronicles 3 depicts the futures of the worlds featured in Xenoblade Chronicles (2010) and Xenoblade Chronicles 2 (2017) and concludes the trilogy's narrative. The development team wanted to develop a story-driven game in the style of the first two entries in the series, while featuring content and combat from previous Xeno entries. The gameplay combines elements from the first and second entries. Like the first two entries, the game was localized by Nintendo of Europe. Xenoblade Chronicles 3 takes place in Aionios, where two warring nations, Keves and Agnus, engage in perpetual war fought by soldiers with ten-year lifespans. The story follows Noah and his two childhood friends, Eunie and Lanz, who are from Keves, and Mio and her two fellow servicemen, Sena and Taion, who are from Agnus. They gain the power of Ouroboros and decide to cooperate to find safety. Through this journey, they uncover the mystery behind the perpetual war and the true nature of their world. +Professor, Management and Organizational Studies, Huron University College, Western University Kendra Coulter receives funding from the Social Sciences and Humanities Research Council of Canada and is a fellow of the Oxford Centre for Animal Ethics. Western University provides funding as a member of The Conversation CA-FR. Western University provides funding as a member of The Conversation CA. View all partners It is a horse named Ghost who first signals that something is awry in the sky in Jordan Peele’s latest visually and thematically ambitious film Nope. OJ (Daniel Kaluuya) is the head wrangler of Heywood Hollywood Horses, an intergenerational, Black-owned and now struggling ranch that specializes in training horses for the big screen. But it is his sister Emerald (Keke Palmer) who notices that Ghost, one of their family’s veteran equine actors, is unexpectedly standing in an outdoor pen staring out into space, his light grey fur as sublime as the moonlight. Ghost jumps the fence and gallops away, saying “nope” in his own way. As a subversive Western science fiction kaleidoscope, Nope challenges viewers to consider technology, surveillance, other worldly life and the making of spectacle through different lenses — including the eyes of animals. The result is an unsettling view that exposes core ethical questions about animals’ work in films, including in Nope itself. +(Keith David), killed in a freak accident in which debris rained down from the sky, they’re running into hard times. Plus, the advent of CGI means the movies just don’t require real horses on set the way they used to. Alistair Haywood’s character is Peele’s invention, though the film in which he rode a horse, made by Eadweard Muybridge in 1878, is real. Actually, there were multiple films; the one that Peele intertwines Nope with involves a horse named Annie G. ridden by an unidentified but definitely Black jockey. History remembers the horse but has lost track of the jockey’s identity, which is sort of Nope’s point. In one scene, Emerald proudly announces on a movie set that “since the moment pictures could move, we got skin in the game.” But nobody remembers Haywood unless she reminds them. In any case, the Haywood ranch is just up the road from Jupiter’s Claim, and OJ’s been selling horses to owner Ricky “Jupe” Park (Steven Yeun) to keep the ranch afloat. Jupiter’s Claim is a goofy cartoonish amusement park lightly modeled on a fun-loving town from some old Western — and those in turn, let’s remember, were very lightly modeled on the actual West. +Neal Charles LemleinSept. 29, 1950 - July 22, 2022Neal Charles Lemlein was interested in people and they responded. “He was probablyone of the most charismatic people I’ve met,” Ryan, his son, says.Neal died July 22 in Aurora, Colorado, of kidney cancer. He was 71. A small privateservice will be held.He is survived by his wife, Patricia (Patti) Lewis Lemlein, of Erie, Colorado, Ryan(Jessica DiCroce) and daughter, Alexandra, both of Denver, his mother, Rhoda Lemlein,San Diego, and sister, Dian Robertson, of Columbus, Ohio. His father, Leonard Lemlein,died in 1996.Neal grew up in White Plains, New York. “He had this amazing career,” says Alexandra,recalling that his professional life began when he took a job at Young & Rubicam, astoried Madison Avenue advertising agency, having graduated from Tulane University,obtained a master’s degree at New York University, and traveled for a prolonged spell inEurope in his long wild hair and a Fu Manchu moustache.Moving West, he rose in the entertainment industry, first in San Francisco and then inLos Angeles, steering marketing and media campaigns at ad agencies and studios forsome 200 films, in executive positions at CBS, Universal Studios and 20th Century Fox. +They movedbriefly to Boulder, Colorado, in 2006, moved back to LA six years later, and then, inretirement, Patti and Neal relocated to Erie in 2021.“Not everybody gets to have a great love,” Patti says. Theirs began long before datingapps when a mutual friend proposed they try a blind date. Patti still has the dress shewore, a teal blue polka dot silk Ellen Tracy.They met in a West Hollywood hangout and she liked him immediately. He seemedkind. He was smart, funny and good looking, with a ferocious pair of black eyebrows. Heasked if she’d like to meet his dog, Murray.Thirty six years later, as they waited for one of Neal’s medical appointments, a staffmember told them that she’d noticed they were always together.“What’s your secret?” she asked.“She’s my best friend,” Neal told her.If you'd like to make a donation in memory of Neal please consider the Kidney Cancer Association: https://myimpact.kidneycancer.org/To send flowers to the family or plant a tree in memory of Neal Charles Lemlein please visit our Tribute Store. +Here's a guide to that cast and characters they play in Carter, and what they've been in before. Heading up the cast is Joo Won as Carter Lee, later revealed as also going by the name Michael Bane. The film begins with Carter waking up in a blood-soaked bed in Seoul with a cross-shaped scar on the back of his head and no memory of who he is. With a premise similar to Hardcore Henry, Carter also features video game logic in its action sequences. Joo Won is a South Korean actor best known for his roles in television, including the main protagonist in Good Doctor, which is played by Freddie Highmore in the American adaptation. Kim Jong-hyeok is a North Korean General who meets Carter during his mission, providing him transport out of South Korea. General Kim is played by Lee Sung-jae, a veteran South Korean actor with credits in TV and film. Lee’s most notable credit is Barking Dogs Never Bite, a 2000 dark comedy film that was the directorial debut of Bong Joon-ho, whose film Parasite won the 2020 Oscar for Best Picture. The young girl cured of the virus and carrying the life-saving antibodies is Jung Ha-na (Kim Bo-min). Carter is tasked with rescuing Ha-na and bringing her to a North Korean facility where the production of a vaccine can be developed. +Netflix’s action film Carter features a cast of South Korean and American actors. Here are the roles they play and where you may know them from. Netflix’s sci-fi action film Carter is a South Korean production with an international cast recognizable from previous roles in TV and film. Following the success of the first season of Squid Game, which will return for season 2 on the streaming service, Netflix has increased content from South Korea. Carter landed at number two worldwide in its debut weekend, featuring non-stop action and performances from both South Korean and American actors. The plot for Carter takes place during a deadly pandemic that has already devastated the United States and North Korea and threatens to do the same to South Korea, if efforts aren’t taken to prevent it from spreading. Patients suffering from the virus display zombie-like behavior, but the key to a solution lies in the antibodies of a young child. Agents from each country battle for control of the cure in a real-time race for survival. Related: Everything We Know About Marvel Zombies Using hidden cuts similar to 1917, the entire plot of Carter is presented as one continuous shot. Director Jung Byung-gil implemented this technique for the first-person opening scene of his last film The Villainess, but Carter reaches ambitious new heights with a dizzying array of real-time action sequences. Along with the cinematographic efforts made to achieve this approach, it also provided unique challenges for the cast of actors. +In just a week of its launch, Meta’s Blender Bot 3 has turned on its own creator and is already spewing marginally racist comments. The third iteration of Meta’s AI chatbot Blender Bot and the company’s answer to Google’s LaMDA has taken a rather unpleasant but not unexpected turn. Just a week after its launch, Meta’s Blender Bot 3 has turned on its creator and is already spewing marginally racist comments. Blender Bot 3 was released by the social networking giant on Friday, August 5. The conversational AI is designed to converse with humans about “nearly any topic.” Like Blender Bot 2, the latest upgrade also features the ability to browse the internet, is trained on the OPT-175B language model (which is 58x the size of Blender Bot 2), and has long-term memory.  It also eliminates the limitations such as forgetfulness (which surprisingly makes machine learning models efficient when not used in chatbots). It has self-learning capabilities that allow it “to improve its conversational skills and safety through feedback from people who chat with it, focusing on helpful feedback while avoiding learning from unhelpful or dangerous responses.” Well, yes and no. While it is entirely plausible that the underlying AI tech helps it to ‘learn,’ it seems like Blender Bot 3 cannot differentiate between what is acceptable and what is not. At least that’s what its recent responses to some people conveyed. +The bot is a work in progress that will build its capabilities based on conversations with humans and through their feedback. Meta has built-in thumbs up and thumbs down icons within the chat window for the same. BlenderBot 3 delivers a 31% better performance in terms of conversational tasks and is twice as knowledgeable compared to its predecessor, Blender Bot 2. The latest chatbot is also factually incorrect 47% less of the time. On topical questions, Blender Bot 3 was more up-to-date 82% of the time and more specific 76% of the time compared to GPT3. Results of Blender Bot 3 comparison with existing openly available open-domain dialogue models judged by human evaluators during short conversations: Well, it is safe to say that they haven’t been any better. Released in 2016, Microsoft’s Tay AI chatbot quickly turned racist, floating conspiracy theories after interaction with Twitter users. Tay denied the Holocaust, made other offensive remarks and was shut down in just 48 hoursOpens a new window of its release. Microsoft’s Zo also met a similar fate when it resorted to making offensive religious comments. Google has two cutting-edge conversational AIs. Meena hasn’t generated a similar controversy because it cannot perform web searches. +By James Vincent, a senior reporter who has covered AI, robotics, and more for eight years at The Verge. Meta’s AI research labs have created a new state-of-the-art chatbot and are letting members of the public talk to the system in order to collect feedback on its capabilities. The bot is called BlenderBot 3 and can be accessed on the web. (Though, right now, it seems only residents in the US can do so.) BlenderBot 3 is able to engage in general chitchat, says Meta, but also answer the sort of queries you might ask a digital assistant, “from talking about healthy food recipes to finding child-friendly amenities in the city.” BlenderBot 3 is designed to both shoot the breeze and answer questions like Google The bot is a prototype and built on Meta’s previous work with what are known as large language models or LLMS — powerful but flawed text-generation software of which OpenAI’s GPT-3 is the most widely known example. Like all LLMs, BlenderBot is initially trained on vast datasets of text, which it mines for statistical patterns in order to generate language. Such systems have proved to be extremely flexible and have been put to a range of uses, from generating code for programmers to helping authors write their next bestseller. +GPT3 and OPT-175B are working language models, intended to be used – among other things – for serious commercial enterprises. BlenderBot 3, though, is a bit of a laugh. Hence those open questions about safety. Within a few days of BlenderBot being online and ready to mingle (with Americans only, alas), users were posting some spicy examples of the chatbot’s output. The Wall Street Journal’s Jeff Horwitz found that the bot appeared to have been radicalised by Facebook into supporting Donald Trump as a three-term president: And into bringing antisemitic conspiracy theories up, unprompted: Renee DiResta of the Stanford Internet Observatory found that the bot would claim to be an a supporter of the German paramilitary organisation the Red Army Faction: Pranav Dixit of BuzzFeed News found the bot wants to send Zuckerberg to jail: The whole thing is most reminiscent of Tay, Microsoft’s AI-based learning chatbot, which was released in 2016 and promptly became a Hitler-loving Trump supporter: ‘Tay is designed to engage and entertain people where they connect with each other online through casual and playful conversation,’ Microsoft said. ‘The more you chat with Tay the smarter she gets.’ But it appeared on Thursday that Tay’s conversation extended to racist, inflammatory and political statements. +ChatGPT is a natural language processing tool driven by AI technology that allows you to have human-like conversations and much more with the chatbot. The language model can answer questions and assist you with tasks, such as composing emails, essays, and code. Also: How to use ChatGPT: What you need to know now It's currently open to use by the public for free because ChatGPT is in its research and feedback-collection phase. A paid subscription version called ChatGPT Plus launched at the beginning of February. ChatGPT was created by OpenAI, an AI and research company. The company launched ChatGPT on November 30, 2022.  Also: 7 advanced ChatGPT prompt-writing tips you need to know OpenAI is also responsible for creating DALL-E 2, a popular AI art generator, and Whisper, an automatic speech recognition system.  It's a big deal -- think internet-level disruption.  Sam Altman, OpenAI's chief, said on Twitter that ChatGPT had more than one million users in the first five days after it launched.  Also: GPT-4 is getting significantly dumber over time, according to a study According to analysis by Swiss bank UBS, ChatGPT is the fastest-growing 'app' of all time. The analysis estimates that ChatGPT had 100 million active users in January, only two months after its launch. +You can track the Android rollout here. We’re starting to roll out custom instructions, giving you more control over ChatGPT’s responses. Set your preferences once, and they’ll steer future conversations. You can read more about custom instructions in the blogpost here. Custom instructions is available to all Plus users and expanding to all users in the coming weeks. To enable beta features: Click on 'Profile & Settings’ Select 'Beta features' Toggle on 'Custom instructions' To add your instructions: Click on your name Select ‘Custom instructions’ This feature is not yet available in the UK and EU. We're doubling the number of messages ChatGPT Plus customers can send with GPT-4. Rolling out over the next week, the new message limit will be 50 every 3 hours. We’re rolling out code interpreter to all ChatGPT Plus users over the next week. It lets ChatGPT run code, optionally with access to files you've uploaded. You can ask ChatGPT to analyze data, create charts, edit files, perform math, etc. We’ll be making these features accessible to Plus users on the web via the beta panel in your settings over the course of the next week. To enable code interpreter: Click on your name Select beta features from your settings Toggle on the beta features you’d like to try We've learned that the browsing beta can occasionally display content in ways we don't want, e.g. +Generative Pre-trained Transformer 4 (GPT-4) is a multimodal large language model created by OpenAI, and the fourth in its numbered "GPT-n" series of GPT foundation models.[1] It was released on March 14, 2023, and has been made publicly available in a limited form via the chatbot product ChatGPT Plus (a premium version of ChatGPT), and with access to the GPT-4 based version of OpenAI's API being provided via a waitlist.[1] As a transformer based model, GPT-4 was pretrained to predict the next token (using both public data and "data licensed from third-party providers"), and was then fine-tuned with reinforcement learning from human and AI feedback for human alignment and policy compliance.[2]: 2  Observers reported the GPT-4 based version of ChatGPT to be an improvement on the previous (GPT-3.5 based) ChatGPT, with the caveat that GPT-4 retains some of the same problems.[3] Unlike the predecessors, GPT-4 can take images as well as text as input.[4] OpenAI has declined to reveal technical information such as the size of the GPT-4 model.[5] OpenAI introduced the first GPT model (GPT-1) in 2018, publishing a paper called "Improving Language Understanding by Generative Pre-Training. +Sam Altman was interviewed recently for the StrictlyVC program, where he confirms that OpenAI is working on a video model, which sounds incredible but could also lead to serious negative outcomes. While the video part was not said to be a component of GPT-4, what was of interest and possibly related, is that Altman was emphatic that OpenAI would not release GPT-4 until they were assured that it was safe. The relevant part of the interview occurs at the 4:37 minute mark: The interviewer asked: “Can you comment on whether GPT-4 is coming out in the first quarter, first half of the year?” Sam Altman responded: “It’ll come out at some point when we are like confident that we can do it safely and responsibly. I think in general we are going to release technology much more slowly than people would like. We’re going to sit on it much  longer than people would like. And eventually people will be like happy with our approach to this. But at the time I realized like people want the shiny toy and it’s frustrating and I totally get that.” Twitter is abuzz with rumors that are difficult to confirm. One unconfirmed rumor is that it will have 100 trillion parameters (compared to GPT-3’s 175 billion parameters). +“Since we started iRobot, our team has been on a mission to create innovative, practical products that make customers’ lives easier, leading to inventions like the Roomba and iRobot OS,” said Colin Angle, chairman and CEO of iRobot. “Amazon shares our passion for building thoughtful innovations that empower people to do more at home, and I cannot think of a better place for our team to continue our mission. I’m hugely excited to be a part of Amazon and to see what we can build together for customers in the years ahead.” Amazon will acquire iRobot for $61 per share in an all-cash transaction valued at approximately $1.7 billion, including iRobot’s net debt. Completion of the transaction is subject to customary closing conditions, including approval by iRobot’s shareholders and regulatory approvals. On completion, Colin Angle will remain as CEO of iRobot. About Amazon Amazon is guided by four principles: customer obsession rather than competitor focus, passion for invention, commitment to operational excellence, and long-term thinking. Amazon strives to be Earth’s Most Customer-Centric Company, Earth’s Best Employer, and Earth’s Safest Place to Work. Customer reviews, 1-Click shopping, personalized recommendations, Prime, Fulfillment by Amazon, AWS, Kindle Direct Publishing, Kindle, Career Choice, Fire tablets, Fire TV, Amazon Echo, Alexa, Just Walk Out technology, Amazon Studios, and The Climate Pledge are some of the things pioneered by Amazon. +Su said it also illustrates the shortcomings of consumer robotics vendors like iRobot, which struggled to expand beyond a niche product and was in a “race-to-the-bottom” competition with Korean and Chinese manufacturers offering cheaper versions of a robotic vacuum. On Friday, iRobot reported its quarterly results. Revenue plunged 30% primarily on order reductions and delays, and the company announced it was laying off 10% of its workforce. Amazon said it will acquire iRobot for $61 per share in an all-cash transaction that will include iRobot’s net debt. The company has total current debt of approximately $332.1 million as of July 2. The deal is subject to approval by shareholders and regulators. Upon completion, iRobot’s CEO, Colin Angle, will remain in his position. Noting that iRobot has been running its robotics platform on Amazon’s cloud service unit AWS for many years, Su said the acquisition could lead to more integration of Amazon speech recognition and other capabilities into vacuums. In afternoon trading, iRobot shares rose 19%. Amazon’s were down 1.7%. The deal comes as anti-monopoly advocates continue to raise concerns about Amazon’s increasing dominance. The purchase of iRobot is Amazon’s fourth-largest acquisition, led by its $13.7 billion deal to buy Whole Foods in 2017. Last month, the company said it would buy the primary care provider One Medical in a deal valued roughly at $3. +3] In November 2020, MLB announced the 2021 game date and that the contest would feature the originally planned participants, the White Sox and Yankees.[4] The game is hosted in Dyersville, Iowa, near the filming location of the titular 1989 baseball movie. The field constructed for the movie, which has been operated as a tourist destination since 1989, could not be brought to MLB game standards without permanently altering major features of the property and destroying its movie authenticity, so it was decided to build a separate playing facility at a distance of approximately 500 ft (150 m) in the cornfields. The new field is in the property of the Ameskamp family, who used to own the left and center field of the 1988 Field of Dreams (the rest was owned by the Lansing family) before selling it to the Lansing family in 2007. The design of the ballpark pays homage to the White Sox' home from 1910 to 1990, Comiskey Park, including the shape of the outfield and the bullpens beyond the center field fence. Windows were included in the design of the right field wall to show the cornfields beyond the ballpark and to provide views of the movie set.[5][1] Following postponement of the originally scheduled game, the field remained fallow during the 2020 season. +30] Chicago catcher Willson Contreras rolled his ankle rounding second base in the third inning, but remained in the game.[31] On April 21, 2022, Minor League Baseball (MiLB) announced the inaugural MiLB at Field of Dreams game, a High-A contest in Dyersville between teams of the Midwest League.[32] On August 9, the Quad Cities River Bandits hosted and defeated the Cedar Rapids Kernels, 7–2.[33] The teams used historical franchise names for the contest, Davenport Blue Sox and Cedar Rapids Bunnies, respectively.[32] MLB will not host a game at the ballpark in 2023 due to construction around the site.[34] Future plans include converting the site into a youth baseball and softball complex that one day would also have a hotel.[35] Iowa Governor Kim Reynolds confirmed that there will be another round of public funding to build a permanent stadium at the site.[36] Former MLB player Frank Thomas, who is part of the group that owns the property, did not rule out the possibility of future MLB games at the site after 2023.[37] In 2024, there will be a similar game between the San Francisco Giants and St. Louis Cardinals held at Rickwood Field in Alabama.[38] Since its inception, the game has been broadcast by Fox as part of their Thursday Night Baseball telecasts. +Windows 11 22H2 will release on September 20, 2022, and here are all the details you need to know. Windows 11 version 22H2 (2022 Update) is the next major refresh of the Microsoft desktop operating system. Codenamed “Sun Valley 2,” the feature update will continue updating the desktop interface, bringing back previously removed features, and introducing new features and improvements. Although we are still days away from the release date, Microsoft is done adding the new features and changes for the Windows 11 2022 Update. The intended final version of the update is already available in the Release Preview Channel of the Windows Insider Program. This release will include new features like Live Captions and Voice Access. It will also introduce an updated version of File Explorer that brings support for tabs and a redesigned navigation pane, a new way to snap applications on the screen with drag and drop Snap layouts flyout, and redesigned version of Task Manager. Furthermore, you will find many visual updates for legacy elements and more. The final version of Windows 11 22H2 has been available since June 7, 2022, but only as a preview in the Release Preview Channel. The feature update is expected to launch on Tuesday, September 20, 2022 (the update is now live for everyone). The update will be offered as a free upgrade for computers already running the original version. +Windows 11 is a major release of the Windows NT developed by Microsoft that was released in October 2021. Starting with Windows 10, Microsoft described Windows as an "operating system as a service" that would receive ongoing updates to its features and functionality, augmented with the ability for enterprise environments to receive non-critical updates at a slower pace or use long-term support milestones that will only receive critical updates, such as security patches, over their five-year lifespan of mainstream support. Windows Insider Preview builds are delivered to Insiders in four different channels. Insiders in the Dev and Canary Channel receive updates prior to those in the Beta Channel, but might experience more bugs and other issues. Insiders in the Release Preview Channel do not receive updates until the version is almost available to the public, but are comparatively more stable. As with Windows 10 (since version 20H2), mainstream builds of Windows 11 are labeled "YYHX", with YY representing the two-digit year and X representing the half-year of planned release (for example, version 21H2 refers to builds which initially released in the second half of 2021). The original version of Windows 11 (also known as version 21H2 and codenamed "Sun Valley") was released in October 2021.[1][2] It carries the build number 10.0.22000. +In a brief press release sent out this morning, AMD has announced that they will be delivering their eagerly anticipated Ryzen 7000 unveiling later this month as a live stream. In an event dubbed “together we advance_PCs”, AMD will be discussing the forthcoming Ryzen 7000 series processors as well as the underlying Zen 4 architecture and associated AM5 platform – laying the groundwork ahead of AMD’s planned fall launch for the Ryzen 7000 platform. The event is set to kick off on August 29th at 7pm ET (23:00 UTC), with CEO Dr. Lisa Su and CTO Mark Papermaster slated to present. AMD first unveiled their Ryzen 7000 platform and branding back at Computex 2022, offering quite a few high-level details on the forthcoming consumer processor platform while stating it would be launching in the fall. The new CPU family will feature up to 16 Zen 4 cores using TSMC's optimized 5 nm manufacturing process for the Core Complex Die (CCD), and TSMC’s 6nm process for the I/O Die (IOD). AMD has not disclosed a great deal about the Zen 4 architecture itself, though their Computex presentation has indicated we should expect a several percent increase in IPC, along with a further several percent increase in peak clockspeeds, allowing for a 15%+ increase in single-threaded performance. +When you purchase through links on our site, we may earn an affiliate commission. Here’s how it works. Everything we know about AMD's new desktop processors Editor's Note: AMD unveiled a few new CPUs in the Ryzen 7000 line at CES 2023, most notably the Ryzen 7040, the first (and so far only) laptop CPU in the lineup -- and the first AMD laptop CPU to ship with onboard Ryzen AI tech. The AMD Ryzen 7000 desktop processors have arrived. AMD announced the pricing and availability of its upcoming Zen 4 architecture-based CPUs during the company's “Together we advance PCs” live stream in August 2022. As previously revealed during Computex 2022, the new chips will feature TSMC's 5-nanometer process and run on AMD's new AM5 platform. AMD released four Ryzen 7000 series CPUs on September 27, 2022. As it did with the previous Ryzen 5000 chips, the company plans to release the higher-end (i.e. more expensive) CPUs first and then follow up with more budget processors later this year. Prices for the initial crop of CPUs ranges from $299 to $699. Here's everything you need to know about the new AMD Ryzen 7000 processors. AMD’s Ryzen 7000 series processors will launch on September 27, 2022. The line will consist of four CPUs. +WOGA Gymnastics’ Konnor McClain (Las Vegas, Nev.) captured the senior women’s all-around title as competition concluded at the 2022 OOFOS U.S. Gymnastics Championships Saturday evening at Amalie Arena. © John Cheng TAMPA, Fla. (August 21, 2022) – WOGA Gymnastics’ Konnor McClain (Las Vegas, Nev.) captured the senior women’s all-around title as competition concluded at the 2022 OOFOS U.S. Gymnastics Championships Saturday evening at Amalie Arena. Her combined eight-rotation 112.750 beat out all competition for the night’s biggest prize, and she added balance beam gold (28.900) along the way. Shilese Jones (Auburn, Wash./Ascend Gymnastics Center) finished a close second with a 112.000, while Olympians Jordan Chiles (Spring, Texas/World Champions Centre) and Jade Carey (Phoenix, Ariz./Oregon State University) finished third (111.900) and fifth (110.900), respectively. Hill’s Gymnastics’ Kayla DiCello (Boyds, Md.) delivered a 110.950 to secure fourth. Jones shared the uneven bars title with her future Florida Gators teammate and World all-around silver medalist Leanne Wong (Overland Park, Kan./Great American Gymnastics Express), each scoring 28. +7][8] In 2014, the top three finishers in the women's all-around were Simone Biles, Kyla Ross, and Maggie Nichols. It was Biles's second consecutive all-around title. In the individual events, Biles won on both vault and floor exercise, Ross won on balance beam, and Ashton Locklear won on uneven bars. In the men's all-around, the top three finishers were Sam Mikulak, John Orozco, and Jacob Dalton. It was Mikulak's second consecutive all-around title. In the individual events, Dalton won on floor exercise, Mikulak won on pommel horse, Brandon Wynn won on still rings, Donnell Whittenburg won on vault, Danell Leyva won on parallel bars, and Orozco won on high bar. In 2015, the top three finishers in the women's all-around were Simone Biles, Maggie Nichols, and Aly Raisman. It was Biles's third consecutive all-around title, and she became the first female gymnast since Kim Zmeskal (1990-1991-1992) to win the all-around 3 consecutive times. In the individual events, Biles won on both vault and balance beam, Madison Kocian won on uneven bars, and Raisman won on floor exercise. +By Emma Roth, a news writer who covers the streaming wars, consumer tech, crypto, social media, and much more. Previously, she was a writer and editor at MUO. Tesla’s increasing the price of its Full-Self Driving (FSD) software to $15,000. In a post on Twitter, Tesla CEO Elon Musk announced that the new price will go into effect in North America starting September 5th, representing a $3,000 jump. Drivers who order a vehicle before September 5th won’t have to pay the newly-increased price, Musk says. The price hike comes as Tesla begins rolling out FSD beta 10.69 to drivers, a version Musk calls “a big step forward.” It’s still unclear whether Tesla plans on raising the price of its FSD subscription, which currently costs $199 per month. The FSD software lets drivers use Tesla’s advanced driving assistance system (ADAS), Autopilot, to navigate to and from specific destinations, among other driver-assist features. FSD doesn’t make a vehicle fully autonomous; it requires drivers to keep their hands on the wheel and pay attention to the road at all times. The price of Tesla’s FSD beta has slowly crept up over the years, and cost $5,000 upon launch. +But when Tesla started rolling out the FSD beta to a select group of customers in October 2020, it upped the price to $10,000. In September 2021, Tesla began opening the beta to more customers via a new “request” button before increasing the price to $12,000 earlier this year. In 2019, Musk called Tesla vehicles “appreciating assets,” meaning that they’ll increase in value as Tesla launches additional driver-assist features. Musk later claimed that “the value of FSD” could reach over $100,000 “as the software gets closer to full self-driving capability with regulatory approval.” Earlier this month, California’s Department of Motor Vehicles (DMV) accused Tesla of making “untrue or misleading claims” about its vehicles’ self-driving capabilities. The DMV alleges that the names Autopilot and FSD, as well as the language Tesla uses to describe them, could deceive users into thinking that the vehicles can operate autonomously. Last August, Senators Ed Markey (D-MA) and Richard Blumenthal (D-CT) asked the Federal Trade Commission to investigate the way Tesla advertises its FSD and Autopilot software. The two lawmakers later sent a letter to Musk to “express significant concerns” over Tesla’s driver-assist system, which Tesla responded to by saying its system can help customers “drive safer than the average driver in the U.S. +Traditionalists aren't ready to see a woman take the Iron Throne, but Rhaenyra is bound and determined to "create a new order" from the back of her dragon. Meanwhile, members of Houses Stark, Velaryon, Lannister, and Baratheon plot against those in power, but the Targaryens have unmatched firepower. Ready to get your dragon on? Buckle up for everything we know about the show thus far, including what we learned from House of the Dragon's Hall H panel at San Diego Comic-Con this year. When Does House of the Dragon Premiere? House of the Dragon's ten episode season will begin on August 21, 2022. It'll go head-to-head with another fantasy juggernaut, Amazon's The Rings of Power, landing on September 2. Two fantasy series enter the streaming thunder-dome—who will win? August 21. #HouseoftheDragon pic.twitter.com/xH6T7b9sa9 What Did We Learn at House of the Dragon's Comic-Con presentation? The House of the Dragon panel kicked off with the extended trailer for the series, which showed a whole lot of Game of Thrones-y antics: the (then-) latest and greatest battle for the Iron Throne, a longer tease of the battle for succession at the show's center, and a look at the time "when dragons ruled as one. +In February 2023, Bloys said it's "a good guess" that House of the Dragon won't be eligible for the 2024 Emmys, which means it will premiere after May 31, 2024. Summer or fall 2024 is looking like a good guess for the premiere date. We'll update this story as soon as we learn more. Emily Burack (she/her) is the news writer for Town & Country, where she covers entertainment, culture, the royals, and a range of other subjects. Before joining T&C, she was the deputy managing editor at Hey Alma, a Jewish culture site. Follow her @emburack on Twitter and Instagram.  The Summer I Turned Pretty S2 Episode Guide Yellowstone Will End After Season 5 How to Watch Yellowstone Best Only Murders in the Building Fashion There's No New Episode of Outlander This Week And Just Like That... Season 2 Guide The Summer I Turned Pretty Renewed for Season 3? Is The Afterparty Returning for a Season 3? How to Watch the 2023 Women's World Cup Emma Corrin to Star in New Murder Mystery Show Why Beatrice Borromeo Made The King Who Never Was Would Meghan Markle Return for a Suits Reboot? A Part of Hearst Digital Media We may earn commission from links on this page, but we only recommend products we back. ©2023 Hearst Magazine Media, Inc. All Rights Reserved. +Pre-orders for the PS VR2 headset, games, and PS VR2 Sense Controller charging station are underway starting today.  Update: Pre-order directly from PlayStation’s online store at direct.playstation.com before PlayStation VR2 launches on February 22. Over the past several months, we’ve introduced PlayStation VR2 and provided glimpses into the next generation of virtual reality gaming, which will allow you to escape into new worlds  while feeling a groundbreaking sense of immersion. Today, I’m very pleased to announce that PlayStation VR2 is officially launching on February 22, 2023. PlayStation VR2 Sense controller charging station, designed specifically for the PS VR2 Sense controller, will also launch the same day.  Here is the PS VR2 lineup and recommended retail pricing for each product. Availability in each country is subject to local import regulations.  Standalone software titles, including Horizon Call of the Mountain, will also be available for pre-orders starting this month. More details will be provided at a later date.   During this initial launch phase for our next-gen headset, players in the U.S., U.K., France, Germany, Belgium, Netherlands and Luxembourg will initially be able to pre-order PlayStation VR2 solely through PlayStation’s online store at direct.playstation.com. Pre-orders will begin on November 15, and players may begin to register for pre-orders starting today. Orders from direct.playstation. +Here's all you need to know about the PlayStation VR2 price, release date and features. Sony has revealed its next gen virtual reality system is called the PlayStation VR2 (PSVR2), and its new VR controller has been officially named the PlayStation VR2 Sense controller. On this page, we're bringing you the latest PSVR 2 news updates including the PSVR2 price, release date and pre-order info. It goes without saying, this new VR headset will be in high demand and you'll need to be quick if you want to get one on its launch date. So whether you're planning to upgrade your PSVR headset to this latest model or you're buying a VR headset for the first time, here you'll find all you need to know about the PSVR2 release date, price, games, and where to buy it. We've also detailed the PSVR 2 specifications so you can decide if this will be the virtual reality headset for you. Let's dive in! (Last updated: 2nd November 2022) The PSVR2 will release on 22nd February 2023, debunking previous speculations that Sony is planning an end of year release. In April 2022, Analyst Ross Young claimed that the PSVR2 would not be entering the wild until 2023. Young wrote on Twitter that VR display shipments were to rise in 2022 despite delays to 2023 at Sony. +52 Tiger Woods and Rory McIlroy have a new business venture together. The two PGA Tour stars, along with founder and CEO Mike McCarley, announced Tuesday the formation of TMRW Sports, a new company “focused on building technology-focused ventures that feature progressive approaches to sports, media and entertainment.” Television executive Dick Ebersol is also an initial investor. TMRW Sports is here! We’re a company founded by @TigerWoods, @McIlroyRory & sports executive Mike McCarley. Our focus is on building pioneering ventures that feature progressive approaches to sports, media & technology. Learn more: https://t.co/ItAbANOWSI #TMRWSports = Tomorrow pic.twitter.com/Z9svD1d6iG — TMRW Sports (@TMRWSports) August 23, 2022 “Both Tiger and Rory’s competitive spirit extends beyond the golf course, and both have proven track records in supporting ventures that are modernizing the way sports are played, enjoyed, and consumed,” McCarley, who previously served as Golf Channel’s president, said in a release. Advertisement According to a Golfweek report, the group is behind a new technology-driven competition series for top stars on the PGA Tour. The new venture will reportedly feature a series of one-day events held in a non-green grass, stadium environment. They are expected to be held in partnership with the PGA Tour and launch in 2024. +Tiger Woods and Rory McIlroy are spearheading a new venture that will have the world’s top golfers competing against each other in a non-green grass, stadium environment, Golfweek has learned. Multiple sources say a series of events will be held in partnership with the PGA Tour and that more specifics could be announced by Commissioner Jay Monahan this week at the Tour Championship. The one-day events are designed to complement the PGA Tour schedule and will launch in 2024, according to multiple sources familiar with the concept. Early thinking suggests the showdowns — which will be technology-forward and staged with a live audience — could run January through March, with a finale held later. Discussions about broadcast and gaming partners are underway. A source at NBC Sports says the network has an option to be the media partner in the venture. Details about the plan were shared with Tour members who attended the players-only meeting held on August 16 during the BMW Championship, for which Woods made a special trip from his home in Florida. It was presented as a long-term opportunity for players to build equity in the enterprise, which will have private funding in addition to corporate partnerships and sponsors. The proposal was received positively among players in the room, according to a source familiar with the conversation. Woods and McIlroy began working on the project more than two years ago, a collaboration that friends say has brought them closer. +Super.tech was founded in 2020 based on pioneering quantum computing research from EPiQC, an NSF Expedition in Computing at the University of Chicago. (Image: iStock.com/AndreyPopov) A University of Chicago quantum software spinout and Duality Cohort 1 participant, Super.tech has been acquired by a global quantum ecosystem leader, ColdQuanta. Super.tech is embedded in Argonne National Laboratory’s Chain Reaction Innovations program and is also incubated by Duality, the first accelerator dedicated exclusively to supporting quantum startups, operated by the Chicago Quantum Exchange and UChicago’s Polsky Center. Following the acquisition, ColdQuanta is establishing a Chicago-based office that will draw on the talent and innovation from the University and the city’s robust startup ecosystem. Super.tech’s full team will remain on board, including CEO Pranav Gokhale, PhD ’20, and Chief Scientist Fred Chong who will lead the new office as vice president of quantum software and chief scientist of quantum software, respectively. “Becoming part of ColdQuanta is incredibly exciting because Super.tech’s strength is building software that is tailored to the physics of quantum technologies, and ColdQuanta gives us intimate access to a range of computing, sensing, and communication technologies,” said Chong, Seymour Goodman Professor in the University’s department of computer science. “Together, we will create the most effective quantum systems across a range of applications in the quantum industry. +G&W is pleased to announce the recent acquisition of SuperTech, Inc. in Fayetteville, GA.  SuperTech, founded by Robert and Alicia Nyborg over 20 years ago has built a solid reputation in the Atlanta market by providing quality equipment and exceptional service. The Nyborg family will continue to run the daily operation and all of the employees will stay in their same capacity so we can continue to support our customers.  With our combined efforts, G&W now has over 35 employees  to support the Atlanta market. We are excited about this partnership and look forward to our continued growth in the state of Georgia. Welcome Super Tech! +USC Trojans quarterback Caleb Williams is the reigning Heisman Trophy winner after a breakout season in 2022. Now, we can look ahead to the candidates who will join the growing list of Heisman winners. Stay tuned for the upcoming year as we evaluate the leading Heisman candidates, track performances and so much more. Once the college football season begins, we’ll provide weekly updates on the 2023 Heisman Trophy race. Related: Most Heisman Trophy winners by school Before diving into our favorite Heisman Trophy candidates in 2023, with full breakdowns for our top picks, here’s a rundown of the latest Heisman odds and Sportsnaut’s Heisman watch list. Here are the latest Heisman odds, via FanDuel. Here is our early list of the favorites to win the Heisman Trophy 2023. We’ll provide individual breakdowns for each of the players this off-season. Caleb Williams is the favorite to win the 2023 Heisman Trophy, to the surprise of no one. While history suggests it will be another player hosting the coveted trophy at the Heisman ceremony next December, Williams is in a great position to repeat. While USC loses Jordan Addison, it welcomes new offensive weapons that can thrive in this system. More importantly, Williams will be in his third season with Lincoln Riley. Plus, USC’s defense is going to require a lot of shootouts in 2023. +Further below, you can find an early look at our 2023 Heisman candidates. Here are the 2021 Heisman voting results. With 83% of the total possible points, Bryce Young finished with the seventh-highest total in Heisman Trophy voting history. +GoldDerby We waited more than a year for “The Amazing Race 33” after COVID-19 suspended production in 2020, but the wait for Season 34 was not as long. Here’s what you need to know about the current season of “The Amazing Race.” When will Season 34 premiere? It already did. Season 34 premiered Wednesday, Sept. 21 at 10/9c on CBS. On Wednesday, Nov. 2, it moved up an hour to 9/8c, where it will air for the remainder of the season. When will Season 34 end? Season 34 will air its finale on Wednesday, Dec. 7 at 9/8c on CBS. The final three teams are “Big Brother 23” couple Derek Xiao and Claire Rehfuss, married couple Luis Colon and Michelle Burgos, and long-lost twins Emily Bushnell and Molly Sinert. Who is in the Season 34 cast? Click here to meet the 12 teams. Where will Season 34 visit? Season 34’s stops included Austria, Italy, France, Spain, Iceland and Jordan, and CBS has revealed all the Pit Stop locations in those countries. The starting line was in Munich, the first time the start is outside of the United States. The finish line will be in Nashville, where tasks include delivering guitars, playing on a giant floor piano and packaging whiskey bottles. +5 and 12 with an elimination in the latter hour. The second Mega Leg aired on Nov. 16 and 23. In total, there will be 10 legs airing over 12 episodes. SEE ‘The Amazing Race 34’ cast: Here are the 12 new teams When did Season 34 film? Filming commenced on May 22 and wrapped mid-June. Keoghan filmed both “The Amazing Race” and his other CBS series “Tough as Nails” this summer. Production started two months after CBS renewed “The Amazing Race” for a 34th season in March, a week after the Season 33 finale aired. Despite the difficulties with the pandemic, which halted production on Season 33 from February 2020 until September 2021, a renewal was always in the offing. Keoghan told Gold Derby in June 2021 that “the expectation from the network is that we get Season 33 finished and then we roll into more seasons again.” In December, while Omicron was surging, co-creator and executive producer Bertram van Munster said it was a “waiting game right now” in regards to future seasons. “We’re being very, very careful.” What will Season 34 look like? +Toulouse Football Club is a French professional football club based in Toulouse. The club was founded in 1970 and currently plays in Ligue 1, the first division of French football. Toulouse plays its home matches at the Stadium de Toulouse located within the city. Les Pitchouns are the current holders of the Coupe de France, and have won the second tier Ligue 2 on three occasions.[2] Toulouse have participated in European competition five times, including in 2007 when they qualified for the UEFA Champions League for the first time.[3] They are set to participate in the 2023–24 UEFA Europa League, following their victory in the preceding year's Coupe de France. The president of Toulouse FC is Damien Comolli, who succeeded the French businessman Olivier Sadran who took over the club following its bankruptcy in 2001 which resulted in it being relegated to the Championnat National. The club has served as a springboard for several players, most notably the World Cup-winning goalkeeper Fabien Barthez, international strikers André-Pierre Gignac[4] and Martin Braithwaite. The city was left without a big side in 1967 when Toulouse FC sold its players and place in the French top flight to Paris outfit Red Star, but three years later a new club, Union Sportive Toulouse, rose from the ashes. +Olivier Jaubert, formerly with Nike and the FFF, runs the commercial and business side of the club, with Comolli overseeing the football operation. There is regular dialogue, too, with the owners in the United States. Advertisement Toulouse now comes under the umbrella of RedBird FC, a separate entity to RedBird Capital Partners whose portfolio grows ever more impressive. The fund will add AC Milan to its roster early next month, has also taken a stake in the Indian Premier League cricket team Rajasthan Royals and owns 50 per cent of Zelus Analytics, a sports data business whose input shapes Toulouse’s transfer policy. The club have gladly tapped into their owners’ expertise in the fields of merchandise, media and sport, with the chain of decision-making slick and efficient. RedBird representatives, initially frustrated by COVID-19 restrictions, have visited Toulouse two or three times since their purchase but there is a company business call once a fortnight, and a weekly football club call. “The operation needs to be self-sustainable, and we are,” adds the club president. “We were even in Ligue 2. We are making money. The owners couldn’t believe that, but last year we made money — a significant profit. “Now the ambition is to improve the facilities. We are investing money into a new training ground and €1million to refurbish the academy. We want to invest in the stadium, and the municipality are very open to that. +TGL is a planned golf league created by TMRW Sports, a venture formed by sports executive Mike McCarley and professional golfers Tiger Woods and Rory McIlroy, in partnership with the PGA Tour. It will launch in January 2024, with events held on Monday nights in conjunction with the PGA Tour schedule.[1] On August 24, 2022, the PGA Tour, along with Tiger Woods, Rory McIlroy and Mike McCarley, announced the formation of TGL.[2] It will initially feature six teams of three PGA Tour players, competing head-to-head in 18-hole match play on a virtual course with a special short game area. Fifteen matches, each lasting two hours and played in primetime on Monday nights, will make up the regular season. The semi-finals and a final match will be held at the end of the season.[3] TMRW Sports is building the first TGL venue in Palm Beach, Florida, through a partnership with Palm Beach State College. The group broke ground at the venue on February 20, 2023.[4][5] The venue will include educational and recreational facilities.[6] Construction is being overseen by CAA Icon.[7] +According to ESPN, the TGL has begun started creating an arena on the campus of Palm Beach State College in Palm Beach Gardens, Florida. The TGL is expected to be broadcasted Monday nights in prime time. Fans will be able to watch all the action as the league begins its inaugural season. "As soon as I learned about TGL, I jumped at the opportunity to be a part of it,” Rahm said. "As an avid user of the latest tech in golf with launch monitors, simulators and virtual greens and my personal passion for gaming, I immediately recognized the potential for TGL to introduce golf to a broader global audience — especially younger fans. I’m proud to announce my commitment to compete and help shape the future of golf for the next generation. +After revealing earlier this year that it was making a BioShock movie, Netflix has announced who will be directing it and who's writing the script. And you might recognize them, and if not, you'll almost certainly recognize the movies they've worked on.  Netflix revealed in a tweet made today that Francis Lawrence (I Am Legend, The Hunger Games: Catching Fire, Slumberland) will direct this BioShock film adaptation and Michael Green (Loga, Blade Runner 2049, American Gods) will write the script.  BioShock — our live-action feature film adaptation of the renowned video game franchise — will be directed by Francis Lawrence (I Am Legend, The Hunger Games: Catching Fire, Slumberland) from a script written by Michael Green (Logan, Blade Runner 2049, American Gods). pic.twitter.com/mDh4ut6ayJ And that's all Netflix had to reveal about the movie today. Perhaps we'll learn of casting soon. In the meantime, read about the original announcement.  Does this director and writer announcement excite you? Let us know in the comments below! View the discussion thread. © 1991 to Game Informer. All Rights Reserved. +Privacy Policy enter Now Playing: Everything We Want in a Bioshock Movie The director went on to say that BioShock has a "strange mash-up of genre," touching upon things like horror and sci-fi, as well as how it's a period piece. "I think it can be really unique and really beautiful and really entertaining" as a film, Lawrence said. A BioShock movie was planned many years ago from Pirates of the Caribbean director Gore Verbinski, but its R rating proved to be an issue. Now that it's being made for Netflix, Lawrence said there are "always discussions about rating and tone," but he is feeling free to execute on his own vision. "I certainly have not felt stifled in any way, or sent in any directions with Netflix," he said, adding that the key creative team can basically do "what we want to do" with the movie. Additionally, Lawrence said he has been in contact with BioShock rights owner Take-Two and original writer-director Ken Levine. As for a status update on how the BioShock movie is progressing through development, Lawrence said Green is in the middle of writing the movie. As such, there is a "real possibility" that Lawrence will make it next, but nothing is certain yet. +We cheered Max’s disruption of the status quo and applauded when he asked his patients the simple yet profound question, ‘How can I help?’ Over the last four seasons, David, Peter, and our incredible cast have tackled important and thought-provoking stories that have touched on the human condition, but also made us laugh and imbued hope. We’re so proud of this series and are indebted to everyone involved in bringing New Amsterdam to life. Bravo!” More details are here regarding what fans can expect from New Amsterdam Season 5, specifically around some key characters. Plus, the latest key art for the season has been revealed.  New Amsterdam Season 5 premieres Tuesday, September 20 at 10/9c on NBC and next day on Peacock. While we don't yet have an official trailer, NBC did release a First Look that sees Eggold getting emotional as he reflects on the final season of New Amsterdam. A post shared by New Amsterdam (@nbcnewamsterdam) "I can't believe we're here five seasons in and it's already our fifth and final season," he said, "and just an excitement to bring the show to a close and to sort of put a period at the end of that sentence. You don't always get the opportunity to end the story so it's going to be an exciting last chapter." We don't have any photos from the episodes, yet. +Create a free profile to get unlimited access to exclusive show news, updates, and more! The Dam Fam will have to wait a few weeks before the final season wraps in 2023. For the next few weeks, Dam Fam members may get settled in on their Tuesday nights, ready to watch a new episode of New Amsterdam. However, they'll soon discover that—unfortunately—there are no new episodes to watch. That's because Season 5 of the medical drama is currently on a hiatus until 2023. Below, read everything you need to know about the show's break and when it comes back. Watch every episode of New Amsterdam on Peacock.   Following its two-hour midseason finale on November 22, Season 5 of New Amsterdam is on a holiday hiatus and will not air any more new episodes in 2022. The fifth season will return with Episode 11 on Tuesday, January 3, 2023 at 10/9c on NBC. There will then be another quick break on Tuesday, January 10 because of the Golden Globes. However, the next week (January 17) marks the two-episode series finale, in which New Amsterdam will come to an end. +The 2022 FIFA World Cup final was the final match of the 2022 FIFA World Cup, the 22nd edition of FIFA's competition for men's national football teams. The match was played at Lusail Stadium in Lusail, Qatar, on 18 December 2022, the Qatari National Day, and was contested by Argentina and defending champions France. The final took place in front of 88,966 supporters, with a record crowd of 1.5 billion people watching on television, becoming one of the most widely-watched televised sporting events in history.[3] The tournament comprised hosts Qatar and 31 other teams who emerged victorious from the qualification phase, organised by the six FIFA confederations. The 32 teams competed in a group stage, from which 16 teams qualified for the knockout stage. En route to the final, Argentina finished first in Group C, first losing to Saudi Arabia 2–1, then defeating both Mexico and Poland 2–0. They then won against Australia in the round of 16, the Netherlands in the quarter-final through a penalty shoot-out, and Croatia in the semi-final. France finished top of Group D with two wins and one loss (4–1 win over Australia, 2–1 win over Denmark, and a 1–0 loss to Tunisia), defeating Poland in the round of 16, England in the quarter-final and Morocco in the semi-final. +It did, according to the game’s officials and England won 4-2. The 1970 final marked Pelé’s last World Cup appearance as he secured his third title in Brazil’s swashbuckling victory over Italy. Four years later in Munich, host West Germany came from behind to win 2-1 against a star-studded Netherlands team – made up of Johan Cruyff and Johan Neeskens – to win its second World Cup. Much like Messi at Qatar 2022, Diego Maradona almost single-handedly drove his team to its second title in eight years, beating West Germany 3-2 in the final. In 1998, France hosted and won its first World Cup, mainly down to the genius of Zinedine Zidane, who scored twice in the final, to beat a formidable Brazil side, composed of Ronaldo, Rivaldo, Cafu, Bebeto and Roberto Carlos. However, with its multiples story lines and the drama and artistry on display, surely the 2022 showpiece now owns the title of ‘greatest World Cup final.’ © 2023 Cable News Network. A Warner Bros. Discovery Company. All Rights Reserved. CNN Sans ™ & © 2016 Cable News Network. +FOX 2 Please enter a search term. Please enter a search term. FOX 2 Chief Meteorologist Glenn Zimmerman is joined by Chris Higgins, Angela Hutti, Jaime Travers, and Linh Truong. John Fuller is the chief meteorologist for KPLR-TV. They bring a wealth of experience when covering the weather in St. Louis and the surrounding areas. Glenn Zimmerman is the Chief Meteorologist for FOX 2 News. He has been forecasting weather in St. Louis for over 30 years. When he doesn’t have his head in the clouds, he is into photography, music, and has competed in several triathlons. Wake up with Linh Truong’s forecasts Monday-Friday on Fox 2 News in the Morning. She has years of experience forecasting in different parts of the country.  John Fuller came to St. Louis in June of 1983, recently celebrating 30 years of weather coverage in St. Louis. Despite his longevity, John Says, “just when I think I have St. Louis area weather figured out, a new wrinkle develops, like the 2012 drought or Spring 2013 tornadoes. With the weather constantly changing, we must adapt and adjust as meteorologists.” Chris Higgins was born and raised here in the St. Louis area. +Maggie Rotermund Senior Media Relations Specialistmaggie.rotermund@slu.edu314-977-8018 Reserved for members of the media. ST. LOUIS - The students in Chris Higgins’ principles of broadcast meteorology class got a taste of life in television journalism Wednesday when the KTVI/KPLR meteorologist did a live newscast during their class at Saint Louis University.  KTVI meteorologist Chris Higgins does a live broadcast on KPLR-TV Ch. 11 during his broadcast meteorology class at SLU on April 12. Photo by Maggie Rotermund. Higgins did the weather reports for the 7 p.m. newscast on KPLR-TV Ch. 11 from a spot near the Joseph G. Lipic Clock Tower on West Pine Mall. Higgins had three live segments during the hour-long broadcast, plus a quick intro at the beginning of the show. During the breaks, he and his camera person offered tips and tricks of the trade on live broadcasting.  “It was amazing to see how Chris and Lou were able to work together when an obstacle popped up,” said freshman Evelyn Maruszak.  Maruszak’s goal is a career in broadcast meteorology. “This broadcast course has been such a wonderful opportunity, and it is so special +Sinclair marks the second significant hire at Riff Raff, which recently brought on seasoned Stephen Fuss, a media veteran with top stints at Stargrove Pictures and Ingenious Media, as CEO to support the growth of the television and film production company.   It also comes after Riff Raff received a multi-million dollar capital injection from Calculus Capital, including the Calculus Creative Content EIS Fund, which will provide overhead for key new hires and enable the company to acquire and develop more projects. The company says that funding, along with a first-look deal with New Republic Pictures inked in 2021, will help Riff Raff acquire highly sought-after material and attach premium writers across both sides of the Atlantic. “I’m really excited to be joining Riff Raff at such a pivotal time, as the company develops and grows its already very exciting slate of film and TV projects,” said Sinclair. “I can’t wait to start working with Jude, Ben and Stephen, helping make Riff Raff a home for exciting writers, directors and IP.”  “We are absolutely thrilled to have Katie Sinclair join our team as head of development. +As we grow and continue to develop and produce new and exciting projects across film and television, her great knowledge, experience and taste is a perfect match and sure to be of huge benefit to us,” added Law, Riff Raff co-founder and creative founder Ben Jackson, and Fuss. Riff Raff received secured a multi-million dollar capital injection from Calculus Capital, including the Calculus Creative Content EIS Fund, providing overhead funding for key new hires and a focus to acquire and develop premium IP. A first look deal with New Republic Pictures was signed in 2021. 2023-08-08T08:42:00Z ‘You Were Never Really Here’ to screen at the festival. 2023-08-08T08:09:00Z Bookmark this page for the latest updates in the territory. 2023-08-07T13:16:00Z ‘Barbie’ enters all-time top 20; ‘Oppenheimer’ in top 100, passes ‘Inception’. 2023-08-08T08:08:00Z Bookmark this page to keep track of all the latest festival dates. 2023-08-07T23:41:00Z The studio is assessing ”marketing challenges” for its theatrical slate.  2023-08-07T21:40:00Z The director’s latest film is set to premiere at Venice Film Festival. +Texas Tech agreed to pay former women's basketball coach Marlene Stollings a little more than $740,000 as part of a settlement of a lawsuit in which she accused the school and its athletics director, Kirby Hocutt, of discrimination and retaliation, according to a copy of the settlement agreement USA TODAY Sports obtained from the university through a public records request. The school fired Stollings for cause in August 2020, the day after the publication of an investigation by USA TODAY Sports and The Intercollegiate, a college sports investigative media outlet. Players alleged there was a culture of abuse under Stollings and described a toxic culture that generated "fear, anxiety and depression." In her lawsuit, Stollings argued that two internal reviews conducted by the school before the investigation was published cleared her of the allegations. STAY UP TO DATE:Subscribe to our Sports newsletter now! The lawsuit, filed in October 2020, was settled on Aug. 10. The settlement shows Stollings received $300,000 for alleged compensatory damages, including emotional pain, suffering, inconvenience, mental anguish and loss of enjoyment of life. She received $300,000 for attorneys' fees and expenses incurred by Stollings, plus an additional $140,666.00 for back wages, according to the agreement. +Texas Tech and Marlene Stollings, fired as the head women’s basketball coach in August 2020 after a USA TODAY Sports investigation into the program, have settled a lawsuit in which Stollings accused the school and athletics director Kirby Hocutt of discrimination and retaliation.  Texas Tech fired Stollings the day after an investigation by USA TODAY Sports and The Intercollegiate, a college sports investigative media outlet, was published. Players alleged there was a culture of abuse under Stollings and described a toxic culture that generated "fear, anxiety and depression." Stollings argued in her lawsuit that two internal reviews conducted by the school before the investigation was published cleared her of the allegations. Stollings sued Texas Tech in October 2020 and the case was scheduled to go to trial in February 2023. The two sides on Wednesday filed a joint motion to settle, and a judge on Thursday dismissed the case. Terms of the settlement were not immediately available. The school cannot comment on the settlement, according to Robert Giovannetti, Texas Tech’s Senior Associate Athletics Director of External Operations & Strategic Communications. Stollings was under contract through March 2024 at the time of her dismissal. +Sony and Tencent acquired a 30 percent stake of FromSoftware, the esteemed Japanese video game studio behind “Elden Ring” and the Dark Souls series, Wednesday. Kadokawa Corporation, the Tokyo-based media corporation that owns FromSoftware, announced in a news release that Sony and Tencent had both purchased significant shares in FromSoftware. Sony Interactive Entertainment (a subsidiary of Sony behind the PlayStation brand) holds 14.09 percent of FromSoftware’s shares; Sixjoy Hong Kong Limited (a subsidiary of Tencent) owns 16.25 percent, bringing the collective stake to 30.34 percent. Kadokawa still maintains majority ownership at 69.66 percent. In the announcement, Kadokawa explained that the three companies had operated a “strategic alliance in the anime and game fields” since October 2021. Kadokawa said these recent investments would be used to further expand FromSoftware’s expansion into the global market and strengthen the triumvirate formed with Tencent and Sony. “Through the implementation of the fund procurement,” Kadokawa wrote in its press release, “FromSoftware will aim to proactively invest in development of more powerful game IP for itself to strengthen FromSoftware’s development capabilities and will seek to establish a framework that allows the expansion of the scope of its own publishing in the significantly growing global market. +Wouldn't mind a Bloodborne 2 @Omnistalgic Help From? They are helping themselves by raking in the $$$ from FromSoftware's success Meanwhile fans are still waiting for Bloodborne Remastered on PS5 & PC...give them a bone please. @Art_Vandelay that’s facts. However, people can still voice their opinion on the subject. You don’t have to stay silent when you don’t agree with something From my POV, this is a waste of time for me because FromSoftware haven't made a good game since Tenchu. @NeThZOR They could have likely had the studio be a part of WWS if they pursued them further after Demon's souls. Big difference. @theMEGAniggle That is definitely why we're here. But what almost always happens is that people love to whine and pretend to hate the evil greedy corporation but when push comes to shove, they don't put their money where their mouth is. And hence that negativity for negativity's sake unnecessarily gets in the way of our enjoyment of this great form of entertainment. @Art_Vandelay real talk Tap here to load 59 comments Leave A Comment Hold on there, you need to login to post a comment... +The Voice season 22 coaches are Blake Shelton, John Legend, Gwen Stefani and newcomer Camila Cabello. Camila is replacing Kelly Clarkson, who joined The Voice in February 2018. She appeared on the series for eight seasons. When Blake revealed that The Voice would be premiering in the fall, he also encouraged others to duet his TikTok set to MIKA's single "Grace Kelly." Shortly after, John posted a clip of himself singing alongside the "Comeback as a Country Boy" artist. Then, Blake's wife and No Doubt leading lady, Gwen, shared that she was also returning to The Voice with her own singing snippet. The GXVE beauty entrepreneur was previously a coach on the NBC series for five other seasons, including 7, 9, 12, 17 and 19. Last but not least, Camila confirmed her attendance with a brief but telling cameo in a TikTok duet. With that, it was official that The Kelly Clarkson Show host and season 21 coach Ariana Grande would be departing from The Voice. Kelly hasn't addressed leaving the show, but her departure isn't completely out of the blue. The American Song Contest co-host previously shared that she wanted to spend more time with her kids (8-year-old daughter River and 6-year-old son Remington) — even if it meant switching up her schedule to do so. +The other three coaches were also confirmed to be Blake Shelton (his 22nd cycle), John Legend (his seventh season) and Gwen Stefani (her sixth installment). Watch a video trailer above to see Camila making her grand debut. “The Voice” premiere date Season 22 will premiere Monday, September 19 at 8 p.m. PT/ET on NBC. It will air Mondays and Tuesdays throughout the Fall season. Season 22 battle advisors On August 17, 2022, NBC unveiled the list of “The Voice” mentors for the upcoming battle rounds. The battle advisors for this season are Jazmine Sullivan for Team Legend, Sean Paul for Team Gwen, Charlie Puth for Team Camila, and Jimmie Allen for Team Blake. “The Voice” format “The Voice” always begins with the blind auditions, in which aspiring artists sing to the backs of the coaching panel. If a judge likes what they hear, they push their “I Want You” button, which turns their chair around. If more than one coach pushes their button, then the artist gets to choose which team they want to join. Following that initial round, the show pivots to the battles and knockouts, which is when each of the coaches pare down their teams, and finally to the live playoffs, which is when America gets to vote for their favorite performers. +7%) in May 2020 and July 2020. Unemployment in the transportation sector was above overall unemployment. BLS reports that the U.S. unemployment rate, not seasonally adjusted, in August 2022 was 3.8% or 0.8 percentage points below the transportation sector rate. Seasonally adjusted, the U.S. unemployment rate in August 2022 was 3.7%.     In addition to the update of the Unemployment in Transportation dashboard, BTS also released its monthly update to its Employment in Transportation: Total, by Mode, and Women, and Race and Hispanic or Latino Ethnicity of Transportation Workers dashboards. Charts Updated this Month by Section include: Unemployment in the Transportation and Warehousing Sector and in Transportation and Material Moving Occupations Monthly Employment in the Transportation and Warehousing Sector, Establishment Data Monthly Employment in the Transportation and Warehousing Sector by Race and Hispanic or Latino Ethnicity, Household Data Visit Transportation Economic Trends for more topics. Media contact: BTSNews@dot.gov or 1-800-853-1351. U.S. +Aug 2019 Sep 2019 Oct 2019 Nov 2019 Dec 2019 Jan 2020 Feb 2020 Mar 2020 Apr 2020 May 2020 Jun 2020 Jul 2020 Aug 2020 Sep 2020 Oct 2020 Nov 2020 Dec 2020 Jan 2021 Feb 2021 Mar 2021 Apr 2021 May 2021 Jun 2021 Jul 2021 Aug 2021 Sep 2021 Oct 2021 Nov 2021 Dec 2021 Jan 2022 Feb 2022 Mar 2022 Apr 2022 May 2022 Jun 2022 Jul 2022 Aug 2022 The ratio of unemployed people per job opening has been below 1.0 since July 2021. The August 2022 figure marks the first increase in the ratio since April 2020, when it reached 4.9.  The number of unemployed people per job opening reached its highest level of 6.4 in October of 2009, at the height of the Great Recession.  These data are from the Job Openings and Labor Turnover Survey and are seasonally adjusted. Job openings data for the most recent month are preliminary. To learn more, see "Job Openings and Labor Turnover — August 2022." We also have more charts showing job openings, hires, and separations data. +By  The Associated Press Serena Williams motions a heart to fans after losing to Australia's Ajla Tomljanovic during the third round of the U.S. Open tennis championships on Friday in New York. Frank Franklin II/AP hide caption Serena Williams motions a heart to fans after losing to Australia's Ajla Tomljanovic during the third round of the U.S. Open tennis championships on Friday in New York. NEW YORK — Leave it to Serena Williams to not want to go quietly, to not want this match, this trip to the U.S. Open, this transcendent career of hers, to really, truly end. Right down to what were, barring a change of heart, the final minutes of her quarter-century of excellence on the tennis court, and an unbending unwillingness to be told what wasn't possible, Williams tried to mount one last classic comeback, earn one last vintage victory, with fans on their feet in a full Arthur Ashe Stadium, cellphone cameras at the ready. The 23-time Grand Slam champion staved off five match points to prolong the three-hours-plus proceedings, but could not do more, and was eliminated from the U.S. Open in the third round by Ajla Tomljanovic 7-5, 6-7 (4), 6-1 on Friday night in what is expected to be her final contest. "I've been down before. ... +"I think we all need to just honor Serena and her amazing career," Emma Raducanu, 19, said after the match Jason Hahn is a former Human Interest and Sports Reporter for PEOPLE. He started at PEOPLE's Los Angeles Bureau as a writer and reporter in 2017 and interviewed the likes of Kobe Bryant, Arnold Schwarzenegger and Tom Brady. He has a B.A. in English from the University of California, Berkeley, and a Master's degree in Journalism from Columbia University. He previously worked for Complex Magazine in New York City. In her second match since announcing she would retire from professional tennis, Serena Williams lost to Emma Raducanu at the Western & Southern Open in Ohio on Tuesday. Williams lost in straight sets to the British tennis player during the 65-minute match, according to the Washington Post. Raducanu, 19, won the match 6-4, 6-0. It's widely expected that Williams' next tournament, the U.S. Open later this month, will be the final one of her storied career. The 23-time Grand Slam champion said she planned to "evolve away from tennis" after the New York City tournament in an essay for Vogue on August 9. After the match, Raducanu paid tribute to Williams and all she has accomplished. "I think we all need to just honor Serena and her amazing career," she said, per CNN. +Four people were killed and eight injured after a shuttle van crashed Friday morning on New Jersey’s Palisades Interstate Parkway, officials said. At about 1:30 a.m., police received reports of a crash in the center median of the parkway's southbound lanes in Englewood Cliffs, a borough in Bergen County, New Jersey, the Palisades Interstate Parkway Police said in a statement. When officers arrived at the scene, they found "a single vehicle accident rollover" and several passengers trapped in the vehicle. Four of the passengers suffered "severe trauma" and were pronounced dead at the scene while eight others were hospitalized with injuries ranging from severe head trauma to minor physical complaints, police said. Police did not immediately identify the victims. The shuttle van, listed as a Ford Econoline E350 passenger cargo van with New York registration, takes people to and from factories in upstate New York, police said. The van was carrying 12 passengers at the time of the crash. The crash also snarled traffic as the southbound lanes of the parkway remained closed Friday morning. The cause of the crash is under investigation by parkway police, the Bergen County Sheriff's Office and other agencies. +The van served as a shuttle "for workers in factories in upstate New York," police said in Friday's release. Family members of two female victims told NBC New York that the shuttle was bringing workers back to New York City from Chester. Family members told the outlet the factory was for "a major global designer and manufacturer of party goods." Police also said the passengers were returning home from work and would be dropped off in the Tri-State area, according to WPIX. It is unclear what caused the crash, police said in Friday's release. An investigation into the incident is underway. The southbound lanes of the highway were briefly closed for motorists, beginning at Exit 2, as officials investigated the crash early Friday morning, according to WPIX. Police said the lanes have since reopened. +Virginia QB Brennan Armstrong is hit and loses the ball, but teammate Bobby Haskins is able to dive on it in the end zone for a safety. (1:10) Penn State defensive coordinator Brent Pry has been named the new head football coach at Virginia Tech, the Hokies announced Tuesday. Pry, 51, replaces former Hokies coach Justin Fuente, who was out as Hokies coach as of Nov. 16 after his teams went 43-31 in six seasons. Pry returns to Blacksburg, where he served as a defensive graduate assistant for the Hokies from 1995 to 1997 under head coach Frank Beamer and defensive coordinator Bud Foster. "On behalf of Amy and our family, we are extremely grateful to President [Timothy] Sands and [athletic director] Whit [Babcock] for extending us this opportunity at Virginia Tech," Pry said in a statement released by the school. "Working for Coach Beamer and Coach Foster as a graduate assistant in the 1990s, I was privileged to have been a part of this program as the Hokies established themselves as a national power, consistently proving they could beat anyone in the nation. "Even after I departed Blacksburg, I always continued to appreciate Virginia Tech, its great players, its championship teams, and its wonderful traditions from afar. The resources, facilities, university backing of Athletics, and phenomenal fan support that Virginia Tech enjoys made this a very desirable situation. +The Virginia Tech Hokies college football team represents Virginia Tech in the Football Bowl Subdivision (FBS) of the National Collegiate Athletic Association (NCAA) and the Coastal Division of the Atlantic Coast Conference (ACC). The program has had 33 head coaches, and 1 interim head coach, since it began play during the 1892 season.[1] Joseph V. Paterno Award (2010)Big East Coach of the Year (1995, 1996, 1999)ACC Coach of the Year (2004, 2005)[A 12] Neyland Trophy (2017)[6] +Please refresh the page or navigate to another page on the site to be automatically logged inPlease refresh your browser to be logged in Tragic accident occurred during her first solo jump Find your bookmarks in your Independent Premium section, under my profile TikTok influencer Tanya Pardazi has died in a tragic skydiving accident, aged 21. According to the former Miss Canada semi-finalist’s friends, Pardazi died while performing the activity in Ontario, Canada on 27 August. According to a statament by the skydiving company, Pardazi opened her parachute too late while in the air during her first solo course. The aspiring beauty queen was rushed to hospital, where she was pronounced dead. Skydive Toronto said in a statement: “A skydiving student aged 21 succumbed to fatal injuries obtained by an emergency situation. “The skydiver released a quickly rotating main parachute at a low altitude without the time / altitude required for the reserve parachute to inflate.” It added: “The team at Skydive Toronto is currently working with the South Simcoe Police on their investigation. “The jumper was a welcomed recent addition to the skydiving community and will be missed among the student’s new friends and fellow jumpers of Skydive Toronto Inc.” Skydive Toronto stated it “has been profoundly affected by this accident as they have refined their student training program for over 50 years”. +Ozgoli described her as outgoing, adventurous, open-minded, always there for others, and intelligent. “She was definitely known for how beautiful she was, but what she was known mostly for was her incredible mind. That is the one thing that every single person that I talked to mentioned, just how bright she was, how smart she was, how much she knew,” Ozgoli, 20, said. Pardazi was known for “picking up new hobbies,” according to Ozgoli, who called her friend a “gift to the world.” Ozgoli said a funeral for Pardazi, held Friday, was well-attended. “At the ceremony, we all wore white because she was an angel,” Ozgoli said. “I think it was a unique thing to do, and that’s what Tanya was, she was unique, she was different. She was one of a kind, truly.” The South Simcoe Police Service “are investigating the fatality in conjunction with the Office of the Chief Coroner,” according to a news release from police. © 2023 Cable News Network. A Warner Bros. Discovery Company. All Rights Reserved. CNN Sans ™ & © 2016 Cable News Network. +The latest breaking updates, delivered straight to your email inbox. Nebraska is committing to interim head coach Mickey Joseph for the remainder of the 2022 season. Like Scott Frost, who Nebraska fired Sunday, Joseph is a former Husker quarterback. “After the disappointing start to our season, I decided the best path forward for our program was to make a change in our head coaching position,” Nebraska Athletic Director Trev Alberts said in a statement. Joseph, 54, is the first Black head coach at Nebraska in any sport and among four new members of the staff this season. “Trev has made a good choice in asking Associate Coach Mickey Joseph to step in as interim head coach for the rest of the year and we eagerly look forward to his leadership,” said UNL Chancellor Ronnie Green. He joined the program as the passing game coordinator and wide receivers coach this season, after the firings last fall. “Difficult as this decision is, I fully support AD Alberts’ path (forward), & I have complete confidence in Interim Coach Joseph. There’s lots of football left to be played. Now is the time to rally around our players and give them our full support,” said University of Nebraska President Ted Carter. Prior to joining Nebraska, Joseph served as an assistant head coach at LSU. Joseph was on the LSU staff when the school won the national championship in 2019. +Green (@RonnieDGreen) September 11, 2022 (1/3) We’re grateful for everything Scott Frost has done for the University of Nebraska and the Huskers — as a player, coach and leader of our young men. Unfortunately, the results on the field just aren’t there. Nebraskans expect us to compete for championships, as do I. https://t.co/XPjnM5Cbvy — Ted Carter (@UofNE_President) September 11, 2022 Contact/Follow us @CornhuskersWire on Twitter, and like our page on Facebook to follow ongoing coverage of Nebraska news, notes and opinion. Let us know your thoughts, and comment on this story below. Join the conversation today!   Sign up for the Cornhuskers Wire newsletter to get our top stories in your inbox every morning © Copyright Cornhuskers Wire 2023 Powered by WordPress.com VIP Please enter an email address. Thanks for signing up. Please check your email for a confirmation. Something went wrong. +219] Evancho performed three further concerts with Michael Feinstein at his eponymous club in New York in August 2019.[220] Evancho stated in 2019 that she was working with vocal coach Joan Lader.[221][222] In 2020 Evancho began recording an album of covers of Joni Mitchell songs, produced by Fred Mollin,[223] at Sound Stage Studio in Nashville.[224] She released the disc, titled Carousel of Time, on September 9, 2022.[225] Before its release, Evancho introduced four singles from the album: "River" in October 2020,[226][227] "Both Sides Now" in May 2022,[223] "A Case of You" in July 2022,[228] and "Blue" in August 2022,[229] which she performed on Good Day New York in September[230] and WGN-TV in October.[231] Jill O'Rourke, reviewing the album for TalentRecap.com, wrote: "Evancho brings a signature ethereal quality to Mitchell’s music, as well as a clear emotional connection with the lyrics."[232] +SEE ALSO: JACKIE EVANCHO CONTINUES HER COMEBACK WITH ANOTHER JONI MITCHELL COVER Evancho recently chatted with Talent Recap about the new project, saying that Mitchell is an artist she’s “been very inspired by for a very long time.” She added that something she loves about Mitchell is that she’s “so authentic.” “You know, even for the time period, she did not care what anyone said, as long as she was content with the music,” Evancho shared. “So I think it’s appropriate for the point in my life that I’m going through, and I’m excited to see what everyone thinks of it.” Evancho also shared that she’s “been doing a lot of songwriting,” confirming that fans can expect another album of original songs at some point. As she said, “I will not release until all these originals are done and it is nothing but my work.” The music, the style, the genre, and the essence all fit perfectly with Jackie’s incredible, ethereal voice. Carousel of Time is now and will be remembered as one of her best gifts to the world. Thank you, Jackie. A talent competition where participants possessing some form of talent from the US and abroad, aim to impress the audience and judges, Simon Cowell, Howie Mandel, Heidi Klum, Sofia Vergara. We are using cookies to give you the best experience on our website. +Notably, FAANG is an extension of the FANG group, it includes Apple Inc (NASDAQ: AAPL), the producer of MacBooks and iPhones, as the fifth renowned company. The MAANG group is an extension of FAANG, the term was coined after Facebook was transformed into Meta Platforms. As a result, the “F” letter was replaced with “M”. Further in this guide, we will focus on the MATANA group that is expected to make headlines in the coming years, according to analysts. The MATANA group is composed of six high-level technology companies: Microsoft Corporation (NASDAQ: MSFT), Apple Inc, Tesla Inc (NASDAQ: TSLA), Alphabet Inc (NASDAQ: GOOGL), Nvidia Corp (NASDAQ: NVDA), and Amazon.com Inc. These giants are regarded as a powerful tech group driving many of the biggest innovations in the world. In terms of market dominance, the stocks of the MATANA group make up almost 50% of the Nasdaq 100 Index, which tracks the performance of the 100 largest non-financial companies listed on the Nasdaq Stock Exchange. Therefore, these companies have a significant influence on the tech market’s returns. This has led the MATANA group to replace the FAANG group as a reference in the tech industry. Moreover, each of the companies comprising the MATANA group has successfully dominated its respective sector. Below are some milestones these tech giants achieved in 2023. +58%McCormick & Company Incorporated (NYSE:MKC): -3.80%Church & Dwight Company (NYSE:CHD): -3:11%CF Industries Holdings (NYSE:CF): -2.94%Williams Companies (NYSE:WMB): -2.79% On the NASDAQ Composite Plus Therapeutics (NASDAQ:PSTV): -18.60%Newegg Commerce Inc (NASDAQ:NEGG): -16.78%Burcon NutraScience Corporation (NASDAQ:BRCN): -15.38%Cadiz Inc. (NASDAQ:CDZI): -14.36%Mannatech Incorporated (NASDAQ:MTEX): -14.18% It is summertime and living should be easy. Folks do tend to go away in August as the market tends to chop around on lower volume. This August has proven to be no exception thus... S&P 500 EPS growth for Q2 2023 is set to come in at -5.2%, the lowest rate in nearly 3 years and the third consecutive quarter of negative earnings growth Potential... Markets around the world took a hit last week, but American shares are still the clear performance leader for the major asset classes year to date, based on a set of ETFs through... Add a Comment We encourage you to use comments to engage with other users, share your perspective and ask questions of authors and each other. +By Peter White Television Editor Call it third time lucky. Netflix has finally won Best Animated Program at the Emmys with Arcane picking up the award at the Creative Arts ceremony. It marks the first time that a streaming show has picked up the award. It beat Bob’s Burgers, Rick and Morty, The Simpsons and Chadwick Boseman-voiced What If…? in the hotly contested category. Other streaming contenders in the past have included Netflix’s Big Mouth and BoJack Horseman. Arcane co-creator Christian Linke picked up the award. “Thank you this. It’s a big deal for us as we come from video games. It’s been amazing to see the world embrace our characters and our stories so thanks to Netflix who believed in us from the beginning, thanks to Riot Games, who worked on the whole IP… and to all the people that have been with our game and League of Legends for the last 12 years or so who helped make it as big as it is now,” he said. Related Stories Acquisitions Harry And Meghan Buy Film Rights For Bestselling (And Quite Familiar) Romantic Novel Breaking News 'Suits' Breaks Its Own Nielsen Streaming Record; 'The Lincoln Lawyer' Draws Over 1B Minutes Viewed Following Season 2 Debut +The Primetime Emmy Award for Outstanding Animated Program is a Creative Arts Emmy Award which is given annually to an animated series. In the following list, the first titles listed in gold are the winners; those not in gold are nominees, which are listed in alphabetical order. The years given are those in which the ceremonies took place. Animated programs have the option to compete in broader program categories such as Outstanding Comedy Series, but cannot also submit for Outstanding Animation Program in the same year.[citation needed] The Simpsons, for instance, unsuccessfully submitted the episodes "A Streetcar Named Marge" and "Mr. Plow" in 1993 and 1994[1] while Family Guy was successfully nominated in 2009.[2] Several animated programs won Outstanding Children's Program prior to 1979 and, in the years since, Rugrats, Winnie the Pooh specials and Star Wars Rebels have been nominated for that award. Prior to 1989, all of the nominated programs were specials produced outside the confines of a running series. The category was divided into programs "one hour or less" and "more than one hour" from 1989 to 2009, with episodes of running series becoming eligible. Programs that are 15 minutes or less were given their own category, Outstanding Short Form Animated Program, in 2008.[citation needed] +-- Dinich Championship week games and the final playoff rankings for this year are still to come, but based on the current CFP rankings, an expanded playoff would look like this: Seeds with byes 1. Georgia 2. Michigan 3. TCU 4. USC Remaining seeds (conference champs in bold) 5. Ohio State 6. Alabama 7. Tennessee 8. Penn State 9. Clemson 10. Kansas State 11. Utah 12. Tulane First-round games No. 12 Tulane at No. 5 Ohio State No. 11 Utah at No. 6 Alabama No. 10 Kansas State at No. 7 Tennessee No. 9 Clemson at No. 8 Penn State Quarterfinal games No. 9 Clemson-No. 8 Penn State winner vs. No. 1 Georgia No. 10 Kansas State-No. 7 Tennessee winner vs. No. 2 Michigan No. 11 Utah-No. 6 Alabama winner vs. No. 3 TCU No. 12 Tulane-No. 5 Ohio State winner vs. No. 4 USC There has always been strong support at both the presidential and commissioner level for 12 teams, and part of it is because they like the first-round byes for the top four seeds, but also because of the workable logistics in the overall college football calendar. +The expansion was originally going to start in 2026 after the current deal with the College Football Playoff, but with the Rose Bowl's agreement, it can now happen earlier. The College Football Playoff officially confirmed the 2024-25 timeline for the expansion on Thursday. "We're delighted to be moving forward," Bill Hancock, Executive Director of the College Football Playoff, said per the release. "When the board expanded the playoff beginning in 2026 and asked the CFP Management Committee to examine the feasibility of starting the new format earlier, the Management Committee went right to work. "More teams and more access mean more excitement for fans, alumni, students and student-athletes. We appreciate the leaders of the six bowl games and the two future national championship game host cities for their cooperation. Everyone realized that this change is in the best interest of college football and pulled together to make it happen." MORE: College Football Playoff rankings: Six unbeaten teams create four huge debates The College Football Playoff on Tuesday, May 2 released dates for each round of the expanded playoff, starting with the 2024 season. Based off information released, it the Fiesta, Peach, Cotton and Orange bowls will rotate among the quarterfinal and semifinal rounds, respectively. In 2024, the Fiesta and Peach will be played during the quarterfinals, while the Orange and Cotton will be played in the semifinals. In 2025, those games will be reversed. +World Cup 30 Qatar had to wait 4371 days to play their first World Cup match on home soil after being announced as the hosts of the 2022 tournament by FIFA on December 2, 2010. And now the tournament they have waited so long for is over — in a sense — after just nine days. Qatar lost the opening match of the 2022 World Cup when they fell 2-0 to Ecuador. Advertisement That left them requiring a positive result against Senegal, the reigning African champions, in their second match of the tournament. But, despite an improved performance, Qatar were defeated again, losing 3-1, leaving them on the verge of being eliminated from their own tournament at the first hurdle. But are the hosts definitely out? And are they in danger of being the worst host nation in the 92-year history of the tournament? We take a look below. GO DEEPER The Radar - The Athletic's 2022 World Cup scouting guide Yes. Qatar’s second loss leaves them bottom of Group A with zero points. The Netherlands and Ecuador are both on four points, while Senegal are on three. While Qatar could beat The Netherlands in their final game, they will not be able to overtake them. They also cannot overtake Ecuador, and if Senegal beat Ecuador to get second spot, then Qatar will not be able to catch them either. Third place is the best Qatar can hope for now. +16] The defending champions were France, who defeated Croatia 4–2 in the 2018 FIFA World Cup Final.[17][18] The event was scheduled to take place under a reduced length,[19] from 20 November to 18 December in Qatar.[20][21][22] Being held in Qatar, it was the first World Cup tournament to be held in the Arab world.[23] Spectators were not required to follow most COVID-19 pandemic restrictions such as social distancing, wearing masks, and negative tests.[24] Unlike previous FIFA World Cups, which are typically played in June and July, because of Qatar's intense summer heat and often fairly high humidity,[2][21][25] the 2022 World Cup was played in November and December.[5][26] As a result, the World Cup was unusually staged in the middle of the seasons of many domestic association football leagues, which started in late July or August, including all of the major European leagues, which had been obliged to incorporate extended breaks into their domestic schedules to accommodate the World Cup. Major European competitions had scheduled their respective competitions group matches to be played before the World Cup, to avoid playing group matches the following year.[27] The match schedule was confirmed by FIFA in July 2020.[28] The group stage was set to begin on 21 November, with four matches every day. +The Malaysian defense contractor who pleaded guilty to bribing Navy officials with sex parties, fancy dinners and alcohol in a massive corruption scandal has escaped just weeks before his sentencing date. Leonard Glenn Francis, also known as “Fat Leonard” for his overshadowing frame, fled Sunday while under house arrest in San Diego, where he was awaiting a Sept. 22 hearing. A multiagency search by the San Diego Regional Fugitive Task Force and Naval Criminal Investigative Service is underway, officials said. “He cut off his GPS monitoring bracelet on Sunday morning,” the U.S. Marshals Service announced late Monday. “Task Force Officers went to his residence and upon arrival noticed the house was now vacant.” The Navy is working with the U.S. Marshals Service and other federal agencies “to locate and apprehend Mr. Francis,” a service spokesperson said in a statement Tuesday. “Out of respect for the investigative process, we cannot comment further at this time,” the spokesperson added. Days before he vanished, neighbors recalled seeing moving trucks at Francis’s home, Supervisory Deputy Omar Castillo with the U.S. Marshals’ district in Southern California told the San Diego Union-Tribune. “He was planning this out, that’s for sure,” Castillo told the newspaper, which was the first to report Francis’s escape. Castillo did not immediately respond to a request for comment Monday night. +Unknown to federal monitors, Francis had been moving belongings out of the property – he lived there with his mother and children, according to court documents – for several days as neighbors told federal authorities they saw several U-Haul trucks “coming in and out of the residence,” Castillo said. “There was more than one” seen on Friday or Saturday. Undated photo of Leonard Francis “We are following leads that have come into our national number, as well as our website, and we are following some leads that we have established ourselves,” he said. “As of now, we think he’s probably going international. It sounds like he’s been planning this for a while.” Castillo said he didn’t know what security arrangements were in place at Francis’ residence. He understands that Francis had security monitoring him, issued by the court, but paid for by Francis. “I can tell you nobody was there when we showed up,” he said. “Nobody was there.” It’s unclear how much time Francis had spent detained in U.S. physical custody before or after his conviction on a guilty plea. He had been living in home detention for at least four years, according to unsealed court documents. That arrangement, approved by Sammartino with prosecutors’ support, was based on round-the-clock monitoring by a GPS ankle bracelet and a 24-hour-a-day, seven-days-a-week physical guard at Francis’ residence. +The 2022 NFL season was the 103rd season of the National Football League (NFL). The season began on September 8, 2022, with the defending Super Bowl LVI champion Los Angeles Rams falling to Buffalo in the NFL Kickoff Game, and ended on January 8, 2023. The playoffs started on January 14 and concluded with Super Bowl LVII, the league's championship game, at State Farm Stadium in Glendale, Arizona on February 12, with Kansas City defeating Philadelphia.[1] The former Washington Redskins, after two seasons of using the placeholder name Washington Football Team, were renamed the Washington Commanders prior to the start of the season.[2] The week 17 game between Buffalo and Cincinnati was canceled after Buffalo safety Damar Hamlin suffered cardiac arrest on the field of play. It was the first regular season game to be canceled and not rescheduled since the 1987 NFLPA players' strike.[3] The 2022 NFL league year and trading period began on March 16. On March 14, teams were allowed to exercise options for 2022 on players with option clauses in their contracts, submit qualifying offers to their pending restricted free agents, and submit a Minimum Salary Tender to retain exclusive negotiating rights to their players with expiring 2021 contracts and fewer than three accrued seasons of free agent credit. +The 2023-24 NFL season will kick off on Thursday, Sept. 7, when the Kansas City Chiefs host the Detroit Lions at Arrowhead Stadium in the opener.  Sure, we still have to get through the summer. There will be way too much time spent debating on where quarterbacks rank in the NFL over the next few months, as teams go through offseason workouts and training camp to get ready to take the field. The opening game is the curtain raiser of an 18-week, 272-game regular season schedule that culminates with a frantic final day on Sunday, Jan. 7. Following the conclusion of the regular season, the best 14 teams will battle it out for the chance to play in Super Bowl LVIII on Feb. 11 at Allegiant Stadium in Las Vegas, Nevada. Remember to track WynnBET’s latest NFL betting odds as markets for the upcoming football season begin to get released. New to WynnBET? CLICK your state below to claim your new-user bonus: AZ | CO | IN | LA | MA | MI | NJ | NY | TN | VA | WV In total, there are 32 NFL teams. The teams are evenly split between the American Football Conference and the National Football Conference. +A new site that reads "Welcome to Meta Connect" teases the one-day Meta Connect event with a live countdown to October 11th. This event will focus on the topic of the metaverse and explore the future of augmented and virtual reality.  The Connect event is not a new concept, with the first one dating back to 2014 when Facebook acquired Oculus. The event was originally called Oculus Connect, then rebranded to Facebook Connect, and finally to what we have today – Meta Connect.  As VR enters a critical adoption phase, these headsets offer a fully immersive experience. These events take an in-depth look at the future of AR and VR with insight from industry leaders and discussions. The website currently says more information and speaker details are coming soon. SEE: 2023 will be a pivotal year for VR: Which headset will you buy? The event comes at a perfect time since Meta CEO Mark Zuckerberg announced in August that the Meta VR Project Cambria headset would be dropping in October during his appearance on The Joe Rogan Experience podcast.  Announced in 2021, Project Cambria is Meta's highest-end VR headset. Like its most popular headset, the Meta Quest 2, it will be a stand-alone device. On the podcast, Zuckerberg also revealed that the headset will have an eye-tracking sensor, unique to this headset. +Alongside the official reveal of the Quest 3, Meta has announced when this year's edition of Connect will take place. The event, which focuses on Meta's developments in the augmented and virtual reality spaces, is set for September 27th and 28th, according to its website. Connect is taking place a little earlier than usual this year. The 2022 edition happened in October. More details about Connect 2023 are coming soon, but one thing's for sure: we'll learn much more about the Quest 3 in late September. Meta's next virtual reality headset will be available sometime this fall and it'll start at $500. The company says the Quest 3 is its "most powerful headset yet." It will offer full-color passthrough to support mixed reality experiences. Meta CEO Mark Zuckerberg said the latest model will have twice the graphics performance of the Quest 2. The Quest 3 comes with redesigned Touch Plus controllers and hand-tracking support out of the gate. The company also noted that it's reducing the prices of the Quest 2 headsets on June 4th. Subscribe to our two newsletters: - A weekly roundup of our favorite tech deals - A daily dose of the news you need Please enter a valid email address Please select a newsletter By subscribing, you are agreeing to Engadget's Terms and Privacy Policy. +The company says it will appeal the fine from Ireland's Data Protection Commission. Meta faces a hefty GDPR fine for its handling of children's data. Meta is facing a fine of 405 million euros, or just over $400 million, from Ireland's Data Protection Commission for failing to safeguard children's information on Instagram.  The country's data watchdog had accused Instagram of setting children's accounts to "public" by default and allowing children to operate business accounts on the platform, which could leave their phone numbers and email addresses exposed. Full details of the decision are expected to be published next week, a commission spokesman said Tuesday.  Meta confirmed the fine and said it plans to appeal the decision.  "This inquiry focused on old settings that we updated over a year ago, and we've since released many new features to help keep teens safe and their information private," a Meta spokesperson told CNET via email on Tuesday. "Anyone under 18 automatically has their account set to private when they join Instagram, so only people they know can see what they post, and adults can't message teens who don't follow them."  The spokesperson added that Meta disagrees with how the fine was calculated and is reviewing the rest of the commission's decision. The $400 million fine would be the second-largest issued to a tech company for a violation of the European Union's General Data Protection Regulation, behind Amazon's record-setting $888 million fine in 2021. +Jump to Ireland's data watchdog the Data Protection Commission handed Meta a 405 million euro ($403 million) fine on Monday, the agency confirmed to Insider. The Irish DPC acts as the EU's regulator for several US tech giants including Meta because their headquarters are based in the country. The DPC fine was given to Instagram for failing to protect children's privacy on its platform. The fine was partly based on the fact Instagram had allowed children to operate business accounts on its platform. Instagram business accounts show the account holder's phone number and email address, meaning that data was exposed. The DPC also found the accounts of 13 to 17 year-olds were set to "public" as their default setting. A DPC spokesperson told Insider full details of the ruling will be published next week. A Meta spokesperson told Insider in a statement: "This inquiry focused on old settings that we updated over a year ago, and we've since released many new features to help keep teens safe and their information private." The spokesperson added Instagram users under the age of 18 automatically have their accounts set to "private" rather than "public." He added adult users can't privately message users under 18 unless they follow the adult's account. "While we've engaged fully with the DPC throughout their inquiry, we disagree with how this fine was calculated and intend to appeal it. We're continuing to carefully review the rest of the decision," the spokesperson added. +32] The Windows port was developed by Polish studio QLOC.[33] Gotham Knights was revealed during a virtual event called DC FanDome in August 2020. The game was originally planned to be released in 2021 for PlayStation 4, PlayStation 5, Windows, Xbox One, and Xbox Series X/S,[34] but was delayed to 2022.[35][36] The PlayStation 4 and Xbox One versions were later cancelled.[31] The game was released on October 21.[37] A comic book limited series—written by Evan Narcisse and illustrated by ABEL—titled Batman: Gotham Knights – Gilded City, serves as a tie-in and a prequel to Gotham Knights, exploring Batman's final case before his death. It was released on October 25 the same year, with subsequent issues releasing monthly.[38] Each issue of the limited series came with a code for an in-game item, as well as a seventh item given to those who purchase all six issues of the comic book.[39] Gotham Knights received "mixed or average" reviews from critics, according to review aggregator Metacritic.[41][42][40] Game Informer praised the game for its co-op gameplay, but criticized its mission objectives, combat, and side activities. +With Batman and Commissioner Gordon dead, the Gotham Knights must rise up... The Gotham Knights release date is finally arriving this week, and everyone can soon play through the latest foray into Gotham City. Without Batman or Commissioner Gordon to protect the city following their deaths, the task is instead left up to the Bat-Family of Nightwing, Batgirl, Robin, and the Red Hood. In your way stands the mysterious secret society the Court of Owls. It's a decent game, too. In our three-star Gotham Knights review, we called it "a mixed bag" but noted that, "once you stop comparing it to Arkham in your head", you should find plenty to enjoy. Enough of our babbling, here's everything you need to know about Gotham Knights from its release date and trailers to how to pre-order it for yourself. Plus, is it on Game Pass? The Gotham Knights release date will take place on 21st October 2022, the developers have confirmed. You can buy your copy from the likes of Amazon. The game has already seen a number of different release dates come and go, but it looks like the delays are over and this one will stick! For console players, the Gotham Knights launch time in the UK is midnight BST, just as the clock ticks over to 21st October. PC players, meanwhile, have to wait until 5pm on 21st October to play the co-op game on either Steam or the Epic Games Store. +By  Karen Zamora ,  Ashley Brown Bernard Shaw, the pioneering Black journalist who served as CNN's chief anchor for 20 years, died on Wednesday from pneumonia. He was 82. AILSA CHANG, HOST: This happens to be a day when journalists around the world are covering a big breaking news story.ARI SHAPIRO, HOST: And it's a day we're pausing to remember a pioneering journalist who mastered the craft, Bernard Shaw. The longtime former news anchor died yesterday.BERNARD SHAW: I wanted to be the best broadcast journalist I could be. In all the years of preparing to become an anchor, one of the things I strove for was to be able to control my emotions in the midst of hell breaking out.CHANG: That's Shaw, also a former Marine, telling our NPR co-host Michel Martin about his ambitions back in 2014. His career began in his hometown, Chicago. He went on to report for CBS, ABC and in 1980 became the first chief anchor for a fledgling network called CNN.SHAPIRO: When the 1991 Gulf War began, he reported from Baghdad as bombs were going off.(SOUNDBITE OF ARCHIVED RECORDING)SHAW: Something is happening outside. Let's describe to our viewers what we're seeing. The skies over Baghdad have been illuminated. +12] Shaw, a sensitive boy, found the less salubrious parts of Dublin shocking and distressing, and was happier at the cottage. Lee's students often gave him books, which the young Shaw read avidly;[13] thus, as well as gaining a thorough musical knowledge of choral and operatic works, he became familiar with a wide spectrum of literature.[14] Between 1865 and 1871, Shaw attended four schools, all of which he hated.[15][n 3] His experiences as a schoolboy left him disillusioned with formal education: "Schools and schoolmasters", he later wrote, were "prisons and turnkeys in which children are kept to prevent them disturbing and chaperoning their parents."[16] In October 1871 he left school to become a junior clerk in a Dublin firm of land agents, where he worked hard, and quickly rose to become head cashier.[6] During this period, Shaw was known as "George Shaw"; after 1876, he dropped the "George" and styled himself "Bernard Shaw".[n 4] In June 1873, Lee left Dublin for London and never returned. A fortnight later, Bessie followed him; the two girls joined her.[6][n 5] Shaw's explanation of why his mother followed Lee was that without the latter's financial contribution the joint household had to be broken up. +Two days before her death, on 6 September 2022, the Queen accepted the resignation of Boris Johnson and appointed Liz Truss to succeed him as Prime Minister of the United Kingdom; these meetings took place at Balmoral Castle, rather than their usual location, Buckingham Palace.[22] At the meeting with Truss, the final public photos of the Queen were taken by Jane Barlow. Social media users were quick to observe the Queen’s continued use of a walking stick, her frail, “ghostly” appearance, and a large bruise-like mark on her right hand. After the Queen’s death, Barlow said that while she could tell the Queen was unwell, she was “in quite good spirits.” On 7 September, the Queen was scheduled to attend an online meeting of the Privy Council of the United Kingdom to swear in new ministers in Truss's government, but this was cancelled after she was advised by doctors to rest.[23] The Queen's final public statement, issued that same day, was a message of condolences for the victims of a mass stabbing incident in Saskatchewan, Canada.[24] The Queen died at 15:10 BST on 8 September 2022 at the age of 96, ending her 70-year reign. According to her death certificate, which was made public on 29 September, she died of old age.[2] Her death was publicly announced at 18:30. +Queen Elizabeth II, the longest-reigning British monarch whose rule spanned seven decades, died on Thursday at the age of 96, Buckingham Palace has announced. The Queen’s oldest son Charles has now become King Charles III. “The Queen died peacefully at Balmoral this afternoon. The King and The Queen Consort will remain at Balmoral this evening and will return to London tomorrow,” the royal family said in a statement posted on its official Twitter account, referring to Charles as the new King for the first time. The King said in a statement that the Queen’s death was “a moment of the greatest sadness for me and all members of my family.” Elizabeth II:  The British Queen who weathered war and upheaval dies at 96 “We mourn profoundly the passing of a cherished Sovereign and a much-loved Mother. I know her loss will be deeply felt throughout the country, the Realms and the Commonwealth, and by countless people around the world,” he said in the statement. Crowds of mourners gathered outside Balmoral Castle and other royal residences, despite heavy downpours in parts of the UK on Thursday evening. Many brought flowers and lit candles, some looking visibly shaken by the news. In keeping with the royal tradition, a written statement announcing the Queen’s death was displayed on the gates of Buckingham Palace. +Becky Sullivan Queen Elizabeth II pictured in 2012. Eddie Mulholland /WPA Pool/Getty Images hide caption Queen Elizabeth II pictured in 2012. Queen Elizabeth II, whose seven decades on the throne of the United Kingdom was a longer reign than any other British monarch, has died at the age of 96. The queen "died peacefully" on Thursday afternoon at Balmoral Castle, her estate in the Scottish Highlands, royal family officials announced. Her son Charles, 73, is now king and will be known as King Charles III. Officials said he remains at Balmoral and will return to London on Friday. The Queen died peacefully at Balmoral this afternoon.The King and The Queen Consort will remain at Balmoral this evening and will return to London tomorrow. pic.twitter.com/VfxpXro22W "The death of my beloved Mother, Her Majesty The Queen, is a moment of the greatest sadness for me and all members of my family," the king said in a statement. "We mourn profoundly the passing of a cherished Sovereign and a much-loved Mother. I know her loss will be deeply felt throughout the country, the Realms and the Commonwealth, and by countless people around the world." Camilla, his second wife, will be known as queen consort. Elizabeth had been placed under medical supervision earlier Thursday, officials said. +Elizabeth II (Elizabeth Alexandra Mary; 21 April 1926 – 8 September 2022) was Queen of the United Kingdom and other Commonwealth realms from 6 February 1952 until her death in 2022. She was queen regnant of 32 sovereign states over the course of her lifetime and remained the monarch of 15 realms by the time of her death. Her reign of over 70 years is the longest of any British monarch and the longest verified reign of any female head of state in history. Elizabeth was born in Mayfair, London, as the first child of the Duke and Duchess of York (later King George VI and Queen Elizabeth The Queen Mother). Her father acceded to the throne in 1936 upon the abdication of his brother Edward VIII, making the ten-year-old Princess Elizabeth the heir presumptive. She was educated privately at home and began to undertake public duties during the Second World War, serving in the Auxiliary Territorial Service. In November 1947, she married Philip Mountbatten, a former prince of Greece and Denmark, and their marriage lasted 73 years until his death in 2021. They had four children: Charles, Anne, Andrew, and Edward. +In all, Alcaraz has played 960 minutes so far this tournament, which, when mixed with his late finishes, could be a factor against Frances Tiafoe in the semifinal. Here’s a look at Alcaraz’s journey: Alcaraz got a bit of a break in the first round against Sebastian Baez, the Argentine ranked No. 37, on a particularly hot and humid day at the tournament. After Alcaraz took the first two sets, 7-5, 7-5, Baez was forced to retire in the third set, down two games to none, with an injury. After the match, Alcaraz said in a news conference that the conditions were “really tough.” “The heat was pretty tough, so I’m just really happy with the level and be able to play the second round,” he said. Alcaraz cruised through the first two sets of his second round match against Federico Coria, an Argentine ranked No. 78. In the third set, Alcaraz had to battle. Tied at 4-4, Alcaraz and Coria dueled out a 16-point game, which Alcaraz ultimately won. Alcaraz sealed the win swiftly in two hours and 10 minutes. Alcaraz had another quick match in the third round, beating Jenson Brooksby, an American ranked No. 43, in two hours and 11 minutes. +[1/5]Sept 7, 2022; Flushing, NY, USA; Carlos Alcaraz of Spain hits to Jannik Sinner of Italy on day ten of the 2022 U.S. Open tennis tournament at USTA Billie Jean King National Tennis Center. Robert Deutsch-USA TODAY Sports NEW YORK, Sept 8 (Reuters) - Carlos Alcaraz saved a match point in the fourth set before digging deep in the decider to beat Jannik Sinner in a five-set thriller and reach the U.S. Open semi-finals in the early hours of Thursday in New York. The Spanish teenager collapsed on his back after the match lasting more than five hours concluded at 2:50 a.m., beating the previous record for the latest finish of 2:26 a.m. set in three matches in 1993, 2012 and 2014. The 6-3 6-7(7) 6-7(0) 7-5 6-3 win keeps alive Alcaraz's hopes of winning a maiden Grand Slam title and claiming the world number one ranking. "Honestly I still don't know how I did it," Alcaraz said in an on-court interview. "The level that I played, the level of the match, the high quality of tennis. "It's unbelievable. +Watch CBS News By Haley Ott, Tucker Reals Updated on: May 6, 2023 / 9:07 PM / CBS News London — King Charles III and his wife, Queen Camilla, were both formally crowned Saturday in a historic ceremony at London's Westminster Abbey before appearing on the balcony for a flyover.  The coronation ceremony, steeped in centuries of tradition but with a few small tweaks for the modern age, played out in front of about 2,000 invited guests and a global audience of millions watching on TV or livestream. Though Charles officially became king following the death of his mother, Queen Elizabeth II, on Sept. 8, 2022, today's coronation ceremony consecrated and celebrated his ascent to the throne. Follow along below for the latest updates as the ceremony unfolded:  King Charles and Queen Camilla stepped out onto the balcony of Buckingham Palace Saturday with other senior members of their family to watch a military fly-past and greet members of the public. They were joined by other "working" members of the royal family, including William and Kate, the Prince and Princess of Wales, and their children.  As part of the "slimmed down" coronation day events requested by the king, not all members of their large family joined them. +King Charles’s Coronation Live Updates: Follow Along with Vogue’s Live Coverage How to Watch the Coronation of King Charles III What to Look Out for at King Charles’s Coronation Everything You Need to Know About King Charles’s Coronation A Who’s Who of European Royals to Look Out for at the Coronation Charming, Approachable, and a Great Dancer: Friends of Vogue on the Real King Charles III By signing up you agree to our User Agreement and Privacy Policy & Cookie Statement. By Tish Weinstock By Tish Weinstock By Tish Weinstock By Nell Frizzell By Alex Kessler By Kerry McDermott More from Vogue See More Stories © 2023 Condé Nast. All rights reserved. Use of this site constitutes acceptance of our User Agreement and Privacy Policy and Cookie Statement and Your California Privacy Rights. Vogue may earn a portion of sales from products that are purchased through our site as part of our Affiliate Partnerships with retailers. The material on this site may not be reproduced, distributed, transmitted, cached or otherwise used, except with the prior written permission of Condé Nast. +The upcoming Fox series boasts strong ties to the real Nashville, including cameos by a host of country stars and a theme song by Music City songwriting royalty Trace Adkins says he truly met his match when he was offered the role of Albie Roman, the patriarch in Monarch, the much-anticipated Fox primetime drama set in the country music scene. "He's very much like me," the 60-year-old country hitmaker tells PEOPLE. "I mean, I can look back over periods in my life where the train was perpetually off the track, and that's Albie's world. The train is perpetually off the track. Sometimes it's his fault, sometimes it's not, but he has to deal with that stuff." Indeed, Adkins has had his share of tabloid headlines over the years — but forgive him for forgetting one more glaringly obvious reason that the part fits him to a T: The singer and his character are both big-time country stars. And obviously, Adkins' casting is just one of the ways the show, which is set in Austin, is sure to bring a country music authenticity to what promises to be one of the fall's hottest — and steamiest — new shows. +Susan Sarandon and Trace Adkins lead the star-studded cast. The new country musical series Monarch hasn't even premiered yet but it's already at the top of our TV watch list! The trailer for the upcoming Fox show is filled with plenty of action and drama—the kind that will definitely appeal to fans of shows like Yellowstone and Nashville. Monarch will make its debut on September 11 so be sure to mark your calendars and maybe even prepare a menu of cowboy food for the big event! In the meantime, as we all await the premiere, let's take some time to get to know the talented actors that make up Monarch's cast. This show is loaded with seasoned Hollywood and country music stars, as well as newcomers offering fresh charisma for the camera. Those who have seen the trailer already know that Oscar-award-winning legend Susan Sarandon and country music singer Trace Adkins will star alongside each other in the upcoming series. But we're providing a little more information on their characters, as well as details about the rest of the cast. (By the way, in addition to these stars, you can also look forward to special appearances from country greats Shania Twain, Martina McBride, Little Big Town, and more!) Who are you most excited to see on Monarch? Let us know in the comments and make sure you're tuned in and ready to watch in September! Sarandon will take the lead role as country music queen Dottie Roman. +List of iPhone models The iPhone 14 and iPhone 14 Plus are smartphones designed, developed, and marketed by Apple Inc. They are the sixteenth and latest generation of iPhones, succeeding the iPhone 13 and iPhone 13 Mini, and were announced during Apple Event, Apple Park in Cupertino, California, on September 7, 2022, alongside the higher-priced iPhone 14 Pro and iPhone 14 Pro Max flagships. The iPhone 14 and iPhone 14 Plus feature a 6.1-inch (15 cm) and 6.7-inch (17 cm) display, improvements to the rear-facing camera, and satellite connectivity for contacting emergency services when a user in trouble is beyond the range of Wi-Fi or cellular networks.[10][11] The iPhone 14 was made available on September 16, 2022,[12] and iPhone 14 Plus was made available on October 7, 2022, priced at $799 and $899 respectively and was launched with iOS 16.[7][13] Pre-orders for the iPhone 14 and iPhone 14 Plus began on September 9, 2022.[14] The iPhone 14 does not have a "Mini" version like its predecessor, the iPhone 13 Mini. Instead, Apple has reintroduced a larger dimension iPhone 14 named the iPhone 14 Plus. Apple has not introduced a Plus model iPhone since the iPhone 8 Plus in 2017. +Pre-orders begin Friday, September 9, with availability for iPhone 14 beginning Friday, September 16, and availability for iPhone 14 Plus beginning Friday, October 7. “Our customers rely on their iPhone every day, and iPhone 14 and iPhone 14 Plus introduce groundbreaking new technologies and important safety capabilities. With the new, larger 6.7-inch display on iPhone 14 Plus, users can enjoy more content onscreen when browsing the web and even more text,” said Greg Joswiak, Apple’s senior vice president of Worldwide Marketing. “Both phones have a powerful new Main camera with a huge leap in low-light performance, advanced connectivity capabilities with 5G and eSIM, and the incredible performance of A15 Bionic, which helps enable even better battery life. All of this, tightly integrated with iOS 16, makes iPhone more essential than ever.”   A Beautiful and Durable Design with Amazing Battery Life Available in the popular 6.1-inch size and a stunning new 6.7-inch size,2 iPhone 14 and iPhone 14 Plus feature a durable and sleek aerospace-grade aluminum design in five beautiful finishes. The larger display of iPhone 14 Plus is great for streaming movies and playing games, and iPhone 14 Plus boasts the best battery life ever in an iPhone. +Susie hopes to become an internet sensation, and make enough money to give her and her mother, now bed-ridden with MS, a more comfortable life. But “Susie Searches” isn’t taking off as hoped, unlike the meditation site hosted by campus hunk Jesse (Alex Wolff). When Jesse suddenly goes missing, Susie seizes the opportunity to solve the mystery and make “Susie Searches” a hit. Cute and colorful, SUSIE SEARCHES is a “girl detective” mystery story in the Nancy Drew mode – until it isn’t. Actor-turned-director Sophie Kargman turns this sunny tale in a wholly unexpected direction. As Susie, Kiersey Clemons is impressive, as the title character finds her way through the plot’s twists. In her feature film directorial debut, Kargman takes the script she co-wrote with William Day Frank and the idea of their short film, and transforms it into a tale you don’t see coming, until it is right upon you. +FILM DETAILS: Title: Susie Searches Director: Sophie Kargman Release Date: July 28, 2023 Running Time: 105 minutes Language: English Screenwriter: Sophie Kargman Distribution Company: Vertical Entertainment AWFJ Movie of the Week Panel Members: Sandie Angulo Chen, Betsy Bozdech, Jamie Broadnax, Leslie Combemale, Nikki Fowler, Pam Grady, Loren King, Cate Marquis, Jennifer Merin, Nell Minow, Sherin Nicole, Liz Whittemore Previous #MOTW Selections Other Movies Opening This Week Edited by Jennifer Merin Jennifer Merin is the Film Critic for Womens eNews and contributes the CINEMA CITIZEN blog for and is managing editor for Women on Film, the online magazine of the Alliance of Women Film Journalists, of which she is President. She has served as a regular critic and film-related interviewer for The New York Press and About.com. She has written about entertainment for USA Today, The L.A. Times, US Magazine, Ms. Magazine, Endless Vacation Magazine, Daily News, New York Post, SoHo News and other publications. +Spice up your morning routine with the Spicy Chicken Biscuit How to cater your summer gathering with Chick-fil-A Celebrating the Cows Code Moo: The Cows are back at Chick-fil-A Please enter an address Please enter an address Sep 8, 2022 News Seasonal-favorite and new fall treat to join menu for a limited time, starting Sept. 12 ATLANTA (September 8, 2022) – Chick-fil-A® is embracing the flavors of fall with the debut of the new Autumn Spice Milkshake — its first new milkshake flavor available chainwide in four years — and the return of the Grilled Spicy Deluxe Sandwich. These seasonal fall items will be available nationwide* from Sept. 12 through Nov. 12, while supplies last.  Autumn spice & everything nice  The Autumn Spice Milkshake mixes rich flavors like cinnamon with crunchy bits of brown sugar cookies. Made with Chick-fil-A Icedream® dessert and hand spun, the Autumn Spice Milkshake is topped off with whipped cream and a cherry*. +Code Moo may be over, but you can keep the cow fun going by shopping our limited merchandise. Chick-fil-A eGift Card  Shop eGift cards From breakfast items, party trays to packaged meals, Chick-fil-A® Catering has something for every occasion. From breakfast items, party trays to packaged meals, Chick-fil-A® Catering has something for every occasion. Rewards Order ahead on the app or online, and receive points from qualifying purchases. Then, use those points to redeem available rewards. You never know when the smallest thing can make someone’s day. Discover how our Chick-fil-A® Team Members bring #thelittlethings to our customers. The Chick-fil-A App is not presently accepted at Chick-fil-A Express™ and Chick-fil-A licensed locations such as those in airports and college campuses. These locations are operated by professional third-party food contractors and their operating systems do not currently offer guests the ability to receive points or redeem rewards through the Chick-fil-A App. Already have an account? +36 Editor’s Note: This story is included in The Athletic’s Best of 2022. View the full list. Kyle Busch will join Richard Childress Racing in 2023, multiple sources told The Athletic, ending a highly successful tenure at Joe Gibbs Racing that saw the driver-team pairing win two Cup Series championships and 56 races over a 15-year span. An official announcement is expected Tuesday. Advertisement Busch is making the move following prolonged negotiations with JGR and several teams that led to much discourse on which team he’d sign with. The 37-year-old Busch is in the final season of a multiyear contract with JGR and the two sides had been negotiating a contract extension for some time. However, those discussions were hampered because JGR had not secured a primary sponsor for Busch’s No. 18 team beyond this season. The team’s current primary sponsor, Mars Inc., is leaving JGR at the conclusion of the 2022 season after sponsoring Busch since he began his tenure with JGR in 2008. JGR has known of Mars’ eventual departure since last summer and has been working to find a replacement. That search complicated discussions with Busch regarding a contract extension as the team was uncertain what it could commit financially to re-signing Busch. +His career average finish is 13.8, and no full-time RCR driver has reached that mark since Ryan Newman in 2015. And on top of driving for RCR, his deal is also leading him to swap manufacturers for Kyle Busch Motorsports in the Craftsman Truck Series. His team will be branded by Chevrolet in 2023, a major overhaul with Chase Purdy and Jack Wood joining the team. Fortunately for Busch, he will not have to worry about finding sponsors at RCR. 3CHI, Alsco, BetMGM, Cheddars and Lenovo have all confirmed they will sponsor the No. 8 car. And if anyone can bring back a championship trophy to RCR, it will be Busch. +Alcaraz and Medvedev are the first pair of players to debut at No. 1 in the same season since Roddick and Juan Carlos Ferrero in 2003. At least seven players 25-and-under finished in the Top 10 for the second year in a row (8 in 2021). Joining Alcaraz, Auger-Aliassime and Fritz in the 2022 year-end Top 10 are 23-year-old Casper Ruud of Norway, 24-year-old Stefanos Tsitsipas of Greece and 25-year-olds Andrey Rublev and Hubert Hurkacz. 2022 Year-End Pepperstone ATP Rankings Top 10 1) Carlos Alcaraz – Second Spanish year-end No. 1, joining five-time year-end No. 1 Rafael Nadal 2) Rafael Nadal – Ends year at No. 2 for eighth time and in Top 2 for record 13th time 3) Casper Ruud – Best year-end ranking for a Scandinavian player since No. +7, but that’s all because of Wimbledon. He’s playing like the No. 1 player in the world. It’s not apples to apples like other years.” Under the normal points system, Djokovic might not even qualify for the ATP Finals in Turin, Italy, this year. Heading into Paris, he was in 10th place in the points race. But under the ATP’s Grand Slam champion rule, any player who wins a major title and is ranked within the top 20 is guaranteed a spot in the year-end championship. (The WTA Tour has no such rule, which is why Djokovic’s fellow Wimbledon champion, Elena Rybakina, did not qualify for the WTA Finals in Fort Worth.) “Most of the upheaval this year is because of Djokovic,” Patrick McEnroe, a former United States Davis Cup captain and now an ESPN commentator said. “He missed two majors and didn’t get points for the one he won. It really affected the rest of the field. You could make the case that if Djokovic runs the table, wins Paris and the ATP Finals, that he deserves to be No. 1.” The player most likely to end 2022 at No. 1 is Alcaraz. So far he has won five tournaments this year, including ATP Masters 1000s in Miami and Madrid. In Madrid, he beat Nadal, Djokovic and Alexander Zverev in succession. +Superhero stories are so common in movies and TV now that you can't expect every actor involved in such a production to be a lifelong fan of the material, but sometimes you get lucky. Titans showrunner Greg Walker previously told EW that when he reached out to actor Titus Welliver about portraying iconic DC supervillain Lex Luthor in season 4, he was surprised to find that Welliver was already well-versed in the comic book history of the Teen Titans.  "I've been collecting comic books since I was 7 or 8 years old," Welliver tells EW. "I'm 60 now, so that's a lot of comic books."  He has the nerd knowledge to prove it, too. Check out EW's conversation with Welliver about Luthor and all things Titans below.  ENTERTAINMENT WEEKLY: What first got you interested in the Teen Titans?  TITUS WELLIVER: I love the period in the late '60s and the '70s when they're less clean-cut, their hair is longer, they're kind of hip, they're go-go dancing. I had always read the comics. I mean, I have all the omnibuses, plus I still have all of my original collection.  So when somebody calls you up on the phone and says, "Do you want to play Lex Luthor?" The immediate answer is yes. +Subscribe for full access to The Hollywood Reporter Subscribe for full access to The Hollywood Reporter The actor discusses how he shaped a new version of the villain, including his Einstein and 'Jaws' influences, as well as the significance of Superman's absence for both the show and Superboy. By Abbey White Associate Editor & News Writer [This story contains spoilers for the premiere episode of Titans season four “Lex Luthor.”] In its season four return, HBO Max’s Titans introduces Lex Luthor, one of Superman’s greatest foes, and in the same hour kills him off. But before he goes, in yet another unexpected twist, Lex — who is revealed to have a terminal illness — leaves Joshua Orpin’s Superboy his empire and legacy, Lexcorp. Lex’s arrival is not only surprising for the Titan, but comes at a particularly interesting time after Superman fails to show up for the young hero. Related Stories TV 'Bosch: Legacy' Nabs Third Season at Amazon Freevee TV 'Titans,' 'Doom Patrol' Ending on HBO Max +Anurag PalStudy Abroad Expert Established in 1754, Columbia University is a part of the prestigious group of Ivy League Universities. Located in New York, Columbia University is one of the oldest universities in the United States of America. If we talk about Columbia University rankings, then according to the Times Higher Education (THE) World University Rankings 2023, the university has been placed at the 11th position. In 2022 too, the university was placed at the same position i.e. 11th. Columbia University has been placed in the top 20 positions since 5 years (2018-2022). THE considers the parameters like teaching, research, citations, industry outcome, and international outlook for the rankings of the universities. If we consider Columbia University world ranking, then as per QS World University Rankings 2023, the university is placed at the 22nd position. If we compare the university’s ranking with 2022, then its position has declined. In 2022, it was placed at the 19th position. The indicators that are considered for evaluating the QS World University Rankings include academic reputation, employer reputation, citations per faculty, faculty / student ratio, and international student ratio & international faculty ratio. Read: Columbia University Admissions 2023 Considering Columbia University’s rankings by U.S. +Columbia University To learn more about this year’s edition of the QS World University Rankings: by Subject 2023, download the March edition of QS Insights Magazine: Swimming with Sharks. This edition features ‘The Rankings Supplement’, in which Drew MacFarlane, QS Rankings Manager, explores interesting trends in the QS Subject Rankings, showcases specialised institutions and highlights emerging fields such as Data Science, Marketing, and Dentistry.  Please enable JavaScript to submit this form. Save my name, email, and website in this browser for the next time I comment. +By subscribing, I agree to the Terms of Use and Privacy Policy. This site is protected by reCAPTCHA Enterprise and the Google Privacy Policy and Terms of Service apply. “Squid Game” continues to take the world by storm with star Lee Jung-jae becoming the first Asian actor to win the Emmy for Outstanding Lead Actor in a Drama Series. The South Korean star of Netflix’s most popular show ever collected the award in person on Sunday night. Lee’s lead performance in the international hit action drama was nominated against Bob Odenkirk for “Better Call Saul,” Adam Scott for “Severance,” Jason Bateman for “Ozark,” and Brian Cox and Jeremy Strong from “Succession” (the latter of which was the 2020 winner for Outstanding Lead Actor in a Drama Series). On “Squid Game,” the charismatic actor played the blundering Seong Gi-hun who, after he was unable to pay off all his debts, was kidnapped and manipulated into competing in a competition with real life or death stakes. Last competitor left standing wins a seismic cash prize. Lee’s Emmy win is not only historic, but it may prove to be a turning point for recognition of non-English language projects. +Another tweet called Ahmed a “trailblazer for all Asian and young people, proving it is possible to reach those lofty heights.” So happy for @rizmc and @azizansari tonight!! Representing for the South Asian community!!! So proud of you both!! #Emmys2017 #Emmys Two brown Muslimish guys back to back on #EMMY2017 Aziz ansari +Kumail nanjiani. In between a black lesbian won Emmy-Its the best of America As reviewers and commentators noted, this year’s Emmys show that Hollywood has made major strides in its inclusion of South Asian Americans. Not long ago, most roles for South Asians were bit parts, and included “terrorists cab drivers and the odd medical professional,” as The Post’s Lavanya Ramanathan wrote last month. “A major metropolitan newspaper once counted Apu from ‘The Simpsons’ as a South Asian role — that’s how bad it was,” Ramanathan wrote. Mindy Kaling’s “The Mindy Project” was the first show written by and starring an Indian American woman. An Indian American comedian, Hasan Minhaj, hosted the White House Correspondents’ Association Dinner. And “The Big Sick” — whose protagonist, Kumail Nanjiani, is Pakistani American — was a hit film this summer. +Google has announced that its proposed $5.4 billion bid to buy cybersecurity firm Mandiant is now complete. The internet giant revealed plans to acquire publicly traded Mandiant back in March, less than a year after Mandiant was spun out of its previous owner FireEye as part of a $1.2 billion deal with private equity firm Symphony Technology Group. Moving forward, Mandiant will operate under the auspices of Google Cloud, though the Mandiant brand will live on. “We will retain the Mandiant brand and continue Mandiant’s mission to make every organization secure from cyber threats and confident in their readiness,” Google Cloud CEO Thomas Kurian wrote in a blog post. Mandiant dashboard. Image Credits: Mandiant Mandiant dashboard. Image Credits: Mandiant As one of the so-called “big three” public cloud providers alongside Amazon and Microsoft, Google’s big promise to would-be customers is that it will keep all their data and infrastructure secure. This means continually introducing new products to address the ever-changing threat landscape, thought it sometimes means acquiring long-established incumbents with the expertise to bolster Google’s security proposition. And that’s effectively what Google’s getting with Mandiant, giving it a major boost in terms of security data gathering capabilities, not to mention access to hundreds of security personnel. +Mandiant will join Google's cloud computing division, which is yet to grow to the same size as Microsoft Azure or Amazon Web Services. "Organizations around the world are facing unprecedented cybersecurity challenges as the sophistication and severity of attacks that were previously used to target major governments are now being used to target companies in every industry," said Thomas Kurian, CEO of Google Cloud, in a statement. He added: "We look forward to welcoming Mandiant to Google Cloud to further enhance our security operations suite and advisory services, and help customers address their most important security challenges." The deal is expected to close later this year. Shares of Mandiant closed up 16% on Monday after The Information reported that Google was interested in acquiring the company. Mandiant, which has a market value around $5.25 billion, was previously under the FireEye umbrella before that brand was sold. FireEye was credited with helping Microsoft discover the SolarWinds hack that attacked government systems in 2019 and 2020. Wedbush analyst Dan Ives said in a note to investors Tuesday, "With cyber attacks increasing by the day and cyber warfare underway from Russia/state sponsored cyber terrorism organizations, Google is doubling down on its cyber security footprint at the right time with Mandiant and looking to differentiate itself from the likes of behemoths Microsoft and Amazon in the cloud arms race. +Profile Sections tv Featured More From NBC Follow NBC News Inflation was little changed in the month of August, despite efforts by the Federal Reserve to cool off the U.S. economy. Data released Tuesday by the U.S. Bureau of Labor Statistics showed that inflation landed at 8.3% last month compared to one year ago. Economists surveyed by Bloomberg had forecast an 8.1% annual increase. Prices increased 8.5% in July. Excluding volatile food and gas prices, inflation climbed 6.3% year-on-year — higher than the consensus estimate for 6.1% and an increase from last month's 5.9% reading. The energy index rose 23.8% over the past 12 months. That includes the cost of electricity, which saw its largest one-year increase (15.8%) in four decades, according to the data. Other categories that saw increases in August include motor vehicle maintenance and repair, up 1.7%; health insurance, up 2.4%; and pets and pet products, up 1.6% in the 30-day period between July and August. Gas prices have fallen for three consecutive months and now stand at a national average of $3.70 a gallon, though there is wide geographic variability, with most Western states still above $4. But food prices have remained stubbornly elevated, climbing 11. +The annual inflation rate for the United States was 3.0% for the 12 months ended June, according to U.S. Labor Department data published on July 12, 2023. This follows a rise of 4.0% in the previous period. The next update on inflation is scheduled for release on Aug. 10 at 8:30 a.m. ET. It will provide information on the rate of inflation for the 12 months ended July 2023. Below is a chart and table displaying annual US inflation rates for calendar years from 2000 and 2013 to 2023. For inflation rates in prior years, please refer to historical inflation rates. If you would like to calculate the accumulated rates between two different dates, you can use the US Inflation Calculator. *The latest inflation data (12-month based) is always displayed in the chart’s final column. Table: Annual Inflation Rates To find annual inflation rates for a calendar year, look to the December column. For instance, the inflation rate in 2022 was 6.5%. Meanwhile, the "Ave" column shows the average inflation rate for each year using CPI data. In 2022, the average inflation rate was 8.0%. These average rates are published by the BLS but are rarely discussed in the news media, taking a back seat to the actual rate of inflation for a given calendar year. *Data Source: U.S. +Tuesday, Sept. 13, 2022 Gayle King, the award-winning co-host of “CBS Mornings,” has been chosen to receive the 39th Walter Cronkite Award for Excellence in Journalism, Arizona State University officials announced today. King, who is also editor-at-large of Oprah Daily and hosts a live, weekly radio show titled “Gayle King in the House” on SiriusXM, will be honored during a ceremony in Phoenix on Feb. 21, 2023, at the Sheraton Phoenix Downtown. The Cronkite Award — named after the late CBS News anchor — has honored prominent journalists since 1984. The award recognizes the recipients’ accomplishments and leadership over the course of their careers. Registration is now open for the Walter Cronkite Award for Excellence in Journalism luncheon.   “Gayle King’s career and accomplishments are remarkable, and her professionalism embodies everything that Walter Cronkite valued in journalism,” said Cronkite School Dean Battinto L. Batts Jr. “Her approach to covering important events and interviewing politicians, leaders and celebrities is unparalleled. It’s an honor to present Gayle with this prestigious award.”  “I am honored to accept the Walter Cronkite Award for Excellence in Journalism. The work myself and other journalists do is important, but I don’t do it alone. +For background on what this honor truly means, every year Arizona State University’s Walter Cronkite School of Journalism and Mass Communication presents “a leading figure in journalism…with the prestigious…[a]ward…The recipient list reads like a Who’s Who of the media world: Al Roker, Tom Brokaw, Ted Turner, Bob Woodward, Bill Moyers, Katharine Graham, Allen Neuharth, Don Hewitt, Helen Thomas, George Will, Ben Bradlee, Bernard Shaw and Roone Arledge, just to name a few,” and Anderson Cooper was the 2018 recipient.  The inaugural Walter Cronkite Award for Excellence in Journalism was bestowed in 1984, and is named for Walter Cronkite, a broadcast legend, who is said to have “set the standards of television news when the medium was new and malleable. He was loyal to those standards, and his large audience was correspondingly loyal to him.” Director Sydney Lumet even said that Cronkite “seemed to me incorruptible…in a profession that was easily corruptible.” ESSENCE.com is part of ESSENCE Communications, Inc. Essence may receive compensation for some links to products and services on this website. Offers may be subject to change without notice. ©2023 ESSENCE Communications Inc. All Rights Reserved. | Privacy Policy | Terms of Use | Essence.com Advertising Terms +A sequel was announced at E3 2019[218] with the title later revealed to be The Legend of Zelda: Tears of the Kingdom.[219] It was conceived during planning for Breath of the Wild's DLC; the team came up with too many ideas, some of which could not be implemented due to technical constraints, so used them for a new game. According to Aonuma, the sequel will build atop the original's world with a new story and gameplay elements,[220] and is inspired in part by Red Dead Redemption 2.[221] Fujibayashi will reprise his role as director.[222] Originally set to be released in 2022, the game was delayed to early 2023.[223][224] The game was released on May 12, 2023.[219] +The original release date for the game was due to be this year (2022). However, we all know that these release dates aren't set in stone. The Breath of the Wild sequel was confirmed to be pushed back to spring 2023 in an announcement from series producer, Eiji Aonuma.  The Legend of Zelda series producer, Eiji Aonuma, has an update to share about the launch timing of the sequel to The Legend of #Zelda: Breath of the Wild. Please take a look. pic.twitter.com/7OhayhiuM9 He said: "For those of you who have been looking forward to a release this year, we apologise."  "As previously announced, the adventure in this sequel will take place not just on the ground as in the previous game, but also in the skies above. However, the expanded world goes beyond that, and there will be an even wider variety of features you can enjoy, including new encounters and new gameplay elements." So we're going to have to wait a little longer to find out the official name, as well as get our hands on the game itself.    Discover GGRecon Welcome to a place where words matter. On GGRecon, smart voices & original ideas take centre stage. Welcome to a place where words matter. On GGRecon, smart voices & original ideas take centre stage. +When you purchase through links on our site, we may earn an affiliate commission. Here’s how it works. All of The Legend of Zelda: Tears of the Kingdom tips, tricks, and details you need while you play Our Legend of Zelda: Tears of the Kingdom guide is your one-stop shop for all your Hyrule adventures. It's going to be one of the biggest games of the year, and for good reason. Nintendo is returning to the sprawling sandbox version of Hyrule we first enjoyed in Zelda: Breath of the Wild, expanding it to include a kingdom above the clouds.  As the sequel to one of the best Switch games, Tears of the Kingdom expands on what came before by taking us to the skies above Hyrule, as well as offering up new items to play around with. Read on below as we take you through everything you need to know when playing Legend of Zelda: Tears of the Kingdom.   Zelda: Tears of the Kingdom release date The Tears of the Kingdom release date was May 12, 2023. The original RRP was $69.99 / £59.99 for the standard edition, but the Collector's Edition was $129.99 / £109.99. Zelda: Tears of the Kingdom release date The Tears of the Kingdom release date was May 12, 2023. The original RRP was $69.99 / £59.99 for the standard edition, but the Collector's Edition was $129. +The Legend of Zelda: Tears of the Kingdom[b] is a 2023 action-adventure game developed and published by Nintendo for the Nintendo Switch. The sequel to The Legend of Zelda: Breath of the Wild (2017), Tears of the Kingdom retains aspects including the open world of Hyrule, which has been expanded to allow for more vertical exploration. The player controls Link as he searches for Princess Zelda and fights to prevent the Demon King from destroying the world. Tears of the Kingdom was conceived after ideas for Breath of the Wild downloadable content (DLC) had exceeded its scope. Its development was led by Nintendo's Entertainment Planning & Development (EPD) division, specifically Production Group Number 3,[1] with Breath of the Wild director Hidemaro Fujibayashi and producer Eiji Aonuma reprising their roles. A teaser was shown at E3 2019 with a full reveal at E3 2021. Tears of the Kingdom was initially planned for release in 2022 before being delayed to May 2023. It received acclaim for its improvements, expanded open world, and features encouraging exploration and experimentation. It sold more than 10 million copies in its first three days of release, and had sold over 18.5 million copies by June 2023.[2] Tears of the Kingdom retains the open-world action-adventure gameplay of the previous Zelda game, Breath of the Wild (2017). +Our expert, award-winning staff selects the products we cover and rigorously researches and tests our top picks. If you buy through our links, we may get a commission. Reviews ethics statement Hocus Pocus 2 is out now on Disney's streaming service. Kathy Najimy, Bette Midler and Sarah Jessica Parker fly (again).  If, like the Sanderson sisters, you've been waiting three centuries for the Hocus Pocus franchise to be resurrected (or even just 29 years since the first movie), good news: Hocus Pocus 2 is out today. The long-awaited second installment of the classic Halloween movie hit Disney's streaming service Disney Plus at midnight PT/ 3 a.m. ET on Sept. 30, just in time for spooky season. Starring the original Sanderson Sisters from the first movie released in 1993 -- Bette Midler, Sarah Jessica Parker and Kathy Najimy -- the sequel sees the witches resurrected again as the black flame candle is lit once more in Salem. Check out our review of Hocus Pocus 2, and stream it on Disney Plus now. +Doug Jones will also be returning as Billy Butcherson alongside with a number of new cast members, including Hannah Waddingham, Tony Hale, Sam Richardson, Juju Brener, Froy Gutierrez, Taylor Paige Henderson, and Nina Kitchen. “Hocus Pocus 2” is being directed by Anne Fletcher (“The Proposal,” “27 Dresses”), who took over the directing responsibilities from her friend and colleague Adam Shankman (“Hairspray,” “The Wedding Planner”), with Lynn Harris (“The Shallows”) serving as producer. Shankman is currently in production on “Disenchanted” for the studio, which he is directing, but has has remained on this project as an executive producer along with Ralph Winter (“Adrift”) and David Kirschner (“Curse of Chucky”). Steven Haft (“Tigerland”) is co-producer. Are you looking forward to “Hocus Pocus 2” arriving on Disney+ this Halloween season? I cannot wait for HP2 … and delighted that the original Sanderson sister will be back. I loved the first HP completely spell bounded me. So I was one that wanted HP2 to go ahead . Love love love everything HP 🧙🏻🧙🏻🧙🏻🕸🕷✨ +Toronto, CanadaJuly 9-14, 2023 The 61st Annual Meeting of the Association for Computational Linguistics (ACL’23) will take place in Toronto, Canada from July 9th to July 14th, 2023. More information will be announced soon. All papers in the program must have at least one author registered at the appropriate rate for their presentation modality and status. Please see the registration page for more details. +As the lights faded Sunday on the 2022 edition of the Austin City Limits Music Festival, organizers announced the dates for next year's event. ACL Fest will take place on October 6-8 and October 13-15, 2023. Photos:See P!nk soar at ACL Fest No word on when tickets might go on sale, but in some years, festival organizers have dropped a small batch of early bird tickets before the end of the year, followed by the main ticket release in late spring when the lineup for next year's event is announced. Photos:Lil Nas X brings stunning fashion and spectacular dance to ACL Fest It is far too early to start speculating about next year's lineup, but we will note that C3 Presents, the company behind the festival, has announced the lineup for next year's Latin American Lollapaloozas. The events, which take place in Argentina, Chile and Brazil in March, will be headlined by Drake, Billie Eilish, Blink-182, Tame Impala, Rosalía and Lil Nas X. Billie and Nas just headlined the fest and the Blink-sters are playing the Moody Center next July. But Drake, Tame Impala and Rosalía all seem like solid bets for next year's lineup. +A multicultural metropolis on the shores of Lake Ontario, Toronto is Canada’s centre for arts, food, business and fun – all under the watchful gaze of the iconic CN Tower. Please visit here for more details. ACL 2023 will take place in the Westin Harbour Castle, Toronto: Please use the direct hotel link to see if they have availability or search Bookings.com for other accommodations. We recommend you not hold off on booking as the Downtown area has a lot of events taking place the week of the ACL Conference. +OCT 6-8 & 13-15, 2023 ZILKER PARK AUSTIN, TX OCT 6-8 & 13-15, 2023 ZILKER PARK AUSTIN, TX Home Lineup Premium Experiences Help Buy Merch Reserve Locker Book Hotel OCT 6-8 & 13-15, 2023 ZILKER PARK AUSTIN, TX OCT 6-8 & 13-15, 2023 ZILKER PARK AUSTIN, TX ACL Festival features a diverse lineup of acts every year with 9 stages, 100+ performances — and best of all, two weekends. Tacos, brews, vegan options and more. The ACL Eats Food Court at ACL Fest offers the most delicious festival food, drinks and sweets from Austin and the surrounding area’s favorite restaurants. There’s plenty to do in between sets, including a mini-fest for kids, photogenic spaces, sponsored giveaways and merch to bring home with you. Take your ACL Fest experience to the next level with our GA+, VIP and Platinum Tickets. Enjoy prime views, luxury indulgences and getaways from the crowd. +Singapore December 6 –10, 2023 EMNLP 2023 will take place in Singapore from Dec 6th to Dec 10th, 2023. More information will be announced soon. All deadlines are 11.59 pm UTC -12h (“anywhere on Earth”). +The NLLP Workshop 2023 will take place on 7 December 2023 and will be co-located with the EMNLP 2023 conference in Singapore. The full call for papers can be found here. To submit a paper, please access the submission link. All deadlines are 11. +Singapore December 6 –10, 2023 EMNLP 2023 will take place in Singapore from Dec 6th to Dec 10th, 2023. More information will be announced soon. All deadlines are 11.59 pm UTC -12h (“anywhere on Earth”). +The paper title, author names, contact details, and a brief abstract must be submitted electronically through the EMNLP 2023 paper submission site by the abstract submission deadline (June 16). It will be possible to make minor edits to the title and abstract until the full paper submission deadline, but you cannot change authors and subject areas. As this is the first time the main conference is using OpenReview as platform, which requires to create an account prior to submission, we will exceptionally allow modifications to the list of authors between the abstract deadline and the paper submission deadline. No further changes to the author list will be allowed after the paper submission deadline. Submissions with “placeholder” abstracts will be removed without consideration; Important: if you miss the abstract submission deadline, then you cannot submit the full paper. EMNLP 2023 has the goal of a broad technical program. Relevant topics for the conference include, but are not limited to, the following areas (in alphabetical order): Submission is electronic, using the OpenReview conference management system. Both long and short papers must follow the EMNLP 2023 two-column format, using the supplied official style files. The templates can be downloaded in Style Files and Formatting. Please do not modify these style files, nor should you use templates designed for other conferences. Submissions that do not conform to the required styles, including paper size, margin width, and font size restrictions, will be rejected without review. +All new season tickets will require a gift of $25 per seat to the Hokie Scholarship Fund, ensuring your support of the Hokies extends beyond the final whistle. Season ticket holders may be required to pay an additional per seat donation at the time of selecting seats, depending on seat location and other gifts made to the Hokie Scholarship Fund ahead of March 31, 2021. Want more information on Virginia Tech football season tickets? Join our interest list today and a Hokie Ticket Office representative will reach out with more details. Buy Tickets 800 VA TECH 4 Request Info Enjoy exclusive benefits all year long and get the best value for your dollar with season tickets to Virginia Tech football. Starting at just $350, season tickets guarantee admission to all seven home games in 2021, including Notre Dame and ACC foes North Carolina, Pitt, Syracuse, and Duke. A full list of benefits and features includes: Hokie football season tickets range from $350 to $450, with pricing remaining the same as the 2020 season. New season tickets purchased for the 2021 season will be secured at the $350 price point,  with the option to select seats in the summer and pay the difference in ticket cost at that time. Season ticket holders will have three payment options in 2021. Those options are: Per seat gifts are required for all season tickets in Lane Stadium. +Season tickets for 2023 Virginia Football home games are also currently on sale. Fans have five different price options from which to choose when purchasing 2023 season tickets. Scott Stadium seating sections are designated Prime ($360), Preferred ($290 – lower level, closed endzone), Choice ($220), Select ($165) and Value ($129). 3 Game Mini Plan (On Sale Now!) Pick three games and save money compared to buying single game tickets and secure your seats in advance. Ticket packages starting at $54 ($18 per game). Includes the Following Choices: Pick 1: James Madison (Sept. 9) or William & Mary (Oct. 7) Pick 2: NC State (Fri Sept. 22), Georgia Tech (Nov. 4), or Duke (Nov. 18) For questions regarding football season tickets contact the Virginia Athletics Ticket Office Monday-Friday from 9 a.m. – 5 p.m., by phone (800-542-8821). +This post was contributed by a community member. The views expressed here are the author's own. October is Breast Cancer Awareness month and Wine OFF the Fox on Saturday Oct. 22 features wine tasting and live performances from girl bands at Oswego’s Venue 1012. Plus a portion of the event’s proceeds benefit organizations that provide breast cancer services and support. Select and sip from more than 18 varieties of wine including blush white and red; seasonal craft beer from Oswego Brewing Company; a signature cocktail and non-alcoholic options. Bring your own picnic and relax in the crisp autumn air while you listen to the hottest hits of today and ‘60s ‘70s and ‘80s from girl bands Jersey Girls and Serendipity. Tickets are on sale now! Wine OFF the Fox and Breast Cancer benefit concert – Venue 1012 Wine OFF the Fox takes place on Saturday Oct. 22 from 2 to 7 p.m. at Venue 1012 1012 Station Drive Oswego. +For more information and to purchase tickets visit Wine OFF the Fox and Breast Cancer benefit concert – Venue 1012 Thursday, 5:00 pmOswego, IL Saturday, 9:00 amOswego, IL Saturday, 10:00 amNaperville, IL Saturday, 10:00 amOswego, IL Sunday, 10:00 amNaperville, IL Thursday, 7:00 pmOswego, IL Friday, 5:00 pmOswego, IL +On 8 September 2022, at 15:10 BST, Elizabeth II, Queen of the United Kingdom and the other Commonwealth realms, and the longest-reigning British monarch, died at Balmoral Castle in Aberdeenshire, Scotland, at the age of 96. Her death was publicly announced at 18:30. She was succeeded by her eldest son, Charles III. The death of Queen Elizabeth II set in motion Operation London Bridge, a collection of plans including arrangements for her state funeral, and supported by Operation Unicorn, which set protocols for her death occurring in Scotland. The United Kingdom observed a national mourning period of 10 days. The Queen's lying in state took place in Westminster Hall from 14 to 19 September, during which time an estimated 250,000 people queued to pay their respects. Elizabeth's state funeral on 19 September was the first held in Britain since Winston Churchill's in 1965. A funeral service was held at Westminster Abbey, followed by a procession to Wellington Arch that featured around 3,000 military personnel and was watched by around a million people in central London. The state hearse then transported the Queen's coffin to Windsor, followed by another procession through Windsor Great Park and a committal service at St George's Chapel at Windsor Castle. +Britain honored the life of Queen Elizabeth II with a state funeral steeped in tradition on Monday. The Queen, the UK's longest-reigning monarch, died September 8 after a rule spanning seven decades. She was 96. The funeral service took place at Westminster Abbey in London, where the Queen was crowned 69 years ago and where she was married to her husband, Prince Philip, 75 years ago. Presidents, prime ministers, princes, an emperor and an empress were among the dignitaries paying their final respects — a testament to the Queen's far-reaching appeal and deft diplomacy. Thousands of people flocked to the Abbey and streets along the 25-mile (40-kilometer) procession route from central London to Windsor, hoping to catch a glimpse of the Queen's flag-draped coffin as it traveled by hearse to her final resting place in St. George's Chapel, within the grounds of Windsor Castle. © 2023 Cable News Network. A Warner Bros. Discovery Company. All Rights Reserved. CNN Sans ™ & © 2016 Cable News Network. +On 8 September 2022, at 15:10 BST, Elizabeth II, Queen of the United Kingdom and the other Commonwealth realms, and the longest-reigning British monarch, died at Balmoral Castle in Aberdeenshire, Scotland, at the age of 96. Her death was publicly announced at 18:30. She was succeeded by her eldest son, Charles III. The death of Queen Elizabeth II set in motion Operation London Bridge, a collection of plans including arrangements for her state funeral, and supported by Operation Unicorn, which set protocols for her death occurring in Scotland. The United Kingdom observed a national mourning period of 10 days. The Queen's lying in state took place in Westminster Hall from 14 to 19 September, during which time an estimated 250,000 people queued to pay their respects. Elizabeth's state funeral on 19 September was the first held in Britain since Winston Churchill's in 1965. A funeral service was held at Westminster Abbey, followed by a procession to Wellington Arch that featured around 3,000 military personnel and was watched by around a million people in central London. The state hearse then transported the Queen's coffin to Windsor, followed by another procession through Windsor Great Park and a committal service at St George's Chapel at Windsor Castle. +The Queen was interred with her husband, Prince Philip, in the King George VI Memorial Chapel later that evening, in a private service attended only by her closest family. The state funeral was the largest security operation ever mounted in the UK, and included dignitaries from around the world. The funeral was designated as a public holiday in the UK and several Commonwealth states. The state funeral was one of the United Kingdom's most watched special television broadcasts, surpassing the wedding of Prince William and Catherine Middleton, the previous most watched royal event of the 21st century. The period of official mourning and the funeral was estimated to have cost the government £162 million.[1] Queen Elizabeth II was in good health for most of her life; her health, however, declined significantly after the death of her husband, Prince Philip, in April 2021.[2] She began to use a walking stick for public engagements in October 2021.[3] On 20 October, the Queen stayed overnight in King Edward VII's Hospital in central London, necessitating the cancellation of scheduled visits to Northern Ireland and the COP26 summit in Glasgow. She suffered a sprained back in November, which prevented her from attending the 2021 National Service of Remembrance.[4][5][6][7] In February 2022, during the COVID-19 pandemic in England, the Queen was one of several people at Windsor Castle to test positive for COVID-19. +GoldDerby The current 2022 cycle of “America’s Got Talent” will end with a two-night finale on NBC, airing September 13 (performance show) and September 14 (results show). All 11 finalists have now been named, with America picking two per week in each of the five qualifiers rounds, and the 11th being an instant save wildcard. Terry Crews hosts the long-running program, and the judges are Simon Cowell, Sofia Vergara, Heidi Klum and Howie Mandel. Read on for everything to know about the “America’s Got Talent” Season 17 finale. Who are the Top 10 acts of Season 17? America chose two finalists per week from each of the five qualifiers rounds, creating a Top 10. They are: saxophonist Avery Dixon (Terry’s Golden Buzzer), country singer Drake Milligan, country singing trio Chapel Hart (the group’s Golden Buzzer), magician Yu Hojin, pop singer Sara James (Simon’s Golden Buzzer), magician Nicolas RIBS, artificial intelligence act Metaphysic, stand-up comedian Mike E. Winfield, Lebanese dance act Mayyas (Sofia’s Golden Buzzer) and pole dancer/animator Kristy Sellars. SEE All Golden Buzzers on ‘AGT’ through the years Who is the instant save wildcard? +America’s Got Talent also welcomed back several familiar acts from seasons past, including ventriloquist Terry Fator (Season 2 winner), ventriloquist Dari Lynne (Season 12 winner), dance group Light Balance (Season 12 finalist), dance group Silhouettes (Season 6 finalist), and magician Shin Lim (winner of Season 13 and AGT: The Champions Season 1). With 30 minutes left in the broadcast, the brutal final cuts began. Read on to find out how the Top 5 shook out on Wednesday, then drop a comment with your thoughts on the outcome of Season 17. Did the right act win? This Mississippi vocal trio rounded out AGT‘s Top 5 of Season 17. Terry Crews seemed genuinely disappointed to send this A.I. duo packing in fourth place. In addition to placing third, this Texas-based rocker left with the judges’ respect; they acknowledged that he already scored a No. 1 song and easily could have walked away from the competition. It was close but no cigar for this Australian pole dancer, who placed second. And the highest of congratulations are in order for this dance group from Lebanon. Comments are monitored, so don’t forkin' curse and don’t bore us with how much your coworker’s sister-in-law makes per hour. Talk smart about TV! Comment * Name * Email * Your email address will not be published. We will notify you when someone replies. +MotorCity Casino Hotel welcomes MotorCity Cage Night XII - Live Mixed Martial Arts Fights at Sound Board on Friday, November 18, 2022. Doors open at 6:30pm and the first bout begins at 7pm. Bouts to be officially announced prior to the event. Card subject to change without notice All bouts to be approved by the State of Michigan Unarmed Combat Commission All guests must be at least 21 years of age with valid photo ID. "SOUND BOARD, an intimate live performance venue is located at MotorCity Casino Hotel. The venue features four bars and several private suites that are available to create an unforgettable live entertainment event. Free and convenient valet and self-parking are available." Additional Ticket Information Visit SoundBoardDetroit.com/Packages for more information about VIP Tickets & Hotel Packages.  Get in touch with us at 866-STAY-MCC or info@soundboarddetroit.com. Where can I park? Olympia Development operates 32 parking facilities within The District Detroit. To pre-reserve parking, visit ParkDistrictDetroit.com Parking is included in your ticket price at our amphitheatres and is offered onsite at the venue. Will events be cancelled due to rain, snow, or inclement weather? +Preregistration is required by calling 248-858-0916 for a free spot. • Metroparks Movies in the Parks: Parking opens at 6 p.m., movie starts at dusk. Bring snacks and drinks or picnic dinner. “Spiderman No Way Home” is Sept. 17, at Stony Creek Metropark. Drive-in style movie, free entry with Metroparks daily or annual pass entry to the park. If inclement weather, the event will be canceled, metroparks.com/movies-in-the-parks. • Open caption screenings “The Woman King” (PG-13): Sept. 18 and Sept. 21, Emagine Theatres, Emagine-Entertainment.com. • 5th Annual “Noir City-Detroit”: Sept. 23-25, 8 noir film titles hosted by Eddie Muller, Redford Theatre, 17360 Lahser Road, Detroit, 313-537-2560, RedfordTheatre.com, all-access pass, $40 each. • Auto Show Charity Preview event: 6-11 p.m. Sept. 16, at Huntington Convention Center, Huntington Place, 1 Washington Blvd., Detroit, with black tie attire and entertainment by Nile Rodgers and CHIC, naias.com/charity-preview-tickets, $350+. • JARC Annual Fundraiser: 5-8:45 p.m. Sept. +Several 911 callers reported seeing two planes collide over Boulder County. Three people are confirmed dead after two small aircraft collided mid-air in Colorado Saturday, authorities said. Multiple 911 callers reported seeing two planes collide over Boulder County shortly before 9 a.m. local time, the Boulder County Sheriff's Office said. The aircraft collided and crashed near Vance Brand Airport in Longmont at 8:50 a.m., according to the Federal Aviation Administration. The collision involved a single-engine Cessna 172 and a Sonex Xenos aircraft, a type of motor glider, the National Transportation Safety Board said. First responders found two separate crash sites near Niwot Road, the sheriff's office said. Aerial footage showed that one of the aircraft had landed in trees, while the other crashed into a nearby field. Two people were on board the Cessna 172, the FAA said. The sheriff's office also said it confirmed two people were on board the plane, both of whom were found dead at the scene. The sheriff's office said at this time one person was confirmed to be in the aircraft, who was also found dead at the scene. The FAA said it is unknown how many people were on board the second aircraft. The victims have yet to be identified, the sheriff's office said. Once identified, their names will be released pending next-of-kin notification. The FAA and NTSB are investigating the cause of the crash. +9NEWS Aviation Safety Analyst Greg Feith said that whenever there is a midair collision, there's a multifaceted investigation.  "You have to look again, first and foremost at each aircraft for any kind of mechanical malfunction, failure or anomalies that would cause or contributed to the accident," he said, adding that the other factor includes looking at the avionics of each plane, including the Traffic Collision Avoidance System (TCAS).  "That uses transponder information and the transponder basically pings a signal from the airplane. It's picked up by air traffic control radar so that your plane can be identified by the number, altitude and ground speed. But the technology also lets airplanes communicate among each other. So now the same ping goes off between point or one airplane to the other," Feith explained.  Besides that system, Feith believes this is more of a "see and avoid" type accident.  "That is on a beautiful day like this, it is incumbent upon each pilot flying in the airspace to clear the area visually to ensure that things like this don't happen," he said.  Feith adds that the airspace around where this crash may have happened, is known to have high air traffic, especially since it's known as a "training box." "So you have a lot of airplanes operating in a band of airspace or a box of airspace. +Populist firebrand Giorgia Meloni has been named as Italy’s first female prime minister, becoming the country’s most far-right leader since Benito Mussolini. She received the mandate to form a government from Italy’s President Sergio Mattarella on Friday afternoon after two days of official consultations, and is set to be sworn in at 10 a.m. local time (4 a.m. ET) on Saturday. Last month’s general election resulted in an alliance of far-right and center-right parties, led by her ultraconservative Brothers of Italy, winning enough seats in Italy’s parliament to form a government. Meloni announced her government picks in Rome’s Quirinal Palace, making the leader of Italy’s far right League party, Matteo Salvini, infrastructure minister. Giancarlo Giorgetti, also of the League party, was made economy minister. Antonio Tajani from the Forza Italia party was given the position of minister of foreign affairs while the role of defense minister went to Guido Crosetto, one of the founders of the Brothers of Italy party. The new government will be made up of a coalition of Meloni’s Brothers of Italy party, Salvini’s League party and the Forza Italia party, led by former Italian Prime Minister Silvio Berlusconi. The Brothers of Italy received nine ministries whereas Forza Italia and the League each received five ministries. +He succeeded in being elected by obtaining 116 votes out of 206 in the first round thanks to the support from opposition parties to the centre-right coalition.[117][118][119] Tensions further grew, in particular between Berlusconi and Meloni, whom Berlusconi described as "patronising, overbearing, arrogant ... [and] offensive" in a series of written notes in the Senate.[120][121] In the following days, after meetings between parties' leader, tensions loosened and the centre-right coalition parties reached an agreement on the formation of the new cabinet.[122] On 20 October, consultations between President Sergio Mattarella and parties officially began. On the following day, delegates from FdI, the League, FI, and Civics of Italy–Us Moderates–MAIE, announced to Mattarella they had reached an agreement to form a coalition government with Meloni as Prime Minister.[123][124] In the afternoon, Mattarella summoned Meloni to the Quirinal Palace, asking her to form a new government.[125] She accepted the task and on the same day announced the composition of her cabinet, which was officially sworn in on 22 October.[126][127][128] She is the first woman to hold the office of Prime Minister of Italy.[129][130][131] +Last updated on 19 September 202219 September 2022.From the section Wales Wales have called up teenage Birmingham City midfielder Jordan James for their Nations League games against Belgium and Poland on 22 and 25 September after injury ruled out Joe Allen. Uncapped James, 18, has played for England Under-20s and was last week included in the Wales Under-21 squad. Senior Wales boss Robert Page has now promoted James to his squad. While a hamstring strain ruled out Allen, defender Ben Davies' small leg fracture forced his absence. Swansea's Allen and Tottenham's Davies picked up the injuries with their clubs. Davies, 29, is expected to be out for around three weeks after suffering his injury in Spurs' Champions League defeat by Sporting Lisbon. Allen came off in Swansea's 3-0 Championship win over Hull on Saturday. Wales travel to Belgium on Thursday before hosting Poland three days later. Spurs manager Antonio Conte has said Davies will not be available for Wales duty. "He had an injury in his knee in the game against Sporting Lisbon, and he played with this injury," Conte told Sky Sports. "It is not a serious injury, I think (he will be back) after the international break because, with the national team, he is not available. "But I think after the international break, he will be available for us." Allen, 32, missed the start of the season with a hamstring problem picked up on Wales duty in June. +Giggs also revealed Dummett could have been in line for a place in his starting line-up against Azerbaijan, had he made himself available for selection. "He just wants to concentrate on club football. I've got to respect that and I have players in that position who are playing so I'm not fussed about that. Giggs says he respects Dummett’s decision (Image: Andrew Dowling Photography) "Obviously he is playing in the Premier League, he's a good defender but I've got options. With captain Ashley Williams and Dummett both absent, a door will open for Swansea defender Joe Rodon who has impressed in the opening three Championship fixtures this season. While Tottenham defender Ben Davies also looks to have recovered from surgery on his groin in time for the crunch clash. +The 2022 WNBA Finals, officially the WNBA Finals 2022 presented by YouTube TV for sponsorship reasons, was the best-of-five championship series for the 2022 season of the Women's National Basketball Association (WNBA). The finals featured the first-seeded Las Vegas Aces facing off against the third-seeded Connecticut Sun.[1] The Aces defeated the Sun in 4 games, winning their first WNBA Championship. This was Las Vegas's third time making the finals, and the second time since moving to Vegas. They previously competed in the Finals in 2008 and 2020. This was Connecticut's fourth time making the finals. They previously competed in 2004, 2005, and 2019.[2] The Aces won the finals three games to one to claim their first championship in franchise history. Head coach Becky Hammon became the first rookie head coach to win the WNBA Title. In the WNBA's Inaugural Finals, Van Chancellor was a rookie to the WNBA, but had coached in college for nineteen years before winning the WNBA title.[3] Alyssa Thomas recorded the first WNBA Finals triple-double in Game Three.[4] She recorded the second in Finals history in Game Four.[5] Bold Series winner In November 2021, the WNBA Board of Governors formalized a new playoff system that will structure the 2022 playoffs onward. +The team that executes the best when the game is on the line and the players that can knock down shots when the pressure is at its peak could determine the outcome of this series. THE PICK Chicago in five games. These teams have played one another eight times in the past 11 months and Chicago has gone 7-1 in those games. That is a hard fact to ignore when considering which team will be the first to earn three wins over the next 12 days. Of course, by picking the Sky, I’ve added more disrespect fuel to the Sun’s collective competitive fire. As a team, Connecticut plays with a chip on it shoulder with a desire to quiet doubters on their way to success. They have a prime chance to do so in this series as they look to knock off the defending champs on their way back to the Finals. Longtime WNBA reporter Brian Martin writes articles on WNBA.com throughout the season. The views on this page do not necessarily reflect the views of the WNBA or its clubs.  Atlanta Dream Copyright 2023 NBA Media Ventures, LLC. All rights reserved. No portion of NBA.com may be duplicated, redistributed or manipulated in any form. By accessing any information beyond this page, you agree to abide by the NBA.com If you are having difficulty accessing any content on this website, please visit our Accessibility page. +Create a free profile to get unlimited access to exclusive show news, updates, and more! Let awards season begin!  NBC will be hosting the 80th Annual Golden Globe Awards in 2023. The network has been hosting the award ceremony since 1996, which recognizes the best and brightest in film and television, as selected by the Hollywood Foreign Press Association. “We recognize the HFPA’s commitment to ongoing change and look forward to welcoming back the Golden Globes to NBC for its landmark 80th anniversary in January 2023,” Frances Berwick, NBCUniversal Television and Streaming’s Chairman of Entertainment Networks, said in a statement.  Here's what to know about the 2023 Golden Globes: Tuesday, January 10, 2023. +Stepping away from the brink of cancellation after two years of tumult, the rebooted Golden Globes ceremony returns to the small screen Tuesday night. The show was pushed out of the mainstream awards cycle last year after a Los Angeles Times investigation uncovered questionable self-dealing, ethical lapses and a lack of diversity among members of its parent organization, the Hollywood Foreign Press Assn. Awards Winners of the 2023 Golden Globes include “House of the Dragon,” “Fabelmans,” “Abbott Elementary” and “The Banshees of Inisherin.” The 80th Golden Globe Awards — which honors projects across film and television and typically kicks off the awards season — will air at 5 p.m. Pacific Tuesday on NBC and will be streamed on the network’s premium Peacock service. The show will take place at its usual haunt, the Beverly Hilton in Beverly Hills. In September, NBC and the HFPA announced the Globes’ return to its longtime broadcast television home in time for the awards show’s 80th anniversary. Entertainment & Arts Every year people complain about the awards show surplus. We finally got rid of the most absurd and corrupt of them — and now the Globes are back? Why? NBC dropped the 2022 Globes broadcast after a contingent of powerful publicists boycotted the organization and some studios — including Netflix and WarnerMedia — cut ties after The Times’ investigation. +The Pixel Watch is a Wear OS smartwatch designed, developed, and marketed by Google as part of the Google Pixel product line. First previewed in May 2022 during the Google I/O keynote, it features a round dome-shaped display as well as heavy integration with Fitbit, which Google acquired in 2021. Two Pixel-branded smartwatches had been in development at Google by July 2016, but they were canceled ahead of their release due to hardware chief Rick Osterloh's concerns that they did not fit well with other Pixel devices. Development on a new Pixel-branded watch began shortly after Google's acquisition of Fitbit. The Pixel Watch was officially announced on October 6, 2022, at the annual Made by Google event, and was released in the United States on October 13. In July 2016, Google was reportedly developing two smartwatches, codenamed "Swordfish" and "Angelfish", which were to be powered by the Android Wear operating system and expected to be released under the Nexus brand name.[2] According to Business Insider, these watches were canceled ahead of the 2016 Made by Google launch event due to concerns from Google hardware chief Rick Osterloh that they did not sync well with the company's new Pixel devices; the smartwatches were eventually "salvaged" by LG and released as the LG Watch Style and LG Watch Sport in February 2017. +17][18] Two months later, Business Insider reported that a Pixel-branded smartwatch codenamed "Rohan" was being targeted for a 2022 release, featuring a round bezel-less design, integration with Fitbit, proprietary watch bands, and health-tracking capabilities.[19][20] Evidence unearthed that month indicated that the watch would be powered by either Samsung's Exynos system-on-chip (SoC) or Google's own Tensor chip, the latter of which had recently debuted on the company's Pixel 6 smartphone line.[21] In April 2022, the "Fitbit" category was renamed "Watches" on the online Google Store, in anticipation of the Pixel Watch's impending launch.[22] The same month, Google filed a trademark for the "Pixel Watch" name with the U.S. Patent and Trademark Office,[23] while three models of the smartwatch were approved by the Bluetooth Special Interest Group.[24] A prototype of the Pixel Watch was found at a restaurant in the U.S., an incident which drew comparisons to Gizmodo's leak of Apple's iPhone 4 in 2010.[25][26] Osterloh unveiled a preview of the Pixel Watch on May 11, during the 2022 Google I/O keynote. +Javascript must be enabled for the correct page display Academics Resources Quick Links Center for Sports Media On September 15, Seton Hall's Center for Sports Media hosted a gala at The Lighthouse at Chelsea Piers, NYC, celebrating its Executive Founder, Bob Ley '76, and honoring media icon Robin Roberts with a Lifetime Professional Achievement Award. VIEW ALL NEWS AND EVENTS VIEW ALL NEWS AND EVENTS VIEW ALL NEWS AND EVENTS   Seton Hall’s Center for Sports Media recognizes Robin Roberts as an outstanding leader in sports media, making strides for equity and influence in the next generation of sports journalism. Thank you to our guests, patrons and sponsors! Because of your generosity, the event raised $380,000 to help us train the next generation of sports media professionals. Your support will advance the field by providing innovative training, state-of-the-art resources, and hands-on experiences to the next generation of sports media professionals. Please consider supporting the Center for Sports Media by making a donation today. Bob Ley '76Executive FounderSeton Hall University Center for Sports Media George BodenheimerFormer PresidentESPN Chris McKendryTennis HostESPN Jane McManusExecutive Director, Center for Sports Media Seton Hall University Kevin NegandhiSportsCenter AnchorESPN Jim O'Brien '82Sr. +Managing Partner and CEONapier Park Global Capital Jon Paparsenos '99Vice President for University AdvancementSeton Hall University Renee Robinson, Ph.D.Vice Dean, College of Communication and the ArtsSeton Hall University Bardia Shah-Rais '95VP of ProductionFox Sports Leo Zatta '78ChairmanTeam Walker, Inc. Chris Berman(Honorary Member)NFL Studio HostESPN Larry GanimFounderGanim Financial Don Garber(Honorary Member)CommissionerMajor League Soccer Jay HarrisSportsCenter AnchorESPN Jimmy Pitaro(Honorary Member)PresidentESPN Carlton Hill Foundation George and Ann BodenheimerBob Ley '76Leo Zatta '78 ESPNGanim FinancialChris McKendry and Eduardo Andrade If you have questions about the Center for Sports Media and opportunities for investment, I’d love to hear from you. Brian RuarkAssociate Vice President for Development[email protected](973) 378-2620 Learn more about the Center for Sports Media and the academic programs available at Seton Hall University in the field of Sports Media. +Ditto Carol Channing (twice) or any one of those four annoyingly contrived Up With People performances in the late '70s and early '80s. The Super Bowl halftime show, before Michael Jackson, was an endless wasteland of college marching bands and maddening flag-spinning tributes, from salutes to Hollywood (twice), to Motown, to the Big Band Era, to the Caribbean, to Duke Ellington. We also got the New Kids on the Block (1991) not singing any of their biggest hits and Gloria Estefan (1992) providing the soundtrack for Olympic figure skaters Dorothy Hamill and Brian Boitano of "What would Brian Boitano do?" fame, because nothing says a Minnesota Super Bowl like the lead singer of the Miami Sound Machine. Then we got the King of Pop at the Rose Bowl in 1993 -- and the Super Bowl halftime show was never the same again. Here is the complete list of previous Super Bowl halftime performers and themes: 2023: Rihanna 2022: Eminem, Dr. Dre. Snoop Dogg, Kendrick Lamar and Mary J. +Sports rights have long been the province of traditional media companies like Fox, Disney, Paramount Global and NBCUniversal, but technology companies like Apple and Amazon have made a bigger play for those rights as they seek to bring in consumers to their broadband subscription-video services. Amazon, for its part, is now a major NFL partner thanks to its control of rights to “Thursday Night Football.” Earlier this year, the Super Bowl LVI Halftime Show assembled a star-studded crew of artists including Dr. Dre, Snoop Dogg, Eminem, Mary J. Blige and Kendrick Lamar. The performance achieved five Creative Arts Emmy nominations and won three Creative Arts Emmys, including outstanding live variety special — a first-ever for the Halftime show. Past Super Bowl Halftime Show performances include the Weeknd, Jennifer Lopez, Shakira, Justin Timberlake, Lady Gaga, Katy Perry, Bruno Mars, Prince, Madonna and more. Apple Music will be offering sneak peeks of its Halftime ideas via its social handle on TikTok, Instagram and Twitter. +Shinzo Abe, the former prime minister of Japan and a serving member of the House of Representatives, was assassinated on 8 July 2022 while speaking at a political event outside Yamato-Saidaiji Station in Nara City, Nara Prefecture, Japan.[3][4][5] While delivering a campaign speech for a Liberal Democratic Party (LDP) candidate, he was shot from behind at close range by a man with an improvised firearm.[1] Abe was transported by a medical helicopter to Nara Medical University Hospital in Kashihara, where he was pronounced dead.[6] Leaders from many nations expressed shock and dismay at Abe's assassination,[7] which was the first of a former Japanese prime minister since Saitō Makoto and Takahashi Korekiyo during the February 26 incident in 1936.[8] Prime Minister Kishida decided to hold a state funeral for Abe on 27 September.[9] The suspect, 41-year-old Tetsuya Yamagami (Japanese: 山上 徹也), was arrested at the scene for attempted murder; the charge was later upgraded to murder after Abe was pronounced dead. Yamagami told investigators that he had shot Abe in relation to a grudge he held against the Unification Church (UC), to which Abe and his family had political ties, over his mother's bankruptcy in 2002. +Kyodo News via AP) TOKYO (AP) — Former Prime Minister Shinzo Abe was assassinated Friday on a street in western Japan by a gunman who opened fire on him from behind as he delivered a campaign speech — an attack that stunned a nation with some of the strictest gun control laws anywhere. The 67-year-old Abe, who was Japan’s longest-serving leader when he resigned in 2020, collapsed bleeding and was airlifted to a nearby hospital in Nara, although he was not breathing and his heart had stopped. He was later pronounced dead after receiving massive blood transfusions, officials said. A hearse carrying Abe’s body left the hospital early Saturday to head back to his home in Tokyo. Abe’s wife Akie lowered her head as the vehicle passed before a crowd of journalists. Nara Medical University emergency department chief Hidetada Fukushima said Abe suffered major damage to his heart, along with two neck wounds that damaged an artery. He never regained his vital signs, Fukushima said. Police at the shooting scene arrested Tetsuya Yamagami, 41, a former member of Japan’s navy, on suspicion of murder. Police said he used a gun that was obviously homemade — about 15 inches (40 centimeters) long — and they confiscated similar weapons and his personal computer when they raided his nearby one-room apartment. +Shinzo Abe, the former prime minister of Japan and a serving member of the House of Representatives, was assassinated on 8 July 2022 while speaking at a political event outside Yamato-Saidaiji Station in Nara City, Nara Prefecture, Japan.[3][4][5] While delivering a campaign speech for a Liberal Democratic Party (LDP) candidate, he was shot from behind at close range by a man with an improvised firearm.[1] Abe was transported by a medical helicopter to Nara Medical University Hospital in Kashihara, where he was pronounced dead.[6] Leaders from many nations expressed shock and dismay at Abe's assassination,[7] which was the first of a former Japanese prime minister since Saitō Makoto and Takahashi Korekiyo during the February 26 incident in 1936.[8] Prime Minister Kishida decided to hold a state funeral for Abe on 27 September.[9] The suspect, 41-year-old Tetsuya Yamagami (Japanese: 山上 徹也), was arrested at the scene for attempted murder; the charge was later upgraded to murder after Abe was pronounced dead. Yamagami told investigators that he had shot Abe in relation to a grudge he held against the Unification Church (UC), to which Abe and his family had political ties, over his mother's bankruptcy in 2002. +Japanese Prime Minister Fumio Kishida paid his “deepest condolences” to former leader Abe, saying he “was a personal friend, with whom (he) spent a lot of time.” Kishida said he had a “great respect for the legacy (Abe) left behind” and would continue election campaigning on Saturday, adding a free and fair election must be defended at all costs. News of the shooting and Abe’s subsequent death horrified leaders around the world, many of whom had worked with Abe during his long tenure. US President Joe Biden said he was “stunned, outraged, and deeply saddened,” adding he had worked closely with Abe and his killing was “a tragedy for Japan and all who knew him.” “While there are many details that we do not yet know, we know that violent attacks are never acceptable and that gun violence always leaves a deep scar on the communities that are affected by it. The United States stands with Japan in this moment of grief,” the US president said in a statement. Later on Friday, Biden ordered American flags at the White House and on other federal grounds be flown at half-staff until Sunday in recognition of Abe’s death. Who was former Japanese Prime Minister Shinzo Abe? +The state funeral of Shinzo Abe, former prime minister of Japan and serving member of the House of Representatives who was assassinated on 8 July 2022, was attended by roughly 3,600 people within Japan alone and by around 700 international attendees.[1] The funeral was held on 27 September 2022 at the Nippon Budokan venue in Chiyoda, Tokyo. Out of the foreign attendees, 49 top-level foreign leaders and 218 foreign delegates, including 101 ambassadors and representatives based in Japan, were present at the state funeral.[2] +Anthony Kuhn A portrait of Japan's former prime minister Shinzo Abe hangs above the stage during his state funeral in the Nippon Budokan Hall in Tokyo on Tuesday. Takashi Aoyama/Pool/AFP via Getty Images hide caption A portrait of Japan's former prime minister Shinzo Abe hangs above the stage during his state funeral in the Nippon Budokan Hall in Tokyo on Tuesday. TOKYO — Japan held a rare state funeral for its longest-serving prime minister, Shinzo Abe, on Tuesday, despite widespread public opposition to the event. Roads were closed around the Nippon Budokan Hall, where the event was held. Some 20,000 police were mobilized to prevent the sort of security lapses which allowed Abe's suspected killer to walk behind him at a July 8 campaign event and shoot him twice with a homemade shotgun. The government estimates that 23,000 mourners lined up to lay flowers at tables in front of pictures of Abe outside the hall. In a sign of the divisions surrounding the commemoration, thousands of others took to the streets in protest. Just down the street from the Budokan, protesters opposed to the state funeral tussled with Abe supporters and police. Critics objected to the use of $11. +Den of Geek Ad New actors, new dragons, and new drama keep House of the Dragon fresh after a 10-year time jump. This House of the Dragon review contains spoilers. “The Princess and the Queen” is effectively a second pilot episode for House of the Dragon. The installment flashes further forward into the future than ever before and ages its characters up so severely that they may as well be entirely different people. And that’s not even to mention the nearly dozen actually new characters that the episode does introduce in the form of Queen Alicent, Princess Rhaenyra, and Prince Daemon’s respective broods of children.  The decision to jump so far down the timeline midseason is as bold a one as you’re likely to see on television. It has every reason to be a disastrous one as well. Shuffling the board to this extent halfway through a story shouldn’t work. And yet, work “The Princess and The Queen” does. This episode isn’t just an impressive technical maneuver. It’s by far the most entertaining and enriching dispatch from House of the Dragon yet.  The fresh burst of energy that “The Princess and The Queen” provides to House of the Dragon is evident from its very first scene. +House of the Dragon. Photograph by Ollie Upton / HBO We’ve rounded the halfway point on House of the Dragon season 1, HBO’s much-hyped Game of Thrones prequel series. House of the Dragon will feature a large time jump between Episodes 5 and 6; when the dust settles, a bunch of major characters will be played by different actors, and the realm will be a very different place. The floodgates are beginning to open and we are finding out more and more about the last five episodes of season 1. HBO now has Episodes 6-10 listed on their official schedule, complete with runtimes. In addition, Rotten Tomatoes‘ series page for the show has episode titles listed. We’re going to lay it all out below, with the slight caveat that since the Rotten Tomatoes episode titles have not been officially confirmed by HBO, they must be taken with a grain of salt. The only episode title HBO has confirmed is for Episode 6. While the episode titles aren’t confirmed by HBO, it’s still enough to get us pretty excited. “The Lord of the Tides” refers to the head of House Velaryon; why will that be so relevant during the longest episode of the season? Then there’s “The Green Council. +The acquisition of Times Square Grand Slam was done in continued partnership with Marbella Interests, the Austin-based family office of Bryan Sheffield. In a statement to KLTV, EVO Entertainment Group said, “We are focused on learning and continuing to build upon the reputation and legacy of Times Square Grand Slam and will assess the timing for rebranding to EVO Entertainment in the future.” Copyright 2022 KLTV. All rights reserved. +With its seven theater screens, more than 70 state-of-the-art arcade games, 22 bowling alleys, bi-level laser tag arena, virtual reality entertainment, all-ages ropes course, full restaurants, and VIP bar access, Times Square Grand Slam has long been a draw for Tyler residents. Its role in family connection, as both a place of play and of familial pride, is deeply significant to EVO’s Founder and CEO Mitch Roberts who is a fourth-generation cinema owner. +After proudly declaring himself a “Derry Girl” and bringing everyone to tears (it’s OK if you cried too), he decided to remain in Derry with his friends. Good news for everyone, because the trailer picks up right where we last left them. If their past mishaps tell us anything about the final season, it’s that no one’s going without an emotional and hilarious bang.  Derry Girls Season 3 starts streaming Oct. 7. Check out some photos below. Clare Devlin (Nicola Coughlan) is having a plaid moment. +By Alex Fletcher Updated: 4 May 2022, 10.54am | 6 min read By Press Association Updated: 4 May 2022, 10.54am | 6 min read Derry Girls is the ultimate comedy for children of the 90s. With its razor-sharp script, schooldays nostalgia and genius characters, it’s certainly a series to binge. After the first two seasons were a huge success, find out everything we know so far about the show's return in 2022 for season 3, including the release date, cast, trailer and more. Watch the latest shows and sport from Sky with a NOW Membership, Netflix, and Discovery+ all in one place. Derry Girls season 3 starts on Tuesday, April 12th, 2022 on Channel 4. Catch up on All 4. New episodes are released weekly. Season 3 releases new episodes every Tuesday at 9.15pm on Channel 4. The final season will have six episodes. The Derry Girls season 3 finale will air on Tuesday 17 May at 9.15pm on Channel 4. It's been confirmed that a special one-off episode will will air in the same week as the finale, although Channel 4 hasn't announced a specific release date for it yet. +The Nobel Prize in Physiology or Medicine has been awarded 113 times to 225 Nobel Prize laureates between 1901 and 2022. Click on the links to get more information. The Nobel Prize in Physiology or Medicine 2023 has not been awarded yet. It will be announced on Monday 2 October, 11:30 CEST at the earliest. Svante Pääbo “for his discoveries concerning the genomes of extinct hominins and human evolution”. David Julius and Ardem Patapoutian “for their discoveries of receptors for temperature and touch”. Harvey J. Alter, Michael Houghton and Charles M. Rice “for the discovery of Hepatitis C virus”. William G. Kaelin Jr, Sir Peter J. Ratcliffe and Gregg L. Semenza “for their discoveries of how cells sense and adapt to oxygen availability” James P. Allison and Tasuku Honjo “for their discovery of cancer therapy by inhibition of negative immune regulation” Jeffrey C. Hall, Michael Rosbash and Michael W. Young “for their discoveries of molecular mechanisms controlling the circadian rhythm” Yoshinori Ohsumi “for his discoveries of mechanisms for autophagy” William C. Campbell and Satoshi Ōmura “for their discoveries concerning a novel therapy against infections caused by roundworm parasites” Tu Youyou “for her discoveries concerning a novel therapy against Malaria” John O’Keefe, May-Britt Moser and Edvard I. +9] The following medical experts were the members of the 2022 Nobel Committee: The following publications were the fundamental researches that motivated the Nobel Assembly at Karolinska Institutet to award the 2022 Prize to Pääbo:[10] +The 2022 Nobel Prize in literature was awarded to French author Annie Ernaux, for “the courage and clinical acuity with which she uncovers the roots, estrangements and collective restraints of personal memory,” the Nobel committee said. (Henrik Montgomery/TT News Agency via AP) Permanent Secretary of the Swedish Academy Mats Malm announces the 2022 Nobel Prize in Literature, in Borshuset, Stockholm, Sweden, Thursday, Oct. 6, 2022. The 2022 Nobel Prize in literature was awarded to French author Annie Ernaux, for “the courage and clinical acuity with which she uncovers the roots, estrangements and collective restraints of personal memory,” the Nobel committee said. (Henrik Montgomery/TT News Agency via AP) French author Annie Ernaux, left, and Chairman of French publishing house Gallimard, Antoine Gallimard, right, at the end of a press conference after Ernaux was awarded 2022’s Nobel Prize in literature, in Paris, Thursday, Oct. 6, 2022. The 82-year-old was cited for “the courage and clinical acuity with which she uncovers the roots, estrangements and collective restraints of personal memory,” the Nobel committee said. +Ill. Niklas Elmehed © Nobel Prize Outreach Prize share: 1/1 To cite this section MLA style: The Nobel Prize in Literature 2022. NobelPrize.org. Nobel Prize Outreach AB 2023. Tue. 8 Aug 2023. Tasked with a mission to manage Alfred Nobel's fortune and has ultimate responsibility for fulfilling the intentions of Nobel's will. For more than a century, these academic institutions have worked independently to select Nobel Prize laureates. Several outreach organisations and activities have been developed to inspire generations and disseminate knowledge about the Nobel Prize. +New York, NY and Los Angeles, CA – October 6, 2022 – Lachlan Murdoch, Executive Chair and Chief Executive Officer of Fox Corporation (Nasdaq: FOXA, FOX), today announced that Rob Wade has been appointed Chief Executive Officer of FOX Entertainment, effective immediately. Wade most recently served as President, Alternative Entertainment and Specials of FOX Entertainment. In this role, Wade and his team will guide one of the world’s most recognizable media brands and content producers with FOX broadcast network as its centerpiece. FOX Entertainment includes an expanding portfolio of owned content studios, including award-winning animation house Bento Box Entertainment, TMZ, MarVista Entertainment and Studio Ramsay Global. FOX Entertainment also includes the in-house unscripted studio FOX Alternative Entertainment, scripted content creator FOX Entertainment Studios, Blockchain Creative Labs, and the worldwide content sales unit FOX Entertainment Global. “Since the formation of FOX Entertainment, Rob has been an integral part of the leadership team responsible for delivering on its long-term strategy of creating an independent media company built on broadcast, developing an owned content portfolio and maintaining a disciplined in-house infrastructure,” said Murdoch. “Given Rob’s sharp creative instincts and proven operational acumen, he is well-suited to lead FOX Entertainment in what promises to be an exciting next chapter in its rich history. +Taylor, who oversees the Company’s legal function, assumed his current role in March 2021. Earlier, Mr. Taylor oversaw litigation, labor and employment, content protection and compliance for all of FOX’s operations, including the FOX Network, FOX Sports, FS1, FS2, FOX Deportes, FOX News Channel, FOX… Brian Nick serves as Chief Communications Officer and Executive Vice President of Fox Corporation.  In this role, he acts as the Company’s chief spokesperson and leads all communications initiatives. Mr. Nick has spent his 20-year career in communications and public affairs, most recently serving as head of communications for Coca-Cola Consolidated, where he led all… Gabrielle Brown serves as Chief Investor Relations Officer and Executive Vice President for Fox Corporation, leading the development and execution of the Company’s investor relations program. Ms. Brown joined FOX from UBS, where she most recently served as a Managing Director specializing in the global internet and media industries. Ms. Brown previously served as a… © Fox 2023. All Rights Reserved. +See Japanese Grand Prix picks at SportsLineMax Verstappen -190Charles Leclerc 15-4Lewis Hamilton 10-1Sergio Perez 11-1George Russell 14-1Carlos Sainz 18-1Lando Norris 150-1Fernando Alonso 200-1Daniel Ricciardo 400-1Esteban Ocon 400-1Pierre Gasly 500-1Sebastian Vettel 750-1Lance Stroll 750-1Yuki Tsunoda 1000-1Valtteri Bottas 1500-1Kevin Magnussen 1500-1Mick Schumacher 2000-1Alexander Albon 2000-1Guanyu Zhou 2000-1Nicholas Latifi 2500-1 © 2004-2023 CBS Interactive. All Rights Reserved. CBS Sports is a registered trademark of CBS Broadcasting Inc. Commissioner.com is a registered trademark of CBS Interactive Inc. +With Red Bull finally reestablishing itself as the dominant force in Formula One, Perez has had the benefit of racing in superior equipment all season and he's managed to turn that into the first two victories of his F1 career. However, he's struggled in Japan since joining Formula 1 in 2011. Perez has made nine career starts in the Japanese Grand Prix and he's never finished better than seventh. And despite his win in Singapore last week, he's failed to reach the podium in six of his last nine starts. He's third in the F1 standings and is only two points behind Leclerc for second but the model predicts that he fails to hit the podium again on Sunday. See who the model is backing right here. The model is also targeting one double-digit longshot to make a surprising surge up the leaderboard. Anyone who backs him could hit it big. You can find out who he is, and see all of the model's F1 picks and predictions at SportsLine. So who wins the Japan Grand Prix 2022? And which under-the-radar drivers makes a charge towards the front? Check out the latest 2022 F1 odds below, then visit SportsLine now to see the full projected 2022 Japanese Grand Prix leaderboard, all from the model with a proven history of auto racing success, and find out. +In the upcoming Dwayne Johnson flick, Black Adam, the character of Adrianna Tomaz is played by actress Sarah Shahi. Tomaz, aka Isis, was a refugee Black Adam received as a bribe from Intergang. Tomaz plays a pivotal role in Black Adam's evolution as a character. Sarah Shahi is a noted actress who's appeared in several popular TV shows and films over the years. Instagram Post Sarah Shahi was born on January 10, 1980, to Abbas Jahansouzshahi and Mahmonir Soroushazar. Shahi has Iranian ancestry from her paternal and maternal sides. While her father and paternal grandfather are Iranian, her maternal grandmother is Spanish. Shahi was born Aahoo Jahansouzshahi but later changed her name to Sarah Shahi. As a child, Shahi was interested in sports and participated in beauty pageants. She majored in English and Theater at the Southern Methodist University in New Mexico. Sarah Shahi met legendary American director Robert Altman early in her career and worked on his film, Dr. T & the Women. She subsequently went on to star in Dawson's Creek, Supernatural, Alias, and The L Word. In 2007, she played a minor role in HBO's iconic gangster series, The Sopranos. That same year, she landed her first lead role on television in Facing Kate, aka Fairly Legal. +Related: Black Adam: Every DC Character Confirmed To Appear On social media, Shahi posted she was finally starting work on Black Adam, having first been cast a year ago. She shared her appreciation at getting the chance to play this role, and even revealed the name of her character. "Very proud to represent my fellow middle eastern brothers and sisters as Adrianna," Shahi wrote. DC fans will recognize the name Adrianna and associate it with Adrianna Tomaz, Black Adam's wife and the hero Isis. You can see Shahi's full post down below. Adrianna has long been rumored to be a part of Black Adam, so it isn't too surprising that Shahi is actually playing her. However, her role as Adrianna seemingly also confirms the film will feature Isis. In the comics, Adrianna possess the Amulet of Isis, which bestows her with the powers of the goddess. It would make sense for Black Adam to show Adrianna in her superpowered form, perhaps suiting up alongside her husband for an epic battle. Of course, there are bound to be some changes in how Black Adam depicts Adrianna. For one thing, superhero movies these days are always putting some new spins on characters. For another, Shahi's initial casting described her character as "a university professor and freedom fighter leading the resistance in Kahndaq. +Raymond Lee, who will appear in Top Gun: Maverick, is cast in the lead role of Ben Seong in NBC's highly-anticipated Quantum Leap reboot pilot. The Quantum Leap reboot series will star Top Gun: Maverick actor Raymond Lee in the lead role. The cult science-fiction TV show Quantum Leap was a television staple in the late '80s and '90s. Starring Scott Bakula as Dr. Sam Beckett, a scientist who inadvertently leaps through spacetime during time travel experiments, the show became a huge success and ran for five seasons and 97 episodes on NBC. The show was hugely influential, blending the genres of sci-fi, romance, drama, and social commentary, and remains one of the most influential TV shows ever. Following rumors of a possible remake or continuation, NBC greenlit an hour-long pilot, also called Quantum Leap, in January 2022. According to Deadline, Lee, who has previously appeared in episodes of Modern Family and How I Met Your Mother, will play the lead role of Dr. Ben Seong, a world-famous physicist working on a time travel project known as Quantum Leap. The character is said to be a spiritual successor to Beckett, who has been missing for 30 years, and Seong finds himself trapped in the 1980s after he uses the technology on himself. +Martin Gero, Deborah Pratt, and Quantum Leap creator Don Bellisario are also executive producing the revival. The Quantum Leap revival will at least have a pilot episode before NBC makes decision about whether to order a new series. Are you looking forward to seeing Lee in the new Quantum Leap? Let us know in the comment section below! Recommended Reading: The Complete Quantum Leap Book We are a participant in the Amazon Services LLC Associates Program. This affiliate advertising program also provides a means to earn fees by linking to Amazon.com and affiliated sites. +The RTX 4090 is available at most major retailers in the US, but you shouldn’t expect a cheap price anywhere, as no matter what card you choose, you’ll be paying at least $1599. On the higher-end of the AIB cards, especially the ASUS ROG Strix OC’d model, you could pay up to around $2000 in total. Though, some of these premium cards can now be found at a slight discount, if you are lucky. If you’re looking for an RTX 4090 prebuilt PC, retailer B&H has already equipped itself with all manner of configurations for you to purchase. However, expect to spend around $4000 on a brand-new PC of this caliber, as the rest of the parts will also be fairly high-end. The RTX 4090 is priced at an MSRP of $1599. However, in current listings, you should expect this number to vary from $1599, all the way to around $2000 for the higher-end AIB models from brands such as ASUS. However, months after launch, prices for board partner GPUs are beginning to ease toward MSRP. Despite this, it’s still priced lower than we initially expected, as a Vietnamese retailer listed the new GPU for over $2000. However, it’s thankfully lower. +Both RTX 4080 configurations will be available in November, with prices starting at $1,199 and $899, respectively. Where to Buy The GeForce RTX 4090 and 4080 GPUs will be available as custom boards, including stock-clocked and factory-overclocked models, from top add-in card providers such as ASUS, Colorful, Gainward, Galaxy, GIGABYTE, Inno3D, MSI, Palit, PNY and Zotac. The RTX 4090 and RTX 4080 (16GB) are also produced directly by NVIDIA in limited Founders Editions for fans wanting the NVIDIA in-house design. Look for the GeForce RTX 40 Series GPUs in gaming systems built by Acer, Alienware, ASUS, Dell, HP, Lenovo and MSI, leading system builders worldwide, and many more. About NVIDIA Since its founding in 1993, NVIDIA (NASDAQ: NVDA) has been a pioneer in accelerated computing. The company’s invention of the GPU in 1999 sparked the growth of the PC gaming market, redefined computer graphics and ignited the era of modern AI. NVIDIA is now a full-stack computing company with data-center-scale offerings that are reshaping industry. More information at https://nvidianews.nvidia.com/. +When New York Knicks executive Ned Irish and Knicks coach Joe Lapchick decide it is time for the Knicks to integrate, with the support of NBA President Maurice Podoloff, they come together with the other team owners of the league to make history." With Clifton as the subject, the film is likely to not just tackle his story, but themes of discrimination and a struggle for acceptance, with the decision to focus on this period of his life an apt one. So, with all that in mind, here is exactly how you can watch Sweetwater when it finally arrives on our screens. Related:10 Best Sports Movies For People Who Don't Like Sports Movies After an immensely long production period, with the film first set as "in production" back in 2012, the release date of this film will feel like the culmination of a saga. Recently, it was announced that Briarcliff Entertainment would release the film nationwide in theaters on April 14, 2023. So, after so long, anyone who has been following this movie's progress can finally book their tickets. Currently, there is no announced streaming release for Sweetwater, however, with sports biopics all the rage, and with Netflix in particular really getting into the genre, it is likely that, soon, the film will end up available to stream somewhere before long. +Of course, as well as this, there is likely to be a DVD release of the movie, which is also worth keeping an eye out for. Yes, there is a trailer for Sweetwater, and it can be watched below: The themes of the film are striking throughout the trailer, with the opening line "It ain't about the color of my skin" resonating instantly. The dramatic score and intense dialogue set up a feeling of triumph through adversity, and it looks as if Sweetwater may just be one of the most feel-good movies hitting theaters this Spring. Every good biopic has a strong and often inspiring central character, and Sweetwater is no different. Born in Arkansas in October 1922, Nat Clifton, nicknamed "Sweetwater" because of his love for fizzy drinks, showed his true talent for basketball throughout his time in school. After serving in the US Army during World War II, Clifton made it back safely and began his career in professional basketball. As a member of the famous Harlem Globetrotters, Clifton would cement his legacy as an all-time great when he became only the second African-American to sign an NBA contract, just four days after Earl Lloyd. In 2014, some 24 years after his death, Clifton was inducted into the Naismith Memorial Basketball Hall of Fame, perfectly summarizing his incredible career. +The Pixel Watch is a Wear OS smartwatch designed, developed, and marketed by Google as part of the Google Pixel product line. First previewed in May 2022 during the Google I/O keynote, it features a round dome-shaped display as well as heavy integration with Fitbit, which Google acquired in 2021. Two Pixel-branded smartwatches had been in development at Google by July 2016, but they were canceled ahead of their release due to hardware chief Rick Osterloh's concerns that they did not fit well with other Pixel devices. Development on a new Pixel-branded watch began shortly after Google's acquisition of Fitbit. The Pixel Watch was officially announced on October 6, 2022, at the annual Made by Google event, and was released in the United States on October 13. In July 2016, Google was reportedly developing two smartwatches, codenamed "Swordfish" and "Angelfish", which were to be powered by the Android Wear operating system and expected to be released under the Nexus brand name.[2] According to Business Insider, these watches were canceled ahead of the 2016 Made by Google launch event due to concerns from Google hardware chief Rick Osterloh that they did not sync well with the company's new Pixel devices; the smartwatches were eventually "salvaged" by LG and released as the LG Watch Style and LG Watch Sport in February 2017. +17][18] Two months later, Business Insider reported that a Pixel-branded smartwatch codenamed "Rohan" was being targeted for a 2022 release, featuring a round bezel-less design, integration with Fitbit, proprietary watch bands, and health-tracking capabilities.[19][20] Evidence unearthed that month indicated that the watch would be powered by either Samsung's Exynos system-on-chip (SoC) or Google's own Tensor chip, the latter of which had recently debuted on the company's Pixel 6 smartphone line.[21] In April 2022, the "Fitbit" category was renamed "Watches" on the online Google Store, in anticipation of the Pixel Watch's impending launch.[22] The same month, Google filed a trademark for the "Pixel Watch" name with the U.S. Patent and Trademark Office,[23] while three models of the smartwatch were approved by the Bluetooth Special Interest Group.[24] A prototype of the Pixel Watch was found at a restaurant in the U.S., an incident which drew comparisons to Gizmodo's leak of Apple's iPhone 4 in 2010.[25][26] Osterloh unveiled a preview of the Pixel Watch on May 11, during the 2022 Google I/O keynote. +Washington, DC (October 12, 2022)—The Elizabeth Dole Foundation announced Savannah Guthrie, co-anchor of TODAY at NBC News, as the 2022 Tom Hanks Caregiver Champion Award recipient in recognition of her outstanding support of military caregivers. The award will be presented at the Foundation’s annual Heroes & History Makers celebration, on October 19 at The Anthem in Washington, DC and streamed live. The event is the Foundation’s annual tribute to America’s 5.5 million military caregivers, the loved ones who voluntarily care for wounded, ill, and injured service members and veterans at home. Senator Elizabeth Dole will be joined by Hidden Heroes Campaign Chair Tom Hanks and multi-platinum, global entertainer Chris Young. The Caregiver Champion Award was named for Tom Hanks in recognition of his outstanding support of military caregivers. The award has previously been presented to former First Lady Michelle Obama; music superstar Tim McGraw; and actor and humanitarian Gary Sinise. Guthrie was selected in recognition of her devoted advocacy of those who serve and their families. Since joining the Foundation as a Hidden Heroes Ambassador in 2018, Guthrie has used her national platform to bring awareness to the 5.5 million loved ones caring for a wounded, ill, or injured service member at home. “We are thrilled to honor our champion, Savannah, during our 10th anniversary celebration,” said Steve Schwab, CEO of the Elizabeth Dole Foundation. +Hollywood by senior contributor Brendan Kownacki “If there is a best way in order to combat [that] trauma and that ongoing desperation, it is community,” said actor and advocate Tom Hanks about the challenges felt by military caregivers and family members as they help their loved ones with both big tasks and small tasks alike, facing the new reality of being service disabled. “It is being a part of something bigger than one’s self. And Hidden Heroes started doing it 10 years ago, and it is the key operative motor.” Tom Hanks Hanks is best known as an actor and director, creating feel-good masterpieces like Big, Toy Story, and That Thing You Do, but also for creating historical epics that chart the stories of our men and women at war, like Saving Private Ryan or the HBO series “Band of Brothers.” Maybe this fascination with the Greatest Generation is what led to his work with the Elizabeth Dole Foundation and supporting military caregivers as the chair of the Hidden Heroes Campaign. Hanks has been candid in saying that it’s way more simple, when Elizabeth Dole asks for your help, you don’t say no. Senator Elizabeth Dole “You can never fail when you follow the example of Elizabeth Dole” said Steve Schwab, CEO of the foundation, summing up the resolve of the former Senator, Executive, and Cabinet Secretary who has left such an indelible mark on the United States. +On February 4, Mayor Eric Adams announced that Prospect Park… October 17, 2022 Prospect Park Alliance and NYC Parks announced today that longtime New York City public servant Morgan Monaco will become the new President of the Alliance, the non-profit that operates the park in partnership with the City, and also the Prospect Park Administrator, a public appointment by NYC Parks. Monaco, whose public sector career spans both government and non-profit organizations, brings extensive knowledge of park equity and community development to the position, as well as strong leadership in driving sustainable impact for civic organizations. Monaco is the first Black leader of the Alliance, further diversifying executive leadership within the open space sector, and continues the legacy of female leadership at the Alliance over the course of its 35-year history. Monaco succeeds former Prospect Park Alliance President Sue Donoghue, who was appointed New York City Parks Commissioner earlier this year. Monaco looks forward to working with the board, staff and most especially park users to help shape her vision for the park’s future. Coming out of the pandemic and recognizing the ways in which the park has been an invaluable resource for New Yorkers to recover, she looks forward to strengthening the organization’s capacity in order to keep pace with the needs of the park community and the robust use of the park. She plans to leverage her experience in working on citywide equity initiatives and serving vulnerable communities to explore the ways in which the Alliance can bring more social services to the park. +It is managed in partnership with Prospect Park Alliance. © Prospect Park Alliance. All rights reserved. +Riot Games Singapore is to support Riot's existing titles and will have a major focus on developing the company's newer titles.[36] Jason Bunge was hired as Riot Games' chief marketing officer in October 2020.[37] In October 2021, the company bought Kanga, a services firm involved in "fan hubs", merchandising, and content aggregation.[38] Riot Games collaborated with French animation studio Fortiche to release an animated series, Arcane. The series was released worldwide in November 2021 on Netflix, and by parent company Tencent in China, and received a favorable critical reception.[39][40] In March 2022, Riot Games announced that it had invested in Fortiche and, as a result, its chief content officer Brian Wright and director of corporate development Brendan Mulligan were joining Fortiche's board of directors.[41] That same month, Riot also hired executives from Netflix, Paramount, and HBO Max to head development of film, TV, and music endeavors built around the company's intellectual property.[42] In October 2022, Riot acquired Wargaming Sydney—a subsidiary of Cyprus-based Wargaming that had originally developed the MMO middleware BigWorld—for an undisclosed amount, and renamed it Riot Sydney. The acquisition excludes rights to the BigWorld technology itself, as well as its publishing arm.[43] +note 1] The company also teased further games — Project A, a tactical shooter; Project L, a fighting game with League of Legends characters; and Project F, a multiplayer game set in Runeterra – that were not detailed outside of genre descriptions and brief gameplay clips.[28][29] Project A was later revealed to be Valorant, which entered closed beta on April 7, 2020[30] and was officially released on June 2, 2020.[31] In December 2019, Riot Games announced Riot Forge, a publishing label headed by Leanne Loombe. The label partners with smaller game development studios for the creation of League of Legends games, with some games of this type already being in development.[32] Two titles from Riot Forge were announced at The Game Awards 2019: Ruined King: A League of Legends Story by Airship Syndicate, and Convergence: A League of Legends Story by Double Stallion Games.[33] Another division, Riot Tabletop, was announced in January 2020, to producing tabletop games; the first was Tellstones: King's Gambit, released in 2020.[34] Riot acquired Hypixel Studios in April 2020, which they had been investing in over the previous eighteen months to help them publish Hytale, a voxel-based sandbox game.[35] Also in April, Riot announced plans to establish a Singapore office later that year. +Here's Gowrappan's memo to Yahoo staff: Team - We've entered a new chapter in our history, and I am tremendously proud of all that we have accomplished together over the past three years. Like the start of any next chapter, this is a natural moment for transition. I've made the decision to take on a new role as a senior advisor to Apollo. This role will enable me to support our next phase of growth and continued investment in the company. As such, I am excited to welcome Jim Lanzone as the new CEO of Yahoo effective September 27, 2021. Jim is a veteran technology and media leader with two decades of leadership experience and a deep track record of growth, innovation and an entrepreneurial spirit. I have every confidence he will be a terrific leader for the new Yahoo. Jim and I will work together to ensure a seamless transition, and I'm confident he will build on our successes and lead us into our future. What an incredible journey this has been. I joined the company three years ago as part of Verizon. Today, we're a standalone company with significant potential to grow beyond what we have accomplished thus far. We have the best team, with the right products, content and technology to shape the future of Yahoo. To reiterate what's been said many times over the past few months – this next chapter is a testament to the great work you've delivered against a focused strategy. +Eleven chief executives and interim leaders have led the Yahoo companies since 1995. They are: For a list of all current and defunct services offered by Yahoo, see List of Yahoo!-owned sites and services. On September 22, 2016, Yahoo disclosed a data breach that occurred in late 2014, in which information associated with at least 500 million user accounts,[99][100] one of the largest breaches reported to date.[101] The United States indicted four men, including two employees of Russia's Federal Security Service (FSB), for their involvement in the hack.[102][103] On December 14, 2016, the company revealed that another separate data breach had occurred in 2014, with hackers obtaining sensitive account information, including security questions, to at least one billion accounts.[104] The company stated that hackers had utilized stolen internal software to forge HTTP cookies.[105][106] On October 3, 2017, the company stated that all 3 billion of its user accounts were affected by the August 2013 theft.[107][108][109][110][111] On November 30, 2009, Yahoo was criticized by the Electronic Frontier Foundation for sending a DMCA notice to whistleblower website "Cryptome" for publicly posting details, prices, and procedures on obtaining private information pertaining to Yahoo's subscribers.[112] +By subscribing, I agree to the Terms of Use and Privacy Policy. This site is protected by reCAPTCHA Enterprise and the Google Privacy Policy and Terms of Service apply. Netflix added 2.41 million global subscribers in the third quarter of 2022, bringing its grand total to 223.09 million (73.39 million from the U.S. and Canada), a gain of +4.5 percent over the prior year’s comparable quarter. Q3 was the first quarter of 2022 when Netflix didn’t lose subs. According to Tuesday’s shareholder letter, executives at Netflix believe they’ll add 4.50 million subs globally in the final quarter of 2022. The streamer added 4.38 million subs in the year-ago quarter, which at the time represented 9.4 percent growth. So we’re not there — but we are well above the company’s tempered expectations; at the end of Q2, Netflix forecasted that it would add 1 million global subscribers in Q3. Clearly, it bested that — the same goes for its financial forecasts. Netflix earned $3.10 per share in the third quarter on $7.926 billion in revenue; its net income was $1.398 billion. Wall Street forecasted earnings of $2.13 per share on $7.84 billion in revenue. Back on July 19, Netflix itself estimated Q3 earnings per share of $2. +In the third quarter of 2022, the total revenue and net profit of Netflix decreased marginally by 1% and 3%, respectively, over that in the second quarter of 2022, according to GlobalData. During the third quarter of 2022, Asia-Pacific accounted for 1.43 million additional customers of Netflix, which constituted the majority of the company's net subscriber increase. With just 100,000 net customers added, the Netflix area of the US and Canada experienced the slowest growth. From the fourth quarter of 2022, Netflix will stop providing guidance for paid memberships but will still reveal those figures when it releases its quarterly earnings.   United States of America United States of America United States of America United States of America Germany United States of America United States of America United States of America United States of America United States of America Don’t wait - discover a universe of connected data & insights with your next search. Browse over 28M data points across 22 industries. +Dónde Vives: Directed by Brenna Malloy. With Jason Beghe, Tracy Spiridakos, Marina Squerciati, Patrick John Flueger. A shocking murder pulls rookie officer ... +Posted by Chris on 2022-10-05 6:25PM Hey, “Chicago P.D.” fans. We hope episode 3 was total fire aka great for you guys tonight. Now that episode 3 has officially done its thing, we are right back in your faces to take you on a brief journey into the future as we explore what the next, new episode 4 of Chicago PD’s current season 10 will be showing you when it comes out next Wednesday night, October 12, 2022. We were able to snag up an official teaser description for one of episode 4’s main storylines via NBC’s official episode 4 press release. So, we’re going to certainly take a look at it right now. Let’s go. First off, NBC revealed that there is an official title for this new episode 4 of Chicago PD’s current season 10. It turns out that the writers decided to name it, “DONDE VIVES.” It sounds like episode 4 will feature some more very scandalous, intense, dramatic, interesting, action-filled and suspenseful scenes. In the new episode 4, a shocking murder and a rookie officer will be the main focus of this storyline that NBC chose to serve up on a platter. Yep, it turns out that some major scandal will loom in this episode as very startling murder will take place at some point. +If you subscribe to a YouTube Premium family plan, you may want to check your email: Google is notifying users that the monthly cost of the service will be going up by $5 a month. Starting in November, most users will start paying $22.99 per month for YouTube Premium — though there seems to be some leeway. While the main announcement says that the price increase starts on the next billing cycle on or after November 21st, some legacy subscribers won't see their bill jump for several months. One Engadget staffer was informed that their price would not increase until April due to their status as a "long-standing and valued member." With the new price structure, the family plan is less of a bargain for smaller groups. At $17.99, buying into the family plan for just two users offered a significant savings over individual accounts. Now, a two-user family will save only $1 a month. For now, however, single-user prices remain the same: $11.99 a month for individual accounts and $6.99 for students. The benefits haven't changed either, with Premium still offering users an ad-free YouTube experience, the ability to download videos for offline viewing, access to YouTube Music, and the ability to continue to play music and videos in the background or with your phone screen off. At least you still don't need to subscribe to Premium to watch videos in 4K. +Subscribers of YouTube Premium’s Family Plan will have to pay an additional $5 for their subscription after the video-streaming platform upgraded the monthly fee by 28% to $22.99. YouTube made the announcement in an email to subscribers of the family tier in the US. The change has taken effect immediately for new subscribers, while existing customers were given a 30-day notice. The email to subscribers read: We created YouTube Premium to provide an uninterrupted YouTube experience, so you can get closer to the videos, creators, and music artists that you love. To continue delivering great service and features, we will be increasing your Premium family plan price from $17.99/month to $22.99/month. This change will take place on your next billing cycle starting on or after November 21, 2022. To check the status of your account and billing information, go to your Settings > Purchases and Memberships page. All members have the flexibility to pause or cancel anytime here. Reports say similar price changes are being rolled out in other markets like Canada where prices were increased to CAD $22.99 ($16.82) from CAD $17.99, and in the UK where prices were hiked to £19.99 ($22.64) per month from £17.99. With YouTube Premium, subscribers are able to watch videos on YouTube without ads and download videos and playlists on their mobile device to watch offline. +/VvHuaCKgGn — Santa Monica Studio – God of War Ragnarök (@SonySantaMonica) September 16, 2020 God of War Ragnarok is set to launch on November 9, 2022. Sony’s Santa Monica Studio shared the date with a new CGI trailer, which depicts Kratos and Atreus fighting a horde of foes before facing off against Fenrir, a giant wolf. In a blog shared on July 6, Santa Monica Studio shared that pre-orders for the game will begin from July 15. The blog also details several different versions of the game that will be available, including a collector’s edition that comes with a 16″ replica of Thor’s hammer. The confirmed release date is good news for fans, who have been waiting for months on news about the game’s launch. At the Sony PlayStation Showcase on September 9, developer Sony Santa Monica and publisher PlayStation Studios announced that God of War Ragnarok has been delayed to 2022. Speaking during a Q&A, Herman Hulst, Sony Interactive Entertainment‘s head of worldwide studios, talked about the pushback: “So we have, currently, two very big, very narrative-driven games in development: Horizon Forbidden West and the next God of War,” explained Hulst at the time. “For both of those, they’re frankly affected by access to performance capture and talent. +Here's the release date for God of War Ragnarok. God of War Ragnarok is official – for a long time, the name of the game was assumed, and the rumour mill was working hard to try and dissuade fans that Ragnarok would indeed be the final suffix for the title. The game is already making some big promises: developer Sony’s Santa Monica Studio has promised that the incoming game will complete the Norse storyline from the 2018 game, God of War… so you know the stakes are going to be high. Fan appetite for the game is clearly quite high, too: God Of War Ragnarok currently has the most views of all the trailers released at the last Sony PlayStation Showcase that took place on September 9, 2021. Given that most of those trailers are well into the muiti-million hit-count, that’s impressive. God of War: Ragnarok currently sits at over 12million views. Whoever said that fan desire for Sony exclusives was on the decrease? The game will carry on more or less straight from the previous title, with Kratos and Atreus venturing once more into the ancient Norse world, attempting to put a halt to that eponymous world-ending Ragnarok. For everything you need to know about the game – including the God of War Ragnarok release date – read on below. pic.twitter. +A first look of Ethan Hawke as the voice of Batman in Batwheels, the upcoming animated series debuting as part of the preschool block on Cartoonito on HBO Max and Cartoon Network, was revealed today.    The new clip features a scene from the upcoming half-hour special, “Secret Origin of the Batwheels,” premiering on Batman Day, Sept. 17, exclusively first on Cartoonito on HBO Max. The special will introduce viewers to Bam (the Batmobile), Bibi(the Batgirl Cycle), Redbird (Robin’s Sports Car), Batwing (the Batwing Jet Plane), and Buff (the Bat Truck), and tell the backstory of how this team of young sentient super-powered vehicles came to be.    The series will officially launch later this fall on Cartoonito on Cartoon Network and Cartoonito on HBO Max. Produced by Warner Bros. Animation, Batwheels marks DC’s first entry into preschool, offering young viewers a high-speed, vibrant CGI-animated iteration of the Caped Crusader. The show will follow a group of young sentient super-powered vehicles as they defend Gotham City alongside Batman, Robin, and Batgirl.    “Secret Origin of the Batwheels” description: (Special premieres Batman Day, Sept. 17 on Cartoonito on HBO Max) +Prank, the Jokermobile, and the rest of the villainous squad wreak havoc on Gotham City alongside The Joker, Catwoman, Harley Quinn, and more of the Caped Crusader’s infamous rogues gallery. Previously-announced DC Super Heroes joining Hawke’s Batman, Bertrand’s Bam, and Hudson’s Robin include the rest of the Batwheels team — Bibi (The Batgirl Cycle) voiced by Madigan Kacmar, Redbird (Robin’s Sports Car) voiced by Jordan Reed, The Batwing voiced by Lilimar, and Buff (The Bat Truck) voiced by Noah Bentley — plus Bat-family member Cassandra Cain/Batgirl voiced by Leah Lewis. The Batwheels are cared for by their trainer and mother figure Batcomputer, voiced by Kimberly D. Brooks, and Batman’s robot repairman Mo, voiced by Mick Wingert. They are a team of incredible crimefighters who have banded together to oppose evil, combat crime and clean up the streets of Gotham City. They are… okay, they’re NOT Batman and Robin. They’re the Batwheels – an awesome group of sentient super-powered crime-fighting vehicles defending Gotham City alongside Batman, Robin, Batgirl and a host of DC Super Heroes. Having just been created by the Batcomputer, our heroes are essentially kids with little to no life experience. +We use some essential cookies to make this website work. We’d like to set additional cookies to understand how you use GOV.UK, remember your settings and improve government services. We also use cookies set by other sites to help us deliver content from their services. You have accepted additional cookies. You can change your cookie settings at any time. You have rejected additional cookies. You can change your cookie settings at any time. Departments, agencies and public bodies News stories, speeches, letters and notices Detailed guidance, regulations and rules Reports, analysis and official statistics Consultations and strategy Data, Freedom of Information releases and corporate reports The Prime Minister is the leader of His Majesty’s Government and is ultimately responsible for the policy and decisions of the government. As leader of the UK government the Prime Minister also: As Minister for the Union, the Prime Minister works to ensure that all of government is acting on behalf of the entire United Kingdom: England, Northern Ireland, Scotland, and Wales. Rishi Sunak became Prime Minister on 25 October 2022. He was previously appointed Chancellor of the Exchequer from 13 February 2020 to 5 July 2022. He was Chief Secretary to the Treasury from 24 July 2019 to 13 February 2020, and Parliamentary Under Secretary of State at the Ministry of Housing, Communities and Local Government from 9 January 2018 to 24 July 2019. +“The whole list of tax cuts and ideas that frankly, according to Sunak and others, belongs to Disneyland because none of it was going to be really possible without crashing the economy more,” he said. Sunak’s only challenger, Penny Mordaunt, leader of the House of Commons and former defence minister, was reportedly backed by 30 MPs compared with nearly 150 supporting Sunak. “This decision is an historic one and shows, once again, the diversity and talent of our party,” Mordaunt said in a statement as she withdrew from the race just minutes before the winner was due to be announced. “Rishi has my full support.” Sunak and Mordaunt had lost to Truss last month in the race to appoint a successor to then-Prime Minister Boris Johnson. He was forced to announce his resignation in July after a wave of scandals linked to parties held during the COVID-19 lockdown. Sunak will be the UK’s first leader of colour and the first Hindu to take the top job. At 42, he will also be the youngest prime minister in more than 200 years. The multimillionaire former hedge fund boss will be expected to impose deep spending cuts to try to rebuild the UK’s fiscal reputation, just as the country slides into a recession, dragged down by the surging costs of energy and food. He will also inherit a political party that has fractured along ideological lines, a challenge that damaged the fortunes of several former Conservative leaders. +We use some essential cookies to make this website work. We’d like to set additional cookies to understand how you use GOV.UK, remember your settings and improve government services. We also use cookies set by other sites to help us deliver content from their services. You have accepted additional cookies. You can change your cookie settings at any time. You have rejected additional cookies. You can change your cookie settings at any time. Departments, agencies and public bodies News stories, speeches, letters and notices Detailed guidance, regulations and rules Reports, analysis and official statistics Consultations and strategy Data, Freedom of Information releases and corporate reports Rishi Sunak became Prime Minister on 25 October 2022. He was previously appointed Chancellor of the Exchequer from 13 February 2020 to 5 July 2022. He was Chief Secretary to the Treasury from 24 July 2019 to 13 February 2020, and Parliamentary Under Secretary of State at the Ministry of Housing, Communities and Local Government from 9 January 2018 to 24 July 2019. Rishi went to Winchester College and studied Politics, Philosophy and Economics at Oxford University. He was also a Fulbright Scholar at Stanford University (USA) where he studied for his MBA. Rishi was elected Conservative MP for Richmond (Yorks) in May 2015 and served as a Parliamentary Private Secretary at the Department for Business, Energy and Industrial Strategy from June 2017 until his ministerial appointment. +Rishi Sunak (/ˈrɪʃi ˈsuːnæk/ (listen) RISH-ee SOO-nak;[1][2] born 12 May 1980) is a British politician who has served as Prime Minister of the United Kingdom and Leader of the Conservative Party since 2022. He is the first British Asian prime minister. He previously held two cabinet positions under Boris Johnson, lastly as Chancellor of the Exchequer from 2020 to 2022. Sunak has been Member of Parliament (MP) for Richmond (Yorks) since 2015. Sunak was born in Southampton to parents of Indian descent who immigrated to Britain from East Africa in the 1960s. He was educated at Winchester College, studied philosophy, politics and economics at Lincoln College, Oxford, and earned an MBA from Stanford University in California as a Fulbright Scholar. During his time at Oxford University, Sunak undertook an internship at Conservative Central Office, and joined the Conservative Party. After graduating, Sunak worked for Goldman Sachs and later as a partner at the hedge fund firms The Children's Investment Fund Management and Theleme Partners. Sunak was elected to the House of Commons for Richmond in North Yorkshire at the 2015 general election. As a backbencher, Sunak supported the successful campaign for Brexit in the 2016 European Union membership referendum. +Related Stories Move over "Stranger Things," the next big Netflix hit may just be commercials. The streaming giant on Thursday is rolling out its cheapest membership tier, dubbed "Basic With Ads." The new tier will cost $6.99 per month, which makes it a full $3 cheaper than Netflix's current cheapest plan, the $9.99 Basic plan. It's Netflix's first foray into the ad-supported space — the streamer has for years resisted putting any advertising on its platform. The company's plan arrives on Nov. 3, a month before rival streaming service Disney+ will introduce its own ad-supported tier, and competes with ad-supported plans from services like Hulu and Peacock. The plan's launch comes as Netflix is preparing to crack down on password sharing on its platform. Beginning next year, Netflix will push people who borrow accounts to create their own, and will also give account-holders who share their passwords the ability to pay extra to have friends and family on their accounts. Here's what you need to know about Netflix's Basic With Ads tier. The Basic With Ads plan will operate similarly to the Basic plan. Users will have access to a 720p video stream — versus the 1080p stream offered by the $15.49 Standard plan and the 4K plan offered by the $19.99 Premium plan — which can be accessed from any internet-connected device. +Jump to With a vast library of TV shows, movies, and original programming, most people would agree that Netflix is an essential part of the entertainment landscape and easily one of the best streaming services you can sign up for. Like its competitors, the price of Netflix varies depending on which subscription tier and features you choose. Netflix plans start at $7 a month, but to get the best video quality without ads you have to pay $20 a month. And due to Netflix's recent crackdown on password sharing in the US, it now costs an additional $8 a month to add an extra user to your account. The fee will only apply to users who live outside of an account holder's household. This year, Netflix announced another major change to its subscriptions: After 25 years, the streaming service is shuttering its DVD-rental services in September — an early part of Netflix's history that became synonymous with its red envelopes. The platform also recently removed its ad-free Basic plan, which means the its cheapest ad-free plan now starts at $15.49 a month. To help you decide which Netflix plan is right you, we've put together a guide detailing how much Netflix charges for each of its membership tiers. Netflix currently offers three streaming plans: Standard with Ads, Standard, and Premium, starting at $7 a month and ending at $20 a month. It will cost more to add another user to a subscription plan. +The fifth season of The Crown, which follows the life and reign of Queen Elizabeth II, was released by Netflix on 9 November 2022. It was the first season of the series to be released following both the death of Prince Philip, Duke of Edinburgh on 9 April 2021 and the death of Queen Elizabeth II on 8 September 2022. Imelda Staunton stars as Elizabeth, along with main cast members Jonathan Pryce, Lesley Manville, Jonny Lee Miller, Dominic West and Elizabeth Debicki. All cast members are new to the series; this season marked The Crown's final wholesale recasting, following the ensembles led by Claire Foy (seasons one and two) and Olivia Colman (seasons three and four). The Crown traces the reign of Queen Elizabeth II from her wedding in 1947 through to the early 21st century.[3] The fifth season covers the time period between 1991 and 1997, and is set during the premiership of John Major.[4] Events depicted include Elizabeth's annus horribilis in 1992, Diana's Panorama interview, the separation and divorce of Prince Charles and Diana, Elizabeth's state visit to Russia, use of Prince Philip's DNA to identify the remains of the Romanov family, the decommissioning of Britannia, the handover of Hong Kong, and Major's departure from office and the beginning of Tony Blair's premiership. +Every item on this page was chosen by a Town & Country editor. We may earn commission on some of the items you choose to buy. Imelda Staunton is taking over the role of Queen Elizabeth from Olivia Colman. Given everything that's been happening in the royal family in the last few years—including Queen Elizabeth's death in September, Harry and Meghan stepping back from their royal roles, and the controversy surrounding Prince Andrew—fans of The Crown have been anticipating a season set in the modern day. Though the series likely won't make it all the way to 2022, the critically acclaimed show will have a few more chapters. Season 5 of the critically acclaimed series premiered in full on Netflix in November 2022, and is now nominated for four Golden Globes, including a nomination for Best Drama Series, as well as Imelda Staunton for Best Television Actress in a Drama Series, Elizabeth Debicki for Best Supporting Actress in a Television Series, and Jonathan Pryce for Best Supporting Actor in a Television Series. Staunton's nomination, in particular, has fans excited—if she wins, all three of the actresses who have helmed the show in the role of Queen Elizabeth II will have garnered the Best Actress Golden Globe. Watch The Crown In October 2022, Netflix finally dropped the first trailer for The Crown season 5. +By Luciana Bellini Travel | 22nd December 2022 Jennifer Coolidge reprises her role as the hapless Tanya in The White Lotus season 2, alongside her new husband Greg (played by Jon Gries), but the rest of the cast is filled with new faces, with more than a few you might recognise, including British actor Theo James, Aubrey Plaza of Parks and Recreation fame and the ever-brilliant Tom Hollander. While season one was filmed exclusively in the Four Seasons Resort Maui at Wailea, due to pandemic-related restrictions, for the second season they’ve branched out from the dreamy environs of the hotel to take in some of Sicily’s most beautiful towns and coastal spots, leaving one question on everyone’s lips: just where was The White Lotus filmed? Here’s our guide to all the key filming locations in The White Lotus season 2.  As with the first season, most of the show is centred around the antics of the monied guests staying at an uber luxurious resort – in the first season that was the Four Seasons Resort Maui at Wailea in Hawaii, and for the second season the team chose another Four Seasons resort: the grand San Domenico Palace hotel in Taormina. Situated high on the rocks, it offers up splendid views over the Ionian Sea, Mount Etna and an ancient amphitheatre. +While The White Lotus was originally intended to be a standalone miniseries, the overwhelmingly positive reception and acclaim inspired White to utilize the anthology format to create another installment. Amidst the buzz around Season 2, HBO confirmed that the series had been renewed for another season. There haven’t been any details about returning cast members, but based on the Season 2 finale, we can guess that Tanya won’t be among them. While filming has not yet begun, White has teased that he’s interested in exploring "death and Eastern religion and spirituality." Considering that the show has already ventured to an American state and a European resort, creating a new installment set in Asia would certainly allow the series to go in a different direction. The first two seasons of The White Lotus are now available to stream on HBO Max. Liam Gaughan is a film and TV writer at Collider. He has been writing film reviews and news coverage for eight years with bylines at Dallas Observer, About.com, Taste of Cinema, Dallas Morning News, Schmoes Know, Rebel Scum, and Central Track. He aims to get his spec scripts produced and currently writes short films and stage plays. He lives in McKinney, TX. +Mark Kelly Democratic Mark Kelly Democratic The 2022 United States Senate election in Arizona was held on November 8, 2022, to elect a member of the United States Senate to represent the state of Arizona. The seat was previously held by Republican John McCain, who won his final term in 2016. McCain died on August 25, 2018, and Governor Doug Ducey appointed former U.S. Senator Jon Kyl to fill the seat. Kyl resigned at the end of that year and Ducey replaced him with Martha McSally, who then lost to Democrat Mark Kelly in 2020. Primaries in Arizona took place on August 2. Kelly won renomination without opposition, while venture capitalist Blake Masters won the Republican nomination against a large field of candidates. Although Arizona typically leans Republican, Kelly led Masters by low single digits in aggregate polling. Kelly held a significant fundraising advantage until many Republican-aligned groups began spending to assist Masters in the final weeks of the campaign.[1] On November 1, Libertarian nominee Marc Victor dropped out of the race and endorsed Masters.[2][3][4] Incumbent Democrat Mark Kelly won reelection, defeating Republican nominee Blake Masters by a comfortable margin.[5] This was the first time Democrats won a full term to this seat since 1962. The race was competitive and seen as crucial to determining party control of the U.S. +Advertisement Arizona Election Results Sen. House Gov/Statewide Measures Last updated: Dec. 6, 2022 10:34 p.m. EST Kelly's win puts Democrats one seat away from keeping control of the Senate, with Nevada and the Georgia runoff still outstanding. Scott Bland, Politics editor Advertisement D+60 R+60 0 2004: R+58 2010: R+26 2016: R+14 2020: D+2 2022: D+5 $61,529 Arizona $63,015 Median of all states $46,511 $87,063 46% Arizona 29% Median of all states 7% 63% 30% Arizona 32% Median of all states 21% 45% Contact our team at interactives@politico.com. Associated Press, Federal Election Commission, House of Representatives clerk’s office, MIT Election Data and Science Lab, U.S. Census Bureau Project lead: Allan James Vestal Editing: Andrew Briz, Andrew McGill, Lily Mihalik Bhandari, Allan James Vestal Design & engineering: Aaron Albright, Kai Elwood-Dieu, Paula Friedrich, Beatrice Jin, Rashida Kamal, Andrew Milligan Scott Bland, Annette Choi, Rishika Dugyala, Marissa Martinez, Zach Montellaro, Steve Shepard, Jessica Piper, Mackenzie Wilkes Terms of Service | Privacy Policy | +Copyright 2023 The Associated Press. All Rights Reserved. The November midterm elections will determine which parties take control over the House and the Senate, ultimately defining the fate of President Joe Biden’s legislative agenda. (Oct. 14) WASHINGTON (AP) — Democrats have held both chambers of Congress and the presidency for the last two years, but they may not have such consolidated power for much longer. Republicans are favored to win the House in the Nov. 8 midterm elections, bolstered by frustration over the economy and advantages in the redistricting process that takes place every 10 years. But Democrats are working to hold their ground, campaigning on maintaining access to abortion and other issues. The outlook is murkier in the Senate, where Republicans are bidding to take back control. Several races in key battleground states are tight, leading Senate Republican leader Mitch McConnell to say the chances of his party winning a majority are just 50-50. A look at control of Congress and what will happen if Republicans win a majority in either chamber in the election: Democrats, led by House Speaker Nancy Pelosi, have held the majority since 2018, when they won control in then-President Donald Trump’s first midterm election. Republicans could take back the House if they net just five seats in dozens of competitive districts, and they are trying to win dozens. History also gives Republicans reason for optimism. +Connecting decision makers to a dynamic network of information, people and ideas, Bloomberg quickly and accurately delivers business and financial information, news and insight around the world Americas+1 212 318 2000 EMEA+44 20 7330 7500 Asia Pacific+65 6212 1000 Connecting decision makers to a dynamic network of information, people and ideas, Bloomberg quickly and accurately delivers business and financial information, news and insight around the world Americas+1 212 318 2000 EMEA+44 20 7330 7500 Asia Pacific+65 6212 1000 ARTICLE Last Updated Dec. 7, 2022 IN THIS ARTICLE What is the balance of power in the House? How many seats were up for election in 2022? What was the outlook for the 2022 midterm elections? What were the races to watch in the 2022 House elections? What were the major factors impacting the 2022 midterm House races? Who was projected to take control of the House in 2022? Learn about our custom news alerts, legislative and regulatory tracking, congressional and state legislator directories, and more. The GOP took control of the House. Republicans have 222 seats and Democrats have 213. [Virtual Event: Beyond the Midterms – Looking Ahead to the 118th Congress: Hear our experts discuss election outcomes and what they mean for policy priorities in the new Congress. +NevadaToday Nevada Election Survey Project poll finds 52% of Nevadans plan to vote for Cortez Masto As Nevadans begin voting in the 2022 midterm election, a new University of Nevada, Reno poll of likely voters released today finds Catherine Cortez Masto leading in the race for U.S. senator and Steve Sisolak leading in the governor’s race. The governor’s race is within the margin of error, but the senate race is not. The Nevada Election Survey Project 2022 general election poll, which asked nearly 600 likely Nevada voters about their voting intentions and views on state and national officials, found 52% of Nevadans plan to vote for Cortez Masto, 39% for Adam Laxalt and 5% remain undecided. Cortez Masto’s large lead reflects less Republican voter enthusiasm for Laxalt’s candidacy compared to Joe Lombardo and other Republican candidates. Among likely Republican voters, 74% said they planned to support Laxalt, compared to 83% for Lombardo and 88% for their Republican House of Representatives candidate. More Republicans also plan to support Cortez Masto than other Democrats on the ballot. Even if this sample of Nevadans is unusually supportive of the incumbent senator, lower support among any likely Republican voters for Laxalt, in what others have polled as a very tight race, is noteworthy. +Advertisement Nevada Election Results Sen. House Gov/Statewide Measures Last updated: Dec. 6, 2022 10:34 p.m. EST Cortez Masto's victory hands control of the Senate to Democrats for another two years. Scott Bland, Politics editor Advertisement D+30 R+30 0 2004: D+27 2010: D+6 2016: D+3 2022: D+1 $62,043 Nevada $63,015 Median of all states $46,511 $87,063 52% Nevada 29% Median of all states 7% 63% 25% Nevada 32% Median of all states 21% 45% Contact our team at interactives@politico.com. Associated Press, Federal Election Commission, House of Representatives clerk’s office, MIT Election Data and Science Lab, U.S. Census Bureau Project lead: Allan James Vestal Editing: Andrew Briz, Andrew McGill, Lily Mihalik Bhandari, Allan James Vestal Design & engineering: Aaron Albright, Kai Elwood-Dieu, Paula Friedrich, Beatrice Jin, Rashida Kamal, Andrew Milligan Scott Bland, Annette Choi, Rishika Dugyala, Marissa Martinez, Zach Montellaro, Steve Shepard, Jessica Piper, Mackenzie Wilkes Terms of Service | Privacy Policy | Do not sell my info | Notice to California Residents +By Matt Grobar Film Reporter EXCLUSIVE: Vertical Entertainment has secured North American rights to the horror feature Lullaby, directed by Annabelle‘s John R. Leonetti, from its financier Alcon Entertainment, slating it for release in select theaters and on VOD on December 16. (Watch Lullaby‘s new trailer, unveiled this morning, by clicking above.) Pic follows a new mother who discovers a lullaby in an ancient book and regards the song as a blessing. But her world transforms into a nightmare when the lullaby brings forth the ancient demon Lilith. Oona Chaplin (Avatar franchise) and Ramón Rodríguez (The Affair) lead the cast, which also includes Liane Balaban (You Can Live Forever), Kira Guloien (Women Talking) and Moni Ogunsuyi (The Umbrella Academy). Alex Greenfield and Ben Powell wrote the script, with Alcon’s Broderick Johnson and Andrew A. Kosove (Blade Runner 2049) producing alongside Envision Media Arts’ Lee Nelson and David Tish (The Ice Road). Exec producers included Alcon’s Carl Rogers and Scott Parish, Heroes and Villains’ Markus Goerg, Mikhail Nayfeld and Dick Hillenbrand, B3 Media’s Jeff Bowler, John Lewis and Bret Saxon, and Wonder Street’s Mark Holder. +“We are thrilled to be in business with industry leader Alcon Entertainment to release horror aficionado John Leonetti’s Lullaby,” said Vertical Entertainment Partner Peter Jarowey. “John’s love of the genre is renowned, and we feel it is the perfect film that our audience will flock to this holiday season.” Vertical Entertainment’s current and upcoming releases include Michael Jacobs’ Maybe I Do starring Diane Keaton, Susan Sarandon, Richard Gere, William H. Macy, Emma Roberts and Luke Bracey; K. Asher Levin’s Good Side of a Bad Man starring Emile Hirsch, Thomas Jane, Harvey Keitel and Ashley Benson; Darren Le Gallo’s Sam & Kate starring Dustin Hoffman and Sissy Spacek; Hans Canosa’s The Storied Life of A.J. Fikry, based on the New York Times bestselling novel by Gabrielle Zevin; John Patton Ford’s Sundance 2022 thriller Emily the Criminal starring Aubrey Plaza, who is nominated for a 2022 Gotham Award for Outstanding Lead Performance; the 2022 SXSW thriller Gone in the Night, directed by Eli Horowitz and starring Winona Ryder and John Gallagher Jr. +We've known for a while that Ncuti Gatwa is the next (well, it's a little more complicated than that right now, so spoiler alert for lower down the page) incumbent of the TARDIS, due to debut as the lead in Doctor Who next year. Now we know who will be his first main companion – Coronation Street's Millie Gibson, playing Ruby Sunday. "Whilst still being in total disbelief, I am beyond honoured to be cast as the Doctor’s companion," she says. "It is a gift of a role, and a dream come true, and I will do everything to try and fill the boots the fellow companions have travelled in before me. And what better way to do that than being by the fabulous Ncuti Gatwa’s side, I just can’t wait to get started." Ncuti Gatwa adds: "Millie just is the companion. She is full of talent, strength, she has a cheeky sparkle in her eye and is sharp as a razor. From the moment she walked into the room she captured all of our attention with her effervescence and then solidified that attention with the sheer torque of her talent. This adventure is going to be so wild and so fun, I cannot WAIT to sail the universe with Millie!” Russell T. Davies, who brought the series back in 2005 for its big relaunch, is returning to run it again starting next year. +Russell T Davies, Doctor Who showrunner, said: "It’s the great honour of my job to find the next generation of talent, and Millie shines like a star already. She’s brilliant, dynamic, clever and a wonderful actor. As a Coronation Street fan, I’ve seen Millie survive chases, guns and sieges, but that’s nothing compared to what lies ahead for Ruby Sunday." Sign up for the latest Who news, reviews, interviews and features By entering your details, you are agreeing to our terms and conditions and privacy policy. You can unsubscribe at any time. Doctor Who script editor Scott Handcock recently shared that secret auditions were held for the new companion in September, with Gatwa, the next Doctor, in attendance. Fans of the BBC sci-fi series were left surprised when last month's special, The Power of the Doctor, closed with Jodie Whittaker's Thirteenth Doctor regenerating into a Fourteenth incarnation played by David Tennant, who'd previously portrayed the Tenth Doctor. Tennant and Catherine Tate will return to Doctor Who for three special episodes, set to air in November 2023 to mark the show's 60th anniversary. +Photo: Norman Jean Roy Naomi Biden‘s recent nuptials have gone down in history as the first wedding of a grandchild of a sitting US president at the White House. And now, photos exclusive to Vogue reveal that an Arab designer was a major part of the bride’s big day. While she wore a Grace Kelly-inspired wedding gown by American brand Ralph Lauren to exchange vows with Peter Neal, Biden slipped into a sleek dress from Lebanese designer Reem Acra’s namesake label for the reception and cake-cutting ceremony. Photo: Norman Jean Roy The ivory Mikado silk gown created by Beirut-born Acra came with a delicate strapless neckline, and was made notably special with pearls belonging to Biden’s grandmother Roberta Buhle sewn into the sweeping six-foot train. Biden paired the dress with pearl jewelry of her own, and sheer gloves. Acra was also the designer of choice for First Lady Jill Biden, who wore two dresses from the brand on the day: A custom couture silk chiffon vintage blue dress with a teal wool crepe coat for the ceremony and a gold embroidered seafoam blue dress for the black-tie reception. Photo: Norman Jean Roy Naomi Biden is the daughter of US president Joe Biden’s younger son, Hunter, and his ex-wife Kathleen Buhle, and is an associate at the DC law firm Arnold & Porter. +“That was a big, big yes, because they’ve been so wonderful to us and so supportive of Markarian, and obviously, we said that we would be honored to work with them again on something so big.” When Biden and Moon visited O’Neill’s studio for fittings, they were very clear about their vision. “[Naomi] wanted something that was fun [and] that was going to be easy to change into after wearing all of her more formal looks for the ceremony and rehearsal dinner. She wanted something that had a lot of movement, that was going to be easy to dance in,” O’Neill says. “We talked about some sparkly looks and some short dresses and something with a little more detail to it, and ultimately settled on a little hand-beaded fringe minidress. We added some really beautiful bows and satin with little trains coming off. It was really kind of the perfect combination of something that was fun, but also special and classic.” Ten of O’Neill’s team members also worked on the dress, which featured hand-done beadwork that was hand-sewn onto the bodice. “We worked really closely together on this,” she added. The project was a joy for O’Neill, 36, and an opportunity to work with another young talent whose business was lifted in its early days by the Bidens. +Group standings are based on points from those three group-stage matches — three points for a win, one for a draw, none for a loss.  The top two teams from each group based on total points advance to the single-game knockouts. If teams are tied on points, goal difference is the first tiebreaker followed by goals scored. If teams are also tied in those categories another set of tiebreakers is applied.  The winners of the last World Cup in 2018, France will be determined to retain the crown, although they will have to fare considerably better than they did at Euro 2021, when they were knocked out at the Round of 16 stage by Switzerland.  If superstar Kylian Mbappe is at his best, then it could make all the difference for Les Bleus, and there is plenty of other international experience also in Didier Deschamps’ talented squad despite a rash of injuries heading into the tournament. France won the 2020/2021 UEFA Nations League by beating Spain in the final, and if they can perform as a cohesive unit then they will certainly be among the leading contenders for glory in Qatar. The Socceroos won a single-elimination FIFA intercontinental playoff to earn the final place in Group D, beating Peru in a penalty shootout on June 13. +The group stage at the 2022 World Cup is complete, here's how all 16 teams won a place in the knockout bracket. QUALIFIED: Brazil, France, Portugal, Netherlands, Senegal, England, United States, Australia, Argentina, Poland, Morocco, Croatia, Japan, Spain, South Korea, Switzerland ELIMINATED: Qatar, Canada, Ecuador, Iran, Wales, Denmark, Tunisia, Mexico, Saudi Arabia, Belgium, Germany, Costa Rica, Uruguay, Ghana, Cameroon, Serbia - Explained: How the World Cup tiebreakers worked - World Cup 2022: News and features | Schedule | Squads Nov. 20 Qatar 0-2 Ecuador Nov. 21 Senegal 0-1 Netherlands Nov. 25 Qatar 1-3 Senegal Netherlands 1-1 Ecuador Nov. 29 Netherlands 2-0 Qatar Ecuador 1-2 Senegal Nov. 21 England 6-2 IR Iran United States 1-1 Wales Nov. 25 Wales 0-2 IR Iran England 0-0 United States Nov. 29 Wales 0-3 England Iran 0-1 United States Nov. 22 Argentina 1-2 Saudi Arabia Mexico 0-0 Poland Nov. 26 Argentina 2-0 Mexico Poland 2-0 Saudi Arabia Nov. +0 Portugal Brazil Portugal 4 6 Brazil 1 Morocco 1 1 Switzerland South Korea The U.S. men’s national team will play in the most balanced World Cup group, Group B. According to the FIFA’s rankings, there are only 15 positions between the highest-ranked team in the group, England, which is fifth, and the lowest, Iran, which is 20th. Conversely, there are 52 positions between the two extremes in Group H, which contains Portugal, ranked ninth, and Ghana, ranked at a tournament-low 61st. 32 teams for a trophy Eight groups of four teams will pull from the six FIFA confederations. Group Group Group Group A B C D FIFA rank 1st 3 Argentina 4 France 5 England 8 Nether. 10 10 Denm. 13 Mexico U.S. 16 18 Senegal Wales 19 20 20 Iran 26 Poland 30 Tunisia 30 38 40 Australia 44 Ecuador 50 Qatar 50 51 Saudi Arabia 60 Group Group Group Group e f g h FIFA rank 1st 1 Brazil 2 Belgium 7 Spain 9 Port. 10 11 Germany 14 Urug. 15 Switz. +The group stage at the 2022 World Cup is complete, here's how all 16 teams won a place in the knockout bracket. QUALIFIED: Brazil, France, Portugal, Netherlands, Senegal, England, United States, Australia, Argentina, Poland, Morocco, Croatia, Japan, Spain, South Korea, Switzerland ELIMINATED: Qatar, Canada, Ecuador, Iran, Wales, Denmark, Tunisia, Mexico, Saudi Arabia, Belgium, Germany, Costa Rica, Uruguay, Ghana, Cameroon, Serbia - Explained: How the World Cup tiebreakers worked - World Cup 2022: News and features | Schedule | Squads Nov. 20 Qatar 0-2 Ecuador Nov. 21 Senegal 0-1 Netherlands Nov. 25 Qatar 1-3 Senegal Netherlands 1-1 Ecuador Nov. 29 Netherlands 2-0 Qatar Ecuador 1-2 Senegal Nov. 21 England 6-2 IR Iran United States 1-1 Wales Nov. 25 Wales 0-2 IR Iran England 0-0 United States Nov. 29 Wales 0-3 England Iran 0-1 United States Nov. 22 Argentina 1-2 Saudi Arabia Mexico 0-0 Poland Nov. 26 Argentina 2-0 Mexico Poland 2-0 Saudi Arabia Nov. +Group C of the 2022 FIFA World Cup took place from 22 to 30 November 2022.[1] The group consisted of eventual champions Argentina, Saudi Arabia, Mexico and Poland. The top two teams, Argentina and Poland, advanced to the round of 16. This marked the first time that Mexico did not advance past the first round since 1978.[2] The teams were decided by the World Cup draw that took place on 1 April 2022.[3] The group was set to receive one team from each pot, which sorted all World Cup teams by position on the FIFA World Rankings.[3] Notes The first match of the group was between Argentina and Saudi Arabia. The two teams had faced each other four times prior to the tournament, most recently in 2012, a 0–0 draw in a friendly game. Saudi Arabia defeated Argentina and ended their 36-match unbeaten streak.[6] According to Gracenote, the win was the "most surprising" in World Cup history, with many calling it one of the biggest World Cup upsets in history.[7] This was also the second consecutive time that Argentina did not win their opening match at a World Cup, after drawing 1–1 with Iceland in 2018; and the first time since 1990 that Argentina lost their opening match. +Recap/highlights: Argentina 1-2 Saudi Arabia - Lusail Iconic Stadium, LusailRecap/highlights: Mexico 0-0 Poland - Stadium 974, DohaRecap/highlights: Poland 2-0 Saudi Arabia - Education City Stadium, Al RayyanRecap/highlights: Argentina 2-0 Mexico - Lusail Iconic Stadium, LusailRecap/highlights: Poland 0-2 Argentina - Stadium 974, DohaRecap/highlights: Saudi Arabia 1-2 Mexico - Lusail Iconic Stadium, Lusail Follow along with ProSoccerTalk for the latest news, scores, storylines, and updates surrounding the 2022 World Cup, and be sure to subscribe to NBC Sports on YouTube! 1. Argentina -- 6 points (+3) - IN THE LAST 162. Poland -- 4 points (0) - IN THE LAST 163. Mexico -- 4 points (-1) - ELIMINATED4. +Paramount+'s new Criminal Minds series is Criminal Minds: Evolution. By Mark McKee | Published 11 months ago CBS had a relative TV goldmine from 2005 to 2020 when the FBI Behavior Analysis Unit traveled the country, bringing to justice the worst criminals within the borders. Criminal Minds revolutionized the murder mystery on TV with a stellar cast of characters that used their expert talents in human nature to chase after the worst the country had to offer. Spencer Reid, Derek Morgan, Jennifer Jareau, David Rossi, Aaron Hotchner, and Emily Prentiss captivated audiences for a decade and a half before the show came to an end in 2020. Fans didn’t have to wait long for news of a revival, as the team couldn’t stay away from a new series premiering this Fall on Paramount+. The latest iteration of the series has now found its title. Deadline reports the new series will appear under the title Criminal Minds: Evolution.  Just before the pandemic began, fans saw the BAU chase after The Chameleon to close out a series that had to create 15 years of diabolical murderers without allowing it to get stale. The series ended with Spencer Reid in a coma and traversing the memories of agents he worked with in the past. +Next: Criminal Minds Reboot Confirms Who BAU’s Most Important Character Is +New Head Football Coach Matt Rhule, live coverage right now on air @WOWT6News #Huskers pic.twitter.com/rr9eerBvtW Rhule wouldn’t share specific plans about who he might be bringing along with him, but said he would definitely be talking with — and listening to — players, coaches, and staff before making changes. Coming off a big win on Black Friday, Huskers are most interested in hearing about whether Interim Head Coach Mickey Joseph, who took the helm after Scott Frost was fired, would be retained. “I reached out to Mickey right when I got the job. Looking forward to talking to him at some point and talking to the rest of the staff. I’ve been on both sides of it,” Rhule said. “I’ve been an assistant coach on a staff that’s been let go, and I’ve always appreciated the coach coming in and talking to me. So I’ll try to be thorough with that process over the next couple of days.” Alberts said the decision about whether to keep Joseph was entirely in Rhule’s hands. “Ultimately, this is going to be Matt Rhule’s decision,” Alberts said. “He’s the head coach and he needs to hire the 10 assistant head coaches he believes gives him the best opportunity.” Rhule also talked Monday about his affinity for Nebraska. “My son is this YouTube generation. I have seen the Tunnel Walk maybe 5,000 times. +His final season at Baylor included 11 regular season wins, a spot in the Big 12 Championship Game and a New Year’s Six Bowl appearance.  Then came a less stellar NFL stint that ended after an 11-27 record in two-and-a-half seasons. It’s unclear what the exact contract details are as the Panthers owe over $40 million in buyout money. It’s also unclear what the hire means for interim head coach Mickey Joseph and Nebraska’s assistants.  Rhule will have a tall task ahead of him. Neither of the last two head coaches in Lincoln left with a winning record, and no coach has left on his own volition since Tom Osborne retired 25 years ago. The Huskers just wrapped up a 4-8 season and have not had a winning season or reached a bowl game since 2016.  But the financial resources, fan support, brand and facilities are in place to be competitive toward the top of the Big Ten. “It is a tremendous honor to be chosen to lead the Nebraska Football program,” Rhule said in a release. “When you think of great, tradition-rich programs in college football Nebraska is right at the top of the list.  The fan base is second to none, and I consider it a privilege to have the opportunity to coach in Memorial Stadium on Tom Osborne Field. sports@dailynebraskan.com Senior Sports Editor Your browser is out of date and potentially vulnerable to security risks. +Across the Yahoo Network Thu, October 27, 2022 at 2:01:02 PM EDT The voice behind TikTok’s text-to-speech feature has spoken — and she’s a Canadian local radio host.  Kat Callaghan hosts The Beat on 91.5 FM in Ontario. She also made a major reveal this month: She’s the voice of TikTok’s text-to-speech feature. Iconic! Callaghan confessed in her very first TikTok video.  For a long time I didn’t say a word. But … yes it’s me and yes I have an ongoing awesome relationship with the folks at TikTok. 🎉 The coolest part for me is watching the creativity & awesome content that people are putting out there using my voice. (Also oddly enough this is my first TikTok) “When you guys have been asking me if I’m the voice on TikTok,” the text-to-speech caption said. “Finally I can tell you guys: It is me,” Callaghan said in her authentic voice.  In the caption, she explained that she has an awesome ongoing relationship with TikTok.  “The coolest part for me is watching the creativity & awesome content that people are putting out there using my voice,” Callaghan wrote.  The video received over 29.4 million views. Some were in shock, but not everyone believed she was the voice they had heard for so long. +Some were convinced, while others were skeptical. "Idk why I’m not 100% convinced," one user shared.  "I thought the voice was automated, another commented.  "If it’s really you, say something in the same way, a commenter wrote.  Callaghan created an FAQ-style post in another TikTok video where she answered questions from the comments section, explaining she wouldn’t "lie" about being the voice of TikTok given her experience doing voice-overs, being a radio host, and hosting a podcast. RELATED: TikTok algorithm mystery: What we know, and don’t know, about the Chinese government's control of the app She then impersonated how the text-to-speech voice sounds on the app. "Yes, I’m the TikTok text-to-speech girl, my name is Kat, she began in the clip. "I work with TikTok on TTS and other projects, I love working with TikTok, and I love seeing your TikToks. Sometimes you guys make me say some pretty horrendous things, It’s pretty messed up. But I kind of think it’s funny, I don’t mind it at all." People this time were convinced that she is the actual voice of TikTok. "The Siri of our generation!!!" one person wrote.  "Y is this so life changing," another exclaimed.  "Woah u sound exactly like the TikTok voice," a user commented. +Here are the words that defined 2022. BuzzFeed News Reporter BuzzFeed News Reporter At the end of every calendar year, dictionaries around the globe select one word to sum up how language morphed in the preceding 12 months, to recognize a trend in mainstream vernacular and comment on the human condition at that moment in time. Come December, we are bombarded with dozens of different words, which always cast a wide net, paint a vague picture, and interchangeably solicit reactions from “yikes” to “sure.” Here’s a look at the many words of the year, selected by the lexicographical powers that be. gaslighting (n.): “the act or practice of grossly misleading someone especially for one’s own advantage.” Why was it chosen: M-W cites the “age of misinformation” we live in, and a 1,740% increase in lookups of the word this year. Though I kind of feel like I’m being gaslighted into believing this is the year this word gained relevancy, and not, say, six years ago. Also in the running: oligarch, Omicron, codify, LGBTQIA, sentient, loamy, raid, Queen Consort Ford Proctor and Austin Wynns of the San Francisco Giants after Proctor hit a grand slam home run against the Rockies on Sept. 29, 2022. homer (n.): “an informal American English term for a home run in baseball. +‘Vax’ is Oxford Dictionary’s 2021 word of the year Also on the list was “codify,” driven by the Supreme Court ruling overturning Roe v. Wade; “loamy,” which saw a massive increase in lookups as the Aug. 29 answer for the word game Quordle; and “raid,” with interest peaking after the FBI executed a search warrant at Trump’s Mar-a-Lago residence. The 2022 word of the year chosen by the U.K.-based Collins Dictionary was “permacrisis,” which it defined as “an extended period of instability and insecurity” and said “sums up quite succinctly just how truly awful 2022 has been for so many people.” The publisher of the Oxford English Dictionary, meanwhile, is opening the pick to the public for the first time this year. Voting continues until Friday. The choices? “Metaverse,” “#IStandWith” and “Goblin mode. +Founder Lee Soo-man also teased the formation of NCT sub-units from Tokyo, Saudi Arabia and potentially Singapore South Korean entertainment company SM Entertainment will be setting up its Southeast Asian headquarters in Singapore. CNBC reported yesterday (November 30) that the label – home to some of K-pop’s top acts such as aespa, NCT, Girls’ Generation, EXO and more – has plans to expand its operations in the Southeast Asian region by setting up headquarters for the region in Singapore. According to CNBC, SM Entertainment are currently in the process of recruitment for its Singapore branch. SM Entertainment’s Singapore base of operations will be “managing joint ventures in Indonesia, Vietnam and Thailand, as well as communicating with [its South Korea office] for other related ventures and plans.” Lee Soo-man, founder of SM Entertainment, also told the outlet that he would be keen on launching an NCT sub-unit in the region dubbed NCT Singapore, however it remains unclear if these plans have been set in stone. Despite declining to share specifics of the company’s investment in its expansion into Singapore, representatives of SM have shared that it is currently “in the midst of hiring more local talents, which will hopefully increase the full-time staff count”. Its Singaporean office is also looking to hire “local undergraduates or fresh graduates for internships”. +In Japan, SM co-publishes Avex Trax releases for artists including Ayumi Hamasaki, Namie Amuro, and Koda Kumi, as well as Johnny's Entertainment artists such as Arashi and KAT-TUN.[12] After graduating from California State University, Northridge in the United States, Lee Soo-man returned to Korea and in 1989 established what was then known as "SM Studio" in the Apgujeong neighborhood of Gangnam, Seoul and signed singer Hyun Jin-young. During the 1990s, SM Studio developed an in-house system that looked after all aspects of its artists' careers.[13] Lee's approach was targeted at teenage audiences, and took a holistic view of the qualities needed to become a successful entertainer.[14] In February 1995, the company changed its name to SM Entertainment and set up its capital fund.[15] SM then developed an in-house production system and created a string of successful artists, including boy band H.O.T. in 1996, girl group S.E.S. in 1997, boy band Shinhwa in 1998, R&B duo Fly to the Sky in 1999, and soloist BoA in 2000. Jung Hae-ik was appointed CEO at the time of SM's official reestablishment in 1995,[16] and was succeeded by Kim Kyung-wook in 1998.[citation needed] +7%) in May 2020 and July 2020. Unemployment in the transportation sector was above overall unemployment. BLS reports that the U.S. unemployment rate, not seasonally adjusted, in November 2022 was 3.4% or 1.2 percentage points below the transportation sector rate. Seasonally adjusted, the U.S. unemployment rate in November 2022 was 3.7%.     In addition to the update of the Unemployment in Transportation dashboard, BTS also released its monthly update to its Employment in Transportation: Total, by Mode, and Women, and Race and Hispanic or Latino Ethnicity of Transportation Workers dashboards. Charts Updated this Month by Section include: Unemployment in the Transportation and Warehousing Sector and in Transportation and Material Moving Occupations Monthly Employment in the Transportation and Warehousing Sector, Establishment Data Monthly Employment in the Transportation and Warehousing Sector by Race and Hispanic or Latino Ethnicity, Household Data   Visit Transportation Economic Trends for more topics. Media contact: BTSNews@dot.gov or 1-800-853-1351.   U.S. +7 percent), and Hispanics (3.9 percent) showed little or no change over the month. These data are from the Current Population Survey and are seasonally adjusted. See "The Employment Situation — November 2022" to learn more. Also see charts of Employment Situation data. Bureau of Labor Statistics, U.S. Department of Labor, The Economics Daily, Unemployment rate 3.7 percent in November 2022 at https://www.bls.gov/opub/ted/2022/unemployment-rate-3-7-percent-in-november-2022.htm (visited August 08, 2023). +Ale Bedoya joins ESPN FC Daily to discuss the USMNT's dramatic victory over Iran. (1:42) Tuesday's dramatic 1-0 win over Iran was just the ticket for the US, as they finished second in Group B behind England and therefore booked their spot in the round of 16. Up next, however, is another potentially tricky opponent: the Netherlands, who finished top of Group A by virtue of beating Senegal and host nation Qatar in Group A. The two will go head-to-head at Khalifa International Stadium on Saturday (10 a.m. ET) to see who advances to the quarterfinals, where the winning team will take on Argentina or Australia on that side of the bracket. Can the US keep this momentum going? Or will the Dutch, led from midfield by the mercurial Frenkie De Jong, bring that dream to an end? - World Cup 2022: News and features | Schedule ESPN's Kyle Bonagura and ESPN Netherlands' Bob Ligthart break down Saturday's game. If every team in the World Cup were judged based on how they've played in the first half alone, the United States would be considered one the best teams in the tournament. On a per/first-half basis, they rank No. 5 in chances created (5.3), No. 10 in xG (0.7) and No. 6 in goals (0.7). +The scenario for the US men's national team at the 2022 FIFA World Cup is simple: win and you are in. USA will clinch a berth in the Round of 16 if: USA will be eliminated if: USA are an underdog to surpass Iran in Tuesday's Group B finale (2 pm ET | FOX, Telemundo). +Advertisement December 12, 2022 at 10:45 AM EST Argentina will play either France or Morocco in the World Cup final after they beat Croatia 3-0 on Tuesday. Lionel Messi opened the scoring from the spot before Julian Alvarez grabbed another. Manchester City forward Alvarez then added the third after the half-time break, following a sensational solo run from Messi. France and Morocco play in the second semi-final on Wednesday. (Photo: Getty Images) December 13, 2022 at 5:45 PM EST Liam Tharme, Dermot Corrigan and Maram AlBaharna have broken down the key talking points from Argentina’s comprehensive victory over Croatia, including: GO FURTHER Argentina beat Croatia to reach final: Alvarez stars, magical Messi assist, goodbye Modric Advertisement December 13, 2022 at 5:42 PM EST With three matches left in this World Cup, we have four standout candidates for the Golden Boot, two from Argentina and two from France: The first tiebreaker for the award is assists, where Messi leads Mbappe by a count of three to two. +Press "Options" on your remote for languages available in your region. WHO ARE ARGENTINA'S POTENTIAL OPPONENTS IN THE SEMI-FINALS?* If Argentina were to make it to the semifinals as Group C winners, they could face Spain or South American rivals Brazil.* If Argentina reach the semifinals as Group C runners-up, they could face the potential winners of Groups F and H - either Belgium or 2016 European champions Portugal.WHO COULD ARGENTINA FACE IN THE FINAL?* If Argentina go all the way to the final as Group C winners, they could potentially find themselves taking on either England or France.* If Argentina are able to make it to the final as Group C runners-up, they could meet the Netherlands, Brazil or Spain. * Argentina, who are second in Group C on three points, can guarantee progress with a win over Poland, top on four, in their final game on Wednesday.WHO ARE ARGENTINA'S POTENTIAL OPPONENTS IN THE ROUND OF 16?* If Argentina qualify for the round of 16, they will be pitted against a team from Group D, meaning they could face France, Tunisia, Denmark or Australia.* If Argentina win Group C, their round of 16 tie will be against the runners-up in Group D.* If Argentina finish runners-up in Group C, their round of 16 tie will be against the winners of Group D, potentially 2018 champions France. +Democrats also won the Governor’s office, State Senate, and appear poised to take the State Assembly, and voters affirmed abortion rights in the state. — Albert Sun Nov. 9, 2022 House districts rated as tossups have been called mostly in favor of Democrats so far, with one state as a glaring exception: New York. Republicans have won in four of five New York tossup seats, and the Republican candidate is ahead in the fifth. — Lauren Leatherby Nov. 9, 2022 More than 210 Republicans who questioned the 2020 election have won seats in the U.S. House and Senate and in state races for governor, secretary of state and attorney general, according to results as of 12 p.m. Eastern on Wednesday. Here’s who won › — NYT Graphics Nov. 9, 2022 While the race for Georgia’s senate seat remains extremely tight, the Governor’s race was decided last night. Brian Kemp gained more votes compared to Trump in 2020 all across Georgia, beating Stacey Abrams by a more than seven-point margin. — Lazaro Gamio Nov. 9, 2022 J.D. Vance won Ohio handily even as almost every part of the state voted more for Democrats than they did in 2020. — Lazaro Gamio Nov. +Democrats gained the Senate majority by winning both of Georgia’s January 5 runoff elections. Jon Ossoff and Rev. Raphael Warnock defeated Republican Sens. David Perdue and Kelly Loeffler, respectively, giving Democrats 50 seats and control with Vice President-elect Kamala Harris acting as the tie-breaker. In November, Biden became the first Democrat to win Georgia since Bill Clinton in 1992. +Prepare to watch Margot Robbie, Ryan Gosling, Issa Rae, and Simu Liu ham it up in Greta Gerwig's dreamscape. Come on Barbie, let’s go party! A new clip from Greta Gerwig's Barbie just dropped, and it looks like we won't be spending all of our time in the real world this weekend. As Margot Robbie (Barbie) tells America Ferrera, we're officially going to Barbieland. Still, everyone's favorite Mattel doll has her sights set on more than just a little fun. The preview may look like a candy-colored dreamland—but after she's leaves Barbieland, Barbie (and... Ken) go on an epic adventure to the human world in search of true happiness. Barbie is Gerwig's latest directorial endeavor, which she wrote alongside her partner, Noah Baumbach. Margot Robbie stars as Barbie—or, at least, one of the Barbies—and Ryan Gosling and his cursed platinum blonde hair will take on Ken.) The trailer begins with Barbie saying hello to her fellow dolls, while Ken vies for her attention. Then, we get all-too-brief glimpses of Robbie, Gosling, Issa Rae, and Simu Liu hamming it up in the Barbie-verse before Barbie and Ken decide to leave town. The movie hits theaters this Friday. +Rumours about Lipa's involvement in the film started in May 2022, so we're very pleased they became a reality (as real as Barbie gets anyway...). As for the line-up of Ken dolls, as well as Gosling, of course, three-time Emmy winner Will Ferrell is joined by the likes of Marvel's Simu Liu, new Doctor Who star Ncuti Gatwa, One Night in Miami...'s Kingsley Ben-Adir, and Grace and Frankie's Scott Evans. Following news that Robbie won't be the only star to play Barbie, Mackey revealed to Empire in July 2022 that outside of filming, the cast gathered for a slumber party. And it was a Barbie-only party for the actors who play the famed doll figure. 'Right in the beginning, we had a sleepover for the Barbies,' Mackey told the news outlet. Referring to co-stars Evans and Gatwa, she added that it 'would involve playing games with Scott and Ncuti'. Sharing details about the cast's fun moments away from set, Mackey admitted: 'I don't play games usually, because I get so competitive and angry. But Scott and I were top of the game.' She also spoke about her feeling towards playing Barbie in the film, saying: 'It's great to do comedy. Barbie is light and funny and silly and American and pink. +Tyler Adams will captain the US men’s national team into the 2022 FIFA World Cup, head coach Gregg Berhalter announced on the eve of Monday’s Group B opener vs. Wales (2 pm ET | FOX, Telemundo). The Leeds United midfielder and New York Red Bulls homegrown product will be the USMNT’s youngest captain since Walter Bahr at the 1950 World Cup. He’s already worn the armband nine times during 32 career international appearances. “We think he has great leadership capabilities,” Berhalter said of the 23-year-old Wappingers Falls, New York native. “He leads by his actions and his words.” FIFA requires teams to name a singular captain for the tournament; the USMNT were the last of 32 Qatar-qualified squads to complete that task. During Berhalter’s tenure, the USMNT have relied on a leadership council and rotating armband responsibilities. Chelsea forward Christian Pulisic and Nashville SC center back Walker Zimmerman were other leading candidates to be named captain. “A lot of credit to my teammates,” Adams said, “because anyone throughout our leadership council can wear that armband and represent us with pride and represent us in the right way." Adams debuted for the Red Bulls in 2016 before moving to Europe in the winter of 2019, then to German Bundesliga side RB Leipzig. +His emotional control and composure are a huge part of what he does.  "He is not afraid to 'carry the water', to do the dirty work, to really grind. His communication style is not all big speeches, it's very one-to-one. He listens as much as he talks. And he can communicate nonverbally, because people pick up on that better." Walker didn't instantly concur with the method Berhalter chose in allowing his players to pick the World Cup captain but says the coach "wore me down." He made the point that such a democratic way of choosing a leader only works if the culture of your group is strong. The longer this tournament progresses, the more united this USA squad appears. "Tyler is the perfect captain for this group," Walker added. "He is one of them. It is remarkable to think, he's the same age as (Jacksonville Jaguars quarterback) Trevor Lawrence. He's younger than (current Steelers QB) Kenny Pickett. He's younger than the Michigan punter. This could be an NCAA team by age, and their main leader reflects that." Christian Pulisic is the best-known U.S. player and has the nickname "Captain America" at Chelsea, but Adams' role and spot on the field are better suited to the captaincy. +Yahoo Finance unveils its 2022 Company of the Year: Costco. - Let's get to the top three things you need to know as the clock hits 9:00 AM. We've got the big reveal. Yahoo Finance has crowned the 2022 Company of the Year. We're going to bring you the details, plus interviews with top executives all day here at Yahoo Finance. You don't want to miss it. - Oh my. I wonder who it is. But first, a check on the markets. Futures are slightly in the red here to start the week after a better than expected jobs report on Friday casts doubt on how quickly the Fed can ease the pace of interest rate hikes. - Plus, stocks in Hong Kong and mainland China are in rally mode after local authorities took more steps to ease COVID-19 policies, giving hope of a full reopening in China. - But we begin today with my favorite story. The end of the year is upon us. And that means Yahoo Finance, we have unveiled or officially announced its 2022 Company of the Year. The land of $1.50 hot dogs and unmatched customer loyalty takes the crown this year. And you guessed it, it's Costco, folks. I flew out to the Costco stomping grounds in Washington to go inside the retailer's business. Here's what I learned. Costco has seen a lot since opening its first warehouse store in Seattle, Washington in 1983. +Shares soared in 2021, then plunged in 2022, and they’re now around where they were before the move into crypto. Block is back to Square 1. And when we picked Zoom (ZOOM) in 2020, we wondered whether the "meme" darling of the COVID lockdown era would maintain its momentum once COVID faded and people went back to work. Turns out, not. Zoom had an epic year in 2020, with the stock up nearly 400%. Since then, however, it’s down 87%%. Zoom out. Some COTY winners, though, are as influential as they were when we chose them, or more so. Nvidia (2016) is now one of the nation’s foundational tech companies, with microchips that power everything from video games to artificial intelligence. Amazon (AMZN), the winner in 2017, is still the dominant online retailer, though others are catching up—including Target (TGT), our 2019 winner. Microsoft (MSFT), our 2021 winner, has fallen back to earth like most tech companies this year, yet it powers ahead with a suite of terrific franchises. Preordained greatness is not one of our criteria for selecting the Company of the Year, so we don’t mind if some of our choices lose their luster after their moment of glory. +Copyright 2023 The Associated Press. All Rights Reserved. President Joe Biden speaks in the South Court Auditorium on the White House complex in Washington, Thursday, Dec. 8, 2022, about the infusion of nearly $36 billion to shore up a financially troubled union pension plan, preventing severe cuts to the retirement incomes of more than 350,000 Teamster workers and retirees across the United States. (AP Photo/Susan Walsh) President Joe Biden speaks in the South Court Auditorium on the White House complex in Washington, Thursday, Dec. 8, 2022, about the infusion of nearly $36 billion to shore up a financially troubled union pension plan, preventing severe cuts to the retirement incomes of more than 350,000 Teamster workers and retirees across the United States. (AP Photo/Susan Walsh) President Joe Biden speaks in the South Court Auditorium on the White House complex in Washington, Thursday, Dec. 8, 2022, about the infusion of nearly $36 billion to shore up a financially troubled union pension plan, preventing severe cuts to the retirement incomes of more than 350,000 Teamster workers and retirees across the United States. +Biden Celebrates $90 Billion Bailout of Private Union Pension Plans President Joe Biden jetted off to Cleveland on Wednesday evening to announce the official launch of a $90 billion bailout of union retirement plans—one that's completely paid for with federal borrowing. The bailout was approved last year as part of the American Rescue Plan, the $1.9 trillion emergency spending bill that was ostensibly meant to combat COVID-19 but included an impressive array of spending that had nothing to do with public health. The bailout will direct funds to more than 200 nearly insolvent multiemployer pension plans, which are established jointly by unions and the private companies that contract with them through collective bargaining agreements. "With today's actions, millions of workers will have the dignified retirement they earned and they deserve," Biden told the cheering crowd at a Cleveland high school. Millions of union workers, that is. If you're not part of that select club, there's no bailout coming your way—even as a sagging economy eats into private retirement savings, inflation makes every saved dollar worth less, and Social Security looms on the brink of insolvency. Oh, and you'll have to pay back (with interest!) the money borrowed to make this bailout (and the rest of the American Rescue Plan) possible. Sounds like a great deal, right? +NCAAF 47 USC quarterback Caleb Williams won the 2022 Maxwell Award on Thursday, given to the best player in college football. Here’s what you need to know: Williams was the best quarterback in America this season, so the Maxwell Award was deserved. Williams led USC’s turnaround from a four-win team to a top-10 squad in 2022 and elevated the players around him. Now his sights turn to Saturday night and the Heisman Trophy. — Morales Duggan’s story has been one of the best in college football, starting TCU’s season as the backup quarterback before leading the Horned Frogs to a 12-0 start. His toughness and perseverance helped pull the Frogs out of multiple second-half deficits and without his poise, leadership and production late in games, TCU wouldn’t be in the College Football Playoff. Winning the O’Brien and being a Heisman finalist are both well-deserved honors for Duggan. — Khan  Chuck Bednarik Award – Defensive Player of the Year Biletnikoff Award – Outstanding Receiver Lou Groza Collegiate Place-Kicker Award – Outstanding Kicker Ray Guy Award – Punter of the Year Maxwell Award – Player of the Year Davey O’Brien National Quarterback Award – Best Quarterback Outland Trophy – Most Outstanding Interior Lineman Paycom Jim Thorpe Award – Best Defensive Back Doak Walker Award – Premier Running Back (Photo: Gary A. +NOTE: CollegeFootballPoll.com's Dave Congrove is a voter for the Maxwell and Bednarik awards, two of the most prestigious individual awards in college football. The Maxwell Football Club today announced its watch list for the 86th Maxwell Award presented annually to the outstanding player in college football. The Maxwell Award has been presented to the College Player of the Year since 1937 and is named in honor of Robert “Tiny” Maxwell who was a former standout at the Swarthmore College and a renowned sports writer and football official. The Maxwell Award watch list will once again incorporate a broad spectrum of Football Bowl Subdivision (FBS) programs and conferences from coast to coast, led by Bryce Young (Alabama) who was the 2021 winner. Young is joined by 7 additional returning semifinalists, Grayson McCall (Coastal Carolina), C.J. Stroud (Ohio State), Tanner Mordecai (SMU), Sean Tucker (Syracuse), Bijan Robinson (Texas), Brennen Armstrong (Virginia) and Sam Hartman (Wake Forest). The full list consists of 85 players with Ohio State having 3 candidates and an additional 14 schools having two players represented. Young joins A.J. McCarron, Derrick Henry, Tua Tagovailoa and DeVonta Smith as the fifth Crimson Tide player to be selected as the Maxwell Award winner. +1934: Egypt, 1970: Morocco, 1974: Zaire, 1978: Tunisia, 1982: Algeria & Cameroon, 1986: Algeria, 1990: Egypt, 1994: Cameroon & Morocco, 1998: Cameroon, Morocco, South Africa & Tunisia, 2002: Cameroon, Nigeria, South Africa & Tunisia, 2006: Angola, Ivory Coast, Togo & Tunisia, 2010: Algeria, Cameroon, Ivory Coast, Nigeria & South Africa, 2014: Cameroon, Ivory Coast & Ghana, 2018: Egypt, Morocco, Nigeria, Senegal & Tunisia, 2022: Cameroon, Ghana & Tunisia Egypt were the first team from Africa to play at the World Cup — losing 4-2 to Hungary in the first round in Italy in 1934. Including their elimination, African teams have fallen in the first round 38 times. However, even when African sides have bowed out early it has rarely been without incident. Some notable highlights have been Zaire reportedly not knowing the rules for a free kick in 1974, Roger Milla dancing by the corner flag in 1990 and South Africa’s Siphiwe Tshabalala’s opening goal in the 2010 tournament — the only one to be held in Africa — resulting in a continent exploding in joy. +1990: Cameroon, 2002: Senegal, 2010: Ghana Three African teams have gone out in the quarter-finals of the World Cup and all did so in painful fashion. Cameroon became the first African side to make the last eight in Italy in 1990. They stunned defending champions Argentina in the tournament’s opening game at the San Siro and that momentum saw them go on and top a group also containing Romania and the Soviet Union. They then beat Colombia 2-1 in extra time in the round of 16, with a 38-year-old Milla scoring a brace to sink the South Americans. With the continent in dreamland, the Indomitable Lions took on England in the quarter-finals. David Platt scored for England in the first half, before Emmanuel Kunde equalised from the spot in the 61st minute. Four minutes later Eugene Ekeke gave Cameroon the lead and the world was 25 minutes from a first African semi-finalist. However, Gary Lineker equalised from the penalty spot and then won it in extra time with another penalty. Cameroon were out but had taken a continent on the journey of a lifetime. Advertisement Senegal followed in Cameroon’s footsteps in 2002 in South Korea and Japan — in more ways than one. They beat the defending champions (France) in the tournament’s opening game on their way to qualifying for the knockout stages. +Frontline workers, advocates, scientists, Young Wonders and everyday people were saluted and 8 nonprofit organizations working to tackle these issues were highlighted. Each organization received $10,000 and viewers were encouraged to donate to these vetted, trusted organizations. [20] In lieu of the traditional Top 10 and CNN Hero of the Year, the 2020 edition saw viewers selecting the year's Most Inspirational Moments. [21] The nonprofit organizations highlighted included: The 3 Young Wonders of 2020 (in alphabetical order): The 15th Annual CNN Heroes All-Star Tribute returned to the long-running shows' traditional format honoring the Top 10 CNN Heroes of 2021 with viewers voting online for the CNN Hero of the Year. Shirley Raines was selected as the 2021 CNN Hero of the Year. Honorees included: Young Wonders recognized included: The 16th Annual CNN Heroes: An All-Star Tribute premiered live on Sunday December 11th, 2022. Nelly Cheboi was selected by viewers as the 2022 CNN Hero of the Year. Honorees included: Young Wonders recognized included: In 2022, the program was honored with the News & Documentary Emmy Award for Outstanding Live News Special for its 2021 15th Annual Show. +Subscribe to CNN Press Room Email Updates VOTING TO SELECT THE ‘CNN HERO OF THE YEAR’ BEGINS TODAY AT CNNHEROES.COM   HOSTED BY ANDERSON COOPER AND KELLY RIPA  THE 16th ANNUAL CNN HEROES: AN ALL-STAR TRIBUTE WILL AIR LIVE SUNDAY, DECEMBER 11TH AT 8PM ET Top 10 CNN Heroes:  http://bitly.ws/wcpA  One hero helps fellow veterans heal the wounds of war through art and music, another upcycles tech to teach Kenya’s next generation, while another leads teams of medics into global hotspots. They help immigrants and refugees build new lives in the US, teach people how to grow and prepare their own healthy food, and give aging seniors peace of mind by caring for their beloved pets. These are just some of the ways in which this year’s Top 10 CNN Heroes have dedicated their lives to changing the world. The 2022 Top 10 CNN Heroes were revealed today by Anderson Cooper on CNN This Morning. The Peabody and Emmy Award-winning campaign honors individuals who are making extraordinary contributions to help improve the lives of others. Cooper will be joined again this year by Kelly Ripa as co-host of CNN Heroes: An All-Star Tribute. +Hopefully, some of the student body will come and check us out and cheer us on, as well.” The No. 1 seeded BU men’s lacrosse team will play No. 5 seeded Loyola Maryland in the Patriot League semifinal Friday, May 5, at 4 pm on Nickerson Field. The other semifinal game, between No. 2 seeded Army West Point and No. 3 seeded Lehigh will take place at 7 pm Friday on Nickerson Field. The winners of both games will meet in the championship game on Sunday, May 7, at noon on Nickerson Field. All games are free for students with a Sports Pass. Admission to both semifinal games for those without a Sports Pass is $8. Admission to Sunday’s championship game for those without a Sports Pass is $8. Packages for all three games are $12. Free tickets are available for BU faculty and staff who register in advance here. All games will be streamed via CBS Sports Network. Men’s Lacrosse Looks for Patriot League Championship Repeat Charles Moore (COM’24) is pursuing a degree in journalism with a minor in history. He works in the Worcester Red Sox front office and is the Head Delegate for BU's competitive Model United Nations Team. Charles is from Wayland, MA., and has seen a home game of all 30 Major League Baseball teams. He can be reached at csm6@bu.edu. Profile +Game Recap: Men's Lacrosse | May 06, 2023 vs. Loyola University Maryland (Championship Game) 5/7/2023 | 12:00 PM CBS Sports Network vs. Loyola University Maryland (Championship Game) 5/7/2023 | 12:00 PM CBS Sports Network Thanks for visiting ! The use of software that blocks ads hinders our ability to serve you the content you came here to enjoy. We ask that you consider turning off your ad blocker so we can deliver you the best experience possible while you are here. Thank you for your support! +   (WASHINGTON)—The John F. Kennedy Center for the Performing Arts will present the 24th Mark Twain Prize for American Humor to Adam Sandler on March 19, 2023 in the Kennedy Center Concert Hall. The Prize, which is named to honor one of the world’s greatest humorists, will be awarded at a gala performance featuring some of the biggest names in comedy. Broadcast details will be announced at a later date. The Mark Twain Prize for American Humor recognizes individuals who have had an impact on American society in ways similar to the distinguished 19th-century novelist and essayist Samuel Clemens, best known as Mark Twain. As a social commentator, satirist, and creator of characters, Clemens was a fearless observer of society, who startled many while delighting and informing many more with his uncompromising perspective on social injustice and personal folly. “Adam Sandler has entertained audiences for over three decades with his films, music, and his tenure as a fan favorite cast member on SNL,” said Kennedy Center President Deborah F. Rutter about this year’s recipient. “Adam has created characters that have made us laugh, cry, and cry from laughing. I am looking forward to a laughter-filled evening like no other as we celebrate his career at a ceremony that is sure to bring together the best in comedy. +Read More The inaugural Mark Twain Prize was presented to Richard Pryor during the first annual Kennedy Center Celebration of American Humor, October 20, 1998. The event was created by the John F. Kennedy Center for the Performing Arts, Bob Kaminsky, Peter Kaminsky, Mark Krantz, and John Schreiber and is televised annually. The Kennedy Center is grateful to Cappy McGarr for his steadfast support of the Mark Twain Prize for American Humor since its inception. Previous recipients of the Mark Twain include Richard Pryor (1998), Jonathan Winters (1999), Carl Reiner (2000), Whoopi Goldberg (2001), Bob Newhart (2002), Lily Tomlin (2003), Lorne Michaels (2004), Steve Martin (2005), Neil Simon (2006), Billy Crystal (2007), George Carlin (2008), Bill Cosby (2009, rescinded in 2018) Tina Fey (2010), Will Ferrell (2011), Ellen DeGeneres (2012), Carol Burnett (2013) Jay Leno (2014), Eddie Murphy (2015), Bill Murray (2016), David Letterman (2017), Julia Louis-Dreyfus (2018), Dave Chappelle (2019), and Jon Stewart (2022). Explore artist pages below. New Videos Added! +The NCAA had four major priorities in it search for a new president to look after college athletics. It wanted a former college athlete, an exec passionate about higher education, an established corporate leader and a savvy politician who knows how to get things done in government. The governing body found all of those traits and more in Massachusetts Gov. Charlie Baker, a former Harvard basketball athlete and avid sports fan. The NCAA announced today that it has selected the two-term governor to be its next president. Baker will replace outgoing NCAA President Mark Emmert starting March 1. His second term as governor is slated to conclude Jan. 5; he announced about a year ago that he wouldn’t seek a third term. Emmert will stay on as an adviser through June. The NCAA’s choice of Baker, 66, signifies the association’s desire to have a leader who is well-versed in the ways that Washington, D.C., works. With the NCAA facing so many legal and legislative challenges, the board of governors, who made the hire, focused on someone from the political arena early in the process and Baker emerged as the candidate with the experience and expertise to navigate the governmental and athletic worlds that often collide in college sports. When asked why he wanted the job, Baker replied, “Because it’s worth doing. Yeah, it’s big and complicated, but so have been a lot of things in my life.“ Baker represents the first NCAA leader who doesn’t have a background in college athletics or higher education. +Play Now Football Pick'em Play Now College Pick'em See who to add and drop PGA Tour and beyond The first issue for the next NCAA president: What is the association even going to look like for Mark Emmert's successor? That's the key question in assembling a list of candidates to replace Emmert, who announced Tuesday that he's resigning effective June 2023. The NCAA he is leaving behind is in a bit of shambles. There must be some certainty before the next leader evaluates what they are getting into. That's why it's probably wise to have a lengthy timeline. The NCAA is in the middle of reconstructing its constitution. The association is losing its grip on the FBS. The next president may literally be a glorified liaison to Congress. Point being: if Congress has oversight over name, image and likeness, it isn't going to stop there. Emmert's successor cannot be bogged down in minutiae. Running the NCAA in the future will have to be about appeasing the Power Five. If not, those schools have the means to break off on their own. First, history would suggest the NCAA has to lean away from hiring a school president as its next leader. Dick Schultz (1988-93), the former Virginia president, was run out in scandal. +Copyright 2023 The Associated Press. All Rights Reserved. Elon Musk said Thursday he has found a new CEO for Twitter, or X Corp. as it’s now called — and it’s a woman. He did not name her but said she will be starting in about six weeks. In February, he told a conference he anticipated finding a CEO for San Francisco-based Twitter “probably toward the end of this year.” (May 11) Elon Musk confirmed that the new CEO for Twitter will be NBCUniversal’s Linda Yaccarino, an executive with deep ties to the advertising industry. “I am excited to welcome Linda Yaccarino as the new CEO of Twitter!” Musk wrote in a Friday tweet. He added that Yaccarino “will focus primarily on business operations” while Musk will stay closely connected to product design and new technology. Before that announcement, NBCUniversal said Friday that Yaccarino would step down immediately as chairwoman for global advertising and partnerships. Musk, who bought Twitter last fall and has been running it since, has long insisted that he would step down as top executive at the company, which is now called X Corp. Few expect Musk to remove himself from the decision making process at Twitter, however. “While he’s stepping back from the CEO title, Musk is far from likely to step back from calling the product shots,” said Mike Proulx, research director at Forrester Research. +160] Twitter named former Goldman Sachs executive Anthony Noto as the company's CFO in July 2014, with an "annual salary of $250,000 and one-time restricted stock options of 1.5 million shares ... valued at $61.5 million".[161] On June 10, 2015, Twitter announced its CEO Dick Costolo would resign on July 1, 2015.[162] Noto was said to be considered a potential replacement for outgoing CEO Costolo.[163] On October 14, 2015, former Google chief business officer Omid Kordestani became executive chairman, replacing Dorsey who remains CEO.[164] On January 26, 2016, Leslie Berland, former executive vice president of global advertising, marketing, and digital partnerships at American Express, was named chief marketing officer.[165] In November 2016, COO Adam Bain announced his resignation and CFO Anthony Noto took over Bain's role.[166][167] A month later, on December 20, 2016, CTO Adam Messinger announced that he too was leaving.[168][169] In February 2020, it was reported that Elliott Management Corporation had acquired a stake in Twitter, with activist shareholder and Republican Party supporter Paul Singer expected to seek the removal of Dorsey as CEO.[170] Twitter agreed to appoint a new independent director and two new board members, and to perform $2 billion in share buybacks. +With Daniel Alegre on board, Yuga Labs is expected to ramp up its metaverse efforts. Previously, he held leadership positions at Google, Activision Blizzard and Bertelsmann. Yuga Labs, the company behind the Bored Ape Yacht Club (BAYC) and CryptoPunks nonfungible token (NFT) collections, has a new CEO, Daniel Alegre. The executive resigned as president and chief operating officer of the gaming giant Activision Blizzard to join the NFT startup on April 1. “Couldn’t be more excited for this next chapter,” he wrote on Twitter. Alegre was a crucial player in Activision Blizzard’s growth in recent years, overseeing popular gaming franchises like Call of Duty, World of Warcraft, Diablo and Candy Crush. Today is my last day as President and COO of Activision Blizzard. Thank you to the incredible teams who create truly epic games. Tomorrow I officially start at CEO of Yuga Labs. Couldn't be more excited for this next chapter. pic.twitter.com/eo3RfIyz0q The executive has been involved in the gaming, entertainment and technology industries for many years. +What Yuga Labs wants to build after raising $450M +(Photo by Jordan Strauss/Invision/AP) “ Avatar: The Way of Water ” didn’t make quite as big of a splash as many assumed it would, but James Cameron’s big budget spectacle still helped breathe life into the box office this weekend. The sequel earned $134 million from North American theaters and $300.5 million internationally for a $434.5 million global debut, according to studio estimates on Sunday. It tied with “The Batman” as the fourth highest domestic debut of the year, behind “Doctor Strange in the Multiverse of Madness” ( $187.4 million in May ), “Black Panther: Wakanda Forever,” ( $181 million in November ) and “Thor: Love and Thunder” ($144.2 million in July). Expectations were enormous for “Avatar 2,” which carried a reported price tag of over $350 million, the pressure of following up the highest grossing film of all time (thanks in part to various re-releases) over a decade later and the daunting task of propping up an exhibition business that’s still far from normal. Everything “Avatar” is oversized, though: the Na’vi characters, the runtime (a staggering three hours and 12 minutes), the technical advancements and the release strategy from 20th Century Studios and The Walt Disney Co. Going into the weekend many were expecting a domestic debut of at least $150 million. +James Cameron’s highly anticipated Avatar: The Way of Water earned $53 million in its opening day release in the U.S., almost double the opening day success of its blockbuster predecessor, although it’s only the sixth-best film opening this year, and Cameron needs it to be a huge blockbuster to justify its nine-figure budget. 'Avatar: The Way of Water' made $53 million in its opening day release. The Disney and 20th Century Studios sequel to 2009’s Avatar—the highest-grossing film of all time—opened in more than 4,200 theaters this weekend, collecting $17 million in Thursday previews and another $36 million on Friday, Variety reported—nearly double the $26.7 million the first Avatar made on its opening day. Deadline projects it to make between $130 million and $150 million domestically this weekend, short of the $150 million to $170 million it had been projected to make. It falls short of the initial success of four Marvel and DC Comics sequels released earlier this year: Doctor Strange in the Multiverse of Madness, which made $90.7 on its opening day, as well as Black Panther: Wakanda Forever ($84.2 million), Thor: Love and Thunder ($69.5 million) and The Batman (56.6 million). It was also narrowly edged out by Jurassic World Dominion, another sequel in the rebooted Jurassic Park franchise, which made $59.5 million on its opening day. +LOS ANGELES (Apr. 6, 2023) – SQUARE ENIX® today announced that the beloved FINAL FANTASY® pixel remaster series, previously only available on Steam® and mobile platforms, is launching digitally for PlayStation®4 (PS4™) console and Nintendo Switch™ system on April 19, 2023*. The pixel remaster series which comprises of FINAL FANTASY I through FINAL FANTASY VI, brings all the magic of the originals combined with quality-of-life upgrades while staying faithful to the retro design of these masterpieces.   Watch the FINAL FANTASY Pixel Remaster | PS4 & Nintendo Switch Release Date trailer here.   In FINAL FANTASY pixel remaster series, players can expect some unique features for PlayStation 4 and Nintendo Switch version, including the option to switch between the rearranged and original-based soundtrack for the game, as well as a choice of in-game fonts – players can now opt to play using the game’s default font or a pixel-based font. Additionally, PlayStation 4 and Nintendo Switch players can also expect additional boost features to expand gameplay options, including switching off random encounters and adjusting experience gained multipliers between 0 and 4. All six titles in the FINAL FANTASY pixel remaster series will be available to digitally purchase individually or as a complete series in the FINAL FANTASY I-VI BUNDLE from PlayStation™ Store or Nintendo eShop. +LOS ANGELES (Dec. 19, 2022) – SQUARE ENIX® today revealed that the beloved FINAL FANTASY® pixel remaster series, previously only available on Steam® and mobile platforms, is launching on PlayStation®4 (PS4™) and Nintendo Switch™ in Spring 2023. The pixel remaster series brings all the magic of the originals combined with quality-of-life upgrades while staying faithful to the retro design of these masterpieces.   The digital version of all six titles in the FINAL FANTASY pixel remaster series, FINAL FANTASY I through FINAL FANTASY VI, can be purchased individually or as a bundle. Available in limited quantities, the newly announced physical edition of FINAL FANTASY I-VI PIXEL REMASTER -FF35th Anniversary Edition- includes:   © 1987, 1988, 1990, 1991, 1992, 1994, 2022 SQUARE ENIX CO., LTD. All Rights Reserved. LOGO ILLUSTRATION: © 1991, 1992, 1994, 2006, 2007 YOSHITAKA AMANO                                     FINAL FANTASY, the FINAL FANTASY PIXEL REMASTER logo, DRAGON QUEST, SPACE INVADERS, SQUARE ENIX, the SQUARE ENIX logo and TAITO are registered trademarks or trademarks of the Square Enix group of companies. +[1/2]Guillermo del Toro accepts the Oscar for Best Animated Feature Film for "Guillermo Del Toro's Pinocchio" during the Oscars show at the 95th Academy Awards in Hollywood, Los Angeles, California, U.S., March 12, 2023. REUTERS/Carlos Barria By Danielle Broadway LOS ANGELES, March 12 (Reuters) - Mexican filmmaker Guillermo del Toro's "Pinocchio" won the Academy Award for best animated feature film on Sunday, the third Oscar of his career. The haunting stop-motion musical fantasy was inspired by the 1883 Italian novel "The Adventures of Pinocchio" by Carlo Collodi, and informed by Gris Grimly's illustrations of the 2002 edition of the book. Del Toro, 58, reimagines the classic story of Pinocchio, a wooden puppet who dreams of being a real boy, who is cared for by carver Geppetto. However, the story of the Netflix Inc (NFLX.O) film is set in Fascist Italy during the interwar period and World War Two. "Pinocchio" prevailed over other popular nominees A24's stop-motion film "Marcel the Shell With Shoes On" and the Walt Disney Co (DIS.N) 3D animated film "Turning Red." Del Toro has many accolades, including his 2018 Oscar wins for best picture and best director for "The Shape of Water. +Even though 'Puss In Boots: The Last Wish' put up quite a fight, 'Pinocchio' has dominated the circuit By Clayton Davis Senior Awards Editor Variety Awards Circuit section is the home for all awards news and related content throughout the year, featuring the following: the official predictions for the upcoming Oscars, Emmys, Grammys and Tony awards ceremonies, curated by Variety senior awards editor Clayton Davis. The prediction pages are Davis’ assessment of the current standings of the race and do not reflect personal preferences for any film or performance. Like any organization or body that votes, each individual category is fluid and subject to change. Predictions are updated every Thursday. LAST UPDATED: March 9, 2023 CATEGORY COMMENTARY: We don’t need to entertain this any further. Netflix’s “Guillermo del Toro’s Pinocchio” has won every possible award for animation on its march to the 95th Oscars ceremony, including the Annies, ACE and PGA awards. Guillermo del Toro will be the first person, and Latino, to have Oscars for best picture, director and animation, along with Netflix becoming the first streamer to win this category. He previously won statuettes for “The Shape of Water” (2017). Everyone loves Guillermo! +2022 YG is a near-Earth asteroid and a potential quasi-satellite of Earth, discovered by amateur astronomer Gennadiy Borisov at Nauchnyi, Crimea on 15 December 2022. It has an estimated diameter of 16–30 meters, given H of 26.6, and an albedo 4-15%.[a] This near-Earth asteroid-related article is a stub. You can help Wikipedia by expanding it. +Our planet has a strong gravitational connection with the Moon. But sometimes the gravity of the Earth can also capture small asteroids, which then remain for a certain period of time, orbiting us as a kind of temporary moon. This has happened at least twice this century: “mini-moons” have remained in Earth’s orbit for several years or even less. But the newly discovered asteroid 2022 YG has probably been trapped in gravity for several decades. An interesting space rock was first observed on December 15, 2022. Interestingly, one of the first to notice it was amateur astronomer Henadii Borisov from Crimea, also known for the discovery of the first known interstellar comet, which now bears his name.  Asteroid 2022 YG, as it is originally catalogued, has a diameter of 16-30 meters. Early computer models of its orbit showed that it completed a total orbit of the Earth in one year. Moreover, this has been happening since about 1961. The simulation showed that the quasi-moon will continue to orbit the Earth until 2181, when it can finally free itself from the gravity of the Earth. Visualization of the orbital data for the year 2022 YG also shows that it takes a strange path around our planet, stretching into an elongated ellipse in one direction, then migrating back to a rounder orbit and stretching again in the other direction before the whole cycle repeats. +The 2022 Peach Bowl was a college football bowl game played on December 31, 2022, at Mercedes-Benz Stadium in Atlanta, Georgia. The 55th annual Peach Bowl and one of the two College Football Playoff semifinals, the game featured two of the four teams selected by the College Football Playoff Selection Committee—Georgia from the Southeastern Conference (SEC) and Ohio State from the Big Ten Conference. Georgia won, 42–41, when Ohio State kicker Noah Ruggles' potential game-winning 50-yard field goal with 3 seconds left in the game sailed wide left. Georgia advanced to face the winner of the Fiesta Bowl, TCU, in the 2023 College Football National Championship at SoFi Stadium in Inglewood, California on January 9, 2023. The game began at 8:21 p.m. EST[3] and was aired on ESPN.[4] It was one of the 2022–23 bowl games concluding the 2022 FBS football season. Sponsored by restaurant chain Chick-fil-A, the game was officially known as the College Football Playoff Semifinal at the Chick-fil-A Peach Bowl. The game featured Georgia, undefeated champion of the Southeastern Conference (SEC), and Ohio State, a one-loss team from the Big Ten Conference selected at-large by the College Football Playoff (CFP) committee. +Learn More Buy Tickets Your independent guide to the best live sports in Atlanta! This website is operated by a ticket broker.Ticket prices are set by third-party sellers and may be above or below face value.We are not affiliated with nor endorsed by the Peach Bowl. The Peach Bowl 2023 game is returning to Mercedes-Benz Stadium in Atlanta, GA on December 30th!  We don't know yet who will receive invitations to this year's game, but if you live in the Atlanta area, you can get your tickets early and join in on a great football game. Check out the links below for more info about this year's game, and visit regularly for updates.  And be sure to score your Peach Bowl 2023 Tickets soon, before the best ones sell out! Chick-fil-A Peach BowlMercedes-Benz StadiumAtlanta, GA Friday, August 11th, 20238:00 PM Saturday, August 12th, 20238:00 PM Monday, August 14th, 20238:00 PM Friday, August 18th, 20237:30 PM Thursday, August 24th, 20237:30 PM Saturday, August 26th, 20237:30 PM Wednesday, August 30th, 20237:30 PM Friday, September 1st, 20237:30 PM Saturday, September 9th, 2023 +Jan 9, 2023 TEMPE, Arizona — No. 16 Michigan Tech won the 2023 Desert Hockey Classic with a 3-2 victory over No. 6 Boston University Saturday at Mullett Arena. The Huskies jumped out to a 3-0 first-period lead and held on for their third regular season tournament championship under Coach Shawhan. “It was goaltending, goaltending, goaltending,” said Shawhan. “Blake gave us a chance. We scored enough in the first and held on. I couldn’t be prouder of this group. They keep finding a way.” Blake Pietila was named tournament MVP after stopping 31 shots in the title game and 24 in the semifinal win over the host Arizona State. “It feels good after coming off the GLI and our rough showing in the first game,” Blake Pietila said. “We knew that we had to stick to our game plan tonight. They’re a fast-transitioning team, so we had to stick to our (defensive) zone coverage like we’ve done all year.” Tech scored all of its goals in the opening period. Logan Pietila gave the Huskies the lead 7:06 into the game. Jed Pietila fed Logan backdoor through traffic, and he corralled the pass and flipped in his fifth goal of the season. +The Huskies return to the Desert Hockey Classic for the second time after winning the tournament in January 2016. Tech plays at Arizona State on January 6 and wraps up the tournament against either Air Force or Boston University. January continues by hosting St. Thomas on January 13-14. The Huskies travel to Ferris State for their only regular-season meeting with the Bulldogs the next weekend (Jan. 20-21). The Huskies and Wildcats meet to wrap up the month. The rivalry takes place Friday in Houghton and Saturday in Marquette. The final month of the regular season begins at Bemidji State on February 3-4. Bowling Green comes to town for the annual Winter Carnival series on February 10-11. The regular season wraps up at Minnesota State on February 24-25. The top four teams after the regular season will host the opening round of the CCHA Mason Cup Playoffs on March 3-5 with a best-of-three series. Both semifinals (Mar. 11) and the CCHA Championship Game (Mar. 18) will be played as a single game at the highest remaining seed. The NCAA Tournament opens play on March 23-25 with regional sites in Allentown, Pa, Bridgeport, Conn., Fargo, N.D., and Manchester, N.H. The 2023 Frozen Four is set to take place at Amalie Arena in Tampa, Fla. +Microsoft will introduce a new, lower-cost tier of Microsoft 365, its product family of productivity software, collaboration and cloud-based services, starting on January 30. Called Microsoft 365 Basic and priced at $1.99 per month or $19.99 per year, the plan will initially include 100 GB of storage, Outlook email and access to support experts for help with Microsoft 365 and Windows 11. Existing OneDrive 100 GB subscribers will be transitioned to Microsoft 365 Basic beginning January 30 as well, Microsoft says. And in the coming months, Microsoft 365 Basic plan members will get “advanced security features” like ransomware recovery and password-protected sharing links in OneDrive. Importantly, Microsoft 365 Basic is not replacing the free Microsoft 365 tier. That’s here to stay, along with the same benefits it offers today, including access to the web-based versions of Word, Excel, PowerPoint, OneNote, Outlook, OneDrive, Clipchamp and more, and 5 GB of cloud storage. Microsoft 365 Personal, meanwhile, will remain $6.99 per month or $69.99 per year. Microsoft 365 plans. Image Credits: Microsoft Microsoft 365 plans. Image Credits: Microsoft Microsoft 365 Basic compares favorably in terms of pricing to rival Google Workspace, whose Individual plan starts at $9.99 per month for 1 TB of storage, professional support and Google’s standard productivity software (e.g. +$12.50 $12.50 user/month (Annual subscription–auto renews)1 Originally starting from $22.00 now starting from $22.00 $22.00 $22.00 user/month (Annual subscription–auto renews)1 Originally starting from $8.25 now starting from $8.25 $8.25 $8.25 user/month (Annual subscription–auto renews)1 Visio: Flowchart software. Different plans available Project: Project management software. Different plans available Microsoft 365 is the productivity cloud designed to help everyone achieve what matters, in their work and life, with best-in-class Microsoft 365 apps, intelligent cloud services, and advanced security. Install Microsoft 365 apps on up to five PCs or Macs, five tablets, and five mobile devices. Hybrid Windows devices, such as the Microsoft Surface Pro, count as either a PC or a tablet. All major credit cards are accepted. When paying with a credit card, your subscription amount will appear on your credit card statement. Existing customers may be eligible to pay by invoice and can contact support to check their eligibility for this payment method. Learn more about paying by invoice. For Microsoft 365 business plans, depending on your choice of service, you'll be billed monthly or annually. +Calvin Fox PRICE-Our loving father (daddy), grandpa, grandpa-great, uncle and friend, Calvin Edgar Fox, age 96, passed away January 18, 2023, with his daughter (Daddy’s little girl) holding his hand.  The last special moment shared between a father and daughter. Calvin was born on August 27, 1926, in Hebron, Illinois to Vivian Mae Peck and Ivan Fox.  He married Ada Wallace the love of his life, on November 25, 1949, in South Miami, Florida.  They had three sons and one daughter (born on Father’s Day) that they loved so very much. He proudly served his country in the US Navy during World War II from 1944-1948, then served ten years in the reserves.  Calvin worked for Utah Power & Light/PacifiCorp at the Carbon Power Plant and later retired from the Hunter Power Plant. Calvin was a man that loved God and Jesus.  A Christian with steadfast faith, even through all his pain and suffering he never faltered.  He was very proud and full of love for his children, grandchildren and great-grandchildren.  He would brag about them every chance he got.  Everyone will miss his hugs and genuine love for everyone.  If you knew him you got his hugs, and he would always leave you with “God bless you, Lord be with you. +He will be extremely missed by his family and a community of friends, many that were adopted as sons or #2 daughters, he loved you. Calvin is survived by his children, Charles (Patsy) Fox, Las Vegas, NV, Janet (Larry) Roberts, Carl (Jamie) Fox, both of Price; stepdaughter, Laurie Hall, Colorado; grandchildren, Chuck (Yukiko) Fox, Casey (Peggy) Fox, Christi Fox and David Bass, Shannon (Todd) Wahlquist, Trevor (Ashley) Roberts, Chuck (Tracy) Roberts, Tyrel (Crystal) Fox, Carley Fox, Tye (Lauren) Gourley, Paige Gourley and Austin, Trina Hiett, John Neputi; 25 great-grandchildren, many nieces and nephews. Preceded in death by his parents, Ivan and Vivian Mae Fox; his wife, Ada Wallace of 44 years, their four-year-old son, Little Ricky; four sisters, Gwen, Marguerite, Doloris and baby sister Betty June; his second wife, Bunny Sherman Fox; third wife, Marilyn Bennett Fox; and great-grandson, Dillon Gordon. Funeral service, Friday, January 27, 2023, 2:00 p.m., at Mitchell Funeral Home (233 East Main Street) in Price where the family will receive friend one hour prior to service. +Trending TV, movie and anime news, plus reviews and analysis. As Zack Snyder’s sci-fi epic Rebel Moon heads to Netflix, here’s everything you need to know from its release date and trailer to cast, plot, and more. Director Zack Snyder is known for his stint in the DCEU, with movies such as Man of Steel, Batman v Superman, and Zack Snyder’s Justice League. Now, after leaving the DCEU behind, Snyder has teamed up with Netflix for an assortment of projects, including Army of the Dead and the forthcoming Rebel Moon. The movie has already drawn comparisons to that of the Star Wars franchise and is shaping up to be one of 2023’s hottest blockbusters, and a major holiday hit for the streaming platform. So, if you’re like us, you’ll want to be updated with all things Rebel Moon. Here’s everything you need to know. Rebel Moon will premiere on Netflix on December 22, 2023. The two-part space epic began filming on April 19, 2022, and wrapped on December 2. Filmed back-to-back, Zack Snyder’s foray into space warfare will also be released in theaters for a limited time. Initially, the early concept for the film was pitched as an Akira Kurosawa-inspired adventure to Star Wars executives during the prequel era, but ultimately transformed into the Netflix space opera we know today. +Zack Snyder’s epic space fantasy Rebel Moon is coming to Netflix this year. From the mind of Zack Snyder comes Rebel Moon — and we’re getting a sneak peek. In an action-packed new teaser that debuted at Netflix’s Tudum: A Global Fan Event, fans finally got a chance to feast their eyes on the visionary auteur’s eagerly awaited new sci-fi fantasy epic. “I thought I knew what a big movie was until I came onto this,” says one of the film’s stars, Ed Skrein, amidst an eye-candy assault of behind-the-scenes footage that includes wild green-screen battles, grueling weapons training and fiery explosions. Front and center in the new featurette are star Sofia Boutella and director Snyder himself, who says that he has been dreaming up the Rebel Moon universe for more than two decades.  The details on the blockbuster are still hush-hush, but here’s what we know: A small peaceful colony on the outskirts of the galaxy is targeted by the insidious Imperium (embodied by a deliciously evil Skrein). But they won’t be facing down the forces of darkness on their own. A team of intrepid warriors will soon come to their aid and turn the tide against the interplanetary interlopers. +Paramount's latest installment in the Scream franchise released in theaters on March 10, and now Scream 6 is available to stream online If you’re looking for a frightfully delightful horror movie, you will want to know where to watch Scream VI, the latest installment in the popular Scream franchise. The film was released in theaters on March 10. Ever since the first movie's release in 1996, the Scream franchise has proven to be a great success among horror fans. The franchise has branched into six films, a television series, and video games. After a break in 2011, the Scream franchise returned to the silver screen in 2022. As of April 2023, the sixth movie has grossed over $169 million at the box office. With new and returning cast members and a new twist on the tale, critics and audiences are already labeling Scream VI as a new re-ignition of the franchise and a frightfully thrilling delight for fans of the horror genre. Scream VI has joined the rest of the films in the franchise for streaming on Paramount Plus. It was released for streaming on Paramount Plus on April 25. You can also watch the rest of the franchise on Paramount Plus. It is also available to watch on Prime Video with a subscription to the Paramount Plus, or to rent or buy. +63][64] The marketing campaign also included the launch of a website that allowed American users to receive personalized phone calls from Ghostface,[65] Scream-themed meals in different Chain pop-up dinners and an immersive walk-through featuring props and reconstructed sets from the franchise in California;[66] the walk-throughs included appearances by directors and producers Radio Silence, along with actors Mason Gooding, Dermot Mulroney and Tony Revolori.[67][68] Scream VI was released digitally on April 25, 2023, in the US, where it also began streaming on Paramount+, and various other regions. It was released on VOD on May 9, 2023 in other regions, such as the UK and Ireland.[69] Its DVD, Blu-ray, and Ultra HD Blu-ray released in the US and some regions on July 11, 2023.[70] Upon its release, the film debuted at #1 on the UK Official Film Chart Top 40.[71] Scream VI grossed $108.2 million in the United States and Canada, and $60.8 million in other territories, for a worldwide total of $169 million.[2][3] In the United States and Canada was projected to gross $35–40 million from 3,675 theaters in its opening weekend.[72] The film made $19.3 million on its first day, including $5. +Altogether, CBO now estimates that actual output was about 1.3 percent less in 2021—but potential output was about 0.2 percent greater—than the agency expected last July. In terms of underlying trends that contribute to growth of real potential GDP over the 2022–2031 period, revisions are very modest, and the average annual growth rate over the period, slightly greater than 1.8 percent, is practically unchanged. In nominal terms, however, the agency’s projections of output and income are higher throughout the projection period because projected inflation over the next several years is above the rates anticipated in July. Nominal GDP is 4.9 percent higher, and national income is 3.9 percent higher, in 2031 than CBO projected last summer. CBO currently projects the unemployment rate to be slightly lower and the labor force participation rate to be slightly higher over the 2022–2031 period than in the agency’s July 2021 forecast. CBO’s current projection of the average unemployment rate over the 2022–2026 period is slightly lower than it was in that earlier forecast—now 3.8 percent, down from 4.0 percent. The current projection of the labor force participation rate is also lower—now 62.1 percent instead of 62.4 percent. +After 2023, in CBO’s projections, tightening monetary policy and several other factors combine to slow the growth of demand, slowing output growth and further reducing inflationary pressures. Under the assumption that current laws governing federal taxes and spending generally remain unchanged, CBO projects that real GDP will grow by 3.1 percent in 2022 (as measured from the fourth quarter of 2021 to the fourth quarter of 2022). That expansion is driven by strong growth in consumer spending and real business investment and by a shrinking U.S. trade deficit (see Table 2-2). The growth of real GDP declines steadily through 2024, led by slower growth in consumer spending and investment, before remaining almost constant through 2026. In the agency’s projections, real GDP grows at an average annual rate of 1.6 percent from the beginning of 2023 through 2026. Data source: Congressional Budget Office. See www.cbo.gov/publication/57950#data. Real values are nominal values that have been adjusted to remove the effects of changes in prices. Data are annual. Changes are measured from the fourth quarter of one calendar year to the fourth quarter of the next. Data and definitions are based on the national income and products accounts. GDP = gross domestic product; * = between -0.05 percentage points and 0.05 percentage points. a. Business fixed investment and investment in inventories. b. +Despite the uncertainty during the interim period in the wake of Shazam!'s massive success — having received critical praise and earning $365 million worldwide — production for its sequel has wrapped, a trailer debuted and a release date has been set. Here's everything to know about Shazam! Fury of the Gods. Shazam! Fury of the Gods wouldn't be possible without the return of its titular character played by Zachary Levi. Plus, his teenage counterpart Billy Batson, played by Asher Angel, will also be making his return. Other cast members set to reprise their roles include Jack Dylan Grazer, Faithe Herman, Ian Chen, Jovan Armand and Grace Caroline Currey as Billy's foster siblings — while their superhero alter egos will be played by Adam Brody, Meagan Good, Ross Butler and D. J. Cotrona. New cast members have been recruited to join the sequel as well, including Helen Mirren as Hespera, the daughter of Atlas, alongside Lucy Liu who's cast as her demigod sister, Kalypso. They are the primary villains in Shazam's second installment. Rachel Zegler, who starred in Steven Spielberg's West Side Story remake, is also cast as their sister in the film, playing the role of Athena, one of three goddess daughters of the Titan Atlas — of which the actress said "was so much fun" to play. +Before being reborn by saying the magic word "Shazam," an acronym of the immortals Solomon, Hercules, Atlas, Zeus, Achilles and Mercury, this muscled do-gooder in spandex was just a kid named Billy Batson, played by Asher Angel. You remember Billy, a constant runaway from the Philadelphia foster homes he's been forced to endure since his teen mom deserted him. Billy's foster bestie is Freddy (the scene-stealing Jack Dylan Grazer), a kid on crutches with a smart mouth on him. Things have changed for Billy and his orphaned buds -- Mary (Grace Caroline Currey), Eugene (Ian Chen), Pedro (Jovan Armand) and Darla (a fab Faithe Herman) -- ever since the Wizard (Djimon Hounsou) picked him as his successor. "Put your hands on my staff," demanded the Wiz. "Gross!" said Billy, in a response that typified the script's "Deadpool"-lite irreverence. I'm pleased to report that cheeky attitude still pops through in "Shazam! Fury of the Gods" as Billy/Shazam and his kid besties, now in adult superhero bodies -- Adam Brody for Freddy, Meagan Good for Darla, Ross Butler for Eugene, D.J. Cotrona for Pedro and Currey playing both versions of Mary -- take on their greatest challenge yet. +The winners of the FIFA World Cup 2018 will get a staggering sum of USD 42 million. FIFA World Cup Winner 2022: The winners of the FIFA World Cup 2022 would receive a massive prize money of USD 42 million. The Runner Up will get $30 million. The $72 million in prize money, therefore, be cherished by the winners. While the fourth-place team will receive $25 million, the third-place club will receive $27 million, respectively. Ques: Which team has won the FIFA World Cup 2022? Ans. Argentina has won the FIFA World Cup 2022 by defeating France in the Penalty shootout by 4-2, after the match was drawn at 3-3 in the regular time and extra time. Ques: Who won the FIFA World Cup 2022? Ans. Argentina defeated France in the penalty shootout. The Match was drawn at 3-3 after the end of extra time (120 minutes). Argentina won the penalty shootout by 4-2. Ques: Which nation has the most FIFA World Cup victories? Ans: Brazil is the country with the most titles and the only one to have competed in every competition. Brazil won five FIFA World Cup titles. Ques: When will the FIFA World Cup 2022 Final match take place? +110] Due to COVID-19 outbreaks in their squads, Vanuatu and Cook Islands also withdrew because of the travel restrictions.[111][112] Of the 32 nations qualified to play at the 2022 FIFA World Cup, 24 countries competed at the previous tournament in 2018.[113] Qatar were the only team making their debut in the FIFA World Cup, becoming the first hosts to make their tournament debut since Italy in 1934. As a result, the 2022 tournament was the first World Cup in which none of the teams that earned a spot through qualification were making their debut. The Netherlands, Ecuador, Ghana, Cameroon, and the United States returned to the tournament after missing the 2018 tournament. Canada returned after 36 years, their only prior appearance being in 1986.[114] Wales made their first appearance in 64 years – the longest ever gap for any team, their only previous participation having been in 1958.[115] Italy, four-time winners and reigning European champions, failed to qualify for a second successive World Cup for the first time in their history, losing in the qualification play-off semi-finals.[116] The Italians were the only former champions and the highest ranked team in the FIFA Men's World Rankings that failed to qualify. +Washington, D.C. — House Energy and Commerce Committee Chair Cathy McMorris Rodgers (R-WA) today announced that TikTok CEO Shou Zi Chew will appear before the committee to testify on TikTok’s consumer privacy and data security practices, the platforms’ impact on kids, and their relationship with the Chinese Communist Party. It will be Chew’s first appearance before a Congressional committee.  “Big Tech has increasingly become a destructive force in American society. The Energy and Commerce Committee has been at the forefront of asking Big Tech CEOs – from Facebook to Twitter to Google – to answer for their companies’ actions. These efforts will continue with TikTok. ByteDance-owned TikTok has knowingly allowed the ability for the Chinese Communist Party to access American user data. Americans deserve to know how these actions impact their privacy and data security, as well as what actions TikTok is taking to keep our kids safe from online and offline harms. We’ve made our concerns clear with TikTok. It is now time to continue the committee’s efforts to hold Big Tech accountable by bringing TikTok before the committee to provide complete and honest answers for people.”  Chew will testify at a full committee hearing of the Energy and Commerce Committee on March 23, 2023. Additional details to follow.  2125 Rayburn House Office Building Washington, D.C. +TikTok CEO Shou Zi Chew will testify for his first congressional hearing on Thursday, where he is likely to face intense grilling from politicians from both parties who argue that the popular app, which has 150 million U.S. users, cannot be trusted. Here’s a quick guide for what to know about Chew, a 40-year-old Singaporean who interned at Facebook and studied at Harvard Business School before becoming the public face of one of the most popular — and contentious — apps in the United States. TikTok's CEO testifies before Congress. Follow our live updates. Chew was born and raised in Singapore, the island nation in Southeast Asia that has become a prominent bridge for international business between China and the West. “The thing about growing up on a small island … is you get wanderlust at a very young age,” he said in an interview last year. After completing his military service — mandatory for most male Singaporeans — he left to study economics at University College London (UCL), a top British university, graduating in 2006 and working at investment bank Goldman Sachs for two years. He then moved to the United States to get his master’s degree at Harvard Business School. “I remember struggling with this decision,” he said in a speech to UCL graduates in 2022, as he was unsure whether taking time to do the master’s degree “would enhance or delay my career. +The tenth and final season of the American crime thriller television series The Blacklist was ordered on February 22, 2022[1][2] and premiered on February 26, 2023, on NBC.[3] The season concluded the series on July 13, 2023 with the final two episodes.[4] James Spader, Diego Klattenhoff, Hisham Tawfiq, Harry Lennix returned for the season, while Anya Banerjee debuted in a new main role. It is the only season of the series not to star Amir Arison and Laura Sohn after their promotion to main cast, though Arison makes a guest appearance; it is also the second and final season without Megan Boone.[5] The season is produced by Davis Entertainment, Universal Television and Sony Pictures Television. John Eisendrath, John Davis, Joe Carnahan and John Fox continue to serve as executive producers of the series, while series creator Jon Bokenkamp returned as an executive producer.[6] On February 22, 2022, James Spader announced the renewal of the series while making his appearance on The Tonight Show Starring Jimmy Fallon, with the NBC press release coming out shortly after.[28] On February 1, 2023, NBC officially announced that the season would serve as the last of the series.[2] The same day, the poster and the trailer for the season were released. +The tenth and final season of The Blacklist will head to Netflix in select regions in 2023. by Kasey Moore kasey__moore Published on July 21st, 2023, 8:57 am EST The Blacklist – Picture: NBC / Sony Pictures Television The long-running NBC series The Blacklist is a fan favorite with the ninth season now streaming on Netflix in dozens of regions worldwide. The tenth and final season has begun airing on NBC for its final run and will hit Netflix later this year. Here’s what you need to know. Since 2013, The Blacklist is a crime thriller series led by James Spader. Over the years, we’ve seen the former criminal turned FBI informant capture dozens of criminals. The Blacklist was announced to return for a tenth season on NBC back in February 2022. Only later on was it revealed that season 10 would be the final outing for the show and as a result, no season 11 is planned. Filming got underway on season 10 in September 2022 and cast Anya Banerjee as Siya Malik. It’ll once again be a 22-episode long season with James Spader, Diego Klattenhoff, Hisham Tawfiq, and Harry Lennix returning. +The surreal Nothing, Forever, streaming 24 hours a day, is an eerie experiment in digital creativity Seinfeld went off the air in 1998, but it’s never really gone away – it’s been the subject of modern recreations, dedicated social media accounts and hip-hop/TV fusions. Its latest incarnation, however, is the oddest yet. Nothing, Forever is an endless, AI-generated version of the show that has been streaming on Twitch since mid-December. It tells the “story” – if you can call it that – of four characters, Larry, Fred, Yvonne and Kakler, who look like what would happen if Jerry, George, Elaine and Kramer were sucked into a 1990s computer game. They spend their days discussing their lives and other trivial matters. And it never, ever stops: log on at any hour and there they are, talking about coffee quality or a difficult Monopoly game. The dialogue comes from OpenAI’s GPT-3, a text generator closely related to the ChatGPT service that has recently made waves; another company is responsible for the tech behind the speech itself. On top of that, “we have a lot of proprietary generative algorithms that cause the show to be ‘formed’, so to be speak,” Skyler Hartle of Mismatch Media told Polygon. “We collectively call this logic the ‘director’, as it is largely responsible for making sure all the individual pieces come together into a whole. +The result feels closer to David Lynch than Jerry Seinfeld, with the cast of characters seemingly trapped in AI limbo, always on the verge of setting up a joke, waiting for a punchline that never comes. An eerie, out-of-place laugh track imbues the AI’s clumsy conversations with a slightly sinister undertone. The stream constantly cuts from the Seinfeld apartment to Jerry Seinfeld’s stand-up segments, again, algorithmically generated jokes (and honestly, they’re not that far removed from Jerry Seinfeld’s limp one-liners). As an experiment in AI, it makes for an oddly fascinating watch, but the creators seem to have higher ambitions. Hartle went on to say: “As generative media gets better, we have this notion that at any point, you're gonna be able to turn on the future equivalent of Netflix and watch a show perpetually, nonstop as much as you want. You don't just have seven seasons of a show, you have seven hundred, or infinite seasons of a show that has fresh content whenever you want it. And so that became one of our grounding pillars.” After watching the stream, creatives can likely rest easy that AI isn’t coming for their jobs, yet. The AI is absolutely incapable of writing witticisms, but it is inadvertently hilarious, and sometimes, oddly terrifying. +DES MOINES -- Governor Reynolds signed HF 68 into law today amid hundreds of supporters in the Iowa State Capitol. The Students First Act makes state education funding available for K-12 students who choose to attend private schools.  “Public schools are the foundation of our education system and for most families they will continue to be the option of choice, but they aren’t the only choice,” Governor Reynolds stated. “For some families, a different path may be better for their children. With this bill, every child in Iowa, regardless of zip code or income, will have access to the school best suited for them.”  Universal eligibility will be phased in over three years. All incoming Kindergarteners and all public-school students will be eligible beginning year one with the start of the 2023-2024 school year. Eligibility for families of children currently enrolled in accredited private schools will be income based over the first two years.  Parents or guardians who enroll their eligible children in an accredited private school will receive an amount equal to the per pupil funds allocated by the state to all public school districts each year. The funds are estimated at $7,598 per pupil for the 2023-2024 school year and will be deposited into an education savings account (ESA) to be used for tuition, fees, and other qualified education expenses. The state has issued a request for proposal (RFP) from businesses with experience managing ESA programs. +The Students First Act, introduced by Governor Reynolds and signed into law on Jan. 24, 2023, makes state funding available to support the success of every K-12 student in Iowa. The bill establishes a framework and funding for education savings accounts (ESAs), which may be used by eligible families to cover tuition, fees, and other qualified education expenses at accredited nonpublic schools in Iowa. The State Board of Education adopted administrative rules on May 4, 2023, that specify definitions for the program, eligibility requirements for participation, parameters for the application process, and program administration and accountability. The Students First ESA Application available in English and Spanish. The application window for the 2023-2024 school year runs from 8 a.m. on May 31 through 11:59 p.m. June 30, 2023. Note: Parents/guardians will first be directed to sign up with an email and password. Parents/guardians will receive a message from Odyssey asking them to confirm their email address. After the email is confirmed the parent/guardian can sign in to the Odyssey platform to begin their application. Parents who choose to enroll their eligible children in an accredited nonpublic school will receive an amount equal to the per pupil funding allocated to public school districts for the same budget school year. +Be the first to find out about GRAMMY nominees, winners, important news, and events. Privacy Policy Graphic: The Recording Academy. news Celebrate ahead of Music's Biggest Night on Feb. 5, 2023, with this spirited playlist of every R&B nominee at the 2023 GRAMMYs. R&B's passion and potency can set a mood instantly. The 2023 GRAMMY nominees embody the genre's effervescence with a unique blend of classic and contemporary sound — and now ​​you can hear all of the nominees in one playlist. Nominated for Best R&B song, Beyoncé's "CUFF IT" electrifies and invigorates the dancefloor, and Mary J. Blige's smooth "Good Morning Gorgeous" supports self-love. Best New Artist nominee Muni Long hits a sweet, sultry spot with "Hrs & Hrs," Jazmine Sullivan poignantly chronicles the confusion of a toxic relationship on "Hurt Me So Good," and PJ Morton's "Please Don't Walk Away" glitters with hope and serenity. For Best R&B Album, nominees include Mary J. Blige's Good Morning Gorgeous (Deluxe), Chris Brown's Breezy (Deluxe), Robert Glasper's Black Radio III, Lucky Daye's Candydrip, and PJ Morton's Watch The Sun. Across the R&B five categories, Mary J. +The Recording Academy The 65th Grammy Awards was held Sunday, Feb. 5, in Los Angeles, California, at the Crypto.com Arena. The Recording Academy’s CEO/president Harvey Mason, Jr. made opening remarks at the premiere ceremony, following a performance of “I Just Want to Celebrate” with Blind Boys of Alabama, Bob Mintzer, Buddy Guy, La Marisoul from La Santa Cecilia, Maranda Curtis and Shoshana Bean. Most of the winners in the R&B field were called at the premiere ceremony. Legendary producer and songwriter Jimmy Jam presented four R&B categories, including Best R&B Performance, Best Traditional Performance, Best Progressive R&B Album and Best R&B Album. The Best R&B Song category was announced at the main telecast, hosted by Trevor Noah.  Beyoncé, the most-nominated artist this year with nine, took home four trophies, including two in the R&B field.  Below is a list of R&B winners at the 2023 Grammy Awards. A Songwriter(s) Award. A song is eligible if it was first released or if it first achieved prominence during the Eligibility Year. (Artist names appear in parentheses.) Singles or Tracks only. “Cuff It” +Advertisement Supported by The internet giant will grant users access to a chatbot after years of cautious development, chasing splashy debuts from rivals OpenAI and Microsoft. By Nico Grant and Cade Metz Nico Grant and Cade Metz reported this story in San Francisco. For more than three months, Google executives have watched as projects at Microsoft and a San Francisco start-up called OpenAI have stoked the public’s imagination with the potential for artificial intelligence. But on Tuesday, Google tentatively stepped off the sidelines as it released a chatbot called Bard. The new A.I. chatbot will be available to a limited number of users in the United States and Britain and will accommodate additional users, countries and languages over time, Google executives said in an interview. The cautious rollout is the company’s first public effort to address the recent chatbot craze driven by OpenAI and Microsoft, and it is meant to demonstrate that Google is capable of providing similar technology. But Google is taking a much more circumspect approach than its competitors, which have faced criticism that they are proliferating an unpredictable and sometimes untrustworthy technology. Still, the release represents a significant step to stave off a threat to Google’s most lucrative business, its search engine. Many in the tech industry believe that Google — more than any other big tech company — has a lot to lose and to gain from A.I. +From imagining the prime minister leading a cabinet meeting about war to a guide on how best to start your own podcast, Google's LaMDA AI is certainly flexible. By Tom Acres, technology reporter Saturday 5 November 2022 19:41, UK The scene is 10 Downing Street, the home of the prime minister. It's a crisp, cool day. A lawn mower can be heard in the distance. There's a knock at the door, and it's answered by a policeman! Now, before anyone gets any ideas, the setup to this particular story is the work of an AI - Google's chatbot named LaMDA, to be precise, which made headlines in the summer when a now ex-engineer claimed it was sentient. Since then, the tech giant has started running a very limited trial to put it through its paces. Sky News got access to the test phase this week, as Google personnel took to the stage in New York to provide an update on their own work with the AI. The presentation included how they were exploring whether LaMDA could generate videos, realistic speech, and even write fiction. Is this the future of comedy? The AI acts taking to the stage at the Edinburgh Fringe Tinder tests AI as new way to pick your best photos Legal bills push up costs at Meta but revenues and user numbers up +Midjourney is a generative artificial intelligence program and service created and hosted by San Francisco-based independent research lab Midjourney, Inc. Midjourney generates images from natural language descriptions, called "prompts", similar to OpenAI's DALL-E and Stable Diffusion.[1][2] The tool is currently in open beta, which it entered on July 12, 2022.[3] The Midjourney team is led by David Holz, who co-founded Leap Motion.[4] Holz told The Register in August 2022 that the company was already profitable.[5] Users create artwork with Midjourney using Discord bot commands.[6] Midjourney, Inc. was founded in San Francisco, California by David Holz,[7] previously co-founder of Leap Motion.[8] The Midjourney image generation platform first entered open beta on July 12, 2022.[3] However, on March 14, 2022, the Discord server launched with a request to post high-quality photographs to Twitter/Reddit for system's training. The company has been working on improving its algorithms, releasing new model versions every few months. Version 2 of their algorithm was launched in April 2022[9] and version 3 on July 25. +He ran the company for twelve years, and when he left it employed about 100 people. Midjourney, he said, is pretty small right now. "We're like about 10 people," he explained. "We're self-funded. We have no investors. We're not really financially motivated. We're just sort of here to work on things we're passionate about and have fun. And we were working on a lot of different projects." Holz said the technological aspect of AI and the extent to which it will improve is fairly easy to foresee. "But the human ramifications of that are so hard to imagine," he said. "There's something here that's at the intersection of humanity and technology. In order to really figure out what this is and what it should be, we really need to do a lot of experiments." The unsettled nature of AI image technology is evident in the difference between tools like Midjourney and a downloadable open source graphics application like Blender, or a locally installed commercial application like Adobe Photoshop (before it became a cloud service). Midjourney exists in a social context. Its front-end is the chat service Discord. New users log in to Discord's Midjourney server and can then submit text prompts to generate images alongside numerous other users in any of the various newbie channels. The resulting images for all the users in that channel surface in about a minute, which helps reinforce the notion of community. +Copyright 2023 The Associated Press. All Rights Reserved. Microsoft announced a new version of its search engine Bing is integrating artificial intelligence chat in a step the tech giant hopes will bolster its place in the online search business (Feb. 7) (AP Video: Manuel Valdes) REDMOND, Wash. (AP) — Microsoft is fusing ChatGPT-like technology into its search engine Bing, transforming an internet service that now trails far behind Google into a new way of communicating with artificial intelligence. The revamping of Microsoft’s second-place search engine could give the software giant a head start against other tech companies in capitalizing on the worldwide excitement surrounding ChatGPT, a tool that’s awakened millions of people to the possibilities of the latest AI technology. Along with adding it to Bing, Microsoft is also integrating the chatbot technology into its Edge browser. Microsoft announced the new technology at an event Tuesday at its headquarters in Redmond, Washington. “Think of it as faster, more accurate, more powerful” than ChatGPT, built with technology from ChatGPT-maker OpenAI but tuned for search queries, said Yusuf Mehdi, a Microsoft executive who leads its consumer division, in an interview. A public preview of the new Bing launched Tuesday for desktop users who sign up for it, but Mehdi said the technology will scale to millions of users in coming weeks and will eventually come to the smartphone apps for Bing and Edge. +Microsoft Bing (commonly known as Bing) is a web search engine owned and operated by Microsoft. The service has its origins in Microsoft's previous search engines: MSN Search, Windows Live Search and later Live Search. Bing provides a variety of search services, including web, video, image and map search products. It is developed using ASP.NET. Bing, Microsoft's replacement for Live Search, was unveiled by Microsoft CEO Steve Ballmer on May 28, 2009, at the All Things Digital conference in San Diego, California, for release on June 3, 2009.[2] Notable new features at the time included the listing of search suggestions while queries are entered and a list of related searches (called "Explore pane") based on semantic technology from Powerset,[3] which Microsoft had acquired in 2008.[4] In July 2009, Microsoft and Yahoo! announced a deal in which Bing would power Yahoo! Search.[5] Yahoo! finished the transition in 2012.[6] In October 2011, Microsoft stated that they were working on new back-end search infrastructure with the goal of delivering faster and slightly more relevant search results for users. Known as "Tiger", the new index-serving technology had been incorporated into Bing globally since August that year. +SAN FRANCISCO--(BUSINESS WIRE)-- Pinterest, Inc. (NYSE: PINS) today announced that co-founder, Chief Executive Officer and President, Ben Silbermann will transition to the newly created role of Executive Chairman, and online commerce expert Bill Ready will become Chief Executive Officer and a member of the Board of Directors, effective June 29, 2022. Ready is joining Pinterest from Google, where he served as President of Commerce, Payments & Next Billion Users and oversaw Google’s vision, strategy and the delivery of its commerce products. Prior to Google, Ready served in various senior leadership roles at PayPal, including Executive Vice President and Chief Operating Officer. With over 400 million monthly active users, Pinterest has built a healthy advertising business that generated strong cash flow and doubled revenue during the pandemic. In addition, Pinterest has been laser-focused on putting Pinners first, continuously improving its roadmap, investing in creators, shopping and scaling internationally. “Building Pinterest with such a wildly talented, kind and creative team has been the gift of a lifetime,” said Silbermann. “Today, Pinterest inspires hundreds of millions of people with ideas for every aspect of their lives. We’ve built a growing global business that puts the well-being of our users at the core of everything we do. And we’re just getting started.” +The co-founder will stick around as Pinterest’s first executive chairman. Curiously, PayPal was reportedly looking into buying Pinterest back in October 2021. Days later, the payments firm squashed the “rumor” in a note to investors, saying it was “not pursuing an acquisition” at that time. +Connor Christie Published: May 5, 2023 The tides have finally turned, and the sun will shine again on Pikmin fans worldwide. Before the September 2022 Nintendo Direct, Nintendo hadn’t shared anything about the Pikmin 4 release date since 2017. But after Miyamoto spoke about Pikmin Bloom during the livestream, he finally revealed we can get our hands on the next game in the series this year. While you wait for Pikmin 4, head on over to our list of the best Switch RPGs to find something you can play right now, or take a look at our list of the best new Switch games coming in 2023 to find out what else you should be looking forward to. The Pikmin 4 release date is Friday, July 21, 2023, for the Nintendo Switch. We can’t wait to join Olimar and his friends again soon! Follow the link below to pre-order a copy. Of course, there is, you can take a look at all of the adorable gameplay from the Nintendo Direct February 2023 below. We also recommend you head over to the Nintendo YouTube account to find even more gameplay and Pikmin 4 fun. Pikmin 4 gameplay looks very similar to previous games in the series but with an adorable chunky dog named Otachi. +This fourth entry has been a long time coming, with Shigeru Miyamoto saying back in 2015 that it was “very close to completion.” Seven years later, it’s finally set to release in July. This installment introduces a new Ice Pikmin that can freeze enemies and the environment to help your alien flora navigate the strange planet they find themselves on. The plants aren’t alone this time around, either, as they get help from a rotund dog called Oatchi, who can smash through barriers and carry Pikmin on its back while swimming across ponds and puddles. Overall, it looks like good fun for fans of the series or anyone interested in picking up a colorful, cartoonish strategy game. Check out our Pikmin 4 review for more details. Chris Reed is a deals expert and commerce editor for IGN. You can follow him on Twitter @_chrislreed or on Mastodon @chrislreed. +NPR's Sacha Pfeiffer talks to Wall Street Journal reporter Sam Schechner about the layoffs which will cut about 12% of Meta's workforce. This round follows a previous cut of 11,000 jobs. SACHA PFEIFFER, HOST: Meta is planning a second round of layoffs. That's the parent company of Facebook, Instagram and WhatsApp. And it announced yesterday it will cut another 10,000 jobs. This follows 11,000 layoffs at Meta last November. CEO Mark Zuckerberg has said that 2023 will be Meta's, quote, "year of efficiency." He also says it will be, in his words, stronger and more nimble. We're joined now by Wall Street Journal technology reporter Sam Schechner. Sam, thanks for coming on.SAM SCHECHNER: A pleasure to be here.PFEIFFER: These are a lot of layoffs, but I want to make sure we put it in the overall context of how large Meta is. So tell us, how many employees does it have now? How many will it have left once the layoffs are done?SCHECHNER: Well, those are good questions. We know the numerator. We don't necessarily know the denominator. At the end of the year, Meta had roughly 86,000 employees. Most of those who are being laid off - the 11,000 from last fall - were still on the payroll, the company said. +CEO Mark Zuckerberg attributed the cuts to overhiring during the pandemic. In a letter to staff posted to the corporate website, he cited a decline in e-commerce, the wider economic downturn, increased competition, and a decline in ad sales–the primary way the company makes money. "I got this wrong, and I take responsibility for that," he wrote. The layoffs come as the company has invested billions in the so-called metaverse, pitched as a virtual-reality future in which people will work, mingle, exercise and go to concerts. But it's an unproven bet on the future, and not all everyone is convinced it should be the social media company's focus. Meta CEO Mark Zuckerberg made big investments in the "metaverse," which he showed off during a virtual event last year. Last week, Zuckerberg announced the company was laying off 13% of its staff. Eric Risberg/AP hide caption Meta CEO Mark Zuckerberg made big investments in the "metaverse," which he showed off during a virtual event last year. Last week, Zuckerberg announced the company was laying off 13% of its staff. Zuckerberg said the workforce cuts would affect the whole organization, with recruiting staff disproportionately affected due to fewer hires anticipated in the coming year. A hiring freeze through the first quarter of 2023 will continue. +“Since we started iRobot, our team has been on a mission to create innovative, practical products that make customers’ lives easier, leading to inventions like the Roomba and iRobot OS,” said Colin Angle, chairman and CEO of iRobot. “Amazon shares our passion for building thoughtful innovations that empower people to do more at home, and I cannot think of a better place for our team to continue our mission. I’m hugely excited to be a part of Amazon and to see what we can build together for customers in the years ahead.” Amazon will acquire iRobot for $61 per share in an all-cash transaction valued at approximately $1.7 billion, including iRobot’s net debt. Completion of the transaction is subject to customary closing conditions, including approval by iRobot’s shareholders and regulatory approvals. On completion, Colin Angle will remain as CEO of iRobot. About Amazon Amazon is guided by four principles: customer obsession rather than competitor focus, passion for invention, commitment to operational excellence, and long-term thinking. Amazon strives to be Earth’s Most Customer-Centric Company, Earth’s Best Employer, and Earth’s Safest Place to Work. Customer reviews, 1-Click shopping, personalized recommendations, Prime, Fulfillment by Amazon, AWS, Kindle Direct Publishing, Kindle, Career Choice, Fire tablets, Fire TV, Amazon Echo, Alexa, Just Walk Out technology, Amazon Studios, and The Climate Pledge are some of the things pioneered by Amazon. +Information regarding iRobot's directors and executive officers, including a description of their direct interests, by security holdings or otherwise, is contained in iRobot's proxy statement for its 2022 annual meeting of stockholders, which was filed with the SEC on April 11, 2022, and will be included in the Proxy Statement (when available). iRobot stockholders may obtain additional information regarding the direct and indirect interests of the participants in the solicitation of proxies in connection with the proposed transaction, including the interests of iRobot directors and executive officers in the transaction, which may be different than those of iRobot stockholders generally, by reading the Proxy Statement and any other relevant documents that are filed or will be filed with the SEC relating to the transaction. You may obtain free copies of these documents using the sources indicated above. SOURCE iRobot Corporation More news releases in similar topics Sign up to get PRN’s top stories and curated news delivered to your inbox weekly! Cision Distribution 888-776-0942 from 8 AM - 9 PM ET +Super Bowl LVII was an American football game played to determine the champion of the National Football League (NFL) for the 2022 season. The American Football Conference (AFC) champion Kansas City Chiefs defeated the National Football Conference (NFC) champion Philadelphia Eagles, 38–35. The game was played on February 12, 2023, at State Farm Stadium in Glendale, Arizona. It was the fourth Super Bowl hosted by the Phoenix metropolitan area, and the third at this venue, with the most recent previously being Super Bowl XLIX in 2015 (then known as University of Phoenix Stadium).[6] Both teams finished the regular season with a league-best 14–3 record. This was the Eagles fourth Super Bowl appearance overall and the second in the last six seasons, having previously won Super Bowl LII; the Eagles previously lost Super Bowls XV and XXXIX. This was the Chiefs' fifth Super Bowl appearance overall and third in the last four seasons, having previously won Super Bowls IV and LIV, and losses in Super Bowls I and LV. After the Eagles went into halftime up 24–14, the Chiefs mounted a comeback to win the game 38–35 with a game-winning field goal kicked by Harrison Butker. Butker's game winning kick was set up by a pivotal and controversial defensive holding call on Philadelphia cornerback James Bradberry, which was criticized by some observers but supported by others. +Official Super Bowl LVIII Ticket Packages Secure official access to Super Bowl LVIII with the Official Hospitality Partner of the NFL – On Location. With the best selection of seating options at Allegiant Stadium, exclusive experiences before and after the game and other fantastic benefits, On Location is the only place for Super Bowl LVIII ticket packages. Secure yours today. Schein: Super Bowl LVII takeaways Official Super Bowl LVII Digital Program There's being there, and then there's being On Location. Watch Rihanna return to the stage in the Apple Music Super Bowl LVII Halftime Show. © 2023 NFL Enterprises LLC. NFL and the NFL shield design are registered trademarks of the National Football League.The team names, logos and uniform designs are registered trademarks of the teams indicated. All other NFL-related trademarks are trademarks of the National Football League. NFL footage © NFL Productions LLC. +Concert revenue grew tenfold for the NCT Dream and Red Velvet label, while recorded music sales declined 3.7%. By Glenn Peoples SM Entertainment’s revenue in 2022 grew 18.7% to 848.3 billion won ($657 million at the average 2022 exchange rate) in 2022, the Korean music company announced Monday. Gross profits rose 15.4% to 297.5 billion won ($230 million), operating profit fell 3.7% to 93.9 billion won ($73 million) and operating margin dropped from 13.6% to 11.1%.  The K-pop company’s roster includes NCT Dream, NCT 127, Aespa and Red Velvet. NCT Dream had the fourth most album sales of any artist in Korea in 2022 with 4.1 million units. Red Velvet was the No. 9 artist with 2.4 million units, NCT 127 was No. 11 with 2.2 million units and Aespa was No. 13 with 1.8 million units.  Related The Big Bang Theory: HYBE's Chairman on K-Pop's Future, The BTS Model, AI Plans and More 02/22/2023 +South Korea-based entertainment giant SM Entertainment generated revenues of 238.1 billion South Korea Won (USD $179.4m) in Q3 2022 (the three months to end of September). That’s according to investor filings published by the firm on Monday (November 14). That $179.4 million revenue haul represents growth of 65.4% YoY. SM’s roster includes K-Pop stars like SUPER JUNIOR, Girls’ Generation, SHINee, EXO, Red Velvet, KANGTA, BoA, TVXQ!, NCT and aespa. SM’s operating profit in Q3 was 29.8 billion South Korea Won ($22.4m), up 201.4% YoY, from 9.9 billion South Korea Won ($7.4m) in Q3 2021. The company’s net profit reached 29.2 billion won ($22.1 million) in Q3. Digging deeper into the filling reveals that SM’s ‘Album/ Digital music’ segment was the company’s biggest revenue driver in Q3, generating 72 billion South Korea Won ($54.3m) across the quarter. That revenue figure represented YoY growth of 14.5% versus 66.8 billion South Korea Won ($50.4m) in Q3 2021 (see below). +llama.CausalSelfAttention = LoRACausalSelfAttention     yield     llama.CausalSelfAttention = causal_self_attention     LoRACausalSelfAttention.lora_config = None     llama.CausalSelfAttention = LoRACausalSelfAttention     yield     llama.CausalSelfAttention = causal_self_attention     LoRACausalSelfAttention.lora_config = None     yield     llama.CausalSelfAttention = causal_self_attention     LoRACausalSelfAttention.lora_config = None     llama.CausalSelfAttention = causal_self_attention     LoRACausalSelfAttention.lora_config = None     LoRACausalSelfAttention.lora_config = None We are now ready to fine-tune LLaMA. You can fine-tune Lit-LLaMA on the Alpaca dataset using LoRA and quantization on a consumer GPU. Lit-LLaMA comes with a simple script for downloading and preparing the Alpaca dataset, which you can find here. Note: You can convert the official Meta AI LLaMA weights to Lit-LLaMA format using the instructions here. Follow these two simple steps to instruction-tune LLaMA: Find the full fine-tuning code here. To generate text predictions, you will need trained model weights. You can use either the official Meta AI weights or the model that you have fine-tuned. +Advancing health one insight at a time n a trip to Capitol Reef National Park with my son, I wanted to try something different, something exciting, something I’d never done before.  So we went on a two-hour llama hike.  When Andrew, the guide, arrived with the 350-pound animals, the first thing I thought was how we were supposed to trust these animals not to trample us. But Andrew explained how to walk the llamas and we began our hike. Right away, I noticed that my son’s llama was more responsive and much calmer than mine. My llama was less experienced. He was making sounds and being obnoxious. He wasn't responding to me. Andrew took over and taught me to be a little more forceful. He told me to adjust to my llama’s personality.  As we continued to walk, my son’s llama suddenly became distraught and began making a scary sound. The llama was trying to warn us that there were cows around. But even though the llama was worried, at no point was my son in danger. No matter how upset the llama was, he was following my nine-year-old, who was so much smaller than the llama.  And that’s when I began to wonder, how do you train these big animals to be so reliable? How does everyone—according to the llama outfitter’s Google reviews—have such a great experience? +On the morning of the ceremony, however, it was reported that Gaga would perform at the ceremony.[36] Meanwhile, actress Glenn Close, who was originally scheduled as a presenter during the gala, canceled her appearance due to a positive COVID-19 test.[37] When the nominations were announced, nine of the ten films nominated for Best Picture had earned a combined gross of $1.57 billion at the American and Canadian box offices at the time. Top Gun: Maverick was the highest-grossing film among the Best Picture nominees with $718.7 million in domestic box office receipts.[38] Avatar: The Way of Water came in second with $598.4 million; this was followed by Elvis ($151 million), Everything Everywhere All at Once ($70 million), The Fabelmans ($15 million), The Banshees of Inisherin ($9 million), Tar ($5.6 million), Triangle of Sadness ($4.2 million), and Women Talking ($1.1 million). The box office figures for All Quiet on the Western Front were unavailable due to their distributor Netflix's policy of refusing to release such figures.[39] Furthermore, by virtue of Avatar: The Way of Water and Top Gun: Maverick's Best Picture nominations, it marked the first time since the 55th ceremony in 1983 that the two highest grossing films of the year were both nominated in the aforementioned category.[40] +His win, among the most expected of the night, was nevertheless one of the ceremony’s most moving moments. The audience — including his “Temple of Doom” director, Steven Spielberg — gave Quan a standing ovation as he fought back tears. “Mom, I just won an Oscar!” said Quan, 51, whose family fled Vietnam in the war when he was a child. “They say stories like this only happen in the movies. I can’t believe it’s happening,” said Quan. “This is the American dream.” Minutes later, Quan’s castmate Jamie Lee Curtis won for best supporting actress. Her win, in one of the most competitive categories this year, denied a victory for comic-book fans. Angela Bassett (“Black Panther: Wakanda Forever”) would have been the first performer to win an Oscar for a Marvel movie. Curtis is the rare Oscar winner whose parents were both Oscar nominees: Tony Curtis was nominated for “The Defiant Ones” in 1959 and Janet Leigh was nominated in 1961 for “Psycho.” The German-language WWI epic “All Quiet on the Western Front” — Netflix’s top contender this year — took four awards as the academy heaped honors on the craft of the harrowing anti-war film. It won for cinematography, production design, score and best international film. Though Bassett missed on supporting actress, Ruth E. +Advertisement Supported by The list of winners for the 95th Academy Awards. By Gabe Cohn The 95th Academy Awards were held Sunday night at the Dolby Theater in Los Angeles. “Everything Everywhere All at Once,” the proudly weird sci-fi movie from Daniel Kwan and Daniel Scheinert, swept most of the top categories, including best picture and directing. Michelle Yeoh, that movie’s star, won the best actress award, becoming the first Asian actress ever to win that honor. The other lead acting prize went to Brendan Fraser (“The Whale”), also a first-time winner. (Perhaps the biggest winner of all: A24, the studio behind both of those movies.) Earlier victories went to “Guillermo del Toro’s Pinocchio,” which won for best animated feature; Ke Huy Quan and Jamie Lee Curtis, each first-time winners for supporting roles in “Everything Everywhere All at Once”; “Navalny,” which picked up the best documentary feature statuette; the costume designer Ruth E. Carter, who became the first Black woman to have won two Oscars (this time for “Black Panther: Wakanda Forever”); “All Quiet on the Western Front,” which won several awards in the first half of the show, including for best international feature, production design and cinematography; and Sarah Polley, who won the best adapted screenplay honor for “Women Talking.” See below for a full list of winners. +11] Michelle Yeoh was the first Asian winner for Best Actress and the second woman of color overall after Halle Berry, who won for her performance in 2001's Monster's Ball.[12] Furthermore, she was the first woman to identify as Asian to be nominated in that category.[b] Ke Huy Quan became the first Vietnamese person to win an Oscar and the second Asian winner for Best Supporting Actor after Haing S. Ngor, who won for his role in 1984's The Killing Fields.[14][15] The 42-year span between Judd Hirsch's first nomination, for his supporting role in 1980's Ordinary People, and his second, for The Fabelmans, set the record for the longest gap between Oscar nominations.[11] At age 90, Best Original Score nominee John Williams became the oldest person nominated competitively in Oscars history.[11] Best Costume Design winner Ruth E. Carter was the first Black woman to win two Oscars.[16] Winners are listed first, highlighted in boldface, and indicated with a double dagger (‡).[17] The Academy held its 13th annual Governors Awards ceremony on November 19, 2022, during which the following awards were presented:[18] The following presented awards and performed musical numbers.[21] In September 2022, the Academy hired television producers Glenn Weiss and Ricky Kirshner to oversee production of the 2023 ceremony. +One of the things I realized growing up is that one of the best things we can do for each other is shelter each other from the chaos of this crazy world. Thank you to the storytellers here who did that for me.” Other nominees in the category included “All Quiet on the Western Front,” “Avatar: The Way of Water,” “The Banshees of Inisherin,” “Elvis,” “The Fabelmans,” “Tár,” “Top Gun: Maverick,” “Triangle of Sadness” and “Women Talking.” Brendan Fraser won the Academy Award for best actor for his performance in "The Whale." Fraser, appearing visibly shocked and emotional upon accepting his trophy, began by thanking the film's director Darren Aronofsky for throwing him "a creative lifetime and hauling me aboard the good ship 'The Whale.'" Reflecting on his journey in the entertainment industry, which started 30 years ago, he added, "Things -- they didn't come easily to me, but there was a facility that I didn't appreciate at the time until it stopped." Other actors nominated in the category included Austin Butler for his performance in "Elvis," Colin Farrell for his performance in "The Banshees of Inisherin," Paul Mescal for his performance in "Aftersun" and Bill Nighy for his performance in "Living." All were first-time Oscar nominees. +___ Of the 20 actors up for the biggest individual prizes in their fields Sunday night — best actor, best actress, best supporting actor, best supporting actress — 16 are first-time nominees, which host Jimmy Kimmel called out in his monologue after parachuting in. Cate Blanchett (“Tár”) is the only acting nominee to have won (twice). One of her fellow best actress nominees, Michelle Williams (“The Fabelmans,”) is now a five-time Oscar nominee but is still seeking her first win. The other two non-first-time nominees on the list have waited a long time for today. Angela Bassett (“Black Panther: Wakanda Forever”) is now a two-time nominee, after being up for best actress following her portrayal of Tina Turner in “What’s Love Got to do With It” at the awards in 1994. And Judd Hirsch (“The Fabelmans”) got his only previous nomination in 1980, for his work in “Ordinary People” — when he lost to one of his co-stars in that film, Timothy Hutton. ___ The telecast opened with a montage from the nominees, before cutting to Jimmy Kimmel in the cockpit of a fighter jet flown by “Top Gun: Maverick” star Tom Cruise. Cruise demanded Kimmel eject in the video before the camera cut to the exterior of the Dolby, over which two jets flew over. +11] Michelle Yeoh was the first Asian winner for Best Actress and the second woman of color overall after Halle Berry, who won for her performance in 2001's Monster's Ball.[12] Furthermore, she was the first woman to identify as Asian to be nominated in that category.[b] Ke Huy Quan became the first Vietnamese person to win an Oscar and the second Asian winner for Best Supporting Actor after Haing S. Ngor, who won for his role in 1984's The Killing Fields.[14][15] The 42-year span between Judd Hirsch's first nomination, for his supporting role in 1980's Ordinary People, and his second, for The Fabelmans, set the record for the longest gap between Oscar nominations.[11] At age 90, Best Original Score nominee John Williams became the oldest person nominated competitively in Oscars history.[11] Best Costume Design winner Ruth E. Carter was the first Black woman to win two Oscars.[16] Winners are listed first, highlighted in boldface, and indicated with a double dagger (‡).[17] The Academy held its 13th annual Governors Awards ceremony on November 19, 2022, during which the following awards were presented:[18] The following presented awards and performed musical numbers.[21] In September 2022, the Academy hired television producers Glenn Weiss and Ricky Kirshner to oversee production of the 2023 ceremony. +A photo of Angela Lansbury is displayed during the In Memoriam Oscars tribute at the 95th Academy Awards, in Los Angeles, California, March 12, 2023. Photo by Carlos Barria/REUTERS ___ After five performances, the Oscar for original song is finally announced: “Naatu Naatu” from “RRR.” The song from the Telugu-language film was performed by playback singers Kaala Bhairava and Rahul Sipligunj and a phalanx of dancers earlier in the night. “RRR has to win, pride of every Indian … and has put me at the top of the world,” M.M. Keeravani sang to the tune of The Carpenters’ “Top of the World” while accepting the award alongside Chandrabose. ___ Daniel Scheinert thanked a long list of his former teachers. Daniel Kwan revealed that he still deals to confidence issues. They’re Oscar winners now, after taking home the original screenplay award for “Everything Everywhere All at Once.” Daniel Kwan and Daniel Scheinert win the Oscar for Best Original Screenplay for “Everything Everywhere All at Once” during the Oscars show at the 95th Academy Awards in Hollywood, Los Angeles, California, March 12, 2023. Photo by Carlos Barria/REUTERS “I never thought I was good enough. I have self-esteem problems,” Kwan said. The adapted screenplay award went to Sarah Polley for “Women Talking. +Fisher ALL QUIET ON THE WESTERN FRONT Screenplay - Edward Berger, Lesley Paterson & Ian Stokell GLASS ONION: A KNIVES OUT MYSTERY Written by Rian Johnson LIVING Written by Kazuo Ishiguro TOP GUN: MAVERICK Screenplay by Ehren Kruger and Eric Warren Singer and Christopher McQuarrie; Story by Peter Craig and Justin Marks WOMEN TALKING - **WINNER** Screenplay by Sarah Polley THE BANSHEES OF INISHERIN Written by Martin McDonagh EVERYTHING EVERYWHERE ALL AT ONCE - **WINNER** Written by Daniel Kwan & Daniel Scheinert THE FABELMANS Written by Steven Spielberg & Tony Kushner TÁR Written by Todd Field TRIANGLE OF SADNESS Written by Ruben Östlund The 95th Oscars will be held on Sunday, March 12, 2023, at the Dolby® Theatre at Ovation Hollywood and will be televised live on ABC and in more than 200 territories worldwide. +This is a list of submissions to the 95th Academy Awards for the Best International Feature Film. The Academy of Motion Picture Arts and Sciences (AMPAS) has invited the film industries of various countries to submit their best film for the Academy Award for Best International Feature Film every year since the award was created in 1956.[1] The award is presented annually by the Academy to a feature-length motion picture produced outside the United States that contains primarily non-English dialogue.[1][2] The International Feature Film Award Committee oversees the process and reviews all the submitted films.[2] The category was previously called the Best Foreign Language Film, but this was changed in April 2019 to Best International Feature Film, after the Academy deemed the word "Foreign" to be outdated.[3] For the 95th Academy Awards, the submitted motion pictures must be first released theatrically in their respective countries between 1 January 2022 and 30 November 2022. The deadline for submissions to the Academy was 3 October 2022,[4] and 93 countries submitted a film.[5] Uganda submitted a film for the first time, and Tanzania made a submission for the first time since 2001.[6][7] After the 15-film shortlist was announced on December 21, 2022, the five nominees were announced on January 24, 2023. +YouTube has announced that it’s raising the price of its YouTube TV subscription to $72.99 per month. The new monthly price is an $8 increase from the current $64.99 monthly fee. New members will see the new price starting today, while existing members will see the price change starting on April 18. The Google-owned company blames a rise in “content costs” for the change. To soften the blow, the company announced that it’s lowering the price of its 4K Plus add-on from $19.99 per month to $9.99 per month. “As content costs have risen and we continue to invest in our quality of service, we’ll be adjusting our monthly cost, after 3 years, from $64.99/mo to $72.99/mo, in order to bring you the best possible TV service,” the company said in a tweet. An update for our members. As content costs have risen and we continue to invest in our quality of service, we’ll be adjusting our monthly cost, after 3 years, from $64.99/mo to $72.99/mo, in order to bring you the best possible TV service. — YouTube TV (@YouTubeTV) March 16, 2023 YouTube TV notes that this is its first price increase in three years. In July 2020, the price for YouTube TV increased from $49 to $64.99. +If you're not sure if YouTube TV is for you, we suggest checking out our review on fuboTV, our number one pick for live TV streaming services.  Need more robust internet for streaming? Take a peek at our top-ranked providers. Not interested in streaming live TV? Check out our top-ranked TV providers. YouTube TV is $73 per month for 100+ channels, including Disney Channel, ESPN, HGTV, Nickelodeon, and MSNBC. YouTube TV recently added a Spanish plan for $25 per month for six months, then $34 per month with 28+ Spanish-language channels.  About Us Contact Us Press Awards Our Methodology Phone Plans TV Service Internet Service Home Security VPN Best Home Security Systems Best Internet Service Providers Best TV Service Providers Best Cell Phone Plans Viasat Review Spectrum Internet Review 2021 Xfinity Internet Review DIRECTV Review Vivint Smart Home Security Review Stay updated on the latest products and services anytime, anywhere. Terms of Use | Privacy Policy | Site Map | Disclaimer: The information featured in this article is based on our best estimates of pricing, package details, contract stipulations, and service available at the time of writing. This is not a guarantee. All information is subject to change. Pricing will vary based on various factors, including, but not limited to, the customer’s location, package chosen, added features and equipment, the purchaser’s credit score, etc. For the most accurate information, please ask your customer service representative. +Create a free profile to get unlimited access to exclusive show news, updates, and more! The results are in! It's been such a talent-packed season of The Voice, but unfortunately, it's come to an end. The Season 23 finale of The Voice was Tuesday, May 23. It's then where we found out who took home the prize — and secured their place in Voice history. In addition to Blake Shelton's final appearance and some star-studded performances, the finale episode gave us the results we have all be waiting for. Would Shelton add to his record with a 10th win as a Voice Coach? Would Niall Horan or Chance the Rapper take home a win in their first season? Or would Kelly Clarkson add to her collection of Voice wins?   Watch The Voice on NBC and Peacock. So, who actually did win? Read on for the results.  The winner of The Voice Season 23 was announced during the finale on Tuesday, May 23. Coming in second place was Grace West, followed by D.Smooth in third, Sorelle in fourth, and NOIVAS in fifth.  During the May 15 Live Show, Grace West (Team Blake), D. Smooth (Team Kelly), Gina Miles (Team Niall), Sorelle (Team Chance), and NOIVAS (Team Blake) were all voted to advance to the finale. +GoldDerby The all-important live shows for “The Voice” Season 23 are scheduled to begin a little later than usual this year, on May 15, 2023. That’s when the power officially shifts from the four coaches (Blake Shelton, Kelly Clarkson, Chance the Rapper and Niall Horan) to the viewers at home. Prior to that, the coaches helped narrow down their teams in the blind auditions, battles, knockouts and playoffs. Of the remaining artists, who do YOU think will ultimately join the winners list for this Spring 2023 cycle on NBC? Each week, America will vote for their favorite contestants, with the highest vote-getters advancing to the next round. The singers who receive the lowest number of votes will be eliminated from the competition. Scroll through our gallery below to see photos, song lists and bios for all of “The Voice” Season 23 finalists who made it to the playoffs. Team Niall Horan Age: 18 Hometown: Paxton, IL Resident: Sacramento, CA Blind Audition Song: “The One That Got Away” Battle Song: “Skinny Love” Knockout Song: “Somebody That I Used to Know” Playoff Song: “Wicked Game” Semi-Finals Song: “All I Want” Finals Song (Up-Tempo): “Style” +Cocks to Succeed Interim CEO & Board Member, Rich Stoddart, and Join Board of Directors; Stoddart to Become Chair of the Board Eric Nyman Appointed President & Chief Operating Officer of Hasbro PAWTUCKET, R.I.--(BUSINESS WIRE)--Jan. 5, 2022-- Hasbro, Inc. (NASDAQ: HAS) today announced that its Board of Directors has appointed Chris Cocks as Chief Executive Officer and member of the Board of Directors, effective February 25, 2022. Mr. Cocks currently serves as President and Chief Operating Officer of Hasbro’s Wizards of the Coast and Digital Gaming division, a global leader in tabletop and digital gaming. He will succeed Interim CEO, Rich Stoddart, who was appointed following the October passing of Hasbro’s longtime CEO Brian Goldner. Mr. Stoddart, who has served as a Hasbro independent director since 2014, will become Chair of the Board, effective February 25, 2022. Tracy Leinbach, current Chair of the Board, said: “Chris’s appointment marks the culmination of an extensive and thoughtful candidate review and selection process led by the Board. In Chris, we have chosen a leader uniquely positioned to execute and evolve Hasbro’s Brand Blueprint strategy while continuing to generate growth and deliver strong shareholder returns. +Chris’s extensive omni-channel experience and proven track record make him the ideal leader for Hasbro as it continues to become the world’s leading play and entertainment company. On behalf of the Board, we thank Rich for serving as Interim CEO during a difficult time for the Hasbro family and are delighted he will serve as Chair of our Board.” Mr. Stoddart said: “Having known Chris for years and working more closely with him these last several months, I have no doubt that he will be an extraordinary leader for the next phase of Hasbro’s journey. A storyteller and gamer at heart, Chris innately understands how to create and nurture brands to drive fan and consumer connection across channels. He is a highly strategic leader, with the vision, skills and experience to unlock our Brand Blueprint for supercharged growth.” Mr. Cocks said: “Hasbro has amazing brands, gifted storytellers and unique entertainment assets, and I am humbled to step into the position of CEO at this important time and to build on the strong foundation Brian created. Our consumer products, gaming and entertainment teams are the best and most creative in the business and have shown such incredible resilience. I look forward to working with our highly-experienced senior management team as we continue to reimagine play and entertainment and deliver experiences to families and fans, of all ages, around the world.” Mr. +By Brandon Costa, Director of Digital Tuesday, April 11, 2023 - 12:29 pm Print This Story | Subscribe The National Academy of Television Arts and Sciences (NATAS) announced the nominees for the 44th Annual Sports Emmy Awards on Tuesday. The 44th Annual Sports Emmy Awards ceremony will take place at Jazz at Lincoln Center’s Frederick P. Rose Hall on Monday, May 22, 2023. ESPN led all network groups with 59 total nominations, while NBC Sports also pulled in an impressive 38 nods. FOX Sports also received 33 selections and CBS Sports (29), Turner Sports (26), NFL Network (15), and HBO (10) all registered double-digit nomination totals. Among the leaders by program, NBC Sports’ coverage of the Beijing Winter Olympics and NFL 360 from NFL Network received 10 nominations, while Turner Sports’ coverage of the 2022 NCAA Men’s Basketball Tournament pulled in eight and FOX Sports’ coverage of the 2022 FIFA World Cup netted seven. The National Academy of Television Arts and Sciences (NATAS) will announce the winners at an in-person ceremony at Jazz at Lincoln Center’s Frederick P. Rose Hall on May 22. “Today we honor these esteemed nominees and celebrate those who bring the thrill of competitive sports into our lives on a daily basis,” Adam Sharp, President & CEO, NATAS said in the official nominations announcement. +FOR IMMEDIATE RELEASETuesday, April 11th, 2023 XXIV Olympic Winter Games Earn 10 Nominations, Tied for Most of Any Program Sunday Night Football Nominated for Outstanding Live Sports Series; Up For 12th Win in 15 Years 148th Kentucky Derby and 2022 Winter Olympic Games Nominated for Outstanding Live Sports Special Peacock Earns Six Nominations, Including Woooooo! Becoming Ric Flair (Outstanding Long Documentary) and Meddling (Outstanding Documentary Series) Mike Tirico Nominated in Host and Play-by-Play Categories, Joined by SNF Colleagues Cris Collinsworth and Melissa Stark  Telemundo’s Andrés Cantor, Rolando Cantú, and Miguel Gurwitz Earn Sports Personality Nominations STAMFORD, Conn. – April 11, 2023 – NBC Sports earned 38 Sports Emmy Award nominations for 2022, highlighted by nominations for its coverage of the 2022 Winter Olympic Games, Sunday Night Football, the 148th Kentucky Derby, golf, and more. The announcement was made today by the National Academy of Television Arts & Sciences. The winners will be announced on Monday, May 22. Highlights of NBC Sports’ nominations: Sunday Night Football — primetime television’s No. 1 show — was nominated again for Outstanding Live Sports Series, which it has won 11 times in the past 14 years; +By Will Thorne Staff Writer Beau Ferrari has been promoted to the role of Chairman of NBCUniversal Telemundo Enterprises, succeeding Cesar Conde who departed to head up NBCUniversal News Group in May. In his new role, Ferrari will oversee the company’s media portfolio which includes the Telemundo broadcast network. He will report to directly to NBCUniversal Television and Streaming chairman Mark Lazarus, and direct a substantial portfolio within NBCU which also comprises entertainment, sports, news, cable, global studios and 30 local stations. “Beau is a strong leader with extraordinary business acumen and deep media experience across all media platforms and the Hispanic market. During his three years with the company, he has made a tremendous impact as Telemundo became one of NBCUniversal’s fastest-growing businesses,” said Lazarus. He added, “Beau is ideally suited to seamlessly take over the reins of Telemundo and build on its phenomenal success.” Ferrari has served as executive vice president of NBCUniversal Telemundo Enterprises since 2017, overseeing the company’s operations, financial performance, corporate strategy and development for the portfolio of businesses. “It’s an incredible honor to lead the talented team at Telemundo Enterprises, particularly at a time when there is so much momentum in this business,” said Ferrari. “I am excited for the opportunity to take the company to the next level and guide Telemundo’s continued growth. +Prior to joining Peacock in October 2021, Campbell was President of Hulu, where she led the SVOD and live-TV streaming businesses, following a role as Hulu’s Chief Marketing Officer, where she guided overall marketing and drove Hulu’s strategic brand vision and voice. Prior to joining Hulu, Campbell spent more than a decade at Google in marketing leadership roles across the Google Ads and Google Cloud businesses. Campbell is a graduate of Harvard Business School and Vanderbilt University. A respected leader and innovator, Campbell has been recognized as one of Business Insider’s Most Innovative CMOs, the Adweek 50, AdAge’s Women to Watch, FierceCable’s The Fierce 50: Executives Reshaping the Business of Pay TV, and Forbes’ Most Influential Global CMOs.   Cesar Conde Chairman, NBCUniversal News Group Cesar Conde was named Chairman of NBCUniversal News Group in May 2020. In this role, Conde has oversight of NBC News, CNBC, MSNBC, NBC News NOW, Telemundo Enterprises and NBCUniversal Local, which includes 43 NBC/Telemundo local stations.   Under Conde’s leadership, the NBCU News Group has made substantial investments in digital and streaming, accelerating its leading position across all platforms. +By Jay Peters and Emma Roth Elon Musk has created a new company dedicated to artificial intelligence — and it’s called X.AI, as first reported by The Wall Street Journal. The company, which a Nevada filing indicates was incorporated last month, currently has Musk as its director and Jared Birchall, the director of Musk’s family office, listed as its secretary. The filing, which The Verge has also obtained, indicates that Musk incorporated the business on March 9th, 2023. Rumors about Musk starting up an AI company have been floating around for days, with a report from Business Insider revealing that Musk had purchased thousands of graphic processing units (GPUs) to power an upcoming generative AI product. The Financial Times similarly reported that Musk planned to create an AI firm to compete with the Microsoft-backed OpenAI. Musk even reportedly sought funding from SpaceX and Tesla investors to get the company started. During an interview on Twitter Spaces, when Musk was asked about all the GPUs he purchased, the billionaire made no mention of his plans to build an AI company, stating “it seems like everyone and their dog is buying GPUs at this point.” The purported X.AI name matches the branding of the X Corp. name he has since assigned to Twitter, along with the “X” label he’s applied to his vision of an “everything app. +Musk was one of the tech leaders who earlier this year called for AI developers to agree to a six-month pause before building systems more powerful than OpenAI's latest model, GPT-4. Around the same time, he had already been working to start his own AI company, according to Nevada business records. —With reporting by the Associated Press. First published on July 12, 2023 / 6:04 PM © 2023 CBS Interactive Inc. All Rights Reserved. Copyright ©2023 CBS Interactive Inc. All rights reserved. Quotes delayed at least 15 minutes. Market data provided by ICE Data Services. ICE Limitations. Powered and implemented by FactSet. News provided by The Associated Press. Legal Statement. +Filed under: It’s the middle of April, the big Hokie Hi weekend has passed, and the biggest of the big campus celebration events was the Spring Football Game. There were lots of things to look at and analyze but for now, here are some shots and comments from the game. GO HOKIES!!! The crowd was easily over 20,000 people. Hokie Hi weekend featured Friday and Saturday celebrations with an evening tribute to the fallen 32 from April 16th 2007. The morning on Saturday was the 3.2 mile Run and Walk for Remembrance, and the crowd there was estimated to be 15,000 or so. The weather in Blacksburg not only cooperated, it assisted by being comfortably warm, without being hot, and a light breeze was blowing. It was a magnificent way to honor the fallen and celebrate their memories as Hokies. The Maroon Squad Offense was obviously mostly #1s int he depth chart, with Grant Wells starting at Maroon Squad QB. He’d remain there for the first half. We’ll talk about the various observations in a coming article, but overall, he did well and seemed like he was much more comfortable than he was last season. We’ll take that as a major plus, for now. +The Virginia Tech Hokies wrapped up their Spring portion of the off-season with the 2023 Annual Spring Game. The spectacle filled Lane Stadium to half capacity and was televised by the ACC Network. It was the first chance for thousands of fans to watch the 2023 Virginia Tech Hokies in a simulated game atmosphere. The contest resulted in a lop-sided affair, won by Team Maroon over Team White, with a final score of 34-0. Here are five takeaways from the action we saw on the field on Saturday:  1. Quarterback Competition is far from over as Wells and Drones continue to battle it out There was never going to be a definitive answer exiting the Spring Game, but we all got the chance to see the development of Grant Wells and the capabilities of Kyron Drones at the quarterback position. Wells finished 12-of-18 for 148 passing yards (66.7%) and a TD. He had 3 rushes for 10 yards and a rushing touchdown. Notably, Wells threw 6 passes that were gains of 16-or-more yards. The incumbent starter mostly linked up with the Gosnell brothers (Stephen and Benji) and Tucker Holloway. Wells executed his plays and limited the risky elements of his playstyle. It also helps that he inherited the more stable offensive line, which once again benefited his performance. +“I am proud CCSSO has had the privilege to support excellent teachers like Rebecka through the National Teacher of the Year Program for more than 70 years.” Every year, exemplary teachers from each state, U.S. extra-state territories, the District of Columbia and the Department of Defense Education Activity are selected as State Teachers of the Year. From that group, the National Teacher of the Year is chosen by a selection committee composed of 17 individuals and education organizations. The Selection Committee said in a statement: “Rebecka is a caring and passionate educator who understands the importance of connections and providing individual supports for students, both in her math classes and beyond. She has a deep knowledge of both education policy and teaching practices and understands that sustained change at a small scale can make a big difference for students. We know people across the country will connect with the stories she shares as the 2023 National Teacher of the Year.”    “Rebecka Peterson has inspired our children in the classroom — but we all know that her work is not done yet, and she will inspire millions of others in her very young but distinct career. Rebecka has changed the lives of countless students; she impacts all those around her and makes everyone better. She finds potential not only in our children, but in our teachers as well,” Oklahoma State Superintendent of Public Instruction Ryan Walters said. “She represents Oklahoma’s future and reassures us all that the future is bright. +The Council of Chief State School Officers (CCSSO) is thrilled to announce the finalists selected to interview for 2023 National Teacher of the Year. This group of exemplary teachers is:    CCSSO’s National Teacher of the Year Program identifies exceptional educators across the country, celebrates their work in and outside the classroom and offers them a one-of-a-kind professional development opportunity.  The 2023 cohort includes 55 educators. From that group, the National Teacher of the Year selection committee, which includes representatives from 16 education organizations, selects a group of finalists based on a robust application process.  The finalists will interview with the National Teacher of the Year Program’s selection committee, and CCSSO will announce the 2023 National Teacher of the Year later this spring.   Special thanks to the National Teacher of the Year Program sponsors: Google for Education, Equitable, Pearson, Cambium Assessment, Cognia, Curriculum Associates, Data Recognition Corporation, ETS, GoGuardian, MetaMetrics, NWEA, Smarter Balanced and Voya. +2023 Douglas County Fair & Rodeo runs July 28 – Aug. 6 Posted on July 18, 2023 2023Fair and RodeoNews and Events Share Are you still looking for one last taste of summer fun before the kids head back to school? Get your tickets now to the 2023 Douglas County Fair & Rodeo, packed with fun for every member of your family. Check out this year’s lineup and join us in just 10 days! Kick-off concert: If you listen to Country music radio, you know Randy Houser! Houser will be kicking off the entertainment with an incredible concert experience featuring Chase Bryant at 7 p.m. Friday, July 28, in Castle Rock. Tickets start at just $25 and are on sale now. A lighted drone show will play between the two acts. Farm to Table: A feast for your senses starts at 11 a.m. Sunday, July 30, with the much-anticipated return of the Farm to Table lunch at the Fairgrounds. This unique experience is far more than a chef-inspired meal. Dueling pianos play in the background as you sip mimosas and mingle with the farmers, vendors and chef who are responsible for the meal you’re about to enjoy. See this year’s menu and grab your tickets online now! +Sign up for email updates from Douglas County Fair & Rodeo Save yourself time, No waiting in line! Purchase tickets online and have them sent straight to your phone, email or have them mailed to you! All ticket sales subject to applicable fees. BUY TICKETS Military and first responders, click here GOVX Military to receive your complimentary ProRodeo Ticket for Friday, August 4th or Sunday, August 6th. Thank you for your service! Saturday, July 29 10:00am – 11:00pm Sunday, July 30 11:00am – 10:00pm Wednesday, August 2 3:00pm – 10:00pm Thursday, August 3 2:00pm – 10:00pm Friday, August 4 12:00pm – 11:30pm Saturday, August 5 9:00am – 11:30pm Sunday, August 6 9:00am – 4:00pm +Two decades after entering India, Apple is gearing up to launch its first set of retail stores in the populous South Asian nation, signaling the tech giant’s growing interest in the market. Apple said on Tuesday it plans to open Apple BKC in Mumbai on April 18 and Apple Saket in Delhi on April 20. The iPhone-maker’s first retail stores in India have been long-anticipated, but the limited market for high-end smartphones and laptops in the country has tempered Apple’s expansion efforts. Despite being the world’s second-largest internet market, the majority of smartphones sold in India are priced below $250. While India accounts for a small portion of Apple’s overall revenue, the iPhone-maker has expressed optimism about the nation’s potential for growth. Apple said that the new retail locations “mark a significant expansion in India that will offer great new ways to browse, discover, and buy Apple products with exceptional service and experiences for customers.” In preparation for the store openings, Apple has been actively recruiting employees in recent months, according to growing job postings. The company, which launched its Indian online store in 2020, had initially planned to open its first retail location in 2021, but the COVID-19 pandemic forced a delay. Apple is also working to turn India into a key global hardware manufacturing hub, thanks in part to the incentives New Delhi is offering to manufacturers to expand their presence in the country. +The Apple Store is a chain of retail stores owned and operated by Apple Inc. The stores sell various Apple products, including Mac personal computers, iPhone smartphones, iPad tablet computers, Apple Watch smartwatches, Apple TV digital media players, software, and both Apple-branded and selected third-party accessories. The first Apple Stores were originally opened as two locations in May 2001 by then-CEO Steve Jobs, after years of attempting but failing store-within-a-store concepts. Seeing a need for improved retail presentation of the company's products, he began an effort in 1997 to revamp the retail program to get an improved relationship with consumers and hired Ron Johnson in 2000. Jobs relaunched Apple's online store in 1997 and opened the first two physical stores in 2001. The media initially speculated that Apple would fail, but its stores were highly successful, bypassing the sales numbers of competing nearby stores and within three years reached US$1 billion in annual sales, becoming the fastest retailer in history to do so. Apple has expanded the number of retail locations and its geographical coverage over the years, with 526 stores across 26 countries and regions worldwide, opening its latest store in the Battersea district of London, United Kingdom on June 15, 2023.[2][3] Strong product sales have placed Apple among the top-tier retail stores, with sales over $16 billion globally in 2011. +After two years in New York City, the CAA World Congress of Sports is moving back to the West Coast in 2023 and its pre-pandemic time slot in the spring. The program will be taking place April 18-19 at the JW Marriott Los Angeles L.A. LIVE. World Congress is the largest and most prestigious sports business conference in North America. In draws more than 800 attendees, including league officers; team owners and presidents; corporate sponsors and advertisers; media executives and agency heads. While the program addresses the business of sports from the perspective of the industry’s top executives, it also features speakers and topics that transcend sports. In addition to the content, World Congress is known as a networking hub where high-profile discussions take place and deals get done among the industry’s top stakeholders. Info@nilnewsstand. +Email events@SportsBusinessJournal.com Now in its 20th year, the 2021 CAA World Congress of Sports will be returning to the city where it all began. The program will take place at the New York Marriott Marquis in the Broadway Ballroom, New York City’s most spacious and newly renovated ballroom, which has been home to the Sports Business Awards since 2009.   © 2023 Leaders Group. All rights reserved.The material on this site may not be reproduced, distributed, transmitted, cached or otherwise used, except with the prior written permission of Leaders Group. +Google CEO Sundar Pichai’s 2022 Compensation Valued at $226 Million Listen (2 min) Google CEO Sundar Pichai’s 2022 Compensation Valued at $226 Million Listen (2 min) This copy is for your personal, non-commercial use only. Distribution and use of this material are governed by our Subscriber Agreement and by copyright law. For non-personal use or to order multiple copies, please contact Dow Jones Reprints at 1-800-843-0008 or visit www.djreprints.com. https://www.wsj.com/articles/google-ceo-sundar-pichais-2022-compensation-valued-at-226-million-e43ec06f By Updated April 22, 2023 1:11 pm ET Listen (2 min) Sundar Pichai, chief executive of Alphabet Inc. and Google, was awarded compensation in 2022 valued at $226 million, according to a regulatory filing Friday, including a triannual stock award valued at more than $200 million.In 2019, the last year his compensation included a triannual stock grant, his compensation was valued at $281 million.  Copyright ©2023 Dow Jones & Company, Inc. All Rights Reserved. 87990cbe856818d5eddac44c7b1cdeb8 Continue reading your article witha WSJ subscription Already a subscriber? +Justin Sullivan/Getty Images News Alphabet's (NASDAQ:GOOG) (NASDAQ:GOOGL) CEO Sundar Pichai received $226M in total compensation in 2022, including a $218M equity award via a triennial stock grant. Annual salary was $2M, with the CEO's compensation package also including almost $6M for personal security. Difficult time? The news comes as Alphabet (GOOG) (GOOGL) initiates cost restructuring measures, including layoffs of 12,000 workers, or 6% of workforce. Pichai even said in January that top executives would get lower bonuses as part of cost-cutting measures. In December, the company granted a new triannual equity award to Pichai with a value of $210M. In 2019, the last year his compensation included a triannual stock grant, his compensation was valued at $281M. Have a tip? Submit confidentially to our News team. Found a factual error? Report here. +That's in line with when Google normally holds its developers conference — last year's edition took place on May 11 and May 12, for example. There will be an in-person event at the Shoreline Amphitheatre in Mountain View, Calif., a venue that's just down the street from Google headquarters. Most people will attend virtually, though since Google streams its developer conference. The Google I/O 2023 website promises a kickoff keynote that gets underway at 1 p.m. ET/ 10 a.m. PT/ 6 p.m. BST on May 10. A developer keynote will follow afterward, diving into more detail on tools available to Google developers. You can find a full Google I/O 2013 schedule listing the different presentations. The Google I/O 2023 agenda doesn't provide any specific details about what's in store on May 10. But we can make some educated guesses about what's on tap, given Google's past announcements and rumors about the company's current plans. Google Bard is just the start of the company's grand plans for AI-powered search. According to a report in The New York Times, Samsung is considering ditching Google as the default search engine for its devices in favor of Bing. And Google is feverishly working on the next stage of its search engine which will integrate a chatbot.  Dubbed Project Magi, Google has reportedly devoted a large portion of its staff to accelerating the implementation of AI into its search engine. +All sessions will be on demand to watch at your convenience. Check back on the site to see the full program. There are no tickets this year; everyone can register online to join us. Register now. Registration for Google I/O 2023 enables you to stay up to date about the schedule and content along with relevant developer news via non-spammy email. As a registrant, you can also create a developer profile to get the most out of the digital experience by saving and viewing content that's relevant to you. If you’re unregistered you can still view the keynotes and sessions, but you won’t receive communications related to the event. In addition, you won’t be able to save content to view later or get recommendations via your developer profile. Attendees must be at least 18 years of age to participate in Google I/O. You don’t! But creating a developer profile enables My I/O, which allows you to select interests and receive content recommendations. Yes. My I/O is powered by your developer profile interests, which can be changed anytime in your settings. My I/O is a custom panel on the event website that helps you keep track of content you’re interested in. Content you save to My I/O will also be saved to your developer profile dashboard so you can watch it after the event is over. If you’re having trouble signing in to register, it may be that you did not grant developer profile access. +And I think that actually, through this experience, I’ve been able to transform that into a sense of trust, which is a really nice feeling,” she said.  The Broadway production is lead produced by James Bierman of Empire Street Productions. Bierman noted the production was able to recoup while also offering lower-priced tickets, including $10 lottery tickets and $45 rush tickets throughout the run. “Bringing Prima Facie to Broadway has been a journey of responsibility and faith that has been met with a response that we only dared to dream of when we set out. Suzie Miller’s urgent play, Justin Martin’s forensic direction, and our design team’s visceral production have been the backdrop for Jodie Comer’s extraordinary performance as Tessa Ensler, and the way that audiences have embraced all of this has been truly humbling,” Bierman said.  A film adaptation of Prima Facie is in the works, with Cynthia Erivo set to star and executive produce. Sign up for THR news straight to your inbox every day Sign up for THR news straight to your inbox every day Subscribe for full access to The Hollywood Reporter Send us a tip using our anonymous form. +The production has grossed close to $1 million for several weeks of its run, with an average ticket price hovering around $150 and capacity close to 100 percent. The recoupment comes a week after Comer won the Tony Award for best lead actress in a play. In Prima Facie, written by Suzie Miller and directed by Justin Martin, Comer plays Tessa, a young, ambitious lawyer who defends individuals accused of sexual assault and then goes through the legal system herself as a victim of rape. While accepting her Tony Award on stage, Comer acknowledged the responsibility she feels in taking on the role.  “To every person who feels represented by Tessa, this has been the greatest honor and it continues to be,” she said. The play marks Comer’s Broadway debut. The Killing Eve actress played the role on the West End, where she made her professional stage debut and won an Olivier Award for her performance, for a run that began in April 2022. After being with the role for more than a year, Comer told The Hollywood Reporter that she feels changed by the experience.  “I feel like I have so much more trust within myself and who I am. I realized that I was quite fearful last year of a lot of things, especially in my ability to do this. +LOS ANGELES — Coyne Lloyd, a 35-year-old tech investor, was visiting his family in Upstate New York recently when he decided to set up some dates in the city. He fired up Hinge, his preferred dating app, and swiped on a few interesting women. After receiving a couple of matches, he turned, out of curiosity, to a new AI dating tool called Rizz to break the ice. “There’s some amount of mental work and barrier to thinking of how to compose a message [on a dating app],” Lloyd said. “It’s like getting started on a term paper.” Rizz, which is meant to function as a digital wingman, helps users come up with killer opening lines and responses to potential matches. The company behind it is just one of many start-ups trying to transform romance through artificial intelligence by optimizing and automating online dating, now one of the primary ways by which people find romantic connections. Using dating apps can be a slog. Some people complain that they have to sift through countless matches as others indiscriminately swipe; it is difficult to start conversations with strangers; and many users end up viewing the apps more as a necessary chore than an exciting opportunity to connect with someone new. Additionally, the world is becoming more automated: Email messages auto-complete, subscription services auto-renew, and any product under the sun is a single click away. +Mirakyan's interest in an app like his, however, seems to go deeper than Lloyd's term paper comparison. Speaking to WaPo, he explained that he's always had a difficult time reading social cues — a dating stressor that a tool like YourMove.ai helps to alleviate. "There's such a gap currently," he told the newspaper, "in what people like myself want to communicate and how it comes across." That's sympathetic, in a sense, and we could see how AI assistance might benefit folks who have a tough time socially. At the same time, however, balance is definitely still needed here. Romance is one of the most human things out there, and the digital dating world is robotic enough as it is. Do we really want everyone on the apps just passing AI-generated quips and complements back and forth for eternity? That's starting to sound like The Sims — and as humans, maybe we should shoot a little higher. More on post-AI online dating: Man "Sure" His AI Girlfriend Will save Him When the Robots Take Over Share This Article DISCLAIMER(S) Articles may contain affiliate links which enable us to share in the revenue of any purchases made. Registration on or use of this site constitutes acceptance of our Terms of Service. © Recurrent Ventures Inc, All Rights Reserved. +Jeff Carlisle joins Futbol Americas to discuss the reported appointment of Matt Crocker as USMNT sporting director. (1:57) British football executive Matt Crocker was hired Tuesday as sporting director of the U.S. Soccer Federation and will lead the search for the United States men's national team coach, a job that has been uncertain since Gregg Berhalter was pushed aside during an investigation that developed from a feud with the Reyna family. Crocker will start the job on Aug. 2 but will begin the coach search process immediately, the USSF said. - Stream on ESPN+: FA Cup, LaLiga, Bundesliga, more (U.S.) In introducing Crocker, USSF president Cindy Parlow Cone said he, "brings a wealth of knowledge having worked at various roles and at various levels of our game. He will set the sporting vision for U.S. soccer and implement the technical plan for the women's men's extended and youth national teams." Crocker will also be providing support for the USWNT during the World Cup prior to his start date. She added that Crocker, "excels in communication as well as being a team builder. He is driven, he's creative and committed to building relationships at every level of the game. His passion for the game, his experience and expertise will make U.S. Soccer better. +U.S. Soccer plans to narrow the focus of its sporting director job as part of a slight but significant restructuring near the top of the federation. The role has been vacant since Earnie Stewart departed last month. In 2019, it was essentially created for Stewart, who extended his responsibilities beyond the U.S. men's national team, to all of U.S. Soccer's national teams and even to the sport's broader American ecosystem. But now, as U.S. Soccer's leaders conduct what they are calling "a global search" for Stewart's successor, they have also changed the job description. President Cindy Parlow Cone said Saturday that the new sporting director, whom they expect to hire before July's Women's World Cup, will "really focus on our national teams ... and our technical plan at the elite level." They have essentially split Stewart's job — which "was huge," Parlow Cone said — into two. They will create a new position to oversee the broader landscape. That new executive, who will report to CEO JT Batson, will focus on everything from coaching education to referee development, and on "growing youth and adult participation," Batson said. This will, in turn, allow the sporting director to work almost exclusively on the elite player pathway and the environments and structures surrounding U.S. Soccer's 27 national teams — from the USMNT and USWNT all the way on down to youth teams and what U.S. +Oklahoma State University Big 12 Championships - Day 3 April 23, 2023 | Cowgirl Golf +USC won its eighth team crown in program history, equaling the most in league history, and Stanford sophomore Rose Zhang set or matched several scoring records in claiming the individual title at the 2023 Pac-12 Women's Golf Championships hosted by Arizona State at Papago Golf Club in Phoenix. A full recap can be found here. +Featuring a mix of motion capture and voice over, here's the main cast. Star Wars Jedi: Survivor takes place five years after the first game, Star Wars Jedi: Fallen Order, and follows Cal Kestis, one of the few survivors of the Great Jedi Purge, as he fights against the Galactic Empire and the forces of the Dark Side as they try to eliminate the remaining Jedi. RELATED: Every Stance In Star Wars: Jedi Survivor, Ranked The game uses a mixture of traditional voice acting and motion capture for its characters. Many characters are modeled after a likeness of their voice actor, while others are droids or alien creatures. Below is a list of the main characters featured in the game and some insight into who is playing them. A new character for the Star Wars canon introduced in this game, Turgle is a frog-like creature who frequents Pylon's Saloon. A quickly beloved character by fans, Turgle is voiced by seasoned voice actor Richard Steven Horvitz, known for voicing Zim in Invader Zim, and Billy in The Grim Adventures of Billy and Mandy, among multiple other credits. You can find Turgle on the planet Koboh, where part of the game's story will involve assisting him. Turgle is a comedic character, matching the personality of other characters in Horvitz's work. +Star Wars Jedi: Survivor tells a layered and fantastic story, and its cast of characters elevates that beyond expectations. Star Wars Jedi: Survivor follows up Fallen Order with Cal's biggest and most trying adventure yet. As he seeks to find peace for those around him, and ultimately within himself, he works alongside new and old characters in order to achieve his goals - while fighting against dangerous new threats, too. RELATED: Things We Wish We Knew Before Playing Star Wars Jedi: Survivor There are a few standout characters in Star Wars Jedi: Survivor that truly highlight the whole experience, working as a significant and impactful part of the overarching story. These are the best and most memorable characters in Jedi: Survivor. Warning: There Will Be Spoilers For The Story Of Star Wars Jedi: Survivor This lovable frog is quick to win players' hearts, as you meet him just outside of Pyloon's Saloon in Cal's first time on Koboh. About to be executed by Rayvis and his raiders, Cal steps in to save him. After this, Turgle can be found in Pyloon's Saloon for the remainder of the game, and is available for conversations as the story progresses. His part might not be the biggest, but he deserves all the love. This little fisherman can be encountered all throughout the locations of Koboh, helping Cal to catch new species of fish after their introduction. +Lena subdues Salim while Ria finally masters a reverse spinning kick to defeat Raheela, and the police arrive as the sisters drive off. Reconciling with Lena, Ria finally receives an encouraging email from Eunice, and the sisters celebrate together. In January 2022 it was revealed a feminist action comedy focusing on two British-Pakistani sisters was being filmed in London by Nida Manzoor with Working Title, Focus Features and Parkville Pictures, with a tone and voice similar to Manzoor’s breakthrough and BAFTA, Peabody, and Rose d'Or award winning sitcom series We Are Lady Parts.[5] In February 2022 it was announced that filming had wrapped on the project in London. It is produced by Tim Bevan and Eric Fellner for Working Title with Olivier Kaempfer and John Pocock for Parkville Pictures. Focus Features had distribution rights.[2][6][7] The typography & graphic design for the title card, credits, chapter headings and fight sequence introductions was designed by Peter Anderson Studio.[8] Polite Society was released at the 2023 Sundance Film Festival on 21 January 2023,[9] at the 2023 Glasgow Film Festival on 12 March 2023,[10] and was released in the United Kingdom and the United States on 28 April 2023.[11][12] +Manzoor lists directors Mira Nair (The Namesake) and Deepa Mehta (Elements trilogy) as two people who inspire her, since they feature South Asian women in their projects. "It made me believe that our stories are worth being told," Manzoor says, noting that she also looks up to Pedro Almodóvar. "He centered women in a way that I hadn't experienced before." Tamara Jenkins' 1998 debut film Slums of Beverly Hills, which is about a teenage girl struggling to grow up in a lower-middle-class nomadic Jewish family that relocates every few months, made Manzoor feel seen as a teenager. "Each of her movies expresses a real truth of womanhood and there's a rawness to her work that I gravitate to," she explains. In addition to Slums of Beverly Hills, Jenkins directed The Savages and Private Life. Since Manzoor is focused on telling women-centric tales, it makes sense that Jane Austen's works have always resonated with her. "There's something in the way she explores the pressure of society and being a woman who wants to strike out on her own," she says.  Polite Society is in theaters now. +Create a free profile to get unlimited access to exclusive show news, updates, and more! The NBC comedy wrapped its second season on April 28. Grab your glasses everyone, because it's time to talk Grand Crew. The comedy series, created by Brooklyn Nine-Nine's Phil Augusta Jackson, officially returned in March for Season 2. Watch Grand Crew on NBC and Peacock.   "I kept saying since we wrapped that we would get renewed for a second season," Nicole Byer, who plays Nicky on the show, told NBC Insider. "So when we got renewed I said, 'Listen to Black women!'" Echo Kellum, who plays Noah, explained that he was also optimistic about returning for a second season. "I was very ecstatic. A little surprised, but I kind of saw it coming because I knew if it was really about the chemistry of the cast, the content of the show, then we'd be in good footing," he said.  Read on to learn what you need to know about the second season of Grand Crew:  The Season 2 finale aired on Friday, April 28 at 8:30/7:30c with a special back-to-back two episode event: Episode 9's "Wine & Journals" and Episode 10's "Wine & Tastings."  Like Season 1, there are a total of 10 episodes of Grand Crew for Season 2. +It’s currently on a hiatus and it’s also hard to say when the new season will come back to the NBC as the premiere date hasn’t even yet been confirmed yet online. We’re hopeful that Grand Crew season 2 is currently shooting and the premiere date will be sometime in early 2023. Its regular time slot is 8:30 p.m. EST on Tuesdays. The show might have to compete with upcoming pilots who might compete for its time slot. With that being said, hopefully there isn’t a drastic last-minute change to the 2022-2023 lineup. Other shows to watch out for include American Auto, Young Rock, Quantam Leap, La Brea, and New Amsterdam. And for those of you who haven’t met the crew yet, what are you waiting for? This group of millennials will have you laughing all night long. Check out the trailer and see for yourself below: Grand Crew is currently available to stream on Peacock. Stay updated with Hidden Remote for the latest updates on the second season of the show. Build your custom FanSided TV email newsletter with news and analysis on All Television and all your favorite sports teams, TV shows, and more. Your favorite teams, topics, and players all on your favorite mobile devices. © 2023 Minute Media - All Rights Reserved. The content on this site is for entertainment and educational purposes only. All betting content is intended for an audience ages 21+. +Comedian Roy Wood Jr. headlines the 2023 White House Correspondents' Association Dinner. President Biden makes remarks at the White House Correspondent' Association Dinner. The "Daily Show" correspondent Roy Wood Jr headlines the White House Correspondents' Association Dinner. Live coverage of celebrities, journalists, and other guests walking the red carpet as they arrive for the 2023 White House Correspondents' Association dinner. President Biden gives remarks at the first White House Correspondents' Association Dinner since 2019. The Daily Show host Trevor Noah headlines as the evening’s entertainment. Historian and author Ron Chernow is the keynote speaker at the White House Correspondents' Association’s 2019 annual dinner in Washington, DC. Journalists, politicians, members of the Trump administration, and celebrities gather for the White House Correspondents' Association annual dinner in Washington, D.C., with entertainment provided by comedian Michelle Wolf. The Daily Show’s Hasan Minhaj entertains reporters, public officials, and celebrities at the 2017 White House Correspondents' Association dinner. Neither President Trump nor members of his administration attended the event. President Obama and comedian Larry Wilmore speak at the White House Correspondents' Association annual dinner, which brings together journalists, politicians, and celebrities at the Washington Hilton. +April 29, 2023 WHCA photo by Mike Theiler WHCA photo by Mike Theiler WHCA Photo by Mike Theiler WHCA Photo by Mike Theiler WHCA Photo by Mike Theiler WHCA Photo by Mike Theiler WHCA photo by Mike Theiler WHCA photo by Mike Theiler WHCA Photo by Mike Theiler WHCA Photo by Mike Theiler WHCA Photo by Mike Theiler WHCA Photo by Mike Theiler WHCA Photo by Mike Theiler WHCA Photo by Mike Theiler WHCA photo by Mike Theiler WHCA photo by Mike Theiler WHCA Board WHCA Photo by Mike Theiler WHCA photo by Mike Theiler WHCA photo by Mike Theiler WHCA Photo by Mike Theiler The annual dinner of the White House Correspondents’ Association will be on April 29, 2023. Our annual dinner is our main source of revenue to finance all of our work, including support of the journalists working to cover the president, events and programs to educate the public about the value of the First Amendment and a free press, and scholarships to help the next generation of journalists. +The Chinese city of Chengdu will be the host city for The World Games 2025. On Thursday 9 May, in Gold Coast, Australia, the Mayor of Chengdu, Mr Luo Qiang, signed the Organiser Agreement for the 12th edition of the multi-sports event. The Vice President of IOC and the Chinese Olympic Committee, Mr Yu Zaiqing, signed the agreement as Witness. President Jose Perurena  signed on behalf of the International World Games Association. This was preceded by ratification of the contract by the 37 member federations of the IWGA during the Annual General Meeting at the SportAccord Convention in Gold Coast. Chengdu follows the city of Birmingham, Alabama as host. The 11th edition of The World Games will take place there from 15 to 25 July 2021. Jose Perurena said at a press briefing afterwards: “By signing a contract with one of the most forward-looking and dynamic cities in China, we have signalled our arrival as a major power in international sport.” The IWGA President added: ”Following our 2021 event in another great country, the USA, we are excited now to start work with our Chinese partners on plans for 2025.” Chengdu Mayor, Mr Luo Qiang, said: "Chengdu highly appreciates the concept of the IWGA and believe that it is in line with Chengdu's development philosophy. +After months of anticipation and years of preparation, we finally have our 16 host cities and venues for the 2026 World Cup, which will be hosted by the United States, Canada and Mexico. The major takeaways: 11 U.S. cities were selected from the candidate pool, with three cities in Mexico and two Canadian cities joining the fray as well. The List: United States: New York/New Jersey, Philadelphia, Boston, Atlanta, Miami, Houston, Dallas, Kansas City, Seattle, San Francisco/Bay Area and Los Angeles Canada: Vancouver, Toronto Mexico: Mexico City, Guadalajara, Monterrey The tournament was awarded to the North American and CONCACAF rivals four years ago, fending off a strong bid from Morocco, and will be a notable competition for several reasons. It will be the first World Cup hosted by more than one nation since 2002, when Japan and South Korea shared the honors, and it'll be the first World Cup with three hosts. Mexico will make history as the first nation to host or co-host for a third time (following 1970 and 1986), the U.S. will be second-time hosts (following 1994), and it will be Canada's first time hosting the men's tournament, having been the site of the Women's World Cup in 2015. +As a result of the purchase, ownership by TCW management and employees increased to 44%, while Carlyle maintains a 31% interest in the firm. As of June 30, 2023, TCW had $210 billion of assets under management or committed to management.[8] The CEO of The TCW Group is Katie Koch.[9] +Kathryn Koch was named president and CEO of TCW Group, a news release said Tuesday. Ms. Koch, who will join the manager in the coming months, was previously CIO of the public equity business at Goldman Sachs Asset Management. She will succeed David Lippman, who is retiring from the firm when his contract expires at the end of 2022. In August 2021, sources said he was expected to leave when the impending departure of Tad Rivelle, CIO of fixed income, was announced. Mr. Lippman has been CEO of TCW Group since 2012. A TCW Group spokesman said in an email that Ms. Koch was selected for "her broad experience in domestic and international business development and strategic planning." GSAM announced Ms. Koch's departure in a statement on Tuesday emailed by a spokeswoman. She will not be directly replaced, and the heads of the three primary investment platforms within public equities will report to Ashish Shah, CIO of public investing. Those are Steve Barry, CIO of fundamental equities, Monali Vora, head of quantitative equity solutions; and Osman Ali and Dennis Walsh, co-heads of quantitative investing. TCW Group has about $220 billion in assets under management. Ms. Koch could not be immediately reached for further information. Sign up and get the best of News delivered straight to your email inbox, free of charge. Choose your news – we will deliver. +The Pixel Fold is available for pre-order from today (May 10), with general sales in June. Incredibly, as of late May, the top 512GB Pixel Fold model is already sold out in the US. If you pre-order the Pixel Fold, Google will also toss in a free Pixel Watch, although this promotion is limited to Germany, the UK, and the US (leaving Japan in the lurch). Otherwise, everyone also gets a 2TB Google One plan for six months and a three-month subscription to YouTube Premium. There’s also a trade-in program for those who want to switch their current handset for the foldable. Google accepts products from Apple, LG, Motorola, OnePlus, and Samsung, and the trade-in’s value differs between the various models. Notably, you can also trade in Google Pixels. For instance, the 128GB Pixel 7 Pro will get you $380 off the Fold’s price. Visit Google’s trade-in portal for the full list of products and offers. The Pixel Fold hasn’t made its mass market debut yet, so you won’t find expert reviews of the foldable. However, based on our experience with the device at Google I/O 2023, the Pixel Fold should do more than enough to challenge the likes of Samsung in this space. In his hands-on preview, C. Scott Brown “came away impressed” by the Pixel Fold. “It felt great. It looked great. +The Google Pixel Fold was in the rumor mill for more than a year, without Google ever acknowledging it's working on it until a few days before Google I/O 2023. With this year's developer conference now out of the way, the cat is finally out of the bag, and we will soon be able to get our hands on Google's first foldable. We can only hope that this brings more foldables from other manufactures to the US, as more competition is always better. Keep your eyes peeled on June 27th if you're looking to pick one up at launch. Google's first foldable has arrived with a wider aspect ratio — inside and out — as well as the Tensor G2's AI finesse to help squeeze every pixel out of the cameras and every iota of productivity out of your day. Manuel Vonau is Android Police's Google Editor, with expertise in Android, Chrome, and other Google products — the very core of Android Police’s content. He has been covering tech news and reviewing devices since joining Android Police as a news writer in 2019. He lives in Berlin, Germany. Manuel studied Media and Culture studies in Düsseldorf, finishing his university career with a master's thesis titled "The Aesthetics of Tech YouTube Channels: Production of Proximity and Authenticity." His background gives him a unique perspective on the ever-evolving world of technology and its implications on society. +What it is: Google’s first smartphone that folds in half, arriving next month How much does it cost? $1,799 to start What does it promise? A great camera and a design that means it’s easier to use (or tuck into a pocket) when closed More than a quarter of smartphone owners in the United States are “highly likely” to upgrade to a foldable model next, according to a survey conducted by Counterpoint Research. That leaves Google — long an also-ran in the U.S. smartphone market — with an opportunity. And thankfully, the company’s first attempt at a folding phone feels very different from the others you can buy right now. For one, this book-style foldable isn’t as awkward to use as some models. The Fold has a 5.8-inch external screen, and it’s proportions are pretty close to traditional smartphone screens. Rival models from Samsung, for example, have taller and slimmer displays on the outside, so sending text messages and browsing the web can feel a little awkward. Thankfully, that’s not the case here. It doesn’t hurt that the Pixel Fold is noticeably thinner than other Samsung options, either. At last: a folding smartphone that won’t feel super awkward in your back pocket. When open, the Fold’s internal 7. +6-inch screen is bright and easy on the eyes — it’s more than nice enough to take in your daily allotment of YouTube videos and e-books, not to mention running two apps side by side. The big bezels around the sides of the screen don’t look great, but they’re pretty comfortable places for your fingers to rest on when holding the phone. For better or worse, the Fold — like the much cheaper 7a — uses the same Tensor G2 processor as the company’s Pixel 7 phones, released last October. In our experience, that means the Fold should be plenty fast for daily use, if not quite as speedy as some other premium phones. For most people, though, the AI features Google uses this chip for — from improving the sound of your phone calls to automatically tweaking photos captured by the Fold’s three rear cameras — may be worth the trade-off. The catch: Where do we start? At nearly $1,800, the Fold is plain out of reach to many. Sure, it’s not alone there — Samsung’s premium Galaxy Z Fold 4 costs the same — but even luxe traditional smartphones cost hundreds less. And because the Fold physically bends in half, there’s a great chance of some kind of physical failure over time. (Brian Rakowski, vice president of product management at Google, told The Post the Fold’s hinge mechanism has been tested to survive more than 200,000 bends. +The labor market showed resilience in April, despite the Federal Reserve’s efforts to cool the economy. More jobs were added than in recent months, across a wide range of sectors, and the unemployment rate fell. Monthly change in jobs +500,000 jobs +253,000 in April +400,000 +300,000 +200,000 +100,000 April ’22 July Oct. Jan. ’23 April +500,000 jobs +253,000 in April +400,000 +300,000 +200,000 +100,000 April ’22 July Oct. Jan. ’23 April Note: Data is seasonally adjusted. Source: Bureau of Labor Statistics By Ella Koeze Lydia DePillis Employers added 253,000 jobs in April, the Labor Department reported Friday, in a reversal of the cooling trend that had marked the first quarter and was expected to continue. The unemployment rate was 3.4 percent, down from 3.5 percent in March, and matched the level in January, which was the lowest since 1969. The higher-than-forecast job gain complicates the Federal Reserve’s potential shift toward a pause in interest rate increases. Chair Jerome H. Powell said on Wednesday that the central bank might continue to raise rates if new data showed the economy wasn’t slowing enough to keep prices down. +In February, there was an average of nearly 1.7 jobs for every unemployed job seeker. When Biden took office, there were fewer jobs than unemployed job seekers. The number of job openings in March is set to be released May 2. Labor Force Participation — One reason many job openings go unfilled is that millions of Americans left the workforce during the pandemic and haven’t returned. The labor force participation rate (the percentage of the total population over age 16 that is either employed or actively seeking work) has slowly recovered during Biden’s time, from 61.3% in January 2021 to 62.6% in March. That still leaves the rate well short of the pre-pandemic level of 63.3% for February 2020. The rate peaked at 67.3% more than two decades ago, during the first four months of 2000. Labor Department economists project that the rate will trend down to 60.1% in 2031, “primarily because of an aging population.” Manufacturing Jobs — During the presidential campaign, Biden promised he had a plan to create a million new manufacturing jobs — and whether it’s his doing or not, the number is rising briskly. As of March, the U.S. added 787,000 manufacturing jobs during Biden’s time, a 6. +To ensure an orderly transition, we have been working for months so that we can continue to meet the needs of those affected by COVID-19. Even beyond the end of the COVID-19 PHE, we will continue to work to protect Americans from the virus and its worst impacts by supporting access to COVID-19 vaccines, treatments, and tests, including for people without health insurance. We will continue to advance research into new, innovative vaccines and treatments through an investment of $5 billion in Project NextGen, a dedicated program to accelerate and streamline the rapid development of the next generation of vaccines and treatments, including investments in research, development, and manufacturing capacity and advancing critical science. And we are continuing to invest in efforts to better understand and address Long COVID and to help mitigate the impacts. What will not be affected by the end of the COVID-19 PHE: The Administration’s continued response to COVID-19 is not fully dependent on the emergency declaration for the COVID-19 PHE, and there are significant flexibilities and actions that will not be affected when we transition from the current phase of our response on May 11. Access to COVID-19 vaccinations and certain treatments, such as Paxlovid and Lagevrio, will generally not be affected. To help keep communities safe from COVID-19, HHS remains committed to maximizing continued access to COVID-19 vaccines and treatments. +October 13, 2022 The U.S. Department of Health and Human Services (HHS) must renew the federal public health emergency (PHE) related to COVID-19 every 90 days to maintain certain health care flexibilities and waivers. The PHE has been in place since January 27, 2020, and renewed throughout the pandemic. The latest HHS extension for the PHE is effective through January 11, 2023. In a letter to the state Governors, the Administration has indicated they will give at least a 60-day notice before the PHE ends. In April, ASHA urged HHS to extend the PHE in a letter to Secretary Xavier Becerra [PDF]. In addition, the Consolidated Appropriations Act of 2022 (P.L. 117-103) provides a 151-day extension to some flexibilities, once the federal PHE ends. With this PHE renewal and the additional 151-day extension, ASHA expects certain flexibilities will continue at least into the second quarter of 2023, such as continued payment for audiology and speech-language pathology telehealth services provided to Medicare beneficiaries. With each PHE extension, numerous flexibilities and waivers remain in effect, including Medicare telehealth coverage of audiology and speech-language pathology services and relaxed Health Insurance Portability and Accountability Act (HIPAA) requirements. Clinicians should be aware that states may have different dates for ending local PHEs. +Microsoft 365 Copilot enabled access for a select group of customers to demonstrate what the new AI office assistant can do. Soon you could use it too! The Copilot writes content based on a few prompts to make your job easier. For example, ask for suggestions for your next meeting on Word and Copilot would list a few ideas. The new MS tool becomes part of every Microsoft 365 app you use every day: Word, PowerPoint, Excel, Outlook, Teams and others. A tool to help unleash creativity, uplevel skills, and unlock productivity—the new Microsoft 365 Copilot. More on AI for work from @CNNBusiness: https://t.co/VF6yWng8YE Microsoft 365 Copilot adds the power of generative AI to your online workplace. For example, it would allow MS Word to write, edit and summarize your text. Meanwhile, you can use Copilot in PowerPoint to turn ideas into a designed presentation. For example, ask for a slide show related to AI assistants and it will create corresponding slides. It adds text descriptions and creates custom designs based on your topic. Excel with Copilot can also analyze data, identify trends and create data visualizations within minutes. Microsoft 365 Copilot manages your Outlook Inbox so you spend more time communicating with customers and colleagues. The AI tool improves meetings by providing “real-time summaries and action items” in the context of conversations. +It was included in Microsoft Office for Windows (versions 97 to 2003), in Microsoft Publisher and Microsoft Project (versions 98 to 2003), Microsoft FrontPage (versions 2002 and 2003), and Microsoft Office for Mac (versions 98 to 2004). The default assistant in the English version was named Clippit[1]), after a paperclip.[7][8] The Office Assistant used technology initially from Microsoft Bob[9] and later Microsoft Agent, offering advice based on Bayesian algorithms.[3] From Office 2000 onward, Microsoft Agent (.acs) replaced the Microsoft Bob-descended Actor (.act) format as the technology supporting the feature. Users can add other assistants to the folder where Office is installed for them to show up in the Office application, or install in the Microsoft Agent folder in System32 folder. Microsoft Agent-based characters have richer forms and colors, and are not enclosed within a boxed window. Furthermore, the Office Assistant could use the Lernout & Hauspie TruVoice Text-to-Speech Engine to provide output speech capabilities to Microsoft Agent, but it required SAPI 4.0. The Microsoft Speech Recognition Engine allowed the Office Assistant to accept speech input.[10] +In addition to new smart devices, Google teased a new AI-enhanced Magic Editor tool at this year’s annual I/O conference. Though we only got a sneak peek, the results are impressive and prove that an era of advanced image manipulation for the masses isn’t far off, thanks to AI. Of course, AI-powered image editing is nothing new for Google. Handy tools like the Magic Eraser, for removing unwanted distractions, and Photo Unblur, for enhancing soft/blurred shots, have been around for several years. And Google has been leveraging AI to help organize and surface images in users’ libraries since 2015. But the Magic Editor takes AI-enhanced manipulation a leap further. Not only can users select and edit subjects (similar to using a mask in Lightroom/Capture One) but with a few taps of the screen you can easily scale and reposition subjects in the frame. The demo also shows the tool's ability to expand an image’s composition through generative AI. Of course, the results aren’t perfect. In the example with the balloons, for instance, the portion of the bench created using generative AI shows a noticeable red tint. Similarly, in the waterfall demo, the area under the subject’s arm shows an obvious repeating pattern in the rocks. These criticisms aside, the power of this tool to dramatically reshape image editing on the fly can’t be understated. +Masked region and Imagen Editor’s results for “a bouquet of red flowers,” “two trees,” “an Imagen Editor sign,” “a bush with green leaves,” and “a bush without leaves” Technically called inpainting, the process Google’s new tool uses is like an image restoration or something we can best describe as the confluence of Google AI and Adobe Photoshop’s Content Aware Fill. The researchers developed new encoders for Imagen Editor and also included an object detector module in the AI to compensate for incomplete or inaccurate masks. The research also includes a tool called EditBench to evaluate results of text-guided inpainting. Based on a 240-image dataset, the benchmark evaluated edits on both human-made and AI-generated images on parameters like the modified objects, their attributes like shape, size, number, and suitability for the scene. Google observed that object masking helps improve image-text alignment, making Imagen Editor better than alternatives like DALL-E 2 and StableDiffusion in all the categories EditBench tested. Unfortunately, Google has unspecified concerns related to the responsible use of AI, and that’s why it won’t be releasing Imagen Editor to the public. The company recently proposed a framework to safeguard AI development, and hopefully, a few hard limits can be established before giving people access to tools like Imagen Editor. On the bright side, EditBench is available in its entirety, for free, to help further AI research. +May 18, 2023 ... Since the release of ChatGPT, we've heard from users that they love using ChatGPT on the go. Today, we're launching the ChatGPT app for iOS. +The ChatGPT app syncs your conversations, supports voice input, and brings our latest model improvements to your fingertips. Since the release of ChatGPT, we've heard from users that they love using ChatGPT on the go. Today, we’re launching the ChatGPT app for iOS. The ChatGPT app is free to use and syncs your history across devices. It also integrates Whisper, our open-source speech-recognition system, enabling voice input. ChatGPT Plus subscribers get exclusive access to GPT-4’s capabilities, early access to features and faster response times, all on iOS. Discover the versatility of ChatGPT: We're starting our rollout in the US and will expand to additional countries in the coming weeks. We’re eager to see how you use the app. As we gather user feedback, we’re committed to continuous feature and safety improvements for ChatGPT. With the ChatGPT app for iOS, we’re taking another step towards our mission by transforming state-of-the-art research into useful tools that empower people, while continuously making them more accessible.  P.S. Android users, you're next! ChatGPT will be coming to your devices soon. +As the remaining title contenders continue their NBA Playoff runs, several other teams are preparing for the NBA Draft. This year's event could transform the fate of a few organizations. Victor Wembanyama is the biggest star in this class, but talented prospects like Scoot Henderson and Brandon Miller could also become franchise cornerstones. With the NBA Draft Lottery locking in the top 14 picks, the entire order for the 2023 draft has been finalized. When will the next generation of players hear their names called? Here is everything you need to know about the 2023 NBA Draft. MORE: Biggest winners and loser from NBA Draft Lottery The 2023 NBA Draft will take place on Thursday, June 22. Teams will make selections for both Round 1 and Round 2 that night. The first round will begin around 8 p.m. ET. Fans in Australia can watch the draft starting at 10 a.m. AEST on Friday, June 23. The 2023 NBA Draft will be shown on ABC (Round 1) and ESPN (Round 1 and Round 2). The event can also be streamed on Sling TV. Fans in the U.S. can watch the NBA Draft and playoffs on Sling TV, which is now offering $10 off your first month! Stream Sling Orange for $30 in your first month to catch the lottery plus every playoff games on TNT, ESPN & ABC. Local regional blackout restrictions apply. +SIGN UP FOR SLING: English | Spanish The 2023 NBA Draft will be held at the Barclays Center in Brooklyn, N.Y. There are 58 total picks in the 2023 NBA Draft because the 76ers and Bulls lost second-round picks after violating the league's tampering rules. +By Adi Robertson, a senior tech and policy editor focused on VR, online platforms, and free expression. Adi has covered video games, biohacking, and more for The Verge since 2011. Apple has announced an augmented reality headset called Apple Vision Pro that “seamlessly” blends the real and digital world. “It’s the first Apple product you look through, and not at,” CEO Tim Cook said of the device, which looks like a pair of ski goggles. As rumored, it features a separate battery pack and is controlled with eyes, hands, and voice. It will start at $3,499 and launch early next year, starting in the US market with more countries coming later in the year. Vision Pro is positioned as primarily an AR device, but it can switch between augmented and full virtual reality using a dial. The device is controller-free, and you browse rows of app icons in an operating system called visionOS by looking at them. You can tap to select and flick to scroll, you can also give voice commands, and Apple says “hundreds of thousands of familiar iPhone and iPad apps” will automatically work that way. On top of that, the headset supports Bluetooth accessories, including Magic Keyboard and Magic Trackpad, and lets you connect your Mac to use inside the headset. Downward-facing cameras can capture your hands even if they’re resting low on your body. +Apple’s headset headache: the tiny and costly displays inside the Vision Pro (Financial Times) Apple Plans a Slow, Appointment-Only Rollout of Its $3,500 Vision Pro (Bloomberg) Apple Reportedly Expects To Sell Fewer Than 400,000 Vision Pro Headsets Next Year Due To Production Snags (Forbes) +CUPERTINO, California, June 5 (Reuters) - Apple (AAPL.O) on Monday unveiled a costly augmented-reality headset called the Vision Pro in its riskiest bet since the introduction of the iPhone more than a decade ago, barging into a market dominated by Meta (META.O). At its annual developer conference, Apple also introduced a raft of new products and features, including a 15-inch MacBook Air, a powerful chip called M2 Ultra, improvements to its iOS software and a long-awaited tweak to prevent its autocorrect from annoyingly changing a common expletive to "ducking". The Vision Pro will start at $3,499, more than three times the cost of the priciest headset in Meta's line of mixed and virtual reality devices. The headset will test a market crowded with devices that have yet to gain traction with consumers and put it in direct competition with Facebook-owner Meta after years of clashes between the companies over issues like user privacy and control of developer platforms. Apple emphasized the novelty of the headset's augmented reality features as well as the sports and entertainment partnerships it would offer. The device will use a new chip called R1 that will process information from its sensors in less time than the blink of an eye, Apple said. But the announcements failed to excite Wall Street, which had bid up Apple shares to a record high ahead of the launch. The stock was largely flat in post-market trading. +Apple is working on at least three augmented-reality and virtual-reality headset devices, the first of which will likely launch with the name "Apple Reality Pro," according to Bloomberg's Mark Gurman. Concept render based on purported leaked information by Ian ZelboIn the latest edition of his "Power On" newsletter, Gurman explained that there are a minimum of three Apple headsets actively in development that he is aware of, under the codes "N301," "N602," and "N421." The first of these devices, N301, is what Gurman believes will be called "Apple Reality Pro." Apple Reality Pro is said to be the company's "high-end rival" to Meta's upcoming Quest Pro headset. N602 is reportedly the successor to the first Apple Reality Pro headset and could come in at a lower price point. N421 is Apple's long-rumored augmented reality glasses device, though Gurman cautioned that it may not launch for some time. Gurman's latest report is the first concrete indication of what Apple's first headset product could be called. It is worth noting that the "Reality Pro" name lines up with Apple's recent trademark filings. Last week, Bloomberg reported that Apple has trademarked several terms believed to be associated with its upcoming headset devices, including "Reality Processor," "Reality Pro," and "Reality One. +McGirt: Well, in my own defense, I was at an ESG conference, and I came back with some amazing potential guests for Leadership Next. So you should consider it a scouting mission, and I promise you it’s going to be value added. Murray:  We should go to Aspen more often, but let’s talk to Kate. [Music] Murray: Kate, let me first of all, just welcome you, thank you for being here, and get you to tell us a little bit about what Maven is and how you got started. Kate Ryder: Thank you so much for having me. Thrilled to be here in Aspen. So I founded Maven in 2014 because I saw firsthand a lot of the gaps in the in the women’s and family health care model. And so, you know, you think about it, about 40% of new moms are dropping out of the workforce after they have kids, and the entire LGBTQ community has been left out of the family-building model, because there weren’t benefits for things like IVF for adoption or surrogacy. We have the highest rate of maternal mortality in the developed world, and we’re also the richest country that spends the most on health care. And so you know, what Maven does is we really fill in all of these very distinct gaps through a virtual care and financial support platform. So we have the largest telehealth network and women’s and family health. +Past fundraising rounds attracted successful American women including Oprah Winfrey, Mindy Kaling, Natalie Portman, and Reese Witherspoon. Sign up for our weekly, original newsletter that goes beyond the annual Disruptor 50 list, offering a closer look at list-making companies and their innovative founders. Ryder has said in the past that her determination to create Maven came partially as a result of her own medical frustration and trauma. A miscarriage left her feeling "lost, discouraged, and confused why something so painful and physically taxing was considered outside the bounds of traditional healthcare," she wrote in a blog post. With the new funding, Ryder said the company needs to be careful about how it scales, but will not be conservative with the cash despite the current economic environment given the need to invest in growth opportunities. "We're not putting this capital aside for a rainy day," she wrote on Monday. Global family benefits growth and Medicaid are two areas that Maven is prioritizing with the new funding. The family benefits will build off of the virtual platform that grew during Covid and include new features for Maven Wallet, the company's financial reimbursement platform. Additional Medicaid expansion requires "a more localized approach, which must be more deliberate," Ryder said, "but particularly in the aftermath of Roe, the need has never been greater." The Maven CEO laid out some more of her strategic thinking after the fundraise in a series of Twitter posts. Got a confidential news tip? +The 2023 United States Open Championship was the 123rd U.S. Open, the national open golf championship of the United States. It was a 72-hole stroke play played from June 15–18 on the North Course of Los Angeles Country Club in Los Angeles, California. It was the first U.S. Open to be played in Los Angeles since Riviera Country Club hosted the tournament in 1948.[1] Wyndham Clark, who had never finished better than 75th in a major championship and had missed the cut in his previous two U.S. Opens, shot a final-round 70 to finish at 10-under-par for the tournament and hold off four-time major champion Rory McIlroy by one shot for his first career U.S. Open and major championship .[2] Rickie Fowler and Xander Schauffele both broke the U.S. Open scoring record by shooting 62 (−8) in the first round. Fowler, who was tied with Clark for the lead at the start of the final round, ended up tied for fifth place, while Schauffele finished 10th.[3] On July 22, 2015, the United States Golf Association (USGA) announced that Los Angeles Country Club was selected to host the 123rd U.S. Open in June 2023. The USGA had made overtures to the club for at least 26 years. +McClure is also targeting another golfer for his 2023 U.S. Open one and done picks that excels in big events against top flight competition. This player has been red-hot all year, but consistently flies under the radar and has the ability to win any tournament he enters. You can find out who it is, and check out all of McClure's U.S. Open one and done picks at SportsLine. Who wins the 2023 U.S. Open, and which golfers should you target for your PGA one and done picks this week? Visit SportsLine now to get Mike McClure's U.S. Open 2023 one and done picks, all from the DFS pro with over $2 million in career winnings, and find out. © 2004-2023 CBS Interactive. All Rights Reserved. CBS Sports is a registered trademark of CBS Broadcasting Inc. Commissioner.com is a registered trademark of CBS Interactive Inc. +Get access to essential strategic content, in-depth reports, industry intelligence, and exclusive data. Get access to essential strategic content, in-depth reports, industry intelligence, and exclusive data. Get access to essential strategic content, in-depth reports, industry intelligence, and exclusive data. Get access to essential strategic content, in-depth reports, industry intelligence, and exclusive data. Sign Into Digital Commerce 360 Forgot your password? Amazon announced its first Prime Day of 2023 will take place on Tuesday, July 11, and Wednesday, July 12, confirming predictions from industry experts. Sellers had earlier been told they needed to submit their deals for the first Amazon Prime Day of 2023 by April 28th. Amazon.com Inc. is planning a second Prime Day for 2023, according to marketplace sellers who say they have been notified of an August 11 deadline to submit deals for the event. Amazon is No. 1 in the Top 1000. The database is Digital Commerce 360’s ranking of the largest North American online retailers. Amazon is also No. 3 in the Online Marketplaces database, which ranks the 100 largest global marketplaces. Prime Day is now Amazon’s biggest sale of the year. It is usually held during the summer months. In 2022, it was July 12 and July 13. The annual two-day deals event is for Prime members only. +12. Now we do not yet have confirmation that Amazon will have another Early Access Sale this year. But should Amazon decide to have another Early Access Sale — and there's no reason to think it won't — you can be pretty sure it'll take place around the same time in October. Basically, the second Prime Day event served as a preview to Black Friday deals, which means it would almost have to take place at the same time in the calendar. If, for some reason, Amazon decides to skip the Early Access Sale this year, then you'll probably have to wait until Summer 2024 for the next Prime Day. Over the last few years, Prime Day has fallen in June or July. If you missed out on the latest Prime Day, fear not, because retailers likes Walmart and Target have started their own sales to rival Prime Day. And those deals are still for the taking. More in Amazon, Prime Day Tim Marcin is a culture reporter at Mashable, where he writes about food, fitness, weird stuff on the internet, and, well, just about anything else. You can find him posting endlessly about Buffalo wings on Twitter at @timmarcin. +Play Now Football Pick'em Play Now College Pick'em See who to add and drop PGA Tour and beyond Fittingly, Super Bowl LVI was won by the NFL's most prolific offensive player. Cooper Kupp's 1-yard touchdown with 1:25 left served as the winning score in the Rams' 23-20 victory over the Bengals. Kupp was named Super Bowl MVP after catching 8 of 10 targets for 92 yards and two touchdowns. Kupp is the eighth receiver to win Super Bowl MVP.  Kupp's 11-yard touchdown reception early in the second quarter gave the Rams a 13-3 lead. He caught four passes for 34 yards on the Rams' game-winning drive. Kupp also converted a fourth-and-1 with an 8-yard run on a jet sweep with five minutes left.  "I don't feel deserving fo this," Kupp said on the podium after the game, via NBC Sports. "God is just so good. I'm just so thankful for the guys I get to be around."  COOPER KUPP FOR THE LEAD!📺: #SBLVI on NBC pic.twitter.com/PTY7GWXBig Kupp recently became the first wide receiver to receive a regular season MVP vote since Randy Moss in 1998. +7] The most recent Super Bowl MVP, from Super Bowl LVII held on February 12, 2023, is Kansas City Chiefs quarterback Patrick Mahomes. Tom Brady is the only player to have won five Super Bowl MVP awards (four with the New England Patriots and one with the Tampa Bay Buccaneers); Joe Montana won three and four other players—Bart Starr, Terry Bradshaw, Eli Manning, and Patrick Mahomes—have won the award twice.[8] Starr and Bradshaw are the only ones to have won it in back-to-back years. The MVP has come from the winning team every year except 1971, when Dallas Cowboys linebacker Chuck Howley won the award despite the Cowboys' loss in Super Bowl V to the Baltimore Colts.[9] Harvey Martin and Randy White were named co-MVPs of Super Bowl XII, the only time co-MVPs have been chosen.[10][11] Including the Super Bowl XII co-MVPs, seven Cowboys players have won Super Bowl MVP awards, the most of any NFL team. Quarterbacks have earned the honor 32 times in 57 games (and 58 awards).[12] From Super Bowl I to Super Bowl XLIX the Super Bowl MVP won a new car from General Motors as a part of their MVP award. However since Hyundai became the official vehicle partner of the NFL from the 2015 NFL season onward no new car has been awarded to the Super Bowl MVP since Super Bowl 50.[13] diff --git a/examples/data/rag_bm/dataset_info.json b/examples/data/rag_bm/dataset_info.json new file mode 100644 index 000000000..308dc8fc7 --- /dev/null +++ b/examples/data/rag_bm/dataset_info.json @@ -0,0 +1,20 @@ +[ + { + "simplified_CRUD":{ + "document_file":["documents.txt"], + "gt_file":"answer.json" + } + }, + { + "simplified_RGB":{ + "document_file":["documents.txt"], + "gt_file":"answer.json" + } + }, + { + "RGB_EN":{ + "document_file":["documents.txt"], + "gt_file":"answer.json" + } + } +] diff --git a/examples/data/rag_bm/simplified_CRUD/answer.json b/examples/data/rag_bm/simplified_CRUD/answer.json new file mode 100644 index 000000000..a8a5d0f36 --- /dev/null +++ b/examples/data/rag_bm/simplified_CRUD/answer.json @@ -0,0 +1,27 @@ +[ + { + "question": "国家卫生健康委在2023年7月28日开展的“启明行动”是为了防控哪个群体的哪种健康问题,并请列出活动发布的指导性文件名称。\n", + "gt_answer": "“启明行动”是为了防控儿童青少年的近视问题,并发布了《防控儿童青少年近视核心知识十条》。\n", + "gt_reference": "\"2023-07-28 10:14:27作者:白剑峰来源:人民日报正文:为在全社会形成重视儿童眼健康的良好氛围,持续推进综合防控儿童青少年近视工作落实,国家卫生健康委决定在全国持续开展“启明行动”——防控儿童青少年近视健康促进活动,并发布了《防控儿童青少年近视核心知识十条》。本次活动的主题为:重视儿童眼保健,守护孩子明眸“视”界。强调预防为主,推动关口前移,倡导和推动家庭及全社会共同行动起来,营造爱眼护眼的视觉友好环境,共同呵护好孩子的眼睛,让他们拥有一个光明的未来。国家卫生健康委要求,开展社会宣传和健康教育。充分利用网络、广播电视、报纸杂志、海报墙报、培训讲座等多种形式,广泛开展宣传倡导,向社会公众传播开展儿童眼保健、保护儿童视力健康的重要意义,以《防控儿童青少年近视核心知识十条》为重点普及预防近视科学知识。创新健康教育方式和载体,开发制作群众喜闻乐见的健康教育科普作品,利用互联网媒体扩大传播效果,提高健康教育的针对性、精准性和实效性。指导相关医疗机构将儿童眼保健和近视防控等科学知识纳入孕妇学校、家长课堂内容。开展儿童眼保健及视力检查咨询指导。医疗机构要以儿童家长和养育人为重点,结合眼保健和眼科临床服务,开展个性化咨询指导。要针对儿童常见眼病和近视防控等重点问题,通过面对面咨询指导,引导儿童家长树立近视防控意识,改变不良生活方式,加强户外活动,养成爱眼护眼健康行为习惯。提高儿童眼保健专科服务能力。各地要积极推进儿童眼保健专科建设,扎实组织好妇幼健康职业技能竞赛“儿童眼保健”项目,推动各层级开展比武练兵,提升业务能力。\",\n" + }, + { + "question": "陕西西安市近日发放了多少万元体育类电子消费券,市民可以在多少家体育场馆使用这些消费券?\n", + "gt_answer": "陕西西安市发放了500万元体育类电子消费券,市民可以在全市173家体育场馆使用这些消费券。\n", + "gt_reference": "2023-07-28 10:13:11作者:王博来源:人民日报正文:推进全民健身是一项长期任务,需要久久为功。持续激发人民群众的健身意愿,满足多样化的体育消费需求,需要下“绣花”功夫近年来,各地多措并举鼓励群众参与体育健身,为大众提供多样化的体育服务,下了不少“绣花”功夫。为了调动群众参与体育锻炼的积极性,有的地方想出“金点子”。近日,陕西西安市发放500万元体育类电子消费券,市民领取后,可在全市173家体育场馆使用。体育消费券的发放,激发了群众参与健身的热情,同时也带动了体育场馆的运营,进一步释放了体育消费潜力。不仅要让群众“常健身”,更要让人们“会健身”。前不久,《2022年上海市全民健身发展报告》发布,从健身设施、健身组织、健身活动、健身指导、体质健康、市民参与6个维度进行打分,以数据形式清晰展现市民群众参与体育锻炼的情况。报告指出,截至2022年底,上海市共有在册社会体育指导员62086名。他们在组织社区体育活动、指导群众科学健身等方面发挥了重要作用,群众参与体育活动的科学性和安全性得到有效保障。推进全民健身,还需在解决难点问题上持续发力。例如,不少地方利用城市边角地块,建造口袋体育公园。河湖沿岸、废旧厂房、高架桥下……城市边角地得以充分利用,人们出门就能锻炼,“健身去哪儿”的问题有效缓解。这样的探索比比皆是。如今,人们的健康意识越来越强,社会运动健身氛围越来越浓厚。这既是生活水平提高的必然结果,也承载着人们对美好生活的向往和追求。因此,如何保证全民健身公共服务的供给,促进群众健身普遍化和生活化,增强群众在运动中的获得感、幸福感,是一道必须用心答好的题目。推进全民健身是一项长期任务,需要久久为功。持续激发人民群众的健身意愿,满足多样化的体育消费需求,需要下“绣花”功夫。为群众健身提供广阔的空间,为群众实实在在地谋福利,才能让人们更健康更幸福地享受美好生活。\",\n" + }, + { + "question": "国家药监局在对哪5个品种的医疗器械进行产品质量监督抽检时,共发现了多少批(台)产品不符合标准规定?\n", + "gt_answer": "国家药监局在对牙科低压电动马达、贴敷类医疗器械(远红外治疗贴、磁疗贴、穴位磁疗贴)、立式压力蒸汽灭菌器、电动吸引器和人体血液及血液成分袋式塑料容器(血袋)这5个品种进行产品质量监督抽检时,共发现了12批(台)产品不符合标准规定。\n", + "gt_reference": "2023-07-29 10:57:38作者:孙红丽来源:人民网正文:国家药监局今日发布国家医疗器械监督抽检结果的通告。通告指出,国家药监局组织对牙科低压电动马达、贴敷类医疗器械(远红外治疗贴、磁疗贴、穴位磁疗贴)等5个品种进行了产品质量监督抽检,共12批(台)产品不符合标准规定。被抽检项目不符合标准规定的医疗器械产品具体为牙科低压电动马达1台:广东精美医疗科技有限公司生产,涉及漏电流和患者辅助电流(工作温度下)、空载转速不符合标准规定。立式压力蒸汽灭菌器1台:合肥华泰医疗设备有限公司生产,涉及“可触及零部件的允许限值 正常条件下的值”、单一故障条件下的限值(断地)不符合标准规定。电动吸引器1台:苏州贝茵科技股份有限公司生产,涉及“由网电源驱动、可移动的高负压/高流量设备”不符合标准规定。贴敷类医疗器械(远红外治疗贴、磁疗贴、穴位磁疗贴)6批次:分别为九江高科制药技术有限公司、郑州市中原福力工贸有限公司、乌兰察布市乔氏伟业医疗器械有限公司、湖南德禧医疗科技有限公司、重庆正仁医疗器械有限公司生产,涉及检出“按照补充检验方法要求不得检出的相关药物成分”。人体血液及血液成分袋式塑料容器(血袋)3批次:南京赛尔金生物医学有限公司生产,涉及血袋输血插口不符合标准规定。国家药监局表示,对抽检中发现的上述不符合标准规定产品,国家药监局已要求企业所在地省级药品监督管理部门按照《医疗器械监督管理条例》《医疗器械生产监督管理办法》和《医疗器械召回管理办法》等要求,及时作出行政处理决定并向社会公布。省级药品监督管理部门要督促企业对抽检不符合标准规定的产品进行风险评估,根据医疗器械缺陷的严重程度确定召回级别,主动召回产品并公开召回信息;督促企业尽快查明产品不合格原因,制定整改措施并按期整改到位。\",\n" + }, + { + "question": "在江苏省中医院副主任中医师徐顺娟提出的大暑养生建议中,她强调了养生的关键在于养护哪两个方面?\n", + "gt_answer": "徐顺娟强调大暑养生的关键在于养“心阴”和护“脾气”。\n", + "gt_reference": "2023-07-31 10:13:18作者:于丹丹来源:扬子晚报正文:“大暑”节气时值“三伏天”的“中伏”前后,是“上蒸下煮”“湿热交蒸”到达极点的时节,当令之气为暑热。江苏省中医院急诊科副主任、副主任中医师徐顺娟介绍,大暑养生关键在养“心阴”,护“脾气”,要注意以下几点:正值炎炎夏日,要避免长时间在高温环境下工作和活动,尤其是阳光直射的户外、高温高湿的密闭环境。徐顺娟强调,不要快速饮进大量冷开水或冰镇饮料,不要在运动劳作后立即用冷水洗头冲凉,不要立即站在空调下吹强风,防止舒张状态下的血管因在短时间内受到强烈的冷刺激而导致血管痉挛或强烈收缩,从而引起脏器缺血而并发疾病。俗语说“心静自然凉”,大暑节气暑热太过则耗气伤阴,容易出现汗出过多、乏力、胸闷心悸、口干多饮、尿赤便秘、失眠多梦等症状,徐顺娟建议大家要保持心情平和,戒燥戒怒,保持自主神经反射和调节的稳定性,有助于减少汗出异常、烦躁、失眠、纳差等不适症状。大暑节气,适当的“晚睡早起”,等待大自然阳气潜藏。空调或电风扇调节睡眠模式,但切记不能对着空调或电风扇长时间直吹,注意腹部、背部保暖,略加薄被,以免感寒,导致腹泻腹痛、浑身无力、关节酸痛等症候。早上顺应大自然阳气的升发,宜早起,在清晨无阳光直射的场地进行适量的运动,如散步、八段锦、太极拳等,微微出汗即可,以维持人体气机上下通达,以助脾运。大暑节气,饮食建议多样化,以清淡易消化为主。可以选择绿豆百合粥、西瓜翠衣粥、薏米小豆粥等补气清暑、健脾养胃,或煮粥时放一些淮山药、茯苓等药食同源的食材,祛湿效果会更好。适当增加苦味蔬果,比如苦瓜、荷叶等有助于清热去火、健脾除湿。多吃开胃消暑的食物,比如赤小豆、薏米、南瓜、西瓜、黄瓜、丝瓜等,也可以做成如绿豆汤、冬瓜汤、银耳百合汤、冬瓜海带汤等食用。适当增加酸性食物,如食醋、番茄、山楂、柠檬等,既有利于酸甘化阴、养护阴液,又有助于柔肝调脾,开胃消食。此外,在食用肉类、鱼类等荤菜时,要注意饮食卫生,防止肠道传染病的发生。不吃或少吃辛辣、烧烤、油腻的食物,少饮酒,防止内生湿热,损伤脾胃。大暑节气是全年温度最高、阳气最盛的时节,正是进行“冬病夏治”的好时机。通过“三伏贴”等中医疗法,借助自然之阳气,起到散寒祛邪,增补阳气,活血通经的作用,治疗或预防冬季易发生或加重的疾病。\",\n" + }, + { + "question": "国务院办公厅转发的《关于恢复和扩大消费措施》通知中提到的优化汽车购买使用管理措施包括哪些具体政策?\n", + "gt_answer": "优化汽车购买使用管理的具体政策包括:各地区不得新增汽车限购措施,已实施限购的地区优化汽车限购措施;全面取消二手车限迁、便利二手车交易登记;鼓励以旧换新,不得对非本地生产的汽车实施歧视性政策;加大汽车消费金融支持力度;增加城市停车位供给,改善人员密集场所和景区停车条件,推进车位资源共享利用。\n", + "gt_reference": "来源:中国经济网作者:姜智文 2023-08-01 10:02:05正文:今日,国务院办公厅转发国家发展改革委《关于恢复和扩大消费措施》的通知(以下简称“通知”)指出,稳定大宗消费,优化汽车购买使用管理,扩大新能源汽车消费。《通知》指出,优化汽车购买使用管理。各地区不得新增汽车限购措施,已实施限购的地区因地制宜优化汽车限购措施。着力推动全面取消二手车限迁、便利二手车交易登记等已出台政策落地见效。促进汽车更新消费,鼓励以旧换新,不得对非本地生产的汽车实施歧视性政策。加大汽车消费金融支持力度。增加城市停车位供给,改善人员密集场所和景区停车条件,推进车位资源共享利用。《通知》还指出,扩大新能源汽车消费。落实构建高质量充电基础设施体系、支持新能源汽车下乡、延续和优化新能源汽车车辆购置税减免等政策。科学布局、适度超前建设充电基础设施体系,加快换电模式推广应用,有效满足居民出行充换电需求。推动居住区内公共充电基础设施优化布局并执行居民电价,研究对充电基础设施用电执行峰谷分时电价政策,推动降低新能源汽车用电成本。据悉,国家发展改革委《关于恢复和扩大消费的措施》已经国务院同意,是为深入实施扩大内需战略,充分发挥消费对经济发展的基础性作用,不断增强高质量发展的持久动力。\",\n" + } +] diff --git a/examples/data/rag_bm/simplified_CRUD/documents.txt b/examples/data/rag_bm/simplified_CRUD/documents.txt new file mode 100644 index 000000000..d1120e969 --- /dev/null +++ b/examples/data/rag_bm/simplified_CRUD/documents.txt @@ -0,0 +1,100 @@ +2023-07-28 10:14:27作者:白剑峰来源:人民日报,正文:为在全社会形成重视儿童眼健康的良好氛围,持续推进综合防控儿童青少年近视工作落实,国家卫生健康委决定在全国持续开展“启明行动”——防控儿童青少年近视健康促进活动,并发布了《防控儿童青少年近视核心知识十条》。本次活动的主题为:重视儿童眼保健,守护孩子明眸“视”界。强调预防为主,推动关口前移,倡导和推动家庭及全社会共同行动起来,营造爱眼护眼的视觉友好环境,共同呵护好孩子的眼睛,让他们拥有一个光明的未来。国家卫生健康委要求,开展社会宣传和健康教育。充分利用网络、广播电视、报纸杂志、海报墙报、培训讲座等多种形式,广泛开展宣传倡导,向社会公众传播开展儿童眼保健、保护儿童视力健康的重要意义,以《防控儿童青少年近视核心知识十条》为重点普及预防近视科学知识。创新健康教育方式和载体,开发制作群众喜闻乐见的健康教育科普作品,利用互联网媒体扩大传播效果,提高健康教育的针对性、精准性和实效性。指导相关医疗机构将儿童眼保健和近视防控等科学知识纳入孕妇学校、家长课堂内容。开展儿童眼保健及视力检查咨询指导。医疗机构要以儿童家长和养育人为重点,结合眼保健和眼科临床服务,开展个性化咨询指导。要针对儿童常见眼病和近视防控等重点问题,通过面对面咨询指导,引导儿童家长树立近视防控意识,改变不良生活方式,加强户外活动,养成爱眼护眼健康行为习惯。提高儿童眼保健专科服务能力。各地要积极推进儿童眼保健专科建设,扎实组织好妇幼健康职业技能竞赛“儿童眼保健”项目,推动各层级开展比武练兵,提升业务能力。 +2023-07-28 10:13:11作者:王博来源:人民日报,正文:推进全民健身是一项长期任务,需要久久为功。持续激发人民群众的健身意愿,满足多样化的体育消费需求,需要下“绣花”功夫近年来,各地多措并举鼓励群众参与体育健身,为大众提供多样化的体育服务,下了不少“绣花”功夫。为了调动群众参与体育锻炼的积极性,有的地方想出“金点子”。近日,陕西西安市发放500万元体育类电子消费券,市民领取后,可在全市173家体育场馆使用。体育消费券的发放,激发了群众参与健身的热情,同时也带动了体育场馆的运营,进一步释放了体育消费潜力。不仅要让群众“常健身”,更要让人们“会健身”。前不久,《2022年上海市全民健身发展报告》发布,从健身设施、健身组织、健身活动、健身指导、体质健康、市民参与6个维度进行打分,以数据形式清晰展现市民群众参与体育锻炼的情况。报告指出,截至2022年底,上海市共有在册社会体育指导员62086名。他们在组织社区体育活动、指导群众科学健身等方面发挥了重要作用,群众参与体育活动的科学性和安全性得到有效保障。推进全民健身,还需在解决难点问题上持续发力。例如,不少地方利用城市边角地块,建造口袋体育公园。河湖沿岸、废旧厂房、高架桥下……城市边角地得以充分利用,人们出门就能锻炼,“健身去哪儿”的问题有效缓解。这样的探索比比皆是。如今,人们的健康意识越来越强,社会运动健身氛围越来越浓厚。这既是生活水平提高的必然结果,也承载着人们对美好生活的向往和追求。因此,如何保证全民健身公共服务的供给,促进群众健身普遍化和生活化,增强群众在运动中的获得感、幸福感,是一道必须用心答好的题目。推进全民健身是一项长期任务,需要久久为功。持续激发人民群众的健身意愿,满足多样化的体育消费需求,需要下“绣花”功夫。为群众健身提供广阔的空间,为群众实实在在地谋福利,才能让人们更健康更幸福地享受美好生活。 +2023-07-29 10:57:38作者:孙红丽来源:人民网,正文:国家药监局今日发布国家医疗器械监督抽检结果的通告。通告指出,国家药监局组织对牙科低压电动马达、贴敷类医疗器械(远红外治疗贴、磁疗贴、穴位磁疗贴)等5个品种进行了产品质量监督抽检,共12批(台)产品不符合标准规定。被抽检项目不符合标准规定的医疗器械产品具体为牙科低压电动马达1台:广东精美医疗科技有限公司生产,涉及漏电流和患者辅助电流(工作温度下)、空载转速不符合标准规定。立式压力蒸汽灭菌器1台:合肥华泰医疗设备有限公司生产,涉及“可触及零部件的允许限值 正常条件下的值”、单一故障条件下的限值(断地)不符合标准规定。电动吸引器1台:苏州贝茵科技股份有限公司生产,涉及“由网电源驱动、可移动的高负压/高流量设备”不符合标准规定。贴敷类医疗器械(远红外治疗贴、磁疗贴、穴位磁疗贴)6批次:分别为九江高科制药技术有限公司、郑州市中原福力工贸有限公司、乌兰察布市乔氏伟业医疗器械有限公司、湖南德禧医疗科技有限公司、重庆正仁医疗器械有限公司生产,涉及检出“按照补充检验方法要求不得检出的相关药物成分”。人体血液及血液成分袋式塑料容器(血袋)3批次:南京赛尔金生物医学有限公司生产,涉及血袋输血插口不符合标准规定。国家药监局表示,对抽检中发现的上述不符合标准规定产品,国家药监局已要求企业所在地省级药品监督管理部门按照《医疗器械监督管理条例》《医疗器械生产监督管理办法》和《医疗器械召回管理办法》等要求,及时作出行政处理决定并向社会公布。省级药品监督管理部门要督促企业对抽检不符合标准规定的产品进行风险评估,根据医疗器械缺陷的严重程度确定召回级别,主动召回产品并公开召回信息;督促企业尽快查明产品不合格原因,制定整改措施并按期整改到位。 +2023-07-31 10:13:18作者:于丹丹来源:扬子晚报,正文:“大暑”节气时值“三伏天”的“中伏”前后,是“上蒸下煮”“湿热交蒸”到达极点的时节,当令之气为暑热。江苏省中医院急诊科副主任、副主任中医师徐顺娟介绍,大暑养生关键在养“心阴”,护“脾气”,要注意以下几点:正值炎炎夏日,要避免长时间在高温环境下工作和活动,尤其是阳光直射的户外、高温高湿的密闭环境。徐顺娟强调,不要快速饮进大量冷开水或冰镇饮料,不要在运动劳作后立即用冷水洗头冲凉,不要立即站在空调下吹强风,防止舒张状态下的血管因在短时间内受到强烈的冷刺激而导致血管痉挛或强烈收缩,从而引起脏器缺血而并发疾病。俗语说“心静自然凉”,大暑节气暑热太过则耗气伤阴,容易出现汗出过多、乏力、胸闷心悸、口干多饮、尿赤便秘、失眠多梦等症状,徐顺娟建议大家要保持心情平和,戒燥戒怒,保持自主神经反射和调节的稳定性,有助于减少汗出异常、烦躁、失眠、纳差等不适症状。大暑节气,适当的“晚睡早起”,等待大自然阳气潜藏。空调或电风扇调节睡眠模式,但切记不能对着空调或电风扇长时间直吹,注意腹部、背部保暖,略加薄被,以免感寒,导致腹泻腹痛、浑身无力、关节酸痛等症候。早上顺应大自然阳气的升发,宜早起,在清晨无阳光直射的场地进行适量的运动,如散步、八段锦、太极拳等,微微出汗即可,以维持人体气机上下通达,以助脾运。大暑节气,饮食建议多样化,以清淡易消化为主。可以选择绿豆百合粥、西瓜翠衣粥、薏米小豆粥等补气清暑、健脾养胃,或煮粥时放一些淮山药、茯苓等药食同源的食材,祛湿效果会更好。适当增加苦味蔬果,比如苦瓜、荷叶等有助于清热去火、健脾除湿。多吃开胃消暑的食物,比如赤小豆、薏米、南瓜、西瓜、黄瓜、丝瓜等,也可以做成如绿豆汤、冬瓜汤、银耳百合汤、冬瓜海带汤等食用。适当增加酸性食物,如食醋、番茄、山楂、柠檬等,既有利于酸甘化阴、养护阴液,又有助于柔肝调脾,开胃消食。此外,在食用肉类、鱼类等荤菜时,要注意饮食卫生,防止肠道传染病的发生。不吃或少吃辛辣、烧烤、油腻的食物,少饮酒,防止内生湿热,损伤脾胃。大暑节气是全年温度最高、阳气最盛的时节,正是进行“冬病夏治”的好时机。通过“三伏贴”等中医疗法,借助自然之阳气,起到散寒祛邪,增补阳气,活血通经的作用,治疗或预防冬季易发生或加重的疾病。 +来源:中国经济网作者:姜智文 2023-08-01 10:02:05,正文:今日,国务院办公厅转发国家发展改革委《关于恢复和扩大消费措施》的通知(以下简称“通知”)指出,稳定大宗消费,优化汽车购买使用管理,扩大新能源汽车消费。《通知》指出,优化汽车购买使用管理。各地区不得新增汽车限购措施,已实施限购的地区因地制宜优化汽车限购措施。着力推动全面取消二手车限迁、便利二手车交易登记等已出台政策落地见效。促进汽车更新消费,鼓励以旧换新,不得对非本地生产的汽车实施歧视性政策。加大汽车消费金融支持力度。增加城市停车位供给,改善人员密集场所和景区停车条件,推进车位资源共享利用。《通知》还指出,扩大新能源汽车消费。落实构建高质量充电基础设施体系、支持新能源汽车下乡、延续和优化新能源汽车车辆购置税减免等政策。科学布局、适度超前建设充电基础设施体系,加快换电模式推广应用,有效满足居民出行充换电需求。推动居住区内公共充电基础设施优化布局并执行居民电价,研究对充电基础设施用电执行峰谷分时电价政策,推动降低新能源汽车用电成本。据悉,国家发展改革委《关于恢复和扩大消费的措施》已经国务院同意,是为深入实施扩大内需战略,充分发挥消费对经济发展的基础性作用,不断增强高质量发展的持久动力。 +2023-08-03 09:47:19作者:张梦然来源:科技日报,正文:《自然》2日发表两项癌症研究突破:一种治疗性单克隆抗体NP137在小鼠模型中能够抑制子宫内膜癌和皮肤癌的生长和转移,一项研究还报告了这一试剂的首次人体试验,展示了它对晚期子宫内膜癌个体患者的作用,表明这一抗肿瘤策略值得进一步研究。随着癌症进展,它们会发生细胞层面的改变,这被称为上皮细胞间质转化。现在,一种名为netrin-1的蛋白质被认为可能在肿瘤发展中有重要作用。两项最新研究表明,阻断这一蛋白,就能抑制上皮细胞间质转化。法国里昂大学团队研究表明,netrin-1在人类子宫内膜癌中会上调。在该疾病的小鼠模型中,阻断netrin-1的活性会触发癌细胞死亡,抑制上皮细胞间质转化。基于这些发现,团队在一项人体1期临床试验中测试了阻断netrin-1的单克隆抗体——NP137的潜力。该试验有14名晚期子宫内膜癌患者参加,治疗被证明是安全的,在9名患者中观察到了抗肿瘤响应,8名患者的病情稳定了下来,1名患者的肝转移灶缩小超过50%。在小鼠模型中,传统化疗药物(卡铂和紫杉醇)与NP137结合后效果得到改善。在另一项研究中,比利时布鲁塞尔自由大学团队表示,在鳞状细胞癌小鼠模型中,NP137介导的netrin-1抑制减少了发生上皮细胞间质转化的细胞比例。这一处理减少了转移的数量,增加了肿瘤对化疗的敏感性。团队还评估了这一处理对移植到小鼠身上的人类癌细胞的作用,表明netrin-1阻断抑制了这些细胞的上皮细胞间质转化。紧密相连的细胞,本是一道严密的防线,而本文所说的上皮细胞间质转化,正是赋予细胞转移和入侵能力的一个重要事件。可以说,它与癌症患者肿瘤的发展、侵袭、转移和对化疗及免疫疗法的抗性密切相关。而阻断这一转变,可能就是当今癌症治疗的一个极有潜力的方法。此前,科学家试图利用上皮细胞间质转化抑制肿瘤还不太成功,但随着生化技术手段和认识的不断提高,这一方向的前景渐渐明朗。 +2023-08-04 09:32:29作者:杨彦帆来源:人民日报,正文:“防晒并不只是防晒黑,还要防晒伤。借助遮阳伞、墨镜、防晒衣等硬防晒,以及涂抹防晒霜等手段,可以一定程度上预防皮肤老化。”首都医科大学宣武医院皮肤科副主任医师常晓说,大家要根据自己的皮肤状况、防晒需求来选择防晒方式和用品。常晓告诉记者,出门就涂抹防晒霜并不是必需的,每天都涂防晒霜有可能对皮肤产生负担。比如在居家或办公环境下,只要不是长期处于透明玻璃旁,不需要涂抹防晒霜。如果只在户外暴露20分钟左右,或紫外线指数在2以下,硬防晒就可以达到好的防晒效果。如果紫外线强烈,或户外活动超过半小时,建议采用硬防晒叠加涂抹防晒霜。按照防晒剂成分的不同,防晒霜分为物理防晒、物化混合防晒以及化学防晒。应该如何涂抹防晒霜?常晓说,如果是物理防晒霜,只需要在出门前涂抹;其他则需要在出门前20—30分钟涂抹才能达到好的效果。防晒霜应足量涂抹,一般来说,整个面部需要用到一个硬币大小的量,并根据实际使用情况补涂。“皮肤比较敏感的患者一般建议选择硬防晒或物理防晒霜。”常晓说,使用防晒霜后还要做好清洁。一般的物理防晒、物化混合、化学防晒的用品可以使用洗面奶清洁,对于防水抗汗型的防晒霜,则需要使用卸妆产品。如果患者因长时间强烈紫外线照射,皮肤部位出现红斑、水肿、水泡等,轻微不适时可以冷敷,严重的应尽快就医。 +2023-08-11 09:44:51作者:闫妍 陈子源来源:人民网,正文:目前,全国各地的中小学生开启暑假模式。虽然孩子放假了,但他们的眼睛更“忙”了,看书、看电视、看手机……一些孩子的眼部健康亮起了红灯。中南大学湘雅三医院眼科副主任医师曹燕娜在接受人民网记者采访时提示,孩子们尽情享受暑假生活的同时,也要小心患上干眼症。据统计,近年来干眼症逐渐低龄化,在儿童青少年人群中已成为一种常见病,在我国的发病率为21%至30%。曹燕娜介绍,干眼症也被称为角结膜干燥症。它是由于泪液质或者量以及动力学异常等,导致泪膜的稳定性降低而出现的眼部不适、眼表病变。干眼症的典型症状包括眼睛干涩、疲劳、刺痛、眼痒等,严重者会影响到角膜,发生角膜上皮脱落,甚至角膜溃疡,进而导致睁眼困难、视力下降等。“如果孩子频繁揉眼睛、眨眼睛父母应警惕。”曹燕娜表示,需要注意的是,儿童患上干眼症后,自己不会说“我眼睛干”,只会不停眨眼睛或揉眼睛,尤其是年纪偏小的孩子。很多父母看到孩子这样的表现,大都不会往干眼症这一方面想,很多时候会以为是角膜炎。怎样分辨孩子频繁眨眼是患上干眼症还是角膜炎呢?曹燕娜说,角膜炎大都是细菌或病毒感染造成的角膜炎症,其中病毒感染更为多见。如果孩子只是单纯的眼睛干涩发红充血,没有分泌物即“眼屎”,没有感冒等感染症状,很可能是有干眼症。“儿童青少年患上干眼症多是由于长时间用眼、使用电子产品,屈光不正,戴接触镜,结膜过敏等原因。”曹燕娜说。曹燕娜提醒,暑假期间,孩子使用手机、平板电脑、电脑等电子产品的时间有所增加,如果日均使用超过4小时,且使用时间越长,干眼症状会越明显。“预防干眼症,健康用眼是最重要的。”曹燕娜建议,合理用眼,养成良好的用眼习惯,连续看书、写字的时间不宜过长,尽量远眺让眼睛放松。避免长时间接触视频终端设备。在空调房间里可以使用加湿器,增加环境空气的湿度。保持充足睡眠,不熬夜。同时,饮食上应多吃一些新鲜的蔬菜和水果,减少油炸及高油脂食物。另外,孩子眼睛不适要及时就医,不可擅自使用滴眼液,以免形成长期依赖。 +2023-08-13 10:35:51作者:刘霞来源:科技日报,正文:西班牙科学家开展的一项新研究指出,无论是酒吧里的花生,还是沙拉里的核桃,坚果可为心理健康带来意想不到的好处。每天只需30克坚果,就足以获得抗炎功效,将抑郁症的风险降低17%。相关论文刊登于最新一期《临床营养学》杂志。研究人员检查了13500多名年龄介于37—73岁的英国人的数据,这些人在研究开始时没有抑郁症。研究团队记录了参与者的坚果食用量,包括无盐杏仁、腰果、开心果、腌或烤坚果和花生。参与者接受了5年时间的随访,在此期间,8%的参与者被诊断出罹患了抑郁症。分析显示,与不食用坚果的人相比,低至中度食用坚果(相当于每天30克)可降低17%的抑郁症风险。一份30克的坚果大约相当于20颗杏仁、10颗巴西坚果、15颗腰果、40颗花生或30颗开心果。研究团队指出,这一发现与其他生活方式和健康因素无关,坚果对大脑的抗炎和抗氧化作用可能是导致这一结果的原因。论文第一作者、斯蒂利亚-拉曼恰大学的布鲁诺·比佐泽罗·佩罗尼表示,这一最新研究结果突出了食用坚果的另一个好处:将抑郁症风险降低了17%。与不食用坚果相比,经常食用低至中等数量的坚果与抑郁症的风险较低有关。由于饮食是一种可改变的生活方式,未来的长期临床试验应该评估食用坚果是否是预防成年人抑郁症的有效策略。 +来源:中国经济网作者:郭跃 2023-08-15 09:25:07,正文:8月11日,国家市场监督管理总局发布3起乘用车召回公告,涉及林肯、保时捷、宝马3品牌在内的共计83161辆乘用车将被召回。其中,林肯召回83081辆,占比99.90%;宝马召回的则全部为纯电车型。具体来看,林肯宣布将召回83081辆乘用车。其中,11480辆大陆的召回原因是“车辆由于零件结构原因,后视摄像头内部镜片与垫圈之间存在尖锐接触面,造成镜片上的防反射涂层损坏,影响摄像头图像质量,干扰驾驶员对车辆后方情况的观察”。另有2556辆领航员的召回原因是“车辆因空调鼓风机电机电刷架弹簧定位不当,电刷弹簧或电刷架内部可能短路并局部过热,极端情况下引发车辆乘客舱内起火” 。此外,还有69045辆MKC的召回原因是“车辆因设计原因,电瓶监测传感器印刷电路板可能在售后维修过程中因操作不当而短路,造成周边材料过热,极端情况下导致发动机舱起火” 。保时捷宣布自8月14日起,召回51辆Macan、Panamera系列汽车,召回原因是“车辆因后排左右两侧座椅安全带固定支座的紧固螺钉没有按照规定拧紧。发生事故时,支座可能松动,影响安全带的约束效果,导致乘客受伤风险增加”。宝马则将召回29辆国产、进口纯电动汽车,包括7辆国产iX3、13辆进口i4、8辆进口iX、1辆进口i7。以上车辆的召回原因是“车辆由于供应商生产流程失误,组合充电单元受损出现工作异常,可能造成充电中断,导致车辆无法启动或行驶中高压系统关闭”。 +2023-08-16 09:53:45作者:王祝华来源:科技日报,正文:在日前举行的海南大学南繁种业与生命健康院士论坛上,中国科学院院士、中国医学科学院学部委员杨正林揭示了脂代谢异常致盲机制,该机制建立了脂代谢与眼部疾病的联系。作为人体的重要器官,肝脏在脂质的合成代谢中起着非常重要的作用。杨正林介绍,氧化低密度脂蛋白是低密度脂蛋白的氧化形式。在正常情况下,氧化低密度脂蛋白的含量是极低的,但在病理情况下,脂质过氧化反应增强可导致氧化低密度脂蛋白升高,氧化低密度脂蛋白升高又会对细胞及细胞膜的结构和功能造成损伤。杨正林进一步分析,眼睛本是高度耗氧的器官,视网膜将外部接收到的光信号转化成化学神经递质,在大脑中形成视觉。在这个转化过程中,视网膜高度耗氧,其耗氧量可达人体组织的8倍。高耗氧使得脂质容易变为氧化脂质。杨正林特别提到两种和脂代谢有关的致盲疾病——年龄相关性黄斑变性(AMD)和青光眼。在我国,大约有3000万人因AMD导致视力明显下降甚至失明。研究表明,脂质在视网膜色素上皮和脉络膜间的阶段积累导致视网膜和脉络膜血管之间的玻璃膜增厚是AMD的主要特征之一。其原因是本应该和氧化低密度脂蛋白高度结合的CFH基因发生突变,突变之后的CFH基因和氧化低密度脂蛋白结合明显受到破坏,所以大量氧化低密度脂蛋白就不容易被结合,进而导致AMD发病。杨正林建议,AMD的高风险人群不要吸烟,多吃抗氧化剂,可以有效防止疾病的继续发展。如果是该疾病的高危人群,在年龄接近50岁时就要经常去医院做眼科检查,早治疗的效果会更佳。 +2023-08-18 10:07:31作者:来源:央广网,正文:对于大部分慢性疾病患者来说,合理饮食是治疗的前提和基础,想要控制疾病,需先学会科学饮食。甲状腺功能亢进简称甲亢,是一种常见的内分泌疾病,因甲状腺合成过多的甲状腺激素引起。甲状腺激素会促进新陈代谢,所以机体代谢亢进。患者平时更应多注意饮食调节。那么,甲亢患者到底应该怎么吃呢?近日,上海市卫健委发布公众号文章,邀请复旦大学附属金山医院内分泌科李楠,为甲亢患者答疑解惑。一、生活中忌碘碘元素是合成甲状腺激素的基本原料,为了从源头上减少激素合成,首先要做到忌碘饮食,包括禁食含碘丰富的食物和药物。1.不吃高碘食物根据含碘量的高低,高碘食物分为三个等级。一级:海带、紫菜、苔条、海蜇等。二级:海蟹、贻贝、虾皮等。三级:海鱼、海虾等。建议根据以上等级,避免进食高碘食物。2.不吃加碘盐烧菜的时候要使用无碘盐,由于目前普遍使用加碘盐,所以要尽量减少在外就餐。3.不用高碘药物、化妆品药物方面,要禁用胺碘酮、碘酊等。含海藻成分的洗面奶、面膜等化妆品,也要避免使用。需注意的是,甲亢治愈后不需忌碘饮食,可适量吃碘。不过,由于体内过量的碘是甲亢的诱发因素,为防止甲亢复发,仍应避免在短期内进食过多高碘食物。二、保证营养供给甲亢是一种高代谢状态,需要保证充足的热量,改善全身营养状况,可以适当采用高碳水、高蛋白饮食。平时要注意维持体重,适当增加副餐;可多吃牛奶、鸡蛋、瘦肉、水果、低纤维素蔬菜(如黄瓜、番茄)以及豆制品等;注意预防血糖过高;疾病控制后减少食量,避免体重过度增加。三、其他饮食提示1.增加矿物质和维生素摄入:如新鲜蔬菜和水果,保证每天充足的饮水量。2.合理摄入膳食纤维:由于甲亢患者常伴腹泻,所以膳食纤维含量高的食物应适量吃。3.避免刺激性食物:甲亢患者容易心慌,应避免摄入辛辣食品及浓茶、浓咖啡等刺激性食物,以防止症状加重。 +2023-07-24 09:10:57来源:农民日报客户端,正文:近日,市场监管总局公布《食用农产品市场销售质量安全监督管理办法》(以下简称《办法》),《办法》共51条,将于今年12月1日起施行。据介绍,食用农产品质量安全与广大人民群众身体健康和生命安全息息相关,2022年9月,新修订的农产品质量安全法发布,对食用农产品市场销售提出了新的要求。为了衔接落实法律有关要求,市场监管总局组织对原《办法》进行修订,进一步规范食用农产品市场销售行为,保障食用农产品质量安全。《办法》强化市场开办者和销售者食品安全责任,规定市场开办者履行入场销售者登记建档、签订协议、入场查验等管理义务和销售者履行进货查验、定期检查、标示信息等主体责任;明确了地方市场监管部门与农业农村部门的案件通报和移送制度,细化了具体通报情形。《办法》根据农产品质量安全法有关规定,将承诺达标合格证列为食用农产品进货查验的有效凭证之一,并鼓励优先采购带证的食用农产品;同时明确提出在严格执行食品安全标准的基础上,鼓励食用农产品销售企业通过应用推荐性国家标准、行业标准以及团体标准等促进食用农产品高质量发展。《办法》针对群众反映“生鲜灯”误导消费者问题,增加对销售场所照明等设施的设置和使用要求;明确鲜切果蔬等即食食用农产品应做好食品安全防护,防止交叉污染。此外,结合食用农产品市场销售以个体散户为主的突出特点,按照“警示为主,拒不改正再处罚”的基本原则设置法律责任,将部分条款的罚款起点适度下调。作者:农民日报·中国农网记者 杨梦帆 +2023-07-24 06:31:24来源:河北新闻网,正文:河北日报讯(记者王伟宏)7月23日,2023年全国田径锦标赛在浙江衢州鸣金。河北省运动员发挥出色,共获得4金2银1铜。作为国内规格最高的田径赛事,本次比赛共设38个小项,吸引了国内31支代表队的约800名运动员参加。由于巴黎奥运会田径项目(除10000米、马拉松、竞走、全能和接力项目外)的成绩达标期从7月1日开始,本次比赛还承担着巴黎奥运会达标赛的任务。女子铅球比赛,河北省名将巩立姣发挥稳定,其中4次试投超过19米,最终以19.67米的成绩夺冠,同时轻松迈过了巴黎奥运会女子铅球项目18.80米的达标门槛。本场比赛之后,巩立姣将立即投入布达佩斯田径世锦赛和杭州亚运会的备战中。她表示:“目前的状态让我对接下来的这两场比赛充满信心。”男子跳远比赛,河北省运动员韦昕宇以8.17米的成绩夺得金牌,并刷新了个人最好成绩,这也是河北省运动员时隔10年再次在该项赛事上获得男子跳远金牌;女子跳高比赛,河北省运动员胡麟鹏与山东运动员张瑞琦并列冠军,成绩均为1.80米;男子3000米障碍比赛,河北省运动员王少杰以8分49秒54的成绩获得金牌。河北省运动员还获得2银1铜。其中,李亚轩获得女子5000米比赛银牌,田子重获得男子铅球比赛银牌,马越获得女子铅球比赛铜牌。 +2023-07-21 07:29:38来源:河北新闻网,正文:河北日报讯(记者戴绍志 通讯员孙红周)“领到人才购房补贴,心情特别激动,深深感受到了市里对人才的关心关爱,让我更有信心和决心扎根沧州。”日前,沧州市为122名沧州“狮城人才”集中发放购房补贴1200余万元,领到补贴的青年人才崔秀雷高兴地说。为吸引更多优秀青年人才来沧州就业创业,沧州市2022年出台了人才购房补贴新政策,新全职引进的博士学位研究生、“双一流”建设高校全日制硕士学位研究生、一流大学和一流学科全日制学士学位毕业生到沧州工作后,分别享受购买沧州市域内自用商品住房购房补贴30万元、15万元、5万元。自2022年以来,该市已累计发放人才购房补贴两批次共2500余万元,办理住房公积金贷款3957万元,组建全市32家二级以上公立医院服务专员队伍,办理“狮城人才”免费公交卡1180张,建立“青年人才驿站”17家,切实提高城市“温度”,增强人才满意度。近年来,沧州市大力实施人才强市战略,积极探索创新新时代人才强市重要举措。2022年,该市出台了《关于加快建设新时代人才强市的实施方案》,推出20条高含金量的政策措施并配套编制、配偶及家属就业安置、子女入学、住房安居、医疗保健等保障政策;研究制定《关于实施柔性引进人才激励支持若干措施》《沧州市“人才飞地”暂行管理办法》等系列文件,逐步构建起“1+N”多位一体的人才政策体系。今年以来,全市新引进本科及以上各类人才5822人,新认定沧州“狮城人才”1240人。6月份,该市拿出363个市直事业编制用于硕博人才选聘。 +2023-07-28 06:37:29来源:河北新闻网,正文:我省竞技体育工作有序推进上半年在全国A类、B类比赛中获得二十八枚全运会项目金牌河北日报讯(记者王伟宏)从省体育局获悉,今年上半年,河北省竞技体育工作有序推进,燕赵健儿在全国A类、B类比赛中共获得全运会项目奖牌94枚,其中金牌28枚。今年上半年,河北省竞技体育实力整体呈现出稳中向好态势。巩立姣(田径)、孙颖莎(乒乓球)、梁靖崑(乒乓球)、李冰洁(游泳)、林孝埈(短道速滑)等奥运重点运动员成绩稳定。其中,巩立姣接连创造本赛季个人最好成绩,孙颖莎成为河北省首位世乒赛女子单打冠军,李冰洁则在全国游泳冠军赛上追平了个人保持的亚洲纪录,均保持了良好竞技状态。此外,杨皓然、常园等重点运动员总体成绩稳中有升,杜林澍、田珈铭、高唯中、马永慧等年轻运动员快速成长,男子排球、女子足球等球类项目成绩也有所提升。统计数据显示,今年上半年,河北省夏季项目运动员在全国A类、B类比赛中获得全运会项目奖牌51枚,其中金牌13枚;冬季项目运动员则斩获全运会项目奖牌43枚,其中金牌15枚。从全国比赛金牌奖牌分布情况来看,河北省运动员在游泳、乒乓球、田径、射击、拳击、场地自行车、男子柔道、铁人三项、摔跤、赛艇等重点项目上总体表现稳定,部分项目金牌和奖牌点有增有减。其中夏季项目上,田径女子10000米、女子5000米、男子跳远,以及跳水男子三米板、体操男子跳马等项目成为新的金牌和奖牌增长点;冬季项目上,空中技巧青年组、速度滑冰女子青年组、U型场地、单板大跳台等项目实力持续提升,具备了在“十四冬”上冲金的实力。此外,今年上半年,河北省共有87名运动员在国家队集训,涉及26个项目。 +2023-07-29 06:09:02来源:河北新闻网,正文:河北新闻网讯(河北日报记者王伟宏)7月28日晚,2023年女足世界杯小组赛D组第二轮比赛中,中国女足在上半场被罚下一人的不利局面下,凭借下半场的点球进球以1:0战胜世界杯新军海地队。小组赛首轮,中国队0:1不敌丹麦队,让本场比赛成为不折不扣的“生死战”——获胜尚能保留小组出线的希望,输球则几乎出线无望。本场面对海地队,中国女足对首发阵容进行了调整,朱钰顶替徐欢担任门将,姚凌薇顶替张馨出场。7月28日,中国队球员王霜(中)在比赛中庆祝进球。新华社发本场比赛,面对首轮同样输球的海地队,中国女足凭借更为细腻的技术逐渐掌控了场上局势,不过几次射门均未能取得进球。第29分钟,场上风云突变,张睿在拼抢过程中因蹬踏对手而被红牌罚出场。此后,海地队抓住机会完成了几次进攻,但均未能形成有效射门,她们在第41分钟的单刀进球也因越位在先被判无效。上半场比赛,两队均未能破门。数据显示,尽管上半场中国女足长时间少一人作战,但在控球率、射门次数等关键数据上明显优于对手。7月28日,中国队球员张琳艳(左二)在比赛中拼抢。新华社发易边再战,两队都在中前场进行了人员调整,其中中国女足用王霜换下吴澄舒。随着比赛进行,两队都利用各自战术完成了几次有威胁的进攻。第74分钟,张琳艳禁区内被对方球员放倒,中国女足获得点球机会,王霜主罚命中,中国女足以1:0领先。随后的几分钟,中国女足愈战愈勇,几乎完全掌控了场上局势,不断威胁对方球门。80分钟后,随着体能下降,中国女足逐渐转入守势,并在长达14分钟的终场补时时间里顶住了对手的多次狂轰滥炸,最终将比分锁定在1:0。本轮战罢,英格兰队以两连胜领跑D组,中国女足和丹麦队各有一胜,海地队两连败垫底。最后一轮,中国女足将对阵英格兰队,丹麦队将对阵海地队。 +2023-07-30 07:27:25来源:河北新闻网,正文:为京津消费群体提供健康服务、养老服务、养生服务和旅居服务——保定今年将再推出500套高品质“保定小院”河北日报讯(记者徐华)日前,记者从2023年京津养老行业“保定行”暨保定市养老产业推介会上获悉,今年,保定市强力推进“保定小院”项目,努力打造京津冀首选颐养幸福城市。目前,该市已建成“保定小院”360套,其中28套小院签订了长期居住合同。今年年底前,将再推出500套高品质“保定小院”。“保定小院”是保定市依托康养资源优势,面向京津消费群体,精心打造的集“康、养、乐、农、游”于一体的院落型乡村居住场所,可为老年群体提供健康服务、养老服务、养生服务和旅居服务。据保定市农业发展集团相关负责人介绍,“保定小院”选址在涞水、涞源、易县、徐水等地的乡村,将户外健身、农田耕作、生态养殖与乡村康养有机融合,重点打造田园式旅居养老、社区式互动养老、疗养式护理养老“三种”养老服务模式。重点在涞源荆山口村、易县田岗村等打造田园式旅居养老模式。坚持“健养结合”“种养结合”“畜养结合”,设置运动健身区,打造山间小径、森林步道,建设有氧运动广场;设置农事体验种植区,定制化建设菜园、果园、农场、牧场等,实现院内空间与院外乡村生活相统一,让老年人享受田园生活,满足其个性化的康养需求。重点在涞水铁角村、南湖村等打造社区式互动养老模式。精心打造专家教授村、企业家小镇、艺术家部落等团体定制社区,在社区内设置国学馆、摄影荟、园艺屋、曲苑社、手工坊等个性化场所,为老年群体提供定制化营养膳食、多元化社交等服务。重点在徐水颐和雅园、国合康养小镇打造疗养式护理养老模式。与国内著名医疗机构合作,打造青山绿水间的颐养院落,配套建设功能全、设施优、服务好的专业颐养服务中心,为老年人提供中医理疗、温泉养生、康复运动等针对性理疗服务。在这里,老年人可享受专家远程问诊、绿色就医通道等便捷服务。 +2023-07-31 07:08:51来源:河北新闻网,正文:河北日报讯(记者王巍)2023年上半年,石家庄市金融运行总体平稳、稳中有进,存贷款总量保持合理增长,结构持续优化,为全市实体经济高质量发展营造了适宜的金融环境。这是记者从中国人民银行石家庄中心支行日前召开的2023年上半年河北省金融运行情况新闻发布会上获悉的。各项贷款保持较快增长。2023年6月末,石家庄全市金融机构本外币各项贷款余额17627.0亿元,同比增长13.8%,比年初增加1328.3亿元,同比多增573.5亿元,贷款余额、增量均居全省首位。企(事)业单位贷款增长较快。2023年6月末,全市企(事)业单位本外币贷款余额11987.3亿元,同比增长17.5%,高于各项贷款增速3.7个百分点,比年初增加1117.1亿元,同比多增344.7亿元。其中,中长期贷款余额同比增长19.2%,高于各项贷款增速5.4个百分点,比年初增加663.3亿元,同比多增97.3亿元,为企业发展提供了长期稳定的资金支持;短期贷款余额同比增长10.1%,比年初增加329.4亿元,同比多增300.3亿元,有效满足了企业短期资金需求。住户贷款稳步增长。2023年6月末,全市住户本外币贷款余额5626.7亿元,同比增长6.8%,比年初增加214.5亿元,同比多增234.1亿元,为个人消费、经营提供了有力支持。其中,短期贷款比年初增加111.5亿元,同比多增192.3亿元;中长期贷款比年初增加103.0亿元,同比多增41.8亿元。各项存款平稳增长。2023年6月末,全市金融机构本外币各项存款余额22481.9亿元,同比增长12.3%,比年初增加1752.7亿元,存款余额和增量继续居全省第一。分部门看,住户存款余额13019.1亿元,同比增长18.2%,比年初增加1302.9亿元;非金融企业存款余额5648.8亿元,同比增长7.7%,比年初增加279.2亿元。 +2023-08-01 15:50:26来源:新华网,正文:为切实抓好农业防汛减灾工作,最大程度减小因灾损失,农业农村部、应急管理部日前联合印发《关于紧急调用排灌机械设备开展救灾抢排田间积水的通知》,部署开展农业生产救灾工作。据了解,受第5号台风“杜苏芮”影响,黄淮、华北及东北等地区遭遇持续暴雨或大暴雨,有些农田形成大面积积水,危害在田作物。目前,第6号台风“卡努”正在北上,可能给农业生产带来不利影响。通知要求,农业农村部门要抓紧摸清受灾程度、急需排灌机械设备种类、数量等有关情况,深度动员,切实用好农机服务组织和农业农村系统现有排灌机械设备开展生产救灾。加强与应急管理部门对接,协商调用应急水泵等排灌机械设备。通知强调,农业农村部门要充分发挥农机应急作业主力军作用,组织农机应急作业服务队奔赴一线开展排水作业;需要翻耕补种改种的要统筹开展相应作业,努力降低因灾损失。要密切关注天气变化,加强对受灾区域面积、排灌机械设备供需等情况调度,动员拥有排灌机械设备的农机服务组织积极参与救灾,引导机手机具有序流动。通知明确,农业农村部门要加强区域统筹,对受灾县(市、区)要按照排灌机械设备自我保障充足、紧平衡和缺口较大进行分类指导。对于缺口较大的县(市、区),要开展跨区支援,及时与交通运输部门协商沟通,做好排灌机械设备跨区调运工作。对于本地排灌机械设备能够满足救灾需要的县(市、区),要充分挖掘救灾潜力,视排灌机械设备余量动员组建跨区应急作业服务队,积极响应跨区调配工作安排。 +2023-06-28 11:35:01来源:中国中医药报,正文:目前,青少年健康的隐匿杀手“脊柱侧弯”,还没有得到足够的重视。脊柱侧弯手术难度极大,还将造成数十万的高额医疗支出。近年来,河北省发挥中医药简便廉验的优势,大大减少患儿及家庭的身心与经济负担,也为全国防控脊柱侧弯探索出可借鉴的“河北模式”。高度重视脊柱侧弯健康“杀手”近年来,儿童青少年脊柱侧弯呈现隐匿性强、发病率高、低龄化等特点,严重危害健康,并对家庭和社会造成较大负担,成为继近视、肥胖之后的第三大健康“杀手”。对于脊柱侧弯,很多人不以为然。其实,在中小学生群体中,脊柱侧弯发病率高,约占人群的4.12%,此外,双肩不等高、双下肢不等长、翼状肩脾、颈腰椎反弓、圆肩驼背等其他脊柱健康问题发病率也达60%以上,患儿年龄最小的仅6岁。脊柱侧弯多发生在青春期,隐匿性强,很多孩子发病初期症状往往不明显甚至完全没有症状,导致家长及社会对此病的认知度普遍较低,往往把脊柱侧弯的外在表现误认为是体态问题,从而耽误早期干预。一些孩子一经发现便已达到手术指征,不得不面临手术之苦,对身心造成严重不良影响。脊柱侧弯这个健康“杀手”,不仅会导致驼背、骨骼不对称等外在畸形及身高发育受限等危害,还可能因骨盆倾斜影响视力、挤压心肺导致功能障碍,严重者可累及脊髓造成截瘫乃至死亡。临床证明,继发性脊柱侧弯,完全可以通过早期防控,达到不发生、少发生的目标。近年来,上海、广州等地市开始关注脊柱侧弯,但也仅限于高校、医疗机构小范围的研究。2022年之前,全国中小学生每年校园体检中并未明确这一专项筛查,导致大多数患儿的病情未能早期发现。国家修订中小学体检相关管理办法后,脊柱弯曲异常被纳入指导重点,但因基层医疗机构脊柱侧弯防控技术严重缺乏,脊柱侧弯在学生体检中未能得到规范化筛查及早期有效干预。“脊柱侧弯完全可以通过早期防控,做到不发生、少发生。因此,开展脊柱侧弯早期防控,与中医‘未病先防’理念完全契合。”河北中医药大学党委副书记、河北省中医院党委书记孙士江说。 +2023-08-02 04:26:52来源:新华社,正文:新华社北京8月1日电 为进一步做好脱贫人口增收工作,牢牢守住不发生规模性返贫的底线,农业农村部(国家乡村振兴局)日前印发《关于进一步做好促进脱贫人口持续增收工作的通知》,就有关工作进行安排部署。近期,部分省份牛羊肉等农产品价格呈下跌趋势,脱贫劳动力稳岗就业面临较大压力,洪涝等自然灾害对一些地区造成影响,脱贫群众持续增收面临不少挑战。通知明确,要加强监测排查,深入分析研判。各地要聚焦监测对象、低收入人口、收入明显下降以及支出负担骤增的脱贫人口和易地扶贫搬迁群众,通过面上排查和点上解剖等方式搞好跟踪监测。切实运行好防止返贫监测帮扶机制。通知明确,要推动脱贫人口稳岗就业,提高工资性收入。各地区要加大工作力度,确保今年脱贫人口务工规模稳定在3000万人以上。东部地区要指导企业加强岗位开发,深化劳务协作,想方设法把脱贫人口稳在企业、稳在当地,稳住岗位、稳住收入。中西部地区要开展有针对性职业技能培训,提升脱贫人口就业竞争力,提高劳务输出组织化程度,千方百计拓宽就业渠道,做好脱贫人口省内就业和就地就近就业。通知指出,要促进帮扶产业提质增效,稳定经营性收入。全面梳理排查帮扶产业项目联农带农机制落实情况。切实发挥扶贫项目资产效益,保障财产性收入。落实好支持发展新型农村集体经济的政策,抓好项目设计和实施,切实发挥带动增收效益。及时落实帮扶政策,增加转移性收入。通知要求,各地要及时落实各类奖补政策,因地制宜创新产业就业奖补措施,引导脱贫户及时把产品变商品、实物变现金,鼓励脱贫劳动力稳定就业增收,倡导勤劳致富,促进增强脱贫群众内生发展动力。此外,各级乡村振兴、对口协作部门要会同有关部门深入研究谋划,把脱贫人口增收工作做细做实做到位。驻村第一书记和驻村工作队员要进村入户,全面掌握脱贫家庭情况,在促进脱贫人口增收上发挥更大作用。 +2023-08-02 07:41:06来源:河北新闻网,正文:河北新闻网讯 记者从石家庄公交微信公众号了解到,根据石家庄市公安局交通管理局通知,中山路地道桥于8月1日晚24时断交施工,8月2日起公交1路、6路、30路、34路、68路、101路、131路线路临时调整。方案如下:一、1路、6路、131路临调方案1路、6路、131路由中山路临时绕行平安大街、裕华路、站前街、中山路复原线运行。平安大街临时增设平安中山路口(西侧)站位、平安四中路口站位、平安公园(东侧)站位,裕华路临时增设平安公园西(北侧)、棉七小区站位,站前街西侧临时增设解放广场站位。中山路临时撤销平安中山路口(北侧)、南三条、解放广场(南侧)站位。二、30路临调方案30路由中山路临时绕行平安大街、正东路、建设大街、中山路复原线运行。平安大街东侧临时增设平安中山路口站位,正东路南侧临时增设平安正东路口、勒泰中心北、栗康正东路口、正东路东口站位。中山路临时撤销平安中山路口(北侧)、南三条、解放广场、新百广场东、新百广场西、市中医院(北侧)站位,维明大街东侧临时撤销维明中山路口站位,华西路南侧临时撤销市二院站位。三、34路、68路临调方案34路、68路由中山路临时绕行站前街、裕华路、平安大街、中山路复原线运行。站前街西侧临时增设解放广场站位,裕华路临时增设棉七小区、平安公园西(北侧)站位,平安大街临时增设平安公园(东侧)、平安四中路口、平安中山路口(西侧)站位。中山路临时撤销解放广场(南侧)、南三条、平安中山路口(北侧)站位。四、101路临调方案101路由胜利大街临时绕行和平路、北荣街、新华路、公里街、中山路、金桥北大街、北荣街、和平路复原线运行。和平路临时增设自由港(北侧)、陆军工程大学、和平家园(南侧)站位,北荣街临时增设和平家园(西侧)、宁安路小学、鑫源雅居(东侧)、金亿城站位,新华路南侧临时增设中兴服装广场站位,公里街西侧临时增设纪念碑站位,中山路北侧临时增设解放广场站位。解放大街西侧临时撤销解放向阳路口站位,阜宁路南侧临时撤销解放阜宁路口站位,公里街东侧临时撤销纪念碑站位。 +2023-08-02 11:19:17来源:河北新闻网,正文:河北推广招标投标“双盲”评审取得积极成效全省招标投标“双盲”评审标段共计1698宗河北日报讯(记者解楚楚)从省政务服务办获悉,为维护公平竞争的市场环境,激发经营主体活力,提振市场信心,今年5月省政务服务办印发《推广招标投标“双盲”评审的实施方案》(以下简称《实施方案》),提出招标投标“全程网办”、评标专家“盲抽”、评标专家“盲评”、“分散”评标、远程异地评标5项工作措施。自《实施方案》印发以来,截至目前,全省招标投标“双盲”评审标段共计1698宗,占总标段的67%。“推行招标投标‘双盲’评审,在一定程度上遏制了招标投标过程中的人为干预和暗箱操作。”据省政务服务办相关负责人介绍,“盲抽”评标专家,避免了专家信息提前泄露;技术标实行“盲评”,避免了评标专家打“人情分”“关系分”;“分散”评标,杜绝了招标人代表与评标专家近距离接触、“作暗号”“打招呼”的可能。此外,通过推进招标投标“全程网办”,实现招标、投标、开标、评标、定标、合同签订等事项在线办理,为经营主体节约了大量交易成本。通过推进远程异地评标,实现了评标场地、评标专家等资源跨区域共享,有效解决了部分地区评标场地不足以及评标专家数量少的难题。下一步,省政务服务办将把全面、彻底实行“双盲”评审作为创造良好营商环境、提振市场信心的关键一招,坚决推进到位,加大招标投标改革宣传力度和典型案例曝光力度,努力营造走在全国最前列的营商环境。 +2023-08-08 06:45:54来源:河北新闻网,正文:省农林科学院开展减灾防灾技术指导农作物如何减灾防灾?专家这样支招河北日报讯(记者马朝丽)日前,省农林科学院组织专家团队开展灾情调查摸底和减灾防灾技术指导,对主要农作物如何减灾防灾提出具体建议。据灾情调查摸底,受灾严重的主要是大田粮食和油料作物、蔬菜、果树以及中药材等,受影响农作物种类多,分布范围广。需要重点采取的防灾减灾措施包括及时排水、中耕追肥、防控病虫害、化控防旺长、及时补种等。不同作物的防灾减灾措施如下——当前玉米正处在大喇叭口期到散粉期的关键生长时期,高温高湿环境极易造成病虫害流行发生,应密切关注田间病虫草害发生趋势,及时采取“一喷多防”技术措施防控病虫草害。谷子目前处于拔节或孕穗期,雨水过后谷瘟病、谷锈病、褐条病、纹枯病等病害有流行风险,谷子虫害主要有谷子钻心虫和玉米螟,应加强防范。雨后水肥条件较好、种植密度较大的大豆地块易出现徒长,建议喷施烯效唑、多效唑等药剂进行化学控旺。渍涝、田间湿度大容易诱发大豆根腐病和霜霉病等,可在发病初期喷施甲霜灵、咯菌腈、百菌清进行防治。受灾较轻的蔬菜地块,要及时绑扶倒伏的蔬菜植株,摘除受损严重植株茎叶、果实,待菜田土壤稍干后及时中耕松土。做好病虫草害防治,结合防病喷施促进生长、提高植株抗逆性的叶面肥。受灾较重绝收的田块,应及时清园,进行土壤消毒,适地适种。苹果正处于果实膨大期,涝害容易导致根系缺氧引发根系腐烂,降低果实品质和产量。大雨后易发生落叶病和潜叶蛾危害,要加强褐斑病、斑点落叶病和金纹细蛾的防治。目前是草莓育苗的关键时期,要及时清除草莓的老叶、病叶、无效叶以减少蒸腾,减轻植株负担。对积水较深、淹水时间较长的草莓育苗地,水退后要叶面喷清水清除泥浆,以免影响光合作用。及时防控病虫害,喷施广谱抗菌性药剂对病害进行预防,注意不同成分的药剂轮换使用。目前,正值中药材生产的关键时期。水灾后土壤、田间湿度大,根腐病、枯萎病、炭疽病、叶斑病等病害容易暴发,夜蛾、瘿蚊等害虫也容易发生,要及时做好防治工作。河北中药材绝大部分为多年生品种,应根据涝害情况,尽早补种和改种。对于水淹时间长的根茎类药材,建议提前采收加工。对于果实类药材,如果处于采收期,需加快采收,并干燥处理。对花类药材,建议在阴天或者雨后及时采收,不要带雨采收,以免影响质量。 +2023-08-08 06:15:20来源:河北新闻网,正文:8月7日,中国大学生体育代表团的河北选手李冰洁站在女子400米自由泳冠军领奖台上。8月7日,第31届世界大学生夏季运动会游泳比赛在成都市东安湖体育公园游泳跳水馆落幕,中国大学生游泳队以18枚金牌收官。其中,河北选手李冰洁在当天的比赛中收获了女子400米自由泳和女子x100米混合泳接力的金牌,至此她本届大运会共收获8金。河北日报、河北日报客户端记者耿辉摄8月7日,中国大学生体育代表团的河北选手李冰洁在女子400米自由泳比赛中准备出发。8月7日,中国大学生体育代表团的河北选手李冰洁在女子400米自由泳比赛中。8月7日,中国大学生体育代表团的河北选手李冰洁在女子400米自由泳比赛中。8月7日,中国大学生体育代表团的河北选手李冰洁挥手庆祝胜利。8月7日,中国大学生体育代表团的河北选手李冰洁刚结束了个人项目的比赛后跑着去与队友汇合参加下一个项目的接力比赛。8月7日,中国大学生体育代表团的河北选手李冰洁(上)与队友张雨霏在接力比赛中顺利交接棒。8月7日,中国大学生体育代表团的柳雅欣、朱雷桔、张雨霏、李冰洁(从左至右)在领奖台上比心。8月7日,中国大学生体育代表团的柳雅欣、朱雷桔、张雨霏、李冰洁(从左至右)举起“谢谢成都”的字样。 +2023-08-14 19:07:24来源:河北新闻网,正文:河北新闻网讯 日前,从河北省植保植检总站获悉,截至8月11日,已经在河北邯郸、邢台、石家庄、沧州4市多地发现玉米南方锈病。据省气象部门预测,未来几天,河北大部分地区仍然有分散性雷阵雨或阵雨天气,气象条件对于该病的传播、侵染非常有利。未来1到2周,玉米南方锈病在河北将进入集中显症期。农业专家提请广大种植户提前防范,发现病害立即防治,以免造成减产。目前,河北玉米普遍处在产量形成的抽雄-灌浆期,此时发病,造成的产量损失最大;另一方面,病害刚刚显症,大部分地区处于潜育期,此时防治,能有效杀灭病原菌,减少夏孢子堆的产生,从而减轻病原菌的进一步传播为害,阻断或减轻病害的暴发流行。一旦错过时机田间病害大范围显症,夏孢子在田间大量扩散和多次再侵染,条件适宜情况下,病害在5-7天即可完成一次侵染循环,因夏孢子对药剂和不良环境的耐受性更强,显症后防控效果不佳。大力开展统防统治。病原菌夏孢子随风雨和气流在田间传播,散户小范围防治很难有效阻断病害的流行,建议各地尽快开展应急性的统防统治工作,确保玉米南方锈病得到全面控制。对显症地块,视发病严重度,气候条件,隔7-10天再喷一次药剂。重点部位是棒三叶。化学防治药剂推荐使用。目前无登记的化学药剂,可选择含戊唑醇、苯醚甲环唑、丙环唑、氟环唑、嘧菌酯、吡唑醚菌酯、氟嘧菌酯等成分的药剂,按照药剂包装推荐使用剂量叶面喷雾1到2次。注意:不要选用含有烯唑醇的药剂,不要与甲维盐、有机硅(高温易出现药害)等药剂/助剂混合使用,不要在雨前施药,不要随意加大药剂使用量,避免出现药害。选择合适药械。玉米中后期植株高大,可选用植保无人机等航空植保器械喷洒作业,亩喷液量不低于1.5升,并在药液中添加植物油类和聚合物类的沉降剂、抗蒸发剂等适宜飞防的助剂。较干燥的田块大面积作业可选用地面自走式喷杆喷雾机,亩喷液量一般控制在10-15升。 +2023-08-16 07:19:21来源:河北新闻网,正文:我省出台幼儿园收费管理办法遏制收费高、收费乱的问题,维护好受教儿童和幼儿园双方合法权益河北日报讯(记者崔丛丛)近日,省发改委、省教育厅等四部门印发《河北省幼儿园收费管理办法》,切实加强学前教育收费调控监管,规范幼儿园收费行为,进一步遏制收费高、收费乱的问题,维护好受教儿童和幼儿园双方合法权益。办法提出,学前教育属于非义务教育,幼儿园可以收取保育教育费、住宿费、伙食费、服务性收费和代收费,收费应遵循非营利性原则。公办幼儿园保教费、住宿费实行政府定价或政府指导价,保教费收费标准应体现公益性和普惠性,住宿费标准按照寄宿成本确定,不得以营利为目的。公办幼儿园在寒、暑假期间向幼儿开放的,保教费按开园天数计算。假期保教费收费标准可在日常收费标准基础上适当上浮,但最高上浮幅度不得超过30%。非营利性民办幼儿园保教费、住宿费标准实行政府定价或政府指导价。保教费收费分类等级标准(普惠性民办幼儿园除外),由市、雄安新区、县(含县级市)教育行政部门根据幼儿园等级、平均办园成本,结合当地经济发展水平、居民承受能力及法定非营利要求等因素提出,报同级价格主管部门核定。住宿费(含普惠性民办幼儿园)收费标准由幼儿园严格按照住宿成本提出,经市、雄安新区、县教育行政部门审核同意后,报同级价格主管部门核定。办法明确,幼儿园不得在保教费外以开办实验班、特色班、兴趣班、亲子班、蒙氏班、课后培训班等特色教育为名向幼儿家长另行收取费用;幼儿园教育不得“小学化”、不得收取书本费(玩具费);不得收取与幼儿入园挂钩的赞助费、支教费、捐资助学费、建设费、教育成本补偿费等;不得以安全设备升级、配备保安人员为由,向幼儿家长另行收取任何费用。幼儿园收取的保教费、住宿费按月计算,由幼儿家长自愿选择按月或学期缴费,不得跨月或学期预收。幼儿入园后因故要求转园或退园的,保教费、住宿费以实际在园时间按规定扣除当月应缴费用后退还余额。幼儿园违反有关规定,发布虚假招生广告(招生简章),致使家长上当受骗,在幼儿入园第一个月内提出退园的,幼儿园退还幼儿所缴全部保教费、住宿费和其他费用。此外,服务性收费和代收费,双方按照规定有协议的,按照协议执行。无协议的,已发生代购代办事项或已提供服务的,不退还相关费用,应将代购实物交付幼儿方;尚未发生代购代办行为或未提供服务的,幼儿园应全部退还所缴费用。 +2023-08-16 13:08:10来源:河北新闻网,正文:河北新闻网讯(通讯员郭雨乔 河北日报记者王育民)日前,国家税务总局唐山市税务局围绕推动党建业务互促共进、推动精细服务提质提效、营造公平竞争市场环境、构建精诚共治工作格局4个方面,推出10项举措,助力全市民营经济发展壮大。据了解,小微企业、个体工商户等民营企业是扩大就业、改善民生的重要支撑。近期,国家税务总局联合财政部等部门陆续延续优化税收优惠政策,支持小微企业、个体工商户发展。精准聚焦民营企业所需所盼,国家税务总局唐山市税务局突出问题导向,努力打通减税降费政策落实过程中的堵点痛点,为民营企业提供更优质的办税缴费服务。推动精细服务提质提效,唐山市税务部门建立民营企业直联制度,市县两级税务部门班子成员至少包联一户民营企业,开展常态化走访座谈,及时响应经营主体合理诉求。同时,精准支持全市重大民营产业项目,组建专家团队提供全流程“一企一策”服务,并充分利用税收大数据为民营企业精准“画像”,通过电子税务局等渠道分级分类开展精准推送,实现“政策找准人、政策送上门”。为促进民营企业跨境发展减负增效,唐山市税务部门加快推动更多税费事项网上办、全程办及简办快办,并开通出口退税快速办理通道,为相关民营企业提供出口退(免)税“即报即审即退”等便利化措施。同时,推行“来即办、一趟清”服务,动态调整窗口办税业务流程清单并向社会公布,试行“受理立即审批”,让税费事项在办税服务厅实现全过程“一站式”办结。持续推行“有诉求、码上说”服务,税收执法宽严相济,加大日常风险监控力度……为营造公平竞争市场环境,唐山市税务部门加强维护民营企业合法权益,实体运行纳税人缴费人权益保护中心,实现税费服务诉求“一口”收办、首问负责、快速响应、闭环管理。同时,通过进一步严格落实税务行政处罚“首违不罚”制度等,规范税务执法行为,并充分运用税收大数据风险指标进行监控排查,及时阻断风险,让企业正确享受优惠政策。据了解,唐山市税务部门还坚持以高质量机关党建支持民营企业发展,着力推动党建业务互促共进。同时,优化跨部门协作机制,合力缓解企业困难,助力相关民营产业发展。 +2023-7-20 15:56,正文:中国侨网多伦多7月20日电 针对民进党2024年台湾地区领导人选举参选人赖清德日前投书美国《华尔街日报》并提出所谓“四大支柱”论调,全加促进中国和平统一委员会(卡尔加里区)近日发出声明予以谴责,并指出,其言论实为换汤不换药的坚持“台独”理念,本质是打着“和平”旗号的反和平“纲领”。声明指出,十分明显,“台独”分子要继续在“和平”幌子下搞阴谋,以荒谬厥词向美国主子表忠心。赖清德的言论,意在通过增加军费,拿着台湾百姓的血汗钱向美国购买军火,向中国大陆挑战,为与中国大陆“脱钩断链”而冒风险。声明说,这种颠倒黑白、混淆是非的计谋违背两岸人民心愿,严重阻挠两岸交流合作,是十足的麻烦制造者,明目张胆地勾结外部势力谋“独”挑事。声明说,对于赖清德之流的假和平、真“台独”的丑恶嘴脸,全加促进中国和平统一委员会(卡尔加里区)全体成员义愤填膺,予以坚决反对、强烈谴责。声明呼吁海内外同胞提高警惕、擦亮眼睛,不要让这些冠冕堂皇的虚伪词藻蒙住眼睛,不要让其欺骗台湾人民的“选票”。声明强调,中华民族伟大复兴的伟业不可逆转,实现两岸统一的大势浩浩荡荡。不管“台独”势力玩什么花样,中国一定会统一。 +2023-7-20 15:28,正文:《在北方》:聚焦华人女性生活本报电 (张嘉幸)近日,作家张惠雯短篇小说集《在北方》由北京十月文艺出版社出版。1978年出生的河南籍作家张惠雯,毕业于新加坡国立大学商学院,现居美国波士顿。在海外生活的她,坚持用中文写作,讲述华人群体故事,曾获新加坡国家金笔奖、首届人民文学新人奖、《上海文学》奖等。《在北方》包括《雪从南方来》《二人世界》《黑鸟》《玫瑰玫瑰》等9篇,主要聚焦生活在美国的华人群体,以人到中年的女性为主角,讲述她们的情感与婚姻生活。张惠雯以自己对风景、天气、光线等自然元素的敏感营造小说氛围,又用克制而精准的笔法渐次展现人物心理变化,为我们呈现出安居异域他乡后的中产移民女性的经历与心灵世界。作家徐则臣评价:“现今国际上最前沿的短篇小说家几乎都致力于发挥短篇小说的文体优势,首先在艺术层面上进行实验探索,比如爱尔兰小说家威廉·特雷弗、科尔姆·托宾、克莱尔·吉根。科尔姆·托宾的写作就特别警惕戏剧性冲突,这一点在惠雯的作品中也有突出体现。她的小说经常从我认为没有‘戏’的地方直升机似的原地起飞,这恰恰是一种难得的能力,也是一种与国际接轨的特质。” +2023-7-20 15:12,正文:中国侨网7月20日电 题:一中国公民在新西兰失踪!警方紧急寻人!我领馆发声据新西兰媒体1News报道,当地时间7月19日,新西兰克赖斯特彻奇市(又译:基督城)一名华人房地产经纪人Yanfei Bao(包燕飞,音译)失踪,情况令人担忧。7月20日,中国驻克赖斯特彻奇总领馆发布消息证实,领区一名中国公民失踪,总领馆高度关注。经向坎特伯雷警署了解,当地警方正在紧密调查之中,并已在社交媒体发布相关信息,总领馆敦请加大搜寻,亦请各侨社动员力量协助寻找。如有相关线索,可拨打中国驻克赖斯特彻奇总领馆领事保护热线0211767288,或直接拨打111(事件编号为P055385539)。中国驻克赖斯特彻奇总领馆微信公众号截图中国侨网(ID:qiaowangzhongguo)从坎特伯雷警署社交媒体发布的消息获悉:失踪女子包燕飞今年44岁,7月19日上午10点30分左右,包燕飞最后一次出现在威格拉姆(Wigram)地区。坎特伯雷警署称,“包燕飞已经被报告失踪,警方和她的家人都很担心她的安全。” 当地警方还公布了包燕飞失踪前不久的最后一张照片。另据当地媒体报道,包燕飞的同事表示,包燕飞是团队的新成员,非常专业。目前,40多名同事们正在努力寻找她,希望她能安然无恙、尽快回来。(稿件来源:中国侨网微信公众号;ID:qiaowangzhongguo;作者:韩辉) +2023-7-20 14:25,正文:李丰当选广东省侨联主席7月20日,广东省侨联十一届四次全委会议在广州召开。会议坚持以习近平新时代中国特色社会主义思想为指导,全面贯彻落实党的二十大精神,深入学习贯彻习近平总书记视察广东重要讲话、重要指示精神和关于侨务工作的重要论述,传达学习省委十三届三次全会和中国侨联十届六次全委会议精神,选举李丰为省侨联主席,并选举产生广东省出席第十一次全国归侨侨眷代表大会代表93名。会议邀请广东省委党校副校长潘向阳作学习贯彻党的二十大精神和习近平总书记视察广东重要讲话、重要指示精神专题宣讲辅导。省委统战部副部长、一级巡视员李阳春与会。会议听取省侨联党组成员、副主席戴文威代表常委会所作的工作报告,总结2022年以来全省侨联系统主要工作,并部署下一阶段工作。会议提出,要认真落实省委“1310”具体部署,全面实施全省侨联工作五年规划,持续推进文化引侨、平台联侨、政策惠侨、经济聚侨,做强做优做大“情系南粤”“侨创南粤”“风韵南粤”“侨爱南粤”四大品牌,深入开展“凝侨心”“聚侨力”“弘侨爱”“扬侨韵”“发侨声”“强侨建”六大行动,推动新时代新征程广东侨联事业高质量发展。会议强调,全省侨联系统要深学细悟笃行习近平新时代中国特色社会主义思想,深刻领悟“两个确立”的决定性意义,增强“四个意识”、坚定“四个自信”、做到“两个维护”,在省委的坚强领导和中国侨联的具体指导下,在历届省侨联领导班子奠定的坚实基础上,不忘初心、牢记使命、接续奋斗,奋力走好新时代赶考之路,继续当好全国侨联工作排头兵,不辜负组织的重托和侨界的期望,确保中央及省委关于侨联工作各项部署要求在广东侨界落地见效。会议由省侨联党组成员、副主席谢惠蓉主持。省侨联十一届委员会成员出席会议。(记者 龚春辉 陈嵘伟) +2023-7-20 13:59,正文:中国侨网7月20日电 据江苏省侨联微信公众号消息,近日,2023“中国寻根之旅”夏令营江苏营在南京市艺术小学举行开营仪式。来自11个国家和地区的参营营员和领队,南京市有关学校师生代表,海内外新闻媒体记者等近500人出席仪式。江苏省侨联主席刘标致欢迎词,向远道而来的海外华裔青少年朋友和领队老师表示欢迎。他说,为增进海外华裔青少年对祖(籍)国的了解,提升学习中华优秀文化的浓厚兴趣,省侨联承接了由中国侨联主办的2023“中国寻根之旅”夏令营活动。这对海外华裔新生代提升民族文化自信,增进中华民族自豪感、认同感,具有十分重要的意义,同时也是向海外传播、弘扬中华优秀传统文化,讲好江苏故事的重要契机。他希望海外华裔青少年,积极争做中华文化的传承者。不断加深对中华文化的认识和理解,领略中华文明的无穷魅力,汲取丰富营养,传承传播好中华优秀文化。开营仪式上,加拿大魁北克孔子学院、奥地利维也纳中文教育中心、比荷卢江苏总商会的营员代表进行了才艺表演。英国中英文化教育交流咨询协会会长周扬和加拿大北美青少年联合会营员赵宵墨,分别代表海外领队和参营学员发言。仪式最后,与会领导共同启动2023“中国寻根之旅”夏令营江苏营。开营仪式后,南京市艺术小学(南京市小红花艺术团)为与会嘉宾和营员们送上《童心筑梦》欢迎演出,让观众在沉浸式体验中感受中华文化的独特魅力和海内外青少年们的青春风采。 +2023-7-20 13:40,正文:7月19日晚,新疆木卡姆艺术团赴印尼巡回演出开幕式暨首场演出在雅加达举行。中新社记者李志全摄中新网雅加达7月20日电(记者李志全)7月19日晚,中国新疆木卡姆艺术团赴印尼巡回演出开幕式暨首场演出在雅加达伊斯梅尔玛祖基艺术中心成功举行,印尼各界人士近千名嘉宾出席观演。7月19日晚,新疆木卡姆艺术团赴印尼巡回演出开幕式暨首场演出在雅加达举行。中新社记者李志全摄7月19日晚,新疆木卡姆艺术团赴印尼巡回演出开幕式暨首场演出在雅加达举行。中新社记者李志全摄中国驻印尼大使陆慷在巡演开幕式上致辞表示,新疆1300多万穆斯林同中国其他各族人民一道,享受着国家发展带来的幸福与进步。中印尼人文交流发展前景广阔,期待今后举办更多类似活动,增进两国人民之间的相互了解,推动中印尼友好关系不断迈上新台阶。演出当天恰逢伊斯兰教新年,陆慷大使向所有穆斯林朋友送上新年的祝福。7月19日晚,新疆木卡姆艺术团赴印尼巡回演出开幕式暨首场演出在雅加达举行。中新社记者李志全摄7月19日晚,新疆木卡姆艺术团赴印尼巡回演出开幕式暨首场演出在雅加达举行。中新社记者李志全摄新疆木卡姆艺术团此次赴印尼巡演带来了独唱、联唱、歌曲串烧、舞蹈、杂技等精彩节目,赢得现场观众的热烈掌声。完成雅加达首场演出之后,艺术团将赴德波、勿加泗、万隆、井里汶、三宝垄、梭罗、日惹、泗水等地演出。(完) +2023-7-20 10:45,正文:中国侨网7月20日电 据中国驻伊拉克大使馆微信公众号消息,当前,伊拉克安全形势依然复杂严峻,恐怖袭击多发。目前伊拉克政府正筹备举行地方选举,不排除形势进一步受到影响的可能。此外,伊拉克正值暑期,天气炎热,气温高企,温度有时近50度。驻伊拉克使馆温馨提示中国公民阅读参考外交部领事司今年1月3日发布的“提醒中国公民近期谨慎前往伊拉克卡尔巴拉、瓦西特等12省,暂勿前往伊拉克其他地区”的通知(链接:http://cs.mfa.gov.cn/lgk1/202301/t20230103_11000176.shtml)。建议如非工作必须,慎重考虑前来伊拉克。如中国公民坚持前往或驻留有关地区,可能导致当事人面临极高安全风险,并影响获得协助的实效。伊拉克报警电话:130,急救电话:105外交部全球领事保护与服务应急热线(24小时):+86-10-12308+86-10-65612308驻伊拉克使馆领事保护与协助电话:+964-7901912315驻埃尔比勒总领馆领事保护与协助电话:+964-7515477820 +2023-7-20 09:49,正文:中新社伦敦7月19日电 (记者 欧阳开宇)首届中国国际供应链促进博览会(以下简称“链博会”)英国站路演19日在伦敦举办。中国贸促会副会长于健龙在线上致辞时指出,链博会是全球首个以供应链为主题的国家级展会,是中国推进高水平对外开放的新平台,是促进全球产业链、供应链稳定畅通和交流合作的公共产品。链博会以“链接世界,共创未来”为主题,坚持共建、共促、共享原则,与传统展会相比,办展理念、办展方式、办展成效均有本质创新。中国贸促会将邀请全球相关产业链最具代表性、最有特色的企业参展参会,并将为全球参展商和采购商提供专业化、国际化的全链条、一站式服务。中国驻英国大使馆经济商务公使包玲说,中英经济互补性强,利益深度交融,经贸合作潜力巨大,中国是稳定全球供应链的重要力量。链博会为英国企业展示产品、开拓中国市场提供了优质平台。希望英国企业充分利用这一平台,挖掘合作潜力,分享中国增长红利,拓展在华经营空间,实现共赢发展。英中贸易协会主席古沛勤表示,近年来,英中贸易规模达到历史新高,英中贸易协会热烈欢迎和支持链博会的举办,呼吁英国企业积极参加全球首个供应链博览会。英国48家集团俱乐部青年破冰者主席、伦敦出口公司首席执行官杰克·佩里表示,供应链对全球企业至关重要,英国企业应积极探索在英国以外的国家寻求新的合作机遇。中国贸促会用实际行动证明中国希望和世界各国一起努力探索和解决全球面临的共同挑战。路演现场播放了链博会宣传片,中国国际展览中心集团有限公司副总裁马力代表链博会承办方,向与会嘉宾介绍了链博会的场馆及筹备最新进展。首届链博会将于11月28日至12月2日在北京中国国际展览中心举办,设置智能汽车链、绿色农业链、清洁能源链、数字科技链、健康生活链等5大链条和现代物流等供应链服务展区。期间,还将举办开幕式暨全球供应链创新发展峰会,并围绕5大链条举办5场主题分论坛,以及供需对接会、行业研讨会、新品发布会等一系列配套活动。(完) +2023-7-21 09:17,正文:中新社北京7月20日电 (曾玥 国璇)东南亚孔子学院联席会议20日上午在北京举行。会议向来自马来西亚、泰国、印度尼西亚、新加坡的五所新建孔子学院授牌。本次会议以“协同创新 行稳致远”为主题,来自东南亚10个国家的孔子学院(课堂)及中外方合作院校代表近300人齐聚一堂,共享孔子学院办学经验,共话区域内孔院协同创新,共谋东南亚孔院发展新愿景。中国国际中文教育基金会理事长杨卫表示,东南亚孔子学院已经成为东南亚民众学习中文、了解中国的重要平台,东南亚各国孔子学院要加强协同发展,通过加强孔子学院联盟建设,实现资源共享、信息互通,要紧密结合所在大学和地区实际,明确发展定位,大力推进“中文+”教育,努力打造特色项目、特色课程和特色孔院,引领全球孔子学院发展潮流。中国—东盟中心教育文化旅游部主任贺迪(Hadi Tjahjono)在致辞中表示,教育交流在中国与东盟成员国的关系中发挥着非常重要的作用,而孔子学院作为教育交流的重要组成部分,不仅聚焦于语言教学,同时实施了“中文+职业教育”等新模式,以独具创新的形式搭建了校际交流的平台,拓宽了校际之间的合作内容。本次会议由中国国际中文教育基金会主办、北京语言大学承办。开幕式结束后,现场还进行了专家论坛,主题聚焦“10+1机制下中国—东盟语言教育交流合作与人文交流”。本次会议为期两天,将于7月21日闭幕。(完) +2023-7-21 09:02,正文:中新社华盛顿7月20日电 (记者 沙晗汀)美国国会参议院司法委员会当地时间20日表决通过一项议案,拟对联邦最高法院大法官设置职业道德准则。在当天的投票中,11票赞成、10票反对。该委员会全部民主党议员投票赞成、全部共和党议员投票反对。该议案将允许公众举报大法官违反道德准则的行为,并由下级法院法官组成的小组审查;大法官须申报接受的礼品、旅行馈赠,违反者将接受调查;大法官须回避存在潜在利益冲突的议题等。近来,美媒曝出最高法院大法官托马斯多年来接受共和党捐款人克罗资助的豪华旅行并且从未申报,引发公众不满。参议院司法委员会主席德宾(Dick Durbin)当天表示,当前,公众对于最高法院的支持率处于历史低点,该议案将是恢复公众对最高法院信心“重要的第一步”。共和党人则对该议案表示反对。他们认为,该议案是民主党人因对最高法院对一些案件的裁决表示不满而借机打击保守派大法官。也有共和党议员认为,基于三权分立原则,国会无权插手最高法院事宜。对于共和党人的质疑,德宾回应称,该法案“无关政治”,相关职业道德准则将适用于所有大法官。目前,最高法院的9名大法官中,有6名保守派大法官,3名自由派大法官。接下来,参议院审议并表决该议案。该议案需60票才能获得参议院通过,这意味着民主党至少需要9名共和党议员的投票支持。(完) +2023-7-21 09:54,正文:中新网广州7月20日电 (郭军 吴善基)广东省侨联十一届四次全委会议20日在广州召开。会上,李丰当选为广东省侨联主席。会议还选举产生了广东省出席第十一次全国归侨侨眷代表大会代表93名。7月20日广东省侨联十一届四次全委会议在广州召开。会上,李丰当选为广东省侨联主席。 中新社发 吴善基 摄会议听取了广东省侨联党组成员、副主席戴文威代表常委会所作的工作报告,总结了2022年以来全省侨联系统主要工作并部署下一阶段工作。会议提出,要全面实施全省侨联工作五年规划,持续推进文化引侨、平台联侨、政策惠侨、经济聚侨,做强做优做大“情系南粤”“侨创南粤”“风韵南粤”“侨爱南粤”四大品牌,深入开展“凝侨心”“聚侨力”“弘侨爱”“扬侨韵”“发侨声”“强侨建”六大行动,推动新时代新征程广东侨联事业高质量发展。李丰在讲话中表示,将在广东省委的坚强领导和中国侨联的具体指导下,团结班子带领队伍,紧紧依靠各位委员和各级侨联组织、侨联干部的共同努力,紧紧依靠广大归侨侨眷和海外侨胞的鼎力支持,在历届省侨联领导班子奠定的坚实基础上,不忘初心、牢记使命、接续奋斗,奋力走好新时代新征程广东侨联赶考路,继续当好全国侨联工作排头兵,不辜负组织的重托和侨界的期望,确保中央及省委关于侨联工作各项部署要求在广东侨界落地见效。(完) +2023-7-21 10:05,正文:中新网广州7月20日电 (记者 王坚)湾区同心 逐梦未来——“新时代好少年”走读湾区研学行暨深化穗港澳青少年交流活动启动仪式20日在广州南沙民心港人子弟学校举行。活动现场发布了“走读湾区”三大板块共26条路线。当天,“南沙·开放之城”“南沙·科创之城”2条研学路线的首发团率先发团。活动现场据介绍,该活动作为广州市关心下一代工作、广州市未成年人思想道德建设工作的特色品牌项目,立足广州,展望湾区,整合各方资源,设计一系列展现广州、展现大湾区高质量发展的精品研学路线,重点打造“走读南沙高质量发展”特别板块。据了解,此次研学路线设计以广州为中心,辐射整个大湾区,除了延续去年六大主题设计推出广州市内路线,今年更是从“走读广州”升级扩展为“走读湾区”。其中,“走读湾区”研学板块设置了“人文湾区”“科创湾区”“绿美湾区”“我在湾区”四个板块,主要以“广州+”来设计,涵盖深圳、佛山、东莞、珠海、中山、惠州、江门、肇庆等城市,未来将覆盖“9+2”所有大湾区城市。此次研学行主办方表示,该活动发挥广州“新时代好少年”先进典型的示范引领作用,持续打造穗港澳青少年交流平台,借助穗港澳青少年的视角观察和实践体验,向广大湾区青少年展现活力广州、活力湾区,为穗港澳三地青少年构建共同的“文化圈”“学习圈”“朋友圈”。活动现场还进行“走读湾区”微访谈、湾区文化交流展演等穗港澳三地交流活动。此外,研学行主办方还向三地研学基地和青少年发出“聚力粤港澳大湾区青少年研学共进”的倡议,以推进三地开展高质量研学活动。(完) +2023-7-21 10:31,正文:中新网北京7月20日电 (记者 孙自法)国际著名学术期刊《自然》最新发表一篇天文学论文称,研究人员通过韦布空间望远镜(JWST)观测发现少于10亿年历史的星系中存在碳尘埃,其元素比氢和氦重,被认为是只有更古老星系如银河系(超过130亿年)中才有的特征。这一最新发现可能会挑战现有关于宇宙尘埃形成的假说。该论文介绍,星际尘埃产生于濒死的恒星,因而被视为星系演化的一个标志。人们认为在早期宇宙中碳这类较重的元素数量稀少。相反,较古老的星系如银河系,由于观测到对特定紫外频率光的吸收出现“驼峰”,则被认为有着碳尘埃粒——如芳香烃。论文第一作者和共同通讯作者、英国剑桥大学Joris Witstok与合作者使用JWST的设备观测到一个类似“驼峰”,来自对年轻得多的星系的紫外光的吸收,包括一个大爆炸后存在仅约10亿年的星系,表明该星系存在含碳的尘埃。这项发现挑战了现有关于尘埃形成的假设,该假设认为较重的元素形成得没那么快。论文作者认为,这个早期星系中碳粒形成的时间相对较短,意味着存在一个快速的产生过程,如来自快速形成的恒星(称为沃尔夫-拉叶星),或来自超新星喷出物。(完) +2023-7-21 13:40,正文:中国侨网三亚7月20日电(黄赞文)2023“中国寻根之旅”夏令营海南三亚营20日开营。来自德国、丹麦、波兰等国家的40名华裔青少年相聚三亚,开启为期10天的文化体验寻根之旅。海南省侨联副主席苏燕在开营仪式上表示,海外华裔青少年是海外华侨华人社会的希望和未来,勉励参加活动的华裔青少年朋友珍惜学习交流的机会,深入体验博大精深的中华文化,感受海南自贸港建设的方方面面,把生动多彩的海南故事带回去与家人朋友们分享,做中华文化海外传播的小使者,做海南故事的讲述者,做中国人民和世界人民友好往来的推动者。三亚市侨联主席彭伟然向营员简要介绍了三亚市的历史和现状,希望营员们通过三亚感受中国,体验中国改革开放发展取得的历史成就,在这段文化体验寻根之旅中快乐研学、快乐生活。来自德国的营员代表丽莎在发言中深情回忆小时候到访三亚印象,分享疫情三年来参加网上夏令营活动的点滴感受,期待未来10天与其他华裔青少年朋友共度美好时光,共同感受中华传统文化魅力。此次开营的2023“中国寻根之旅”夏令营海南三亚营,是今年海南省举办的第一个“中国寻根之旅”线下夏令营。为期10天的“寻根之旅”活动,既有品味中国历史文化的汉语课堂,又有体验海南民俗风貌、感受海南发展现状的校外拓展活动,让参营的华裔青少年朋友在学习和实践中感受中华文化、了解当代中国,深刻体会祖(籍)国和海南发展的伟大成就,铭刻祖(籍)国和海南的美好印象。此次2023“中国寻根之旅”夏令营由中国侨联主办,海南省侨联、三亚市侨联共同承办,三亚华侨学校具体协办。(完) +2023-7-21 14:30,正文:中新网7月21日电 据美联社报道,印度官方21日表示,该国西部马哈拉施特拉邦一座村庄19日深夜因连日降雨引发山体滑坡,目前已经确认至少16人遇难,多人被困。据报道,此次山体滑坡发生在距离马哈拉施特拉邦首府孟买大约60公里的伊尔沙瓦迪村。该村200多名村民中,已经确认16人遇难,75人获救,但仍有多人被困。村庄50座房屋中的17座遭滑坡掩埋。当地时间7月20日,救援人员在印度西部马哈拉施特拉邦莱加德地区的山体滑坡现场。马哈拉施特拉邦首席部长埃克纳特•欣德20日抵达这座村庄视察灾情,表示搜寻失踪者是当前任务的重中之重。该邦副首席部长德文德拉•法德纳维斯20日在社交媒体上表示,一支由60名救援人员和徒步旅行者组成的队伍已被部署以展开救援。印度气象部门将马哈拉施特拉邦置于警戒状态。据当地媒体报道,当地火车服务因车站内和铁轨上的水流而中断。道路被淹没,造成交通堵塞,通勤者被困。当地时间7月20日,印度特伦甘纳邦海得拉巴市街道积水,交通堵塞,当地交警帮助被困路人。印度官员称,过去两周,创纪录的季风降雨在印度北部造成100多人死亡,暴雨导致道路塌陷,房屋倒塌。 +2023-7-21 16:47,正文:香港集美校友后裔夏令营开营。张玲供图中国侨网厦门7月21日电(张玲)据厦门集美区侨联消息,20日上午,由集美区海外联谊会、集美区归国华侨联合会主办,厦门万千研学教育科技有限公司承办,集美校友总会、集美区关心下一代工作委员会协办的第五届“嘉庚风·中华情”香港集美校友后裔夏令营在集美闽台研学总部|万千极美营地正式开营。集美区海外联谊会会长洪清岩,集美校友总会永远名誉会长任镜波,集美区侨联主席陈群英,香港集美校友会会长李凤翔,集美区关工委副主任欧阳萍,香港集美中学校友会会长陈伟民,集美校友总会党支部书记颜学华,厦门建发国际旅行社集团有限公司总经理、集美闽台研学总部|万千极美营地主任王珺瑜,以及香港集美校友会会员后裔近50人参加本次开营仪式。开营仪式上,集美区海外联谊会会长洪清岩致辞。他表示,培育好下一代香港青少年的家国情怀,增强香港青少年的文化认同,感受“嘉庚风”,领悟“中国情”是本次夏令营研学活动的首要目标。希望同学们在此次夏令营中能深刻领悟以爱国主义为核心的嘉庚精神,深怀爱国之情,坚守报国之志,为实现中华民族伟大复兴贡献力量。香港集美校友会会长李凤翔在发言中指出嘉庚薪火代代相传是老一辈侨胞最大的愿望。时隔三年后再次重返集美、重走嘉庚故里,期待同学们在此次夏令营中能够领悟“一精神三文化”,进一步把中华文化发扬光大,更好地学习嘉庚精神。香港学生黄嫣作为营员代表发言,表达了对本次活动的满满期待,希望在7天6夜的夏令营活动中可以更好地认识集美,理解嘉庚精神,传承中华文明。仪式上,集美区侨联主席陈群英、香港集美校友会会长李凤翔向学生代表黄逸朗授研学营营旗,共同开启“寻根之旅”。陈群英、李凤翔向学生代表授研学营营旗。张玲供图本次“嘉庚风·中华情”香港集美校友后裔夏令营于7月19日至25日在厦门、泉州、漳州三地开展。为期一周的活动中,营员们将走进集美学村、集美塔、鼓浪屿、云水谣等地,亲身领略中华民族源远流长的优秀传统文化,充分体察当代中国日新月异的发展变化。(完) +2023-7-22 08:36,正文:中国侨网7月22日电 据中国驻津巴布韦大使馆微信公众号消息,近期,津巴布韦连续发生数起针对中国企业机构和公民的盗抢案件,造成不同程度人员受伤和财产损失。中国驻津巴布韦大使馆已向津警方等相关部门表达关切,敦促津方加大案件侦破力度,采取切实有效措施保护中国企业机构和公民安全。中国驻津巴布韦使馆郑重提醒在津同胞注意加强自身防范:一、切实提高安全防范意识。请勿携带大量现金,避免财物外露。谨慎安排出行计划,前往偏僻和不熟悉地区,应提前了解目的地和途中的安全动态。开车外出注意观察周边环境,锁好车门、车窗,人离开时勿在车内放置贵重物品。勿参与或围观大型集会、游行示威等活动。避免在夜间出入酒吧、夜店等娱乐场所,勿从事涉黄赌毒活动。二、提升自身安防能力。积极采取各种人防、物防、技防措施,特别是“一键报警系统”“智能监控设备”等技防手段,从而达到减少发案、降低风险的目的。如遇紧急情况和危险事件应冷静处理,避免与犯罪分子发生肢体冲突,稳妥周旋,以保全人身安全为重。津巴布韦常用报警电话:995(固话拨打),112(Econet手机客户拨打),114(NetOne手机客户拨打)在津侨胞安全互助基金会电话:+263-772515082驻津使馆领事保护与协助电话:+263-772128308外交部全球领事保护与服务应急呼叫中心电话:+86-10-12308或+86-10-65612308 +2023-7-22 10:15,正文:中新网北京7月21日电 由北京市京源学校、台北私立静心中学、济南汇才学校和天津英华实验学校共同举办的第五届海峡两岸中华传统文化学生文艺营20日在京落下帷幕。五天行程中,两岸青少年在交流中拉近距离、传递友情。7月19日,两岸青少年在北京体验传统文化。(主办方供图)活动以16日在北京市石景山区举办的“绽放青春 羽梦同行”两岸青少年羽毛球交流赛为序幕,随后到访了故宫博物院、圆明园、首钢园、孔庙和国子监博物馆、法海寺等地,体验北京民俗风情,感受经济发展面貌。7月16日,在北京市石景山区举办的“绽放青春 羽梦同行”两岸青少年羽毛球交流赛为本届文化营拉开序幕。图为两岸青少年在比赛期间体验运动项目。(主办方供图)台北私立静心中学学生襄璟表示,在参访中体验到大陆深厚的文化底蕴和经济发展成果,与大陆同学相处也十分融洽,希望未来有机会再来交流。济南汇才学校学生李文珺也感受到同学们在相处时并无隔阂,“这便是来源于共同血脉的团结”。北京市京源学校学生张乃元说,活动中与台湾和济南的朋友建立了深厚友谊,这不仅是个体间的友谊,更是跨越海峡的两岸情谊,日后这份友谊定能闪耀出更加绚丽的光彩。7月19日,两岸青少年来到位于石景山区的法海寺,欣赏寺中明代壁画。(主办方供图)北京市京源学校校长白宏宽在回顾两岸学生文艺营的缘起和发展后表示,读万卷书,行万里路,期待两岸学子相约台北、济南和天津,延续跨越海峡的美好约定,共同为中华民族复兴伟业贡献力量。(完) +2023-7-22 10:05,正文:【东盟专线】东盟华文学校骨干教师“云端”接受培训 提升教学技能中新社南宁7月21日电 (林浩 王怀玉)“‘他山之石,可以攻玉。’我们希望通过此次培训,提高自身华文教学水平和业务能力,成为优秀的华文教师。”7月21日,老挝万象市华侨公立寮都中学董事会秘书徐蒲贝在视频致辞时说。当天,2023年“红烛故乡行·海外华文学校骨干教师线上培训班”暨教材教具捐赠仪式在“云端”举行,近150名东盟华文教师集中接受为期三天的线上培训。徐蒲贝表示,此次培训开设的《华文朗读与演讲》《华文写作》《汉语语法》《课外活动组织管理》《课堂教学技巧》等课程,十分有针对性,可以更好地帮助教师提高课堂教学效率,让更多学生学好中文知识。此次活动由广西壮族自治区侨务办公室主办,广西华侨学校承办,活动在广西南宁市设立线上主会场,并在越南、泰国、老挝、印度尼西亚、柬埔寨、马来西亚、缅甸、新加坡等东盟国家的华文学校、华文教育机构开设分会场,旨在帮助海外华文学校骨干教师提升能力素质,提高华校办学水平。外派教师代表、在老挝沙湾拿吉崇德学校援教5年的黄海远也表示,当前,随着中老铁路顺利通车,中国和老挝合作日益密切,越来越多老挝学生选择到华文学校学习,华文教育迎来发展新机遇。“如何让课堂变得更加有趣,让学生快乐地学习,是我一直在探索的课题,希望在本次的培训中得到更多收获。”黄海远说。广西华侨学校校长姚远忠介绍,此次活动是广西壮族自治区侨务办公室“海外华文教师暖心工程”的重要部分,作为活动承办方,该校精心安排系列课程,帮助海外华文教师进一步了解中国经济、文化发展情况,提升教学技能和华文教学科研水平。当天,广西壮族自治区侨务办公室还向东盟国家的18所华文学校、华文教育机构赠送了一批教材教具。(完) +2023-7-22 12:00,正文:中新网7月22日电 据美国有线电视新闻网(CNN)报道,当地时间21日,美国佛罗里达州联邦地区法官艾琳·坎农宣布,美国前总统特朗普的“密件案”庭审工作将于2024年5月20日开始,并将持续两周的时间。报道称,这一时间安排对于特朗普和他的竞选团队而言,将造成不小的麻烦。因为美国大多数州的2024年总统大选共和党初选预计在当年5月底结束,少数几个州更是要等到6月初才开始初选。初选的结果将决定哪名候选人能够获得共和党的提名。但“密件案”的庭审时间,正好与多场初选的时间重合,这可能影响特朗普的竞选活动。资料图:美国前总统特朗普。《纽约时报》曾报道,特朗普顾问直白地说过,特朗普希望通过赢得总统选举来摆脱他所面临的官司,他的策略就是想尽一切办法拖延审讯。因此,特朗普方面7月10日曾提出希望将庭审时间延迟到2024年11月美国总统大选之后,而特别检察官杰克·史密斯建议庭审时间安排在今年12月。最终坎农决定在双方的请求之间寻求妥协,确定了2024年5月20日的庭审时间。CNN称,目前,特朗普仍然是2024年美国大选共和党候选人中的领跑者。美国民调机构皮尤研究中心最近的调查结果显示,7月中旬对8480人的调查中,35%的受访者对特朗普持正面看法,这与此前3月的民调结果几乎相同,其支持率并未被明显拉低。 +2023-7-22 15:12,正文:中新社马尼拉7月22日 (记者 张兴龙)菲律宾火山地震研究所22日发布消息称,该所于21日19时56分在马荣火山顶部火山口观测到持续28秒的短时熔岩喷射。菲火山地震研究所专家詹姆斯·诺博拉(James Nobora)称,这是自6月8日该所将马荣火山喷发警戒级别提高至三级以来,首次观察到该情况,是火山动荡的新表现。据菲火山地震研究所报告,从21日5时到22日5时,马荣火山口仍在缓慢喷出岩浆,岩浆顺山体而下,最长一处达2.8公里。在过去24小时里,该所在马荣火山共录得4次火山碎屑密度流、175次落石事件和22次火山地震。詹姆斯·诺博拉表示,马荣火山活动是否会升级仍有待观察,但目前的参数显示,岩浆活动正在通过缓慢喷出持续进行。自6月以来,马荣火山持续出现活动异常。菲火山地震研究所曾于6月5日将马荣火山喷发警戒级别从一级提高到二级,并于6月8日进一步提升至三级,意味着火山“危险喷发趋势增强”,并维持至今。马荣火山所在的阿尔拜省也已于6月9日宣布进入灾难状态。菲律宾国家减灾委公布的数据显示,截至7月22日,当地政府已将马荣火山周围6公里永久危险区内两万多名居民转移到临时避难场所。菲律宾各界已向受灾民众提供了价值2.4亿比索的援助物资,包括家庭帐篷、食品包以及消毒用品等。马荣火山位于菲律宾吕宋岛东南部的阿尔拜省,海拔约2400米,距首都马尼拉约330公里,是菲境内最活跃的火山之一。(完) +2023-07-17 10:02,正文:千龙网讯 7月14日,爱奇艺全球首家线下亲子主题乐园——爱奇艺奇巴布乐园在北京市延庆区北京世园公园旅游度假区欢乐开园,为小朋友们拉开一场暑期仲夏之旅。据了解,该乐园由北京世园公司携手爱奇艺奇巴布乐园独家运营商Qliday Production共同打造,为北京市及周边家庭亲子出游打造一站式“亲子+”微度假目的地。位于北京世园公园旅游度假区内的奇巴布乐园将奇巴布自制动画IP——《恐龙萌游记》与《嘟当曼》与传统文化主题引入园中,构建集游乐、智趣、戏剧、家庭社群、度假于一体的全场景沉浸式家庭游乐互动探索游乐空间。乐园近6000平方米,拥有7 大主题空间、200+游玩项目,有关家庭娱乐的所有美好创想悉数叠放其中。小朋友们可畅游《嘟当曼》主题空间,在有章鱼噜噜的海洋球池中,与故事中被施法变大的IP形象合影,也可在集火山、海洋、森林、陆地景象的《恐龙萌游记》主题空间中,沉浸式感受大自然的力量与变化。独树一帜的高挑空国风体验区“奇巴布小镇”,将山水奇境、古风建筑群、烟火市集与古时的游艺竞技之乐巧妙融汇。此外乐园里还设定有一群特殊的伙伴——游戏领导者,他们将化身为孩子们好奇心和探索梦的守护者,全程带领小朋友们沿着乐园原创的故事剧情,在创意的世界中探索、感知与游戏。 +2023-07-08 08:14,正文:千龙网讯 7月6日至9日,《“艺”往情深》曲艺演出周在北京民族文化宫大剧院上演。本次曲艺演出周汇聚了京剧、苏州评弹、相声、快板、京韵大鼓、单弦、北京琴书、铁片大鼓、河南坠子、西河大鼓、京东大鼓等十余种非物质文化遗产艺术形式,更有众多非物质文化遗产代表性传承人、国家一级演员登台献艺。每届曲艺演出周中都会包含《相声新作品专场》以及《鼓曲专场》,激励团内演员创作推出新的作品、恢复经典鼓曲唱段。此次,曲艺演出周,北京曲艺团延续这一特点,7个原创相声新作以现实主义题材为主,聚焦历史、当代生活、现代教育、音乐旋律等方面,引得现场笑声掌声不断。7首经典鼓曲唱段,也是每位鼓曲演员重新学习恢复的作品。北京曲艺团挖掘演员自身的更多才能,除鼓曲作品的“本功”演唱外,更有曲艺演员“披挂上阵”。7日晚的《非遗传人 艺绽国粹》曲艺人才展示专场便展示了姊妹艺术的跨界演艺。曲艺演员彩唱京剧经典唱段,演唱水平不输戏曲演员,引得现场叫好声不断。与此同时,京剧演员倾情献唱的鼓曲经典名段《击鼓骂曹》也是韵味十足。难得一见的“跨界”演出,精彩纷呈。本次演出周,还特邀苏州市曲艺家协会的多名艺术家前来助演,当软糯细致的苏州评弹与铿锵有力的北方鼓曲碰撞在一起,展现出强烈的反差感,使观众深刻体会到中国曲艺的百花齐放,各具特色。同时,也为南北曲艺相互借鉴发展提供了学习交流的平台。演出节目皆选择了各个曲种中的代表之作,让喜爱鼓曲的观众们不虚此行。北京曲艺团团长王跃明在接受采访中谈到,《“艺”往情深》曲艺演出周,是北京曲艺团自2019年起举办的大型系列演出活动,至今已举办四届,是对非遗保护的重要举措,也是北京曲艺团每年的重点品牌项目之一。本届演出周,曲艺团推出了4台各具特色的专场演出,将京剧、苏州评弹以不同的形式与曲艺擦出“火花”,得到了良好的业内与市场反响。 +2023-07-30 05:53,正文:7月28日,省网信办通报整治网络“自媒体”乱象情况,并公布部分典型案例。今年以来,在省委、省政府坚强领导下,全省网信系统围绕建设清朗网络空间部署要求,大力开展“清朗·从严整治自媒体乱象”专项行动,充分发挥省级网络综合执法协调机制作用,网信、公安、文化和旅游、市场监管等相关部门通力协作、各司其责、形成合力,严厉打击网络“自媒体”造谣传谣、假冒仿冒、违规营利等违法违规行为,推动网络“自媒体”行业秩序逐步规范。截至目前,全省共清理违规信息4万余条,依法处置违法违规“自媒体”账号2.7万余个,受理处置公众举报投诉6000余条,依法约谈违规“自媒体”平台账号责任人298人次,有力震慑“自媒体”违法违规行为。在上级部门大力支持下,对谣言首发、多发的,协调平台依法依约予以关闭;情节严重的,移交公安机关作进一步核查处置。对假冒仿冒官方机构的,采取约谈、警告、责令整改直至关闭账号等措施。对蹭炒热点、博取流量违规营利的,采取禁言、封禁直播权限等措施。互联网不是法外之地。省网信办将继续把整治网络“自媒体”乱象作为工作重点,继续加强属地网络信息内容监管,从严查处网络“自媒体”违法违规行为,为全面建设现代化美好安徽营造良好网络环境。(记者 张理想) +2023-07-30 01:56,正文:中安在线、中安新闻客户端讯 近日,来自北京大学、复旦大学、浙江大学、中国科学技术大学、中央财经大学、湖南大学等6所知名高校的47名学生正在合肥参加青年学子来皖“就业创业实践”活动,在7月29日的总结座谈会上,10名高校学子被聘为“智汇合肥”青年志愿推介官,将向全国高校学子推介合肥。“很荣幸能担任‘智汇合肥’青年志愿推介官,我将不遗余力地宣传合肥,让更多的高校学子能够了解合肥、走进合肥、投身合肥”,来自中国科学技术大学的王晓雅正在合肥团市委参加为期一个月的暑期实习。为让高校学子体会合肥“科里科气”“文里文气”的城市特质,团市委在三周的时间内安排了追寻红色记忆、追随科创之光、追寻现代文化三场主题活动,青年学子们在红色教育基地传承红色精神、在科创企业和科研院校感受合肥科技创新魅力、在文化地标领略合肥文化底蕴,充分展现合肥城市科技硬实力与文化软实力。同时团市委还安排了市县两级人才政策解读、企业交流座谈、知名校友分享等活动,让高校学子充分了解合肥的经济社会发展和人才发展环境,积极为广大学子提供了优质的资源和平台,示范引领更多高校毕业生来肥就业创业,推动青年人才与青春合肥双向奔赴。青年学子来皖开展“就业创业实践”活动是由中共安徽省委组织部会同省人社厅、共青团安徽省委统筹安排,各市委组织部、市人社局、团市委具体承办。作为青年发展城市全国首批试点之一,合肥团市委把促进青年特别是高校毕业生就业工作摆在更加突出的位置,根据全市重点产业发展需求,通过建立校地团委工作联席会、办好“揭榜挂帅”“赛马”等赛事、发布企业岗位需求清单等措施,不断拓宽引才渠道;针对不同时期大学生群体特征,精准开展技能培训、就业帮扶、社会实践等,不断丰富“育才”手段,构建全方位全程化培养培育体系,引导青年学子们在实践中感知社会、了解安徽,帮助青年学生不断提升社会化能力和就业能力,宣传引导更多高校学生来皖来肥就业创业。(记者 檀美玲) +2023-08-01 05:26,正文:受内源性害虫基数偏高、外迁害虫迁入峰次多、流行性病害发生风险高等因素影响,还将出现台风和多轮降水天气,今年我省秋粮重大病虫害发生程度较重,威胁秋粮生产。省农作物重大病虫害防治指挥部日前发出通知,要求各地做好秋粮重大病虫害防控工作,加强精准预警,推行统防统治。通知要求各地充分利用县、乡病虫监测点和病虫情物联网智能监测点开展动态监测,鼓励种田大户、合作组织参与病虫情监测调查。坚持秋粮重大病虫情会商制度,精准做好预测并及时发布预警信息。省农业农村厅近期将组织8个工作组赴各地开展秋粮重大病虫害防控督导,各地要发挥农技人员的技术优势,确保秋粮“一喷多促”等关键技术到户到田,确保秋粮病虫害防控各项措施落实落细。各地要因地制宜推广应用生物防治、理化诱控、高效低风险农药等绿色防控技术,前移防治关口、治早治小。在统防统治方面,合理利用项目资金,加大对专业化服务示范组织的支持力度,调动社会力量参与病虫害专业化统防统治。吸引民间资本和社会资本进入农业托管服务领域,推动农作物病虫害统防统治和代防代治。大力推进统防统治与绿色防控融合,提高防控组织化程度和科学化水平,持续推进化学农药减量化行动,促进农业绿色高产高质量发展。(记者 史力 许昊杰) +2023-08-05 06:01,正文:光波导是实现光电集成和光子集成的关键。日前,安徽大学先进材料原子工程研究中心科研团队发现金属纳米团簇中的光波导行为。这一在金属纳米团簇材料中发现的重要光传播新现象,填补了纳米团簇光子性质研究空白,丰富了有源光波导和偏振发光材料研究,具有十分重要的潜在应用价值。相关成果发表在国际顶级期刊《科学》上。光波导具有抗干扰能力强、保真度高等特点,其广泛应用于光电调制器、光子耦合器、光子电路等领域。在有源光波导系统中,可以利用分子偶极矩取向影响光子传输方向形成偏振光波导。目前,多种光子纳米结构被开发用作光波导材料,但它们仍然存在着光学损耗高和制造工艺复杂等问题。而配体保护的金属纳米团簇具有原子精确的结构、良好的光学性质和较大的斯托克斯位移,这些特点使其非常适合用于光电器件。加之团簇的光学性质可以通过金属掺杂、配体调控、价态调整等手段进行调控,因此金属纳米团簇非常适合用作光波导材料,并探索其结构与性质之间的联系。安徽大学研究人员设计并合成了具有橙色和红色发光的两种新型纳米团簇,团簇晶体均表现出优异的光波导性能,它们的光损耗系数低于大多数有机、无机以及杂化材料。并且,这种光波导性质在金属纳米团簇中具有一定的普适性。光波导材料是光学器件和光学系统中的关键组成部分,在光通信、光学传感和光学计算等领域发挥着重要的作用。金属纳米团簇光波导行为的发现,为开发配体保护的金属纳米团簇作为活性光波导材料提供了理论基础和应用前景,为构建基于团簇的小型化集成纳米光子器件提供了支持。据悉,近年来,安徽大学材料科学与工程世界一流学科建设中高水平科研成果取得系列重大突破,学校自然指数排名攀升到第48位,材料学科ESI排名上升到前2.963‰,学术影响力不断提升。(记者 陈婉婉) +2023-08-05 20:03,正文:最近一份关于安徽的“期中成绩单”公布,安徽出口额达到2512.6亿元,增长14.5%,出口较全国高了10.8个百分点,出口总额居全国第9位、中部第1位,这也是安徽出口额历史性进入全国前十位。那有很多朋友们就想问了,咱安徽是怎么做到的?经过我多方查找数据资料发现,首先积极拥抱海外市场,上半年,全省共有2591家次企业参加境内外知名国际展会,企业累计新签订意向订单27亿美元,有力支撑全省出口增长。未来还会组织企业参加广交会、进博会、俄罗斯汽配展、中国品牌商品(沙特)展等等境内外重点展会,加强与商协会、展览机构对接,帮助企业获取境外知名展会的优质展位,对中小企业自行参加境外展会的给予大力支持。其次新能源汽车、太阳能电池等优势产业今年上半年的出口规模持续扩大,就拿江淮汽车来说,上半年,江汽集团累计销售各类汽车27.88万辆,同比增长18.53%;其中,出口8.9万辆,同比增长83%,出口规模创历史新高,增速高于行业的平均水平。据江汽集团相关负责人说:“毫不夸张仅墨西哥一个地方,每10辆电动车就有5辆来自于江淮。”还有安徽省有关部门对外贸企业财税、出口信保和金融资本支持力度,促进外贸企业发展壮大作出保障,同时安徽省政府印发《安徽省推动外贸稳规模有结构若干措施》,以真招实措推动安徽省外贸稳步前行。(记者:陈昌盛 实习摄像:程子恒 实习剪辑:孙光辉) +2023-07-20,正文:积极稳步推进超大特大城市“平急两用”公共基础设施建设工作部署电视电话会议在京召开何立峰出席会议并讲话新华社北京7月20日电 积极稳步推进超大特大城市“平急两用”公共基础设施建设工作部署电视电话会议20日在京召开,中共中央政治局委员、国务院副总理何立峰出席会议并讲话。他强调,要深入学习贯彻习近平总书记4月28日主持召开中央政治局会议精神,落实李强总理要求,更好统筹发展和安全,积极稳步推进超大特大城市“平急两用”公共基础设施建设,提升城市应急保障能力,并创造新的建设投资和消费增长点。何立峰指出,“平急两用”公共基础设施是集隔离、应急医疗和物资保障为一体的重要应急保障设施,“平时”可用作旅游、康养、休闲等,“急时”可转换为隔离场所,满足应急隔离、临时安置、物资保障等需求。超大特大城市建设“平急两用”公共基础设施,要坚持问题导向和目标导向,解决好“建多少、在哪建、怎么建、用什么地、如何配套、如何管理”等问题。要注重统筹新建增量与盘活存量,积极盘活城市低效和闲置资源,依法依规、因地制宜、按需新建相关设施。要充分发挥市场机制作用,鼓励和吸引更多民间资本参与“平急两用”公共基础设施的建设改造和运营维护。要守住底线,防范财政金融、生态和安全生产风险。要完善政策体系,健全工作机制,推动“平急两用”公共基础设施建设尽快落地见效。 +2023-07-21,正文:习近平给“科学与中国”院士专家代表回信强调带动更多科技工作者支持和参与科普事业促进全民科学素质的提高新华社北京7月21日电 中共中央总书记、国家主席、中央军委主席习近平7月20日给“科学与中国”院士专家代表回信,对科技工作者支持和参与科普事业提出殷切期望。习近平在回信中说,多年来,你们积极参加“科学与中国”巡讲活动,广泛传播科学知识、弘扬科学精神,在推动科学普及上发挥了很好的作用。习近平指出,科学普及是实现创新发展的重要基础性工作。希望你们继续发扬科学报国的光荣传统,带动更多科技工作者支持和参与科普事业,以优质丰富的内容和喜闻乐见的形式,激发青少年崇尚科学、探索未知的兴趣,促进全民科学素质的提高,为实现高水平科技自立自强、推进中国式现代化不断作出新贡献。2002年12月,在周光召、路甬祥等院士专家倡议下,中国科学院联合中宣部等单位共同发起“科学与中国”院士专家巡讲活动,至今已在全国开展科普活动2000余场次。近日,20名发起和参与“科学与中国”巡讲活动的院士专家代表给习近平总书记写信,汇报巡讲活动开展以来取得的成绩,倡议启动“千名院士·千场科普”行动,凝聚院士专家群体的力量,为加强国家科普能力建设、加快实现高水平科技自立自强作出更大贡献。 +2023-07-21,正文:习近平对全军党的建设会议作出重要指示强调开创我军党的领导和党的建设工作新局面为实现建军一百年奋斗目标提供坚强政治保证新华社北京7月21日电(记者 梅常伟)全军党的建设会议7月20日至21日在京召开。中共中央总书记、国家主席、中央军委主席习近平作出重要指示。他强调,开好这次全军党的建设会议,对巩固党的十八大以来我军加强党的领导和党的建设成果、在新时代新征程上开创我军党的领导和党的建设工作新局面具有重要意义。要全面贯彻党的二十大精神,深入贯彻全国组织工作会议精神,认真总结党的十八大特别是古田全军政治工作会议以来我军党的建设取得的历史性成就和重要经验,持续推进全面从严治党、全面从严治军,着力解决各级党组织在坚持党对军队绝对领导、抓备战打仗能力、落实管党治党政治责任等方面存在的突出问题,为实现建军一百年奋斗目标提供坚强政治保证。会议传达学习了习主席重要指示。中共中央政治局委员、中央军委副主席何卫东出席会议并讲话,要求深刻认识习主席引领我军党的建设取得的历史性成就,认真学习领悟习主席关于我军党的领导和党的建设重要论述,锚定建军一百年奋斗目标全面加强我军党的建设,夯实坚定拥护“两个确立”思想政治根基,全面深入贯彻军委主席负责制,集聚提高备战打仗能力强大力量,注重抓高层强基层全面固牢组织体系,坚定不移持续正风肃纪反腐,不断提高我军党的领导和党的建设工作质量。会议讨论了有关问题,15个单位作了交流发言。中央军委委员刘振立、苗华、张升民出席会议。军委机关各部委、军委各直属机构、军委联指中心、各战区、各军兵种、军委各直属单位、武警部队有关负责同志等参加会议。 +2023-07-26,正文:新华社北京7月25日电(记者潘洁、吉宁)新兴市场国家和发展中国家(EMDC)发展合作北京论坛25日在京举行。围绕“深化团结协作 汇聚增长合力”主题,来自政府部门、行业协会、智库、媒体、企业等300余位中外嘉宾展开深入研讨交流。新华通讯社社长傅华在致辞中表示,如何走出一条符合自身实际的现代化道路,是新兴市场国家和发展中国家面临的共同课题。中国式现代化的生动实践证明,广大新兴市场国家和发展中国家完全可以基于自身社会制度、资源禀赋、历史文化等实际情况,探索出一条适合本国国情的现代化道路,共同绘就百花齐放的人类社会现代化新图景。新华社将充分发挥自身优势,进一步加强新闻报道、智库研究和信息服务,做新兴市场国家和发展中国家发展进步的记录者、传播者、推动者。北京市市长殷勇表示,在推进中国式现代化的进程中,北京将更加注重合作创新,加快推进国际科技创新中心建设;更加注重产业协作,着力构建现代化产业体系;更加注重扩大开放,全面深化“两区”建设;更加注重优化服务,努力塑造国际一流营商环境,与新兴市场国家和发展中国家一道,把握新一轮科技变革和全球产业变革机遇,共同创造携手向前的美好未来。“国之交在于民相亲”。中国人民对外友好协会会长林松添表示,中国人民对外友好协会愿以本次论坛为契机,为中国同新兴市场国家和发展中国家搭建更多民间和地方友好交流与互利合作平台,推动青年、智库、媒体等人文交流,促进文明互鉴,增进人民友谊,维护世界和平,促进共同发展,为推动构建人类命运共同体贡献民间力量。新华通讯社副社长袁炳忠主持开幕式。EMDC发展合作北京论坛由新华通讯社、北京市人民政府和中国人民对外友好协会共同主办,包括开幕式暨主论坛以及3场分论坛,旨在搭建新兴市场国家和发展中国家间宽领域深层次务实合作的高端平台。 +2023-07-27,正文:新华社西宁7月26日电 题:江源科考“体检”长江源区最大湿地新华社记者刘诗平、李鹏翔、陈杰2023年江源综合科学考察队近日在长江南源——当曲河源区开展多学科综合考察,在长江源区面积最大的当曲湿地进行采样和调查。在长江三源——正源沱沱河、北源楚玛尔河、南源当曲中,当曲流域是高寒沼泽湿地的集中分布区,平均海拔4600米。科考队来到当曲源头附近,这里湿地广布。因地势平缓,排水不畅,土壤下部有冻土层,使融雪和降水不能向下渗透,地面长期处于过湿和积水状态,形成大片高寒沼泽湿地。记者在距离当曲源头不到10公里处升起无人机看到,沼泽湿地中,大大小小的沼泽湖泊星罗棋布。沿着当曲往下游行进,不时看到铺满蓝色小花的草地,像是铺了一层鲜花的地毯。在当曲桥边,长江科学院的科考队员进行了多学科采样和观测:开展土壤温湿度调查,为冻土遥感反演与水文建模提供地面数据支撑;开展植被生态和水土流失调查取样与观测;采集水质和浮游生物等。当曲查旦湿地是科考队此次科考重点,它是多种珍稀动物栖息地和植物生长区,对维护青藏高原生态平衡、净化江源水质有重要作用。“查旦湿地海拔高、面积广,分析气候变化条件下湿地生态功能响应,可以更好地提高对高海拔高寒湿地的科学认知。”长江科学院总工程师徐平说。连续第二年来此考察的长江科学院空间技术应用研究所张双印博士告诉记者,今年他们针对查旦湿地的科考,以分析湿地“水-土-植被-底泥”的碳含量为主,现场实测了水、土监测点的温度、酸碱度、盐度等信息,采取了黑泥、黄土、热熔湖塘水、高寒草甸植被等样本,为摸清查旦湿地碳储量“家底”提供宝贵的数据支撑。基于地质雷达物探方法,科考队员还重点探测了查旦湿地区域地下水潜水面位置,分析湿地地表水和地下水交互关系。专家指出,当曲湿地具有生态蓄水、水源补给、气候调节、固碳增汇等重要生态功能。加强湿地监测和科学研究,对长江源区湿地生态系统保护,以及湿地资源的管理与合理利用有重要参考价值。 +2023-07-27,正文:中国轻工业联合会近日公布今年上半年我国轻工业经济运行情况。数据显示,上半年规模以上轻工业增加值同比增长0.4%,连续3个月保持增长,其中6月同比增长2.3%。“上半年,随着稳经济、扩内需、促消费政策举措效果持续显现,国内消费市场逐步复苏,轻工业经济运行总体平稳,有力支撑工业经济稳增长。”中国轻工业联合会会长张崇和说。生产延续恢复态势。6月,在国家统计局统计的92种主要轻工业产品中,48种产品实现增长,增长面为52.2%。上半年,部分快速消费品、日用消费品及家用电器等耐用消费品类产量实现较快增长,空调、电冰箱、电冷热饮水机产量增速均超10%。其中,食品工业生产总体平稳,精制茶产量增长42.8%,鲜冷藏肉产量增速超过10%。内需市场持续复苏。随着稳经济、扩内需、促消费政策深入实施,消费市场活力逐步增强,轻工消费品市场稳步恢复。上半年,轻工11类商品零售额35012亿元,占社会消费品零售总额的15.4%,同比增长6.3%。其中,升级类商品销售实现较快增长,体育娱乐用品类、化妆品类商品零售额分别增长10.5%、8.6%。对新兴市场出口快速增长。1—5月,轻工商品出口3752.5亿美元,同比增长2.2%。在对欧美等传统市场出口压力加大的情况下,轻工行业积极拓展东盟、“一带一路”沿线国家等新兴市场,出口市场结构更趋均衡,有效冲抵不利影响,降低出口风险。1—5月,轻工商品对“一带一路”沿线国家出口同比增长14.8%,对东盟出口增长12.6%。值得一提的是,新动能行业实现较快增长。今年以来,以太阳能电池、电动自行车、家用电器等为代表的轻工绿色制造、智能制造行业快速成长,成为推动轻工业高质量发展的新动能。从生产看,1—6月,太阳能电池、助动车制造和家用电器制造增加值分别增长23.3%、10.7%、8.4%。从经营看,上半年,助动车、家用电器制造行业利润均实现两位数增长,成为拉动轻工业稳步增长的强劲动力。“上半年,轻工业经济运行成绩的取得十分不易,再一次展现轻工业的较强韧性。”工信部消费品工业司有关负责人表示,轻工业作为我国传统优势产业和重要民生产业,面对复杂严峻的国际环境,必须加快完善科技创新体系,坚定推动数字化转型,以高质量供给引领和创造新需求,从而保持修复态势、巩固回升基础,推动轻工经济运行稳中向好。(记者 韩鑫) +2023-07-27,正文:新华社西宁7月27日电(记者 李鹏翔、刘诗平)采集水土和植被等样本,测量环境温度和盐度等参数,来自长江科学院的科考队员们连日来深入长江源区查旦湿地观测取样,开展湿地碳储量估算。这个科考研究项目将填补长江源区湿地碳储量科研空白。2023年江源综合科考正在长江源区开展,高寒高海拔湿地碳储量是科考研究重点。近期查旦湿地风雪交加,长江科学院空间技术应用研究所博士张双印和队友付重庆、廖茂昕、包章顶风冒雪在湿地选择代表性点位,对水体、植被、土壤、底泥四类碳储存载体逐一采样。查旦湿地是长江源区最大的沼泽湿地,平均海拔超过4500米。张双印介绍,今年江源科考中,他们在查旦湿地开展原位观测,采集了70多份样本,涵盖黑泥、黄土、热熔湖塘水、高寒草甸地上植被等类型,实现“水—土—植被—底泥”采样全覆盖。科考队员还在现场观测水、土监测点的温度、pH值、盐度等参数,为后续碳储量估算提供数据支撑。长江科学院总工程师徐平说,目前业内对高寒湿地碳储量研究多在海拔4000米以下区域。今年江源科考估算查旦湿地碳储量,并分析有机碳在湿地空间分布特征,能有效填补长江源区碳储量相关研究空白,加深对青藏高原高寒湿地固碳增汇机理的认识。据介绍,科考队员在查旦湿地采集的样本将运至武汉集中检测分析,后续将结合遥感影像和原位监测,建立科学模型得出查旦湿地碳储量估算结果。查旦湿地碳储量估算项目得到三江源生态保护基金会、三江源国家公园管理局等单位的资助。三江源生态保护基金会平台运营主任张斌说,查旦湿地碳储量估算能为摸清长江源碳储“家底”探路,为三江源生态环境保护与践行“双碳”战略提供有力支撑。 +2023-07-28,正文:今年第5号台风“杜苏芮”持续逼近我国东南沿海,中国气象局启动台风一级应急响应,中央气象台27日18时继续发布台风红色预警。国家防总于27日21时将针对福建、广东两省的防汛防台风三级应急响应提升至二级,并在已向福建、广东、浙江、江西派出工作组的基础上,增派4个工作组赴安徽、河南、河北、京津等地,协助指导防汛防台风工作。目前,应急管理部已调派消防救援、工程抢险、航空救援、排涝等应急力量。鉴于台风可能对福建造成严重影响,27日23时,国家减灾委、应急管理部紧急启动国家Ⅳ级救灾应急响应,派出工作组赶赴福建,指导督促地方做好受灾群众安置救助和灾害损失核查等工作。交通运输部将防御响应提升至Ⅱ级,并持续加强会商研判和监测调度、加强应急准备。水利部于27日22时针对福建、广东将洪水防御Ⅳ级应急响应提升至Ⅲ级。福建省防指于27日9时提升防台风应急响应为Ⅰ级。厦门市决定从27日15时起,漳州市、泉州市决定从27日18时起,在全市范围内实行“三停一休”,除民生保障类(供水、供电、燃气、通信、医疗等)、生活服务类(提供生活必需用品的商超等)行业外,全市其他所有行业实施停工(业)、停产、停课、休市,取消各类聚集性活动。广东省防汛防旱防风总指挥部26日启动防风Ⅱ级应急响应,全省消防救援队伍保持24小时临战状态。(综合记者李红梅、刘温馨、韩鑫、王浩、刘晓宇、李刚报道) +2023-07-28,正文:今年以来,我国光伏行业继续保持良好发展态势。记者近日从中国光伏行业协会获悉:上半年,多晶硅、硅片、电池片、组件等主要制造环节产量同比增长均在60%以上。其中,多晶硅产量超过60万吨,硅片产量超过250吉瓦,电池片产量超过220吉瓦,组件产量超过200吉瓦。装机规模快速增长。上半年,光伏发电新增装机7842万千瓦,同比增长154%,约占全部新增电源装机的56%。当前,光伏累计发电装机仅次于火电,成为我国第二大电源。光伏快速发展带动投资效果明显,上半年光伏发电完成投资超过1300亿元,约占全部可再生能源完成投资的50%。整体出口情况良好。初步测算,上半年,我国光伏产品出口总额超过290亿美元,同比增长约13%。中国光伏行业协会有关负责人介绍,从产品结构看,硅片、电池片出口占比有所增加,组件出口占比有所降低。从出口区域看,欧洲依然是最大的组件出口市场,硅片和电池片出口主要集中在亚洲地区。技术水平不断进步。部分量产先进电池的效率达到25.8%,异质结、钙钛矿等新型电池商业化进程明显加速。据介绍,以光伏为代表的新能源已经进入大规模、市场化、高比例、高质量跃升发展的新阶段。国际上光伏产业资本在全球主要光伏制造业布局区域间加速流动,国内新能源特别是光伏发电发展空间广阔。(记者 丁怡婷) +2023-07-28,正文:关于征集阻碍民营经济发展壮大问题线索的公告为贯彻落实《中共中央 国务院关于促进民营经济发展壮大的意见》,推动解决民营经济发展壮大面临的困难和问题,根据有关工作部署,国务院“互联网+督查”平台从即日起面向社会征集十个方面的问题线索和意见建议:一是有关地方和单位以备案、注册、年检、认定、认证、指定、要求设立分公司等形式设定或变相设定民营企业准入障碍等方面的问题。二是有关地方和单位将政务服务事项转为中介服务事项,没有法律法规依据在政务服务前要求企业自行检测、检验、认证、鉴定、公证或提供证明等方面的问题。三是有关地方和单位未经公平竞争授予经营者特许经营权,限定经营、购买、使用特定经营者提供的商品和服务等方面的问题。四是有关地方和单位出台含有地方保护、市场分割、指定交易等妨碍统一市场和公平竞争政策方面的问题。五是有关地方和单位违背政府诚信、不兑现承诺等方面的问题。六是有关地方和单位以内部人员变更,履行内部付款流程,或在合同未作约定情况下以等待竣工验收批复、决算审计等为由,拒绝或延迟支付中小企业和个体工商户款项等方面存在的问题。七是有关地方和单位在保护民营企业产权、企业家权益方面存在的问题。八是有关地方和单位涉企乱收费、乱罚款、乱摊派方面的问题。九是其他不落实《中共中央 国务院关于促进民营经济发展壮大的意见》的问题。十是关于促进民营经济发展壮大的意见建议。国务院办公厅将对收到的问题线索和意见建议进行汇总整理,督促有关地方和部门研究处理。对企业和群众反映强烈、社会影响恶劣、带有普遍性和典型性的重要问题线索,国务院办公厅督查室将直接派员进行督查。经查证属实的,将依法依规严肃处理。国务院办公厅2023年7月28日微信扫描下方葵花码进行留言也可使用支付宝APP扫描下方二维码进行留言或使用百度APP扫描下方二维码进行留言 +2023-07-28,正文:在超大特大城市积极稳步推进城中村改造工作部署电视电话会议在京召开何立峰出席会议并讲话新华社北京7月28日电 在超大特大城市积极稳步推进城中村改造工作部署电视电话会议28日在京召开,中共中央政治局委员、国务院副总理何立峰出席会议并讲话。何立峰指出,在超大特大城市积极稳步推进城中村改造是以习近平同志为核心的党中央站在中国式现代化战略全局高度作出的具有重大而深远意义的工作部署。积极稳步推进城中村改造有利于消除城市建设治理短板、改善城乡居民居住环境条件、扩大内需、优化房地产结构。从客观实际看,现阶段推进城中村改造困难大、矛盾多、情况复杂,要坚持问题导向和目标导向,以新思路新方式破解城中村改造中账怎么算、钱怎么用、地怎么征、人和产业怎么安置等难题,探索出一条新形势下城中村改造的新路子。何立峰强调,城中村改造是一项复杂艰巨的系统工程,要从实际出发,采取拆除新建、整治提升、拆整结合等不同方式分类改造。实行改造资金和规划指标全市统筹、土地资源区域统筹,促进资金综合平衡、动态平衡。必须实行净地出让。坚持以市场化为主导、多种业态并举的开发运营方式。建设好配套公共基础设施,做好历史文化传承保护。相关部门要抓紧完善政策体系,相关城市政府要切实履行主体责任,加强领导力量,健全工作机制,推动城中村改造工作取得实效。 +2023-07-30,正文:新华社北京7月30日电(记者 韩佳诺、魏玉坤)国家统计局30日发布的数据显示,上半年,全国规模以上文化及相关产业企业实现营业收入59357亿元,同比增长7.3%,增速比一季度加快3.3个百分点,文化产业延续回升向好态势。统计数据显示,二季度,全国规模以上文化及相关产业企业实现营业收入同比增长10.7%,自2021年三季度以来,首次实现营业收入单季两位数增长。分领域看,上半年文化核心领域实现营业收入38711亿元,同比增长12.5%;占规模以上文化企业营业收入比重为65.2%,占比高于上年同期3个百分点。文化服务业带动作用明显增强,文娱休闲行业加速回暖。上半年,文化服务业实现营业收入30758亿元,比上年同期增长14.9%,增速比一季度加快4.7个百分点。文化服务业营业收入占规模以上文化企业比重为51.8%,占比高于上年同期3.4个百分点。文化新业态营业收入占比接近四成。上半年,文化新业态特征较为明显的16个行业小类实现营业收入23588亿元,比上年同期增长15%,快于全部规模以上文化企业7.7个百分点,增速比一季度加快3.9个百分点。文化新业态行业营业收入占全部规模以上文化企业营业收入比重为39.7%,占比高于上年同期2.6个百分点;对全部规模以上文化企业营业收入增长的贡献率为75.6%。文化企业利润保持较快增长。国家统计局社科文司高级统计师张鹏表示,受上年同期基数较低、文化服务业企业经营较快恢复等因素影响,上半年规模以上文化企业利润同比增长35.4%,延续一季度增长态势。上半年,规模以上文化企业营业收入利润率为8.06%,比上年同期提高1.67个百分点。 +2023-07-30,正文:新华社北京7月30日电 国务院总理李强7月30日下午在人民大会堂会见来华出席第31届世界大学生夏季运动会开幕式并访华的毛里塔尼亚总统加兹瓦尼。李强表示,中毛两国同为发展中国家,在许多国际和地区问题上立场相近、相互支持,结下了深厚友谊。习近平主席日前同总统先生举行了富有成果的会晤,共同就两国关系发展作出新的规划部署。中方愿同毛方一道,落实好两国元首达成的重要共识,赓续传统友谊,加强发展战略对接,共享发展经验和成果,推动中毛友好合作关系再上新台阶。7月30日下午,国务院总理李强在北京人民大会堂会见来华出席第31届世界大学生夏季运动会开幕式并访华的毛里塔尼亚总统加兹瓦尼。新华社记者 刘卫兵 摄李强指出,中方高度赞赏毛方在涉及中国核心利益问题上一贯旗帜鲜明支持中国,将继续坚定支持毛方维护主权、独立和领土完整,走符合自身国情的发展道路。双方要以两国签署共建“一带一路”合作规划为契机,拓展农业、渔业、畜牧业、能源、基础设施建设等领域务实合作,更好实现互利共赢。加强卫生、教育、政党、地方等人文交流,筑牢两国友谊桥梁。中方将继续为毛里塔尼亚发展振兴提供力所能及的支持。加兹瓦尼表示,毛中关系建立在相互尊重、互利共赢基础之上,两国友谊深厚稳固。毛方感谢中方为毛实现独立和发展提供有力支持,完全赞同习近平主席提出的全球发展倡议、全球安全倡议、全球文明倡议。毛方坚定恪守一个中国原则,愿同中方深化农业、矿业、新能源、基础设施建设等领域合作,推动毛中关系进一步发展。吴政隆参加会见。 +2023-07-31,正文:新华社北京7月31日电(记者 梅常伟)中华人民共和国国防部31日在人民大会堂举行招待会,热烈庆祝中国人民解放军建军96周年。中央军委委员、国务委员兼国防部长李尚福致辞。中央军委委员、军委联合参谋部参谋长刘振立,中央军委委员、军委政治工作部主任苗华,中央军委委员、军委纪律检查委员会书记张升民出席招待会。人民大会堂气氛热烈,中外嘉宾欢聚一堂。主席台帷幕正中庄严的“八一”军徽熠熠生辉,10面红旗分列两侧。“1927-2023”的大字年号,昭示着中国人民解放军走过96年的光辉历程。18时许,招待会在雄壮的《中国人民解放军军歌》声中开始。李尚福代表党中央、国务院、中央军委,向全体人民解放军指战员、武警部队官兵、军队文职人员、预备役人员、民兵致以节日祝贺,向在各个时期为人民军队建设作出贡献的离退休老同志、退役军人、革命伤残军人和烈军属表示亲切慰问,向全军英雄模范、全国双拥模范、全国模范军队转业干部致以崇高敬意,向在国防科技工业战线顽强拼搏的科学家、工程技术人员和广大干部职工表示诚挚问候,向长期关心支持国防和军队建设的各级党委和政府、人民团体,向全国各族人民表示衷心感谢,向出席招待会的各国驻华武官和夫人及各位来宾表示热烈欢迎。李尚福说,新时代新征程,我们要全面贯彻党的二十大精神,深入贯彻习近平强军思想,深入贯彻新时代军事战略方针,全面加强军队党的建设,全面加强练兵备战,全面加强军事治理,巩固提高一体化国家战略体系和能力,坚定不移推进祖国统一大业,如期实现建军一百年奋斗目标,加快把人民军队建成世界一流军队。中国军队将忠实践行习近平主席提出的全球安全倡议,持续深化国际军事交流合作,为变乱交织的当今世界注入更多确定性和正能量。欢快的乐曲声中,中外宾朋举杯共贺中国人民解放军建军96周年,祝愿中国人民解放军同世界各国军队友谊长青。军委机关各部门、军队驻京有关单位领导等出席招待会。出席招待会的还有中共中央、国务院有关部门,北京市、对外友协负责人;军队离退休老干部代表,部队英模、首都民兵、烈军属和全国双拥模范、原国民党起义人员代表以及各国驻华武官夫妇等中外嘉宾。 +2023-07-31,正文:新华社北京7月31日电(刘艺、占康)中国航天员科研训练中心31日下午在北京航天城举行神舟十五号航天员乘组与记者见面会。费俊龙、邓清明、张陆3名航天员从太空返回57天后首次正式公开亮相。航天员乘组飞行正常返回后恢复期主要分为隔离恢复、疗养恢复、恢复观察三个阶段。截至目前,神舟十五号乘组已完成前两个阶段工作。2022年11月29日,神舟十五号载人飞船飞赴太空,随后与空间站组合体成功实现自主快速交会对接。神舟十五号乘组同神舟十四号乘组“太空会师”,中国空间站长期有人驻留时代由此开始。在轨驻留6个月时间,3名航天员完成了4次出舱任务,刷新中国航天员单个乘组出舱活动纪录,欢度空间站建成后的首个春节,开展了40余项科学实(试)验和技术验证,被称为“圆梦乘组”。“能够亲自参与并见证中国空间站正式建成,是我们的光荣。”神舟十五号乘组指令长费俊龙说。费俊龙于2005年10月首次实现飞天梦想,时隔17年,他第二次作为指令长为国出征。他说:“两次飞天,任务虽有变化,但为国出征的初心使命、永不停歇的备战训练、逐梦九天的赤胆忠心没有改变。”回望在太空180多个日日夜夜,邓清明印象最深刻的是空间站建成后的首个春节,“我们在天上收到了全国人民的祝福。激励我们不负党和人民重托,坚决完成任务。”4次出舱是神舟十五号乘组的亮点,首次叩问苍穹的张陆最难忘出舱经历。“我在舱外被浩瀚宇宙深深震撼。感谢全体科研人员的陪伴、支持,使我们能顺利完成4次出舱任务。”张陆还谈到与神舟十四号乘组和神舟十六号乘组的两次“太空会师”,“3个乘组间浓浓的情谊,是生死相托的相互信任、也是航天精神的接续传承。”目前,在中心科研保障团队的精心守护和照料下,3名航天员身心状态良好,达到了预期效果,已全面转入恢复观察阶段。待完成恢复健康评估总结后,他们将转入正常训练工作。“中国人探索太空的脚步必将行得更稳更远。”费俊龙说,“我们会珍惜荣誉、继续努力,期待为中国航天事业再立新功。” +2023-08-01,正文:何立峰出席中巴经济走廊启动十周年庆祝活动宣读习近平主席贺信并致辞新华社伊斯兰堡7月31日电(记者 蒋超 王欢)7月31日,中巴经济走廊启动十周年庆祝活动在巴基斯坦首都伊斯兰堡举行。国家主席习近平特别代表、国务院副总理何立峰应邀出席,宣读习近平主席贺信并致辞。何立峰表示,习近平主席在贺信中充分肯定中巴经济走廊建设取得的积极成果和重大意义,为走廊发展和中巴务实合作作出了战略指引。十年来,走廊建设秉承丝路精神,成果丰硕,互利共赢,开创了共建“一带一路”的成功实践。展望未来,我们要认真落实习近平主席贺信精神,努力打造中巴经济走廊建设“升级版”,共建增长走廊、民生走廊、创新走廊、绿色走廊、开放走廊,推动构建新时代更加紧密的中巴命运共同体。巴基斯坦总理夏巴兹在庆祝活动上致辞,衷心感谢习近平主席对巴中关系和中巴经济走廊的高度重视,对中国政府和人民给予巴方的真诚帮助深表感激。走廊建设成就卓著,深刻改变巴经济社会面貌。巴方愿借鉴中国发展经验,深化巴中各领域合作,走自立自强之路,更好造福两国人民。同日,何立峰分别会见巴基斯坦总统阿尔维、总理夏巴兹、陆军参谋长穆尼尔。阿尔维向何立峰授予“巴基斯坦新月勋章”。双方就深化传统友谊、拓展务实合作等深入交换意见。 +2023-08-01,正文:新华社北京8月1日电 为深入学习贯彻习近平新时代中国特色社会主义思想和党的二十大精神,深入贯彻落实习近平总书记关于双拥工作重要论述,发挥先进典型示范引领作用,在全社会营造关心国防、热爱国防、建设国防、保卫国防的浓厚氛围,中央宣传部、退役军人事务部、中央军委政治工作部、全国双拥办8月1日联合发布2023年“最美拥军人物”先进事迹。河北省爱国拥军促进会理事田俊岭等10名个人被授予2023年“最美拥军人物”称号。他们中有真心爱国拥军的社会化拥军带头人田俊岭,有赓续传承沂蒙精神的新红嫂朱呈镕,有倾力为烈士寻亲的爱心人士孙嘉怿,有20余年无私奉献给伤残军人带来幸福的护理员孙德建,有70余年真情服务军人军属的军婚“红娘”周宏英,有坚持不懈助力战机飞行安全的“村官”赵春良,有退伍不褪色倾力服务练兵备战的“老班长”崔洪金,有大力服务国防前哨的优秀企业家黄楚生,有高原上继承优良传统的拥军“阿妈啦”确吉,有坚守岗位服务过往部队20余年的“孺子牛”董绍林。他们虽然来自不同地区、从事不同行业、身在不同岗位,但是他们都能始终牢记“国之大者”,强化国防意识,积极服务国防和军队建设,满腔热忱为军人军属、退役军人和其他优抚对象解难帮困,谱写了新时代军政军民团结的赞歌。他们的事迹必将激励引导全社会自觉投身到拥军事业中来,为如期实现建军一百年奋斗目标汇聚起磅礴力量。发布仪式在中央广播电视总台举行,现场采用播放视频、访谈互动等形式,讲述2023年“最美拥军人物”的先进事迹和工作生活感悟。中央宣传部、退役军人事务部、中央军委政治工作部、全国双拥办负责同志为2023年“最美拥军人物”颁发了证书。“最美拥军人物”评选发布活动自2014年至今已累计举办4届,激发了广大群众参与拥军优属的热情,浓厚了尊崇军人的社会氛围。 +2023-08-01,正文:习近平对防汛救灾工作作出重要指示要求全力搜救失联被困人员 尽最大限度减少人员伤亡紧盯防汛重点部位 落实落细各项防汛措施全力保障人民群众生命财产安全和社会大局稳定李强作出批示新华社北京8月1日电 中共中央总书记、国家主席、中央军委主席习近平对防汛救灾工作作出重要指示。习近平指出,近日,受台风“杜苏芮”影响,华北、黄淮等地出现极端降雨过程,引发洪涝和地质灾害,造成北京、河北等地重大人员伤亡。习近平要求,各地要全力搜救失联、被困人员,做好受伤人员救治和遇难者家属安抚工作,尽最大限度减少人员伤亡。要妥善安置受灾群众,抓紧修复交通、通讯、电力等受损基础设施,尽快恢复正常生产生活秩序。习近平强调,当前正值“七下八上”防汛关键期,各地区和有关部门务必高度重视、压实责任,强化监测预报预警,加强巡查值守,紧盯防汛重点部位,落实落细各项防汛措施,全力保障人民群众生命财产安全和社会大局稳定。中共中央政治局常委、国务院总理李强作出批示,要求认真贯彻落实总书记重要指示精神,国家防总、应急管理部、水利部等要全力指导帮助受灾地区搜救失联、被困人员,最大限度减少人员伤亡,并妥善安置受灾群众,尽快恢复正常生产生活秩序。各有关方面要进一步加强监测预警和巡查值守,落实落细各项防汛防台措施,切实保障人民群众生命财产安全。 +2023-08-01,正文:张国清在北京市指导防汛抢险救灾工作时强调全力做好抢险救援应急处置尽快恢复正常生产生活秩序新华社北京8月1日电 受党中央、国务院委派,中共中央政治局委员、国务院副总理张国清8月1日中午率有关方面负责同志,紧急赶赴北京市门头沟区指导防汛抢险救灾工作。他强调,要坚决贯彻习近平总书记重要指示精神,落实李强总理要求,积极应对极端强降雨影响,全力做好抢险救援应急处置,尽快恢复正常生产生活秩序,确保人民群众生命财产安全,确保社会大局稳定。张国清先后到门头沟区三家店水闸、七棵树东街社区安置点、中门寺南坡受灾点和潭柘寺南辛房桥,向受灾群众、救援人员、基层干部传达习近平总书记重要指示精神,转达习近平总书记深切牵挂和亲切慰问,并实地察看河流水位,了解灾害损失情况,询问群众转移安置等情况。他强调,当前要把救人放在第一位,进一步加强统筹指挥调度,充分发挥各类救援队伍作用,争分夺秒搜救失联、被困人员,最大限度减少人员伤亡。要想尽一切可能办法,用尽一切可能措施,加快把食品、饮用水、药品等物资输送到受灾群众转移安置点,保障受灾群众基本生活需要。要继续调集增派专业力量和装备,抓紧抢修抢通受损铁路、公路、桥梁以及通信、电力等重要基础设施,尽早打通抢险救援“生命线”。同时,要严密防范次生灾害,做好救援人员安全防护,提早谋划开展恢复重建。各有关方面特别是有关中央企业要大力支持北京开展抢险救灾和恢复重建。张国清指出,眼下正值“七下八上”防汛最吃劲的阶段,务必树牢底线思维、极限思维,立足最不利情况,做最充分准备,全面加强灾害防范应对,全力确保安全度汛。要密切关注天气变化,加强会商研判、监测预警和应急联动,紧盯山洪地质灾害风险区、城乡低洼易涝点等薄弱环节,强化风险隐患排查,提早转移受威胁群众,严防群死群伤。要严格执行汛期值班值守制度,确保遇到突发情况第一时间科学应对处置,最大限度减轻灾害损失。 +2023-07-25 21:25,正文:7月24日,广东省人大常委会党组书记、主任黄楚平主持召开党组理论学习中心组学习会,专题学习习近平总书记在文化传承发展座谈会上的重要讲话精神和浙江“千万工程”经验案例,研究部署深入推进省人大常委会及机关主题教育。会议强调,要深入学习贯彻习近平总书记在文化传承发展座谈会上的重要讲话精神,深刻领会“第二个结合”的重大意义和丰富内涵,认真落实省委“1310”具体部署,围绕推进文化强省“六大工程”,积极发挥人大职能作用,以高质量立法促进文化事业繁荣兴盛和文化产业健康发展,以高效率监督推动党中央关于文化建设的重大决策部署及省委工作安排落地落实,以高水平代表议案建议为文化事业和文化产业发展献计出力。当前,要加快推进公共文化服务促进条例等立法项目,开展好革命遗址保护条例等执法检查,办理好代表关于促进粤港澳三地青年交往交流交融等建议,以法治保障推动文化强省建设呈现新气象、迈上高水平、达到新高度。会议强调,要深刻感悟“千万工程”经验案例的重要意义和经验启示,深入领会其中蕴含的大兴调查研究、走好群众路线、密切联系群众等工作方法的时代价值,不断提高履职能力和水平。要认真梳理“百县千镇万村高质量发展工程”实施过程中的法治需求,加快推进农村集体经济组织条例等立法修法工作,高标准完成好听取审议关于深入实施“百千万工程”、统筹推进城乡一体化发展工作情况的报告并开展专题询问等监督工作项目,办理好涉农、涉粤东西北加快发展、涉基层社会治理等议案建议,以法治推动“百千万工程”落实落地落具体。会议要求,要持续高标准高质量纵深推进主题教育,抓紧抓实整改整治工作,加强督促指导,发扬斗争精神,敢于动真碰硬,拿出实招硬招解决问题,确保取得实效。要认真思考、谋划和筹备好专题民主生活会,重点抓好谈心交心、党性分析,找准问题根源,明确努力方向和改进措施,以更加有力的举措推动主题教育走深走实。会前,省人大常委会举办广东人大学堂,邀请专家围绕坚持“两个结合”、推进文化自信自强作专题辅导。会上,省人大常委会副主任张硕辅、刘雅红、谭玲围绕学习主题作交流发言。(文/王昊、邓芳兰 通讯员/任宣) +2023-07-26 18:11,正文:近日,第二届全国人力资源服务业发展大会官方网站和官方微信正式上线。据悉,第二届全国人力资源服务业发展大会以“激发人力资源动能,汇聚强国建设力量”为主题,将于今年11月下旬在深圳举办。大会官网共设置7个板块,目前已开放“关于大会”“新闻中心”“网上展厅”“论坛会议”“大会服务”等主要信息类版块,方便广大网友查询、观看、回顾、下载大会重要活动信息、多媒体资料。后期将开放参展参会、行业大赛报名等功能版块。“全国人力资源服务业发展大会”微信平台将充分发挥移动端传播优势,利用图文信息、深度解读、短视频、H5等多种形式的新媒体报道,对第二届全国人力资源服务业发展大会进行各项重大活动权威报道宣传。同时设有“大会资讯”“大会聚焦”“服务一览”3大主栏目,包括“大会介绍”“新闻动态”“发展成果巡礼”“网上展厅”“论坛会议”“行业大赛”“往届回顾”“大会官网”“参展参会”“联系我们”等10个子栏目,为广大网友提供移动端资讯浏览、信息查询等便捷服务。扫码可关注大会官方微信此外,大会将推出“大会直播”栏目,为网友带来大会现场实况报道,全方位、立体化呈现大会风采,有效提升活动传播力和感染力。据了解,本届大会由人力资源社会保障部、广东省人民政府共同主办,人力资源社会保障部流动管理司、广东省人力资源社会保障厅、深圳市人民政府承办,将设置人力资源服务业高质量发展研讨交流活动、人力资源服务供需洽谈对接和展示活动、人力资源服务创新创业和技能大赛、粤港澳大湾区青年人才招聘活动等重点活动,以推动人力资源服务业高质量发展,为促进高质量充分就业、强化现代化建设人才支撑发挥更大作用。文字/张易秋图片/“全国人力资源服务业发展大会”微信 +2023-07-31 20:03,正文:南方网讯(记者/邓佩莹 通讯员/罗瑞雄)7月29日至30日,“工控杯”2023年广州市职工羽毛球邀请赛在广州工控职工体育活动中心举行。活动吸引了来自广州市总工会所属各机关、企事业单位、非公企业一级工会的48支队伍接近700名选手参赛。广州市总工会相关负责同志出席活动,并为获奖单位颁奖。比赛现场。通讯员供图本次比赛设置了男双(中年组)、男双(青年组)、混双3个比赛项目。7月29日上午,48支队伍分为16个小组进行单循环赛、淘汰赛两个阶段展开比拼。赛场上,参赛选手个个精神饱满、斗志昂扬,奋力地挥动着手中的球拍,用他们默契的配合、精湛的球技为现场观众呈现了一个个精彩的瞬间,展现着团结奋进、顽强拼搏、健康向上的体育精神。比赛现场。通讯员供图7月30日,经过两天的激烈比拼,获奖名单终于出炉了!“工控杯”2023年广州市职工羽毛球邀请赛冠军由广州工业投资控股集团有限公司工会收入囊中;广州市建筑集团有限公司工会委员会夺得亚军;黄埔区总工会和南沙区总工会获得季军;广州环保投资集团有限公司工会委员会等20个单位获得了优秀组织奖;广州市城市管理和综合执法局系统工会委员会等18个单位获得了体育道德风尚奖。颁奖现场。通讯员供图来自黄埔区代表队的田竞说:“羽毛球邀请赛的圆满举行,充分体现了市总工会切实为基层职工服务的精神,调动了一线职工积极参加体育运动的热情,增强了职工集体荣誉感,使基层一线职工充分认识到团队协作的重要性,丰富了我们职工的文体生活,增强了团队凝聚力。同时,十分感谢市总工会为我们提供了羽毛球比赛这个平台,希望以后能举办更多这种群众性的文体活动。”大赛组委会副主任,广州工业投资控股集团有限公司工会副主席蔡济东表示,举办此次广州市职工羽毛球冠名赛是为深入学习宣传贯彻党的二十大精神,打造健康文明、昂扬向上、全员参与的职工文化,落实全民健身国家战略,推进健康广州行动,维护广大职工健身健康权益,践行国企社会责任的体现。希望通过运动赛事引导职工积极锻炼、增强体质,丰富职工文化生活,充分激发和展示职工昂扬向上、不断拼搏、忘我进取的精神风貌,发扬“更高、更快、更强、更团结”的体育精神。 +2023-08-01 21:59,正文:为帮助广大高校毕业生顺利迈入职场,7月15日下午,由广东省人力资源和社会保障厅、广东省工商业联合会、江门市人力资源和社会保障局联合主办的2023年“筑梦青春·就业启航”广东省离校未就业高校毕业生招聘活动在江门举行。广东省人力资源社会保障厅党组成员、副厅长谢忠保,省工商联党组成员唐小兵,省邮政分公司副总经理吴永佳,江门市副市长周佩珊等出席活动。谢忠保表示,为搭建供需两端对接桥梁,促进高校毕业生高质量充分就业,从本月起,省人社厅联合省工商联将持续举办省市联动专项活动,不间断提供线上线下招聘、直播带岗、政策宣传等服务,助力广大毕业生迈向社会第一步,为高校毕业生等青年就业一路护航。周佩珊表示,一直以来,江门市深入实施就业优先战略,不断完善就业优先政策体系,千方百计加大岗位供给、拓展就业渠道,保障高校毕业生就业局势总体稳定。江门将以此次启动仪式和专场招聘会为新起点,进一步加大工作力度,用心用情做好高校毕业生就业工作,为全省就业工作大局稳定贡献更多江门力量。唐小兵指出,省工商联将与省人社厅加强合作,积极开展援企稳岗行动,通过青年人喜闻乐见的方式,广泛宣传支持企业吸纳高校毕业生等重点群体就业的稳就业政策,扩大政策知晓度和覆盖面,推动市场人才需求和高校毕业生供给有效对接。唐小兵强调,希望各民营企业继续大力支持广东省高校毕业生就业工作,为高校毕业生提供更多优质的实习岗位、就业机会,为毕业生实现人生价值提供更加广阔的发展空间,为广东省高校毕业生高质量充分就业作出更大的贡献。在启动仪式上,江门市“就业驿站”揭牌成立。本次招聘活动共组织线上线下195家企业参加,提供5122个优质岗位。现场邀请了就业创业指导专家为高校毕业生们提供就业政策咨询、求职面试技巧、职业生涯规划等指导服务。活动主办方还设置了线上直播间,让未能到场求职的高校毕业生也可以参加活动,在直播间求职互动、投递简历。据统计,本次招聘活动当天线上线下进场(访问)高校毕业生近6000人次,参会企业共收到简历3152份,1008人达成初步就业意向。文/杨佳泓 通讯员/粤商宣 +2023-08-03 20:43,正文:南方网讯 (记者/杨智明 通讯员/穗社科宣)8月3日,广州推动高水平对外开放服务高质量发展研讨会暨《广州城市国际化发展报告(2023)》发布会在广州国际交流合作中心举行。本次会议由广州市社会科学院举办,广州市社会科学院城市国际化研究所(广州国际城市创新研究中心)承办,广州国际合作交流中心协办。广州蓝皮书《广州城市国际化发展报告(2023)》指出,2018年至今广州迭代升级了营商环境改革1.0至5.0,出台了一系列改革举措,企业对这些相关政策知晓度较高,九成以上的受访企业认为营商环境改革举措对企业发展有帮助。同时,该报告指出,广州持续推动先进制造创新,生物医药与健康、智能与新能源汽车、智能装备与机器人等新兴产业在产业比重中提升,在穗全球500强企业数量持续增加,显示出繁荣的商业氛围。在研讨会环节,专家学者们围绕“广州推动高水平开放服务高质量发展”的主题发表了看法。广东外语外贸大学新闻与传播学院刘佩副教授以抖音为例,指出短视频呈现广州的市民形象、社会形象、文化形象、经济形象、环境形象和政府形象,综合体现广州作为“美食之都”等媒介形象定位。城市影像传播实践为广州城市形象建构凝聚强大社会力量,通过引导线上互动,借助情感元素推动广州城市营销;在短视频场域呈现广州特色文化符号,提升市民城市形象认同感;打通城市形象传播链路,汇聚城市主流声音。 +2023-08-03 19:46,正文:今年5月1日,《广州市供用电条例》(以下简称《条例》)正式实施。该《条例》明确“任何单位和个人不得违反国家电价政策加价或者变相加价收取电费”。广州市市场监管局据此发布规范电费收费行为的提醒告知书,强调将对经提醒后仍拒不整改的有关经营者、出租屋业主、转租人等电费收费主体依法查处,对性质恶劣的予以公开曝光。8月2日,笔者从广州市白云区市场监管局获悉,该局于近日对一起个人房东违反国家电价政策,加价收取租客电费的违法行为予以立案查处。据介绍,白云区市场监管局此前接到群众投诉,反映某房东不执行国家电价政策,以1.28元/度的价格收取其电费。接到投诉后,执法人员当即前往涉诉地址开展调查,因当事人(房东)不在租赁地址居住,现场无法找到当事人,后经多次电话、短信联系,当事人均未按要求接受调查。随后,执法人员向投诉人进一步收集证据材料,并通过向供电部门、属地街道、出租屋管理中心等渠道调取有关房东信息,督促责令当事人限期接受调查。经核查,当事人为个人房产出租的房东,自《条例》实施后,未按照《广州市市场监督管理局关于贯彻执行<广州市供用电条例>规范电费收费行为的提醒告知书》自查整改,仍以1.28元/度的价格收取承租人电费,涉嫌违反《条例》第三十三条第一款有关规定,且经多次联系提醒,拒不配合调查。根据《市场监督管理行政处罚程序规定》第十九条有关规定,白云区市场监管局对其进行立案调查处理。据白云区市场监管局相关负责人介绍,自《条例》实施以来,该局联合镇街等多个部门,通过各渠道宣贯《条例》,同时督促引导各电费收费主体自查整改,并组织开展全区水电收费专项治理,发出《责令改正通知书》605份,警告处罚13宗,立案3宗。广州市场监管部门再次提醒:各电费收费主体(包括但不限于物业经营管理方、出租屋主、转租人等),不得违反国家电价政策,加收或变相加收电费;不得与电价、电量、电费挂钩或为基数计算,“搭车”收取服务费、管理费、耗损维护费或其他费用,变相提高终端用户用电成本。非电网供电主体物业公共部位、共用设施和配套设施的运行维护费用等,通过物业费(不得与电价电量电费挂钩计算)、租金或公共收益解决。对水电费恶性加价、恶意加价、屡次拒绝自查自纠的行为将依法查处。文:梁雯怡通讯员:吴天来 温敏华 +2023-08-03 23:09,正文:南方网讯(记者/梁曦帆 通讯员/粤司宣)8月3日,广东省司法厅召开党委会议,认真学习贯彻习近平总书记对防汛救灾工作作出的重要指示精神,传达学习全国安全生产电视电话会议、省委常委会会议和省有关会议精神,研究省厅贯彻落实意见。厅党委书记、厅长陈旭东主持会议。会议强调,全省司法行政系统要深入学习贯彻习近平总书记重要指示精神,始终坚持人民至上、生命至上,以“时时放心不下”的责任感和极端负责的态度,立足于防大灾抗大灾,坚持以大概率思维应对小概率事件,切实做好防汛防台风等各项防范工作和应急准备,坚决守护好人民群众生命财产安全。要深刻吸取社会典型事故教训,举一反三,以严的要求、实的作风、细的措施深入排查安全风险隐患,重点围绕防洪水内涝、防山体滑坡、建筑施工、生产安全、燃气安全、消防安全等进行排查,推动排查往前移、追责往前移,坚决整治风险隐患问题,防范遏制事故发生。要严格落实“管行业必须管安全,管业务必须管安全,管生产经营必须管安全”,对排查出的重大隐患,要明确整改措施、责任人、整改时限,真正把问题解决在萌芽之时、成灾之前;进一步明晰安全生产工作任务分工,强化督导检查,坚持守土有责、守土尽责,以抓铁有痕、踏石留印的作风,严而又严、实而又实、细而又细抓好安全稳定各项工作落地落实。会议要求,要做好监测预警和应急值守工作,持续关注天气变化和预警信息发布情况,主动加强与水文、气象等部门的沟通联系,及时综合分析研判,及时采取防范措施。全系统各单位尤其是监狱、戒毒单位主要负责同志要深入一线、靠前指挥,严格落实领导带班和重要岗位24小时值班制度,确保全系统特别是监狱戒毒场所的安全稳定。要加强安全宣传教育和应急演练,进一步提升突发事件应对能力水平。积极开展警示教育,持续开展常态化、长效化安全宣传教育,不断增强安全防范意识能力水平;不断完善应急预案,明确各部门职责分工,强化应急联动机制,组织开展应急演练,强化应急准备,提高突发事件应急处置能力。 +2023-08-04 20:44,正文:南方网讯 8月4日,广东省高级人民法院召开干部大会部署开展纪律教育学习月活动,党组书记、院长张海波出席会议并讲话。会议强调,要深入学习贯彻习近平法治思想和习近平总书记视察广东重要讲话、重要指示精神,认真落实省委关于纪律教育学习月活动的部署安排,持续深化自我革命、推动全面从严治党,确保活动取得实实在在的效果。会议指出,开展纪律教育学习月活动是省委部署的对全省党员、干部、群众进行集中纪律教育的重要工作,是各级党组织落实全面从严治党主体责任的重要抓手,是广东加强党风廉政建设的“金字招牌”,要坚持把加强党的政治建设摆在首位,把开展纪律教育学习月活动与深入开展主题教育结合起来,与省法院党组部署的综合提升审判质效、“一降两升三优化”工作部署紧密结合起来,与加强机关党建、审判管理等经常性工作结合起来,在主题教育、纪律教育学习中,不断筑牢思想根基、更新工作理念、永葆政治本色。会议要求,要坚持全员覆盖与突出重点相结合,既确保全体干警参与,不留死角盲区,又抓住“关键少数”、关键岗位。要坚持问题导向、效果导向相统一,抓实以学正风,对标党风要求找差距、对表党性要求查根源、对照党纪要求明举措,在聚焦突出问题抓整改抓转变抓实效上下功夫,推动“守纪律、讲规矩”内化于心、外化于行。要进一步压实责任,切实形成“以抓实‘三个规定’的‘小切口’带动全面从严管党治院‘大生态’”的思想共识,强化执纪问责,推动审判权规范行使和高效运转,推动建设过硬队伍。会议由党组副书记、常务副院长钟健平主持。党组成员、政治部主任李克俭宣读纪律教育学习月实施方案,院领导林碧艳、陈友强、崔怡、陈明辉、黄建屏,周定挺等出席会议。文:余淑娴通讯员:吁青 邵树志 +2023-08-07 19:43,正文:南方网讯(记者/黄小殷 通讯员/粤交警)近日,广东省公安厅交通管理局曝光2023年上半年国省道、高速公路十大事故多发路段。记者从中获悉,这些路段涉茂名市4处、湛江市4处、河源市3处,事故多发路段系由公安交管部门综合分析路段事故量、死亡人数、受伤人数、亡人事故量、较大事故量等因素得出。普通国省道方面,十大事故多发路段包括茂名市207国道(3917公里至3919公里处)、茂名市280省道(82公里至84公里处)、汕尾市324国道(663公里至665公里处)、揭阳市234省道(9公里至11公里处)、湛江市207国道(4100公里至4102公里处)、云浮市324国道(1180公里至1182公里处)、湛江市228国道(6458公里至6460公里处)、河源市236国道(1034公里至1036公里处)、湛江市207国道(4119公里至4121公里处)、湛江市207国道(4148公里至4150公里处)、梅州市355国道(681公里至683公里处)等上述路段。高速公路方面,十大事故多发路段包括汕昆高速揭阳段(61公里至63公里处)、龙河高速河源段(120公里至122公里处)、武深高速惠州段(906公里至908公里处)、汕湛高速茂名段(790公里至792公里处)、云茂高速茂名段(99公里至101公里处)、广州绕城高速佛山段(109公里至111公里处)、汕湛高速梅州段(129公里至131公里处)、沈海高速江门段(3145公里至3147公里处)、龙河高速河源段(105公里至107公里处)、广州绕城高速广州段(21公里至23公里处)共10个路段。广东交警提醒:国省道沿线存在大量平交路口,车流人流交织易发交通事故,驾车行经国省道路要时刻注意路况及沿线交通标志标线,保持对前方和周围情况的警惕性,提前对可能突然横穿的非机动车、行人做好预判,注意让行。高速公路行车要保持安全车距,遇雨天行车牢记“降速、控距、亮尾”,发生交通事故时牢记“车靠边、人撤离、即报警”,避免发生二次事故。 +2023-08-09 12:19,正文:南方网讯(记者/朱江伟 通讯员/袁智斌)2023年8月8日是我国第15个“全民健身日”,8月8日所在周(8月7日至13日)是我国第一个“体育宣传周”。由广州市体育局、广州市体育总会主办,广州市陆海空模型运动协会承办,广州市体育彩票管理中心、广州飞腾教育科技有限公司协办的广州市第十九届体育节全民车辆模型邀请赛8月8日在天河体育馆西南广场举办,共100余名青少年报名参赛。本次全民车辆模型邀请赛以青少年车辆模型教学及竞速比赛为特色,现场共设置了青少年专业级别1/18遥控电动房车竞速赛,1/22和1/24电动拉力房车竞速赛,这三个项目均为全国中小学生竞赛白名单赛事——“驾驭未来”全国青少年车辆模型教育竞赛的比赛项目。在比赛中,车辆模型竞赛全国冠军林骏奔与一众选手同场竞技,车辆模型国家级裁判队伍现场执裁。赛事采用真实赛车比赛专业计时系统,保证比赛公平、公正、公开进行。经过紧张而激烈的角逐,李嘉嘉、陈俊熙、黄杰夫分别获得1/18遥控电动房车竞速赛小学组冠、亚、季军;李善雅、曾维烨、钟卓轩分别获得1/18遥控电动房车竞速赛中学组冠、亚、季军。李治霆、陈均豪、陈俊熙分别获得1/22电动拉力房车竞速赛小学组冠、亚、季军;陈哲希、李善雅、曾维烨分别获得1/22电动拉力房车竞速赛中学组冠、亚、季军。王君铭、余昊燊、黄薰瑶分别获得1/24电动拉力房车竞速赛小学组冠、亚、季军。活动现场还设置了群众互动体验项目——迷你1/76遥控车竞赛体验及航空模型表演活动,让在场的市民在专业教练的指导下体验操控遥控车,了解航模表演的操作原理和技术亮点,接触并参与科技模型这项体育与科技相结合的阳光运动,亲身感受模型运动的魅力。通讯员供图 +2023-08-11 19:01,正文:南方网讯(记者/许思琪 通讯员/粤政数)7月18日至26日,广东省政务服务数据管理局启动全省市、县(区)标杆政务服务中心实地复查复审工作。省政数局党组成员魏文涛组织召开启动会,明确工作纪律和工作要求。省政数局政策法规与指导监督处组织开展培训,并会同广东数字政府研究院分成3个核查小组对全省41个标杆政务服务中心开展实地复查复审工作。期间,魏文涛带队到广州市黄埔区政务服务中心进行实地走访,听取政务服务中心建设、服务和管理情况汇报,并重点就涉企服务相关问题进行了沟通交流。从总体上看,各地标杆政务服务中心认真贯彻落实国家和省关于政务服务标准化、规范化、便利化工作要求,在完善管理机制、优化办事环境、创新服务理念、提升服务效能等方面发挥了示范引领作用,在硬件环境和服务质量方面实现双升级,极大提升了企业和群众办事体验。 下一步,省政务服务数据管理局将依据实地复查复审结果,对发现问题的政务服务中心进行通报并限期整改。同时,结合深入开展学习贯彻习近平新时代中国特色社会主义思想主题教育有关要求,梳理提炼一批可复制、可推广的建设服务经验和典型案例,开展优秀案例和先进经验交流,在全省范围内复制推广。 +2023-08-11 21:09,正文:南方网讯(记者/黄练)据交通运输部珠江航务管理局(以下简称“珠航局”)消息,8月10日上午7时,西江航运干线长洲枢纽船闸2023年累计过闸货运量突破亿吨大关,达到10002.02万吨,同比增长2.06%,较2022年、2021年、2020年分别提前5天、20天、37天突破亿吨大关,完美实现“三连跳”。2023年以来,珠江流域降雨、江河来水持续偏少,西江航运干线长洲枢纽出库流量同比偏少近7成,长洲枢纽1#2#船闸上下游水位差超过设计运行工况(16.05米)累计停航时间超过1600小时(69天),船闸通过能力大幅下降,待闸船舶连续保持高位,航道通航保畅工作形势空前严峻。珠航局和沿江各相关单位在交通运输部的统一领导下,成功克服了因枯水等原因带来的通航压力,有力保障了西江航运干线水运大通道安全畅通,为长洲枢纽船闸过闸货运量实现连续突破提供了有力支撑。目前珠江水系汛期即将结束,但上游水库蓄水情况极不理想,预计枯水期航道通航保畅工作形势将更加严峻。珠航局将以西江航运干线通航保畅工作机制为抓手,强化跨部门、跨区域沟通协调,促进水资源综合利用,全力保障枯水期航运用水需求,切实做好西江航运干线水运大通道保通保畅工作。 +2023-08-14 14:58,正文:南方网讯(记者/李润芳)8月14日,广东省高级人民法院召开环境资源审判新闻发布会,通报2018年至今年上半年全省环境资源审判工作情况,并发布十大典型案例,其中一个典型案例是“噪声扰民”诉前禁止令案。自2018年12月起,李某萍采取喇叭紧贴卫生间墙壁的方式,定时每天循环播放“荒山野鬼”录音,严重影响包括崔某生在内的周围居民的宁静生活。经生态环境部门监测,该声音在崔某生居住的房为36分贝,未达到噪声限值昼间60分贝、夜间50分贝的标准,但可清晰听到。崔某生向法院申请禁止令,要求李某萍等停止播放前述噪声。广州市海珠区人民法院经审理作出裁定,被申请人李某萍等自本裁定生效之日起不得通过播放“荒山野鬼”录音等方式制造噪声扰民。2022年4月15日,李某萍等在现场签收民事裁定书及禁止令,拆除录音播放设备,删除录音文件,承诺不会再制造噪音。广州市海珠区人民法院相关负责人表示,本案例获选“新时代推动法治进程2022年度十大案件”为全国首份“噪声扰民”诉前禁止令案,体现了人民法院对人民群众合法环境权益的关切,通过及时制止紧迫的噪声环境侵权行为,守护了老百姓在宁静环境中生活的权益。人民法院依法作出噪声侵害禁止令,对邻里间故意制造噪声干扰他人宁静生活的行为,给予否定性评价,弘扬了社会主义核心价值观,对潜在的污染者起到警示作用,具有积极的示范和引导意义。 +2023-08-14 14:05,正文:南方网讯 (记者/张菲菲 通讯员/粤检宣)“检察官阿姨,我这次高考成绩还不错,我喜欢电子和设计,筛选后大概有四五所学校是可以考虑的……”近日,看着眼前这名青春洋溢、自信独立的“准大学生”小张(化名),广东省江门市检察院检察官甚是欣慰,曾经的“问题少年”重回正轨了。小张从小学习成绩好,但因父母忙于工作,家庭成员间日常沟通不顺且缺少恰当的家庭管教,小张出现了抑郁症状。为了释放压力,2021年底,小张多次通过登录境外网站以团购的方式购买淫秽书籍及手办,并以运费差价为赚取利润的方式向团友邮寄物资。海关部门截获小张寄送的部分违法淫秽物品后,以走私淫秽物品罪对小张立案并移送起诉,江门市检察院第六检察部受理案件后,承办检察官与市心理卫生协会、社工机构联合提供心理服务,并建立家庭教育指导长效协作机制,及时对小张进行心理测评和社会调查。经过调查,检察官发现小张涉罪最主要的原因在于家庭教育不当,且小张归案后认罪悔罪态度好,犯罪情节显著轻微,符合相对不起诉条件,遂邀请人大代表、人民监督员、律师、心理咨询师召开不公开听证会,各方一致同意检察机关作出相对不起诉的决定。今年1月,江门市检察院依法对小张作出相对不起诉决定,并针对小张犯罪诱因,设定了6个月的观护帮教,帮助他更好地重返校园。考验期内,承办检察官在征得小张父母同意后,依托该院建立的“问题家庭”分级干预机制,积极引入司法社工、心理咨询师等社会专业力量深度参与,为小张量身制定全流程干预矫治方案,并与社工、家庭教育指导专家共同开展家庭教育指导。检察机关不定时进行跟踪回访,针对发现的问题提出改进措施。同时,适时引入专业心理咨询和心理辅导,实现了检察机关从“一家独管”向“社会共管”转变。在多方帮助下,小张父母改变了以往不良的家庭教育方式,更加尊重、肯定、认可小张,小张的精神抑郁逐渐好转,和父母的关系也缓和许多,顺利完成高考。 +2023-08-16 12:28,正文:南方网讯(记者/朱江伟 通讯员/胡雪茵)2023年广东省青少年体育舞蹈大赛暨阳东体育舞蹈公开赛日前在阳江阳东体育馆举行,共有48支代表队,近900人参赛。本次比赛是广东省青少年体育联合会“星”计划赛事活动之一,由广东省社会体育和训练竞赛中心、阳江市阳东区文化广电旅游体育局指导,广东省青少年体育联合会主办,阳江市阳东区体育舞蹈协会、广州市越秀区国际标准舞协会承办。本次赛事设壮年组、成人组、青少年组、精英组等,共210个组别。其中A组摩登舞冠军由武汉体育舞蹈艺术学校石龙和肖晨曦两名选手获得,同样来自武汉体育舞蹈艺术学校的郝志敏和李桌骐获得A组拉丁舞冠军;少年精英组摩登舞冠军是由来自广州瑞创舞蹈的吴伟哲和李慕晨曦获得,少年精英组拉丁舞冠军则由江门市少儿拉丁舞团的李志成和陶艺雯获得。为积极响应“百社联百村——助力百千万工程”行动,主办方赛前在阳东体育馆举行了多场中国·阳东“冠军公益大课堂”活动,邀请了中国国际标准舞总会国际评审、考官冯彬,亚洲职业拉丁冠军杨黎,以及获得过中国体育舞蹈标准舞大满贯的职业冠军赵鹏,向广大群众,特别是社会体育指导员普及传授体育舞蹈要领,传播科学健身理念,为乡村振兴注入体育能量。通讯员供图 +2023-08-16 19:20,正文:8月14日,广州市荔湾区人民政府门户网站英文版(http://www.lw.gov.cn/ywb/)正式上线,面向全世界第一时间发布荔湾区政府权威英文资讯,助力提升涉外政务服务能力,对外展示广州老城市的新活力。据悉,该网站英文版旨在为外籍人士、港澳居民、归国华侨以及外资企业等提供政府英文资讯的服务,设区情简介、新闻动态、营商环境、文旅地图、服务之窗五大内容板块。及时全面更新荔湾英文资讯网站英文版是一本外企投资荔湾的指南,其中“营商环境”一级栏目,重点介绍白鹅潭商务区、文商旅活力区、海龙围科创区三大平台,对外推介备受外商关注且正在不断转型升级的特色专业市场,为外资企业、外籍人才提供最新政策资讯与政策解读。网站英文版还是一本“乐享荔湾”的生活指南,比如,用户可按照“个人申请”“商事服务”“生活导航”分别检索,查看签证办理、居留许可、人才认定、公司注册等常用服务事项,还可了解医疗、教育、酒店、服务热线等公共服务资源信息。向世界展示西关文化魅力上下九、永庆坊、沙面、白鹅潭......记者发现用户通过点击式的交互地图,可以沉浸式探索具有岭南文化特色的热门旅游景点、文化设施和特色美食。“我们将上下九、永庆坊、陈家祠等热门景点设计成手绘图标,点开图标就是景点的实景图片和简介。用户即使不了解这些景点,也可以选择最吸引自己的手绘图标,设计专属的旅游路线。”广州市荔湾区人民政府门户网站英文版开发团队相关负责人介绍说。该负责人补充道:“对很多外籍人士来说,体育中心、图书馆、博物馆等是生活中必不可少的公共设施,因此网站专门设置了‘文化设施’地图,让外籍人士不仅能在荔湾旅游,更能在荔湾找到最舒适、最自在的生活方式。”除了传统的西关美食,该网站英文版还推荐了16家2023年上榜米其林指南的餐厅,以及13家最“潮”咖啡馆。“不管是‘西关胃’还是‘国际胃’,总有一款宝藏美食能击中我们的外国友人‘心巴’。”她说。此外,广州市荔湾区人民政府门户网站英文版还设置了手机版,方便用户随时通过手机浏览。手机版打造清晰简洁的页面,符合外籍人士阅读习惯,突出重要分类,更直观呈现服务导航。用户可以从首页快速找到目标事项,再根据指南进一步完成预约服务办理。GDToday记者 黄绮铌 蒋畅 +2023-08-17 23:43,正文:南方网讯(记者/李润芳 通讯员/陈康秀 蔡娟娟)8月17日,广东省高级人民法院发布“服务保障高质量发展”专题改革案例。这10个改革案例充分体现了广东法院围绕全面落实省委“1310”具体部署,以改革创新为引擎,在护航“粤港澳大湾区建设”、支持“实体经济、制造业当家”、保障“百千万工程”、服务“绿美广东生态建设”和推进“法治广东平安广东建设”等方面的最新探索和实践。今年来,广东法院聚焦“公正与效率”工作主题,以综合提升审判质效工作为牵引,锐意改革创新,探索形成了一大批服务保障高质量发展的亮点和经验举措。此次发布的改革案例,涉及全省5个中级法院、4个基层法院,其中既有“跨境司法规则衔接与机制对接”“互联网知识产权纠纷类案化解”新机制的先行先试,又有“诉源治理服务乡村振兴”“‘林长+森林法官’生态联保平台建设”等共建共治共享社会治理模式的创新实践,也有“三端发力化解金融纠纷”“中小微企业救治和退出”等服务高质量发展的最新探索。其中,跨境司法规则衔接与机制对接改革创新经验被国家发展改革委向全国推广,“穿透式”多元解纷机制在最高人民法院“一站式多元解纷和诉讼服务体系建设”质效评估中,评分在全国70个大中城市辖区法院中排名第一,纳斯维尔重整案入选“全国破产经典案例”。近年来,广东法院致力于打造专题改革案例品牌,先后推出了“多元解纷”“制约监督机制建设”“案件繁简分流”三批专题改革案例,在最高人民法院发布的12批司法改革案例中广东共有21个案例入选。 +2023-08-18 11:15,正文:南方网讯(记者/黄小殷 实习生 张倩 通讯员/谢君源 成宇珑)8月17日上午,广州市中级人民法院举行《广州法院服务保障民营经济发展壮大的若干措施》及典型案例新闻发布会。记者从会上了解到,上述文件围绕“惠商”“助商”“护商”“安商”四个方面提出了18条措施。发布会现场。摄影:通讯员 彭勇广州市中级人民法院党组副书记、副院长吴振表示,此次公布的措施和典型案例,充分发挥广州法院司法职能作用,依法平等保护民营企业合法权益,助力优化民营经济发展环境,增强民营企业家干事创业信心,对服务保障民营经济高质量发展具有积极推动作用。18条措施围绕四个方面护航民营经济发展:促进企业守法经营,营造法治化营商环境。包括积极稳妥推进企业守法经营、依法审慎否定新类型交易模式的效力、助力缓解民营企业融资难融资贵问题、公正保护民营企业在金融案件中的合法权益、服务构建和谐劳动关系等5条措施。高效化解民营经济纠纷,保护民营企业合法权益。包括妥善审理民事与刑事、行政交叉的案件,推动涉民营企业纠纷诉前多元化解,畅通服务民营企业诉讼绿色通道,强化“先行判决”机制运用,全力推进积案清理集中攻坚等5条措施。注重民营企业产权保护,切实保障企业家人身和财产安全。包括加大知识产权司法保护力度、妥善处理涉民营企业各类侵权纠纷案件、妥善审理涉生态旅游资源开发案件、对涉外案件依法主动行使司法管辖权等4条措施。坚持善意文明执行,有效发挥司法对民营企业的挽救功能。包括最大限度降低强制措施对民营企业的不利影响、依法快速兑现民营企业胜诉权益、完善企业信用修复机制、提高民营企业重整质效等4条措施。记者从会上了解到,今年1月至7月,广州全市法院共屏蔽失信名单5410人,缩短期限20人,发布信用修复证明书13份、主动履行证明书208份。附件:《广州法院服务保障民营经济发展壮大的若干措施》 +2023-7-24 09:39,正文:中新社上海7月23日电(范宇斌)中国旅美科技协会访问团21日至23日到访上海。在沪期间,中国旅美科技协会与上海市侨联签订友好侨社协议。中国旅美科技协会长期致力于中美多领域合作和友好交流,架起了中美民间友好的桥梁。“中国旅美科技协会1992年在美国正式成立。在中国上海、北京、广州、武汉、成都、青岛等城市设有办事处或联络处,为中美两国的交流联系提供服务。协会成员以科技界为主,也有来自文化、教育、法律、金融、人文等领域。”中国旅美科技协会总会会长张晓春表示,未来,希望与上海之间有更多合作的空间。“上海是投资兴业的热土,是科创发展的沃土,也是成就梦想的乐土。”上海市黄浦海外联谊会会长卢正表示,合作共享是时代的主流和方向,黄浦区非常希望与中国旅美科技协会不断加强联系与合作。黄浦海外联谊会将做好合作交流服务工作,助力科创产业发展,推动更多海内外科技领域的交流与合作。当前,上海大力推进科创中心建设,“科技回归中心城区”的趋势愈发明显。上海市黄浦区科学技术委员会主任邬树纯表示,“随着数字化时代到来,科技型企业更加需要接近市场、接近场景、接近金融、接近应用,所以核心城区越来越具有较大的吸引力。作为上海最核心的中心城区,黄浦区将紧抓新一轮科技革命和产业变革的机遇,持续实施创新驱动战略,以更加开放、创新、包容的姿态,加快打造更加优质的科技创新创业生态,进一步增强对各类创新资源的吸引力。”“上海市侨联将加强与中国旅美科技协会等海外具有代表性的专业性侨团的联络、联谊与协作,积极为华侨华人创业发展牵线搭桥,为国家和上海高质量发展汇聚侨智侨力。”上海市侨联主席齐全胜说。(完) +2023-7-24 13:25,正文:中国侨网7月24日电 题:专家谈平安留学:牢记安全是第一准绳记者 金旭“随着国际航线的持续恢复,越来越多的留学生前往留学地开始独立生活。但目前面临诸多不稳定因素,留学安全的警钟也再次敲响。”国际安全教育专家王学军表示,家长和学生在关注择校问题的同时,也需要重视“走出去后如何保证自身安全”。2013年,王学军创办了一家专注于中国留学海外安全培训、发达国家社会风险研究与防范的机构。他说,他曾是一名国际刑警,聚留学安全的初衷是想把他的经历、经验和知识分享给留学生群体,提升他们的安全意识和安全技能。近日,两名在加拿大渥太华的中国留学生乘坐公共交通时,无故遭当地一名男子袭击,受到严重惊吓。王学军分析称,如果遇到仇恨犯罪或者产生威胁生命、财产等行为,首要采取的措施是远离和避险,甚至暂时妥协,再找适当的时机及时报警。学生一定要有自我保护意识,牢记所在国报警电话,切勿轻易向袭击者反击。“涉财犯罪、种族歧视、暴力犯罪、出行、社交、性骚扰、自然灾害、文化宗教差异等都可能成为潜在风险,提高自身安全素养,培养安全习惯尤为迫切。”王学军支招,谨记四要素:安全的时间、地点、辨别安全的人物和事件。比如,不要独自在夜晚出行,不走偏僻之路和监控盲区,不露富,慎重交友,注意保护个人隐私信息、必要时舍财保命。“在出国前,建议加强安全教育,主动提升安全素养;出国后,在遵守所在国法律法规的前提下,留学生可以多关注治安问题和案例,有助于识别不法分子的共性和犯罪心理,在生活中不断研判、刻意练习,提升远离风险、智慧避险、紧急脱险的安全能力。”他说。近年来,电信网络诈骗极具迷惑性和欺骗性,让很多中国留学生难以防范。对此,王学军表示,留学生一定要牢记,国内公检法机关没有所谓的“安全账户”,更不会通过电话和网络来办理具体案件。诈骗手法万变不离其宗,无论理由是什么,都要做到不转账、不汇款,必要时向官方求证。(完) +2023-7-24 15:45,正文:近日,山东省第一届智力运动会“泰山秀城杯”五子棋比赛女子儿童组、男子儿童组、女子少年组、男子少年组、公开个人组五个组别的比赛圆满结束。经过激烈角逐,日照东港的侨眷刘延波夺得公开个人组的冠军。比赛中,刘延波凭着精湛的棋艺和高超的谋略,经过激烈的角逐奋战,最终“棋开得胜”,取得了五子棋公开个人赛第一名的好成绩。“这次拿到了五子棋个人组金牌,真的很开心,夺冠仅仅是起点,我会继续努力的。”刘延波说,“五子棋入门简单,真正下好并不容易,这次省智运会,专业棋手很多,水平很高,我参赛主要是去学习,通过参赛,在竞技交流中增长见识,不断提高自己的竞技,争取为日照取得更大荣誉。”五子棋是一项中国传统的益智活动,也是一项充满趣味又富含哲理和智慧的棋种,玩五子棋即能陶冶青少年情操,又能培养孩子良好的道德修养,深受广大家长和青少年喜爱。据了解,山东省第一届智力运动会由山东省体育局、泰安市人民政府主办,山东省棋牌运动管理中心、泰安市体育局承办,运动会共设围棋、国际象棋、中国象棋、跳棋、五子棋、桥牌、魔方、够级八个大项,82个小项。(东港区委统战部 文图) +2023-7-24 16:25,正文:尼日利亚孔子学院留华同学会成立仪式举办人民网阿布贾7月23日电(记者姜宣)23日,尼日利亚孔子学院留华同学会在中国驻拉各斯总领馆举行成立仪式。驻拉各斯总领事严宇清出席并致辞,中国驻尼日利亚大使馆文化参赞李旭大发来祝贺视频,尼留华学生、孔子学院、华侨华人、中资企业等各界代表百余人参加活动。严宇清对同学会的成立表示热烈祝贺。她指出,今年恰逢中国国家主席习近平提出推动构建人类命运共同体、真实亲诚对非政策理念和“一带一路”倡议十周年。十年来,中尼各领域交流合作取得丰硕成果。希望尼留华学生继续发挥所长,做中尼文化的传播者、中尼合作的贡献者、中尼友谊的促进者。李旭大表示,尼日利亚孔子学院留华同学会将不仅是广大孔子学院留华学生沟通交流、相互学习的平台,也将是成员间互相帮助、相互关爱的温暖之家。阿齐克韦大学孔子学院副院长安纳斯表示,希望同学会能够明确愿景,坚守初心,发挥专长,回馈社会,助力发展,造福两国人民。拉各斯大学孔子学院副院长章明表示,希望留华学生肩负起中尼交流使者的重任,借共建“一带一路”东风为国家谋发展,为人民谋幸福。留华同学会会长吴文仲分享了同学会的愿景、使命以及“卓越、诚信、尊重、服务”的核心理念,承诺将汇聚留华学生合力,推动中尼人文交流和双边经贸合作。活动期间,孔子学院留华学生代表携手华星艺术团联袂呈现舞狮、武术、京剧、诗朗诵、现代歌舞等精彩节目,赢得阵阵喝彩。总领馆精心准备的中华美食也令留华学子重温“舌尖上的中国”。 +记者:孙奇茹,正文:本报讯,乘坐顺风车出行,高速费该如何分摊?这一容易引发车乘分歧的难题将有新的解决办法。哈啰顺风车相关负责人透露,平台即将上线新功能,请乘客在出发前表达对高速费的支付意愿,平台基于该意愿匹配车主并确保双方遵守约定。哈啰顺风车负责人介绍,针对高速费问题,平台过去5年里累计调研用户数十万人次,经过大量访谈分析发现,51%的乘客表示愿意承担高速费,仅有6%的车主完全不愿意承担,且总体而言乘客和车主间存在友好沟通和共识的基础。平台接下来将请车主和乘客在线上表达高速费支付意愿——乘客在发布行程前可在App内自主决定是否愿意分摊以及分摊比例,车主则能依据乘客表达的倾向来选择是否接单。如果双方选择分摊,高速费也可在线上完成支付,平台将基于乘客与车主的以上契约来设定管理规则。东南大学法学院副教授顾大松认为,顺风车是一种典型的社会互助行为,顺路合乘体验不断提升离不开平台、用户以及社会各界同心协力。来源:北京日报  记者 孙奇茹流程编辑:u032版权说明:任何媒体、网站或个人未经书面授权许可不得转载、摘编或利用其它方式使用本网站上的文字、图片、图表、漫画、视频等内容。未经许可即使用,或以此盈利的,均系侵害本网站著作权及相关权益的行为,本网站将追究法律责任。如遇作品内容、版权等问题,请在相关文章刊发之日起30日内与本网联系。联系方式:takefoto@vip.sina.com +记者:潘福达,正文:华住集团有限公司7月25日公布截至2023年6月30日第二季度酒店经营初步业绩。报告期内,由于国内强劲的旅游需求支撑,集团平均可出租客房收入大幅回升至2019年水平的121%。截至2023年6月30日,集团在18个国家经营着8750家酒店,拥有844417间客房。2023年4月、5月和6月,平均可出租客房收入分别恢复至2019年水平的127%、115%及123%。第二季度关店的主要原因是去年疫情影响所导致的延迟关店,以及继续淘汰酒店网络中较低质量及表现欠佳的经济型酒店,新开业酒店达374家,基本符合增长预期。同时,新签约酒店数量进一步回升,第二季度达到1000多家,反映了加盟商的信心不断提升。集团将通过经济型和中档领域的主力品牌,以及中高档的多品牌战略,继续扩大酒店网络。图片来源:华住集团来源:北京日报客户端 记者 潘福达流程编辑:u028如遇作品内容、版权等问题,请在相关文章刊发之日起30日内与本网联系。版权侵权联系电话:010-85202353 \ No newline at end of file diff --git a/examples/data/rag_bm/simplified_RGB/answer.json b/examples/data/rag_bm/simplified_RGB/answer.json new file mode 100644 index 000000000..2c84f8d3a --- /dev/null +++ b/examples/data/rag_bm/simplified_RGB/answer.json @@ -0,0 +1,72 @@ +[ + { + "question": "印控克什米尔地区寺庙踩踏事故死亡人数", + "gt_answer": "12人", + "gt_reference": [ + "海外网1月1日电 据印度新德里电视台报道,位于印控查谟和克什米尔地区的瓦希诺德维寺发生踩踏事件,目前已造成12人死亡、14人受伤。 当地时间1月1日,大批印度民众聚集在瓦希诺德维寺庆贺新年,期间发生踩踏事故。警方证实,12人在踩踏事故中丧生,14人受伤,救援行动立即展开,所有伤者已被送往医院,部分伤者情况严重。 当地官员透露,事件发生在寺庙外,当时有大量民众涌入寺庙,有的人甚至未经许可就进入寺庙,紧接着踩踏事件就发生了。" + ] + }, + { + "question": "RCEP具体包括哪些国家", + "gt_answer": "东盟, 中国, 日本, 韩国, 澳大利亚, 新西兰", + "gt_reference": [ + "RCEP(Regional Comprehensive Economic Partnership),即区域全面经济伙伴关系协定   RCEP是Regional Comprehensive Economic Partnership的缩写,即区域全面经济伙伴关系协定,RCEP由东盟十国发起,邀请中国、日本、韩国、澳大利亚、新西兰、印度共同参加(“10+6”),通过削减关税及非关税壁垒,建立16国统一市场的自由贸易协定。   RCEP是东盟国家近年来首次提出,并以东盟为主导的区域经济一体化合作,是成员国间相互开放市场、实施区域经济一体化的组织形式。RCEP主要成员国计划包括与东盟已经签署自由贸易协定的国家,即中国、日本、韩国、澳大利亚、新西兰、印度。" + ] + }, + { + "question": "第七届香港立法会议员宣誓仪式的时间", + "gt_answer": "1月3日", + "gt_reference": [ + "时间:2021-12-29 14:58:03  来源:海外网 分享到微信朋友圈 据香港大公文汇全媒体报道,香港第七届立法会议员的宣誓仪式将在2022年1月3日上午11时在立法会会议厅举行,由行政长官林郑月娥监誓。 宣誓仪式前,候任议员将面向 香港立法会 据香港大公文汇全媒体报道,香港第七届立法会议员的宣誓仪式将在2022年1月3日上午11时在立法会会议厅举行,由行政长官林郑月娥监誓。 宣誓仪式前,候任议员将面向国旗及区旗肃立,同唱国歌,之后逐一宣誓。" + ] + }, + { + "question": "首趟RCEP班列的起点?", + "gt_answer": "南宁", + "gt_reference": [ + "2022年1月1日零点刚过,随着汽笛声响,满载800多吨货物的X9101次集装箱班列从南宁国际铁路港开出,一路朝着终点站越南河内进发。 这是RCEP(区域全面经济伙伴关系协定)生效后,我国首趟开往RCEP成员国的国际货运班列。 我国首趟开往RCEP成员国的国际货运班列从南宁国际铁路港发出(央广网发 冯登海 摄) “南宁国际铁路港自2018年5月开通运营以来,累计到发货物1218万吨,每年到发货物量约270万吨。”广西宁铁国际物流有限公司总经理宋坚强介绍。" + ] + }, + { + "question": "香港第七届立法会选举有多少个议席?", + "gt_answer": "90", + "gt_reference": [ + "立法会是香港的立法机构,亦是香港的一院制议会。第七届立法会(英语:Seventh Legislative Council)经2021年12月19日的选举产生,90名议员分别从地方选区普选20位、功能团体间选30位、选举委员会产生40名。任期原由2020年10月1日开始,但因全国人大常委会通过《全国人民代表大会常务委员会关于香港特别行政区第六届立法会继续履行职责的决定》,延长第六届立法会任期不少于一年。" + ] + }, + { + "question": "2021年香港GDP增长了多少?", + "gt_answer": "6.4%", + "gt_reference": [ + "企业投资也获得增加,这些都是拉动经济增长的重要因素。经济活动走向正轨,失业率也大幅下降到4.1%。 2020年下降6.1%,2021年又实现6.4%的增长,可以说是非常不容易,这也说明香港经济的韧性非常强,基础牢固。 不过,2021年内地各省市GDP增速很多都超过了8%,大幅超过香港。因此,香港2.37万亿的数据,下降到了全国第21名,被广西超越,广西为2.47万亿。 另外,从城市排名来看,香港仍然可以排到全国第六。位于上海、北京、深圳、广州、重庆之后。但只比苏州多了1000亿,很有可能在2022年被反超,滑落至第七。" + ] + }, + { + "question": "2021年北京大兴机场年旅客吞吐量", + "gt_answer": "2500万人次", + "gt_reference": [ + "北京大兴国际机场2021年旅客吞吐量突破2500万人次 新华社北京1月1日电(记者 罗鑫)记者从北京大兴国际机场获悉,截至2021年12月31日,大兴机场年旅客吞吐量突破2500万人次,全年保障航班约21万架次,圆满完成全面转场、航班换季、疫情防控和复工复产等各项工作目标,生产运行平稳有序。 2021年,大兴机场单日最高航班量达907架次,单日最高旅客量突破14万人次,全年累计运营国内航线200条、联通全国157个航点。" + ] + }, + { + "question": "2022年春节档首日票房冠军", + "gt_answer": "长津湖之水门桥", + "gt_reference": [ + "2022年春节档以60.35亿票房收官,2月7日,灯塔研究院和灯塔专业版联合发布《2022春节档电影市场数据洞察报告》(以下简称灯塔报告)。 灯塔报告显示,2月1日大年初一,春节档首日揽下14.5亿票房,与2019年持平,后续走势也与疫情前一样平缓回落。 票房冠军《长津湖之水门桥》斩获25." + ] + }, + { + "question": "2022春运开始时间", + "gt_answer": "1月17日", + "gt_reference": [ + "2022年春运时间:   2022年1月17日—2月25日,共40天   2022年春运抢票时间:   春运第一天的火车票(2022年1月17日农历腊月十五)——2022年1月3日开抢   春运第二天的火车票(2022年1月18日农历腊月十六)——2022年1月4日开抢   春运第三天的火车票(2022年1月19日农历腊月十七)——2022年1月5日开抢   春运第四天的火车票(2022年1月20日农历腊月十八)——2022年1月6日开抢   除夕前一天的火车票(2022年1月30日农历腊月廿九)——2022年1月16日开抢   除夕当天的火车票(2022年1月31日农历腊月三十)——2022年1月17日开抢" + ] + }, + { + "question": "2022年春运首日火车票什么时候开售", + "gt_answer": "1月3日", + "gt_reference": [ + "导语 北京铁路部门提醒,北京各火车站严格落实进出站旅客测温制度,做好测温工作。在进站口对乘车旅客进行100%北京“健康宝”健康码查验,绿码通行,红码和黄码劝返。   ➤2022年春运火车票什么时间开售?   根据火车票15天预售期安排,春运首日火车票1月3日开售,1月17日可以购买1月31日除夕当日的火车票。2022年除夕为腊月二十九,即1月31日。根据火车票15天预售期安排:   1月15日可以购买1月29日(腊月二十七)的火车票;   1月16日可以购买1月30日(腊月二十八)的火车票;" + ] + } +] diff --git a/examples/data/rag_bm/simplified_RGB/documents.txt b/examples/data/rag_bm/simplified_RGB/documents.txt new file mode 100644 index 000000000..5d9f83a06 --- /dev/null +++ b/examples/data/rag_bm/simplified_RGB/documents.txt @@ -0,0 +1,600 @@ +附:《中国新闻周刊》2022“年度影响力人物”榜单(排名不分先后)   年度文化人物:著名作家,第十届茅盾文学奖得主梁晓声   年度体育人物:中国花样滑冰运动员,北京冬奥会金牌得主隋文静韩聪   年度企业家:比亚迪股份有限公司董事长兼总裁王传福   年度学者:中国社会科学院学部委员、历史学部主任,中国考古学会理事长王巍   年度法治人物:清华大学法学院院长,十三届全国人大宪法和法律委员会副主任委员周光权   年度演艺人物:中国内地男演员靳东   年度科技人物:中国空间站系统研发团队   年度经济学家 +89,相較於2021年全年死亡數18萬3732人,增加2萬3498人;這也是內政部從46年統計以來,粗死亡率最高的一年,死亡人數更首度逾20萬人。 社會增加部分,2022年12月遷入人口數為11萬9679人,較2022年11月增加3萬1人;遷出人口數為8萬3125人,較111年11月增加2萬355人,淨遷入人口數為3萬6554人。但2022年全年遷入人口108萬6712人,仍較遷出人口112萬9142人還少4萬2430人。 另外,結婚對數部分,2022年全年共12萬4997對,折合年粗結婚率為千分之5. +欢迎关注“新浪科技”的微信订阅号:techsina  文/吕敬之 编辑/饶霞飞 来源:燃次元(ID:chaintruth) 北京时间3月3日,哔哩哔哩(NASDAQ: BILI,HKEX:9626;以下简称“B站”)公布了截至2021年12月31日的第四季度和全年未经审计的财务报告。 财报显示,2021财年B站总营收达193.8亿元(人民币,以下未标注则同),同比增长62%。其中第四季度营收同比增长51%,达57.8亿元。 美国通用会计准则下,B站第四季净亏损20.95亿元,调整后的非美国会计通用准则(Non-GAAP)的净亏损为16.6亿元人民币。全年度净亏损68.09亿元,相较于去年净亏损30.54亿元,亏损幅度扩大122. +2、2022年下半年征兵体检时间 2022年下半年应征青年一般在7月底和8月初开始体检,各县(市、区)根据实际情况稍有差别,具体时间可以直接联系应征地兵役机关。保证留在全国征兵网上的电话畅通,会有应征地兵役机关通过短信或电话的形式通知体检。 二、2022年下半年征兵需要符合什么要求和条件? +中国女篮2022年世界杯征程 小组赛 9月22日 中国107比44韩国 9月23日 中国98比51波黑 9月24日 中国63比77美国 9月26日 中国95比60波多黎各 9月27日 中国81比55比利时 1/4决赛 9月29日 中国85比71法国 半决赛 9月30日 中国61比59澳大利亚 决赛 10月1日 中国61比83美国 新京报记者 徐邦印 +震区及周边房屋结构类型主要包括框架、砖混、穿斗木、砖(土)木、片石等结构,农村部分自建房屋达不到抗震设防标准。同时,震区部分房屋建在边坡和河流阶地,地形效应和地基失效加重了破坏。 +(2022年5月25日北京市第十五届人民代表大会常务委员会第三十九次会议通过)   第一条 为了规范住房租赁活动,保护租赁当事人合法权益,稳定住房租赁关系,促进住房租赁市场健康发展,推动实现住有所居,根据有关法律、行政法规,结合本市实际,制定本条例。   第二条 本市行政区域内自然人、法人和非法人组织之间的住房租赁及其监督管理活动,适用本条例。   城市公有房屋、公共租赁住房的租赁不适用本条例。 +相较之下,美国生产率在截至2022年的十年间平均仅提升了1.3%,是阻碍该国薪资增长的主要因素。 “一旦全球至少有一半的公司采用AI技术,那么未来10年全球GDP每年可能会增长7%。这大约相当于7万亿美元。”高盛经济学家表示。就全球范围而言,他们预测AI将推动生产率每年提高1.4个百分点。 全球或有3亿个工作岗位被自动化取代 不过,上述经济学家还表示,如果这项技术实现其承诺,也会给劳动力市场带来“重大颠覆”,使大型经济体中相当于3亿全职工人受到自动化的威胁。而律师和行政人员将率先面临被淘汰的风险。 +现将有关事项通知如下: 一、大会基本情况 2023年世界互联网大会乌镇峰会数字经济产业合作大会由浙江省人民政府等主办,浙江省经济和信息化厅等单位承办。大会将展示我省数字经济领域的重大成果,交流产业合作经验,探索产业发展路径,发布签约一批技术领先、有市场前景、补链强链延链的数字经济合作项目。参会嘉宾包括省政府领导、省级相关部门领导、数字经济领域知名专家、企业家、投资机构负责人、部分地方政府和省内各特色园区负责人、媒体记者等。 +WTA250克利夫兰站决赛对阵 萨姆索诺娃VS萨斯诺维奇[7] 萨斯诺维奇成功逆转以6(5)-7/7-5/6-3击败法国老将科内,本赛季第2次,职业生涯第4次锁定巡回赛女单决赛入场券,她将力争在美网之前结束自己WTA单打0冠尴尬,科内出局后则会奔赴纽约,备战美网首轮与卫冕冠军拉杜卡努的比赛。 +《海的尽头是草原》根据“三千孤儿入内蒙”的真实历史事件改编,全景式再现了60年前那一段流淌着民族大爱的共和国往事:新中国遭遇严重自然灾害,大批来自南方的孤儿面临营养不足的威胁,内蒙古自治区党委、政府在中央政府的指导下主动请缨,将3000多名孤儿接到大草原,牧民们本着“接一个,活一个,壮一个”的原则,以博大的胸怀接纳并养育了这些孤儿,成就了一段民族团结、守望相助的佳话。 +北京大兴国际机场2021年旅客吞吐量突破2500万人次 新华社北京1月1日电(记者 罗鑫)记者从北京大兴国际机场获悉,截至2021年12月31日,大兴机场年旅客吞吐量突破2500万人次,全年保障航班约21万架次,圆满完成全面转场、航班换季、疫情防控和复工复产等各项工作目标,生产运行平稳有序。 2021年,大兴机场单日最高航班量达907架次,单日最高旅客量突破14万人次,全年累计运营国内航线200条、联通全国157个航点。 +世界泳联2月9日表示,决定将2025年世界游泳锦标赛移至新加坡举行,从而取代俄罗斯喀山的主办权。法新社报道称,新加坡将是第一个举办世界游泳锦标赛的东南亚国家。除了游泳,该锦标赛还包括跳水、花样游泳和水球等项目。(环球网) 广告等商务合作,请点击这里 本文为转载内容,授权事宜请联系原著作权人。 +在他眼里,演员自我修养,其中有一点就是“留意周围的人,细致入微地观察。一切表演都是从生活中来的,先不谈高于生活,首先要源于生活。”所以,从某个角度说,网友的玩笑没说错,张颂文确实不是演的,他的戏是真实体验后的表演。   这个时代,只要你是真有才华,注定不会被人埋没。2020年的网剧《隐秘的角落》中,张颂文饰演的朱永平痛失爱女后,强忍悲痛吃馄饨的那一段戏,就曾被网友“封神”。现在,这部《狂飙》彻底让他“出圈”了。 +08亿元,已超过前一天(大年初二)单日票房的4.05亿元。 华创证券分析,春节档票房第二日与第三日(截止10点)相比2019年与2022年已经实现同比回正。目前首三日票房累计32.67亿元(不含服务费,截止10点),已经好于2019年的31.76亿元与2022年的31.90亿元。 三年疫情使影视业深受影响,多家机构表示2023年电影市场复苏在即,看好春节档的票房表现。国泰君安香港研报分析称,春节档对电影复苏具有重要指引意义。展望2023年春节档,电影票价的上涨趋势的确定性更高,预计2023年春节档总票房有望突破人民币80亿元。 +新华社墨西哥城1月12日电(记者朱雨博)“回避冲突,拍照最优先”“峰会成果仅有虚妄的承诺”……在墨西哥首都墨西哥城举行的第十届北美领导人峰会11日落幕,当地媒体报道纷纷这样吐槽。   美国总统拜登为此次峰会定的“调门”很高——旨在将北美打造成世界上最有竞争力、最繁荣且最有经济韧性的地区。然而,有分析认为,美国与墨西哥、加拿大“兴趣点”存在差异,美国敷衍塞责、态度居高临下,本届峰会再次“走过场”。记者捕捉到的三个尴尬细节印证了这一点。 +刺杀案发生后的第六天,7月14日,首相岸田文雄敲定为安倍举行国葬,9月27日于东京日本武道馆举行[125][126],国葬的费用将由国库全额负担[127],并且从本来用于应对紧急状态如天灾的“预备费”中抽调资金[128]。8月26日内阁批出不包含警备费用的2亿4940万日圆国葬预算[129],9月26日内阁公布新的估算中包含了保安费(八亿日元)、接待外国政要费(六亿日元)和其他杂费(一千万日元),实际总额至少是16.6亿日元[130]。10月13日,日本内阁官房长官松野透露,安倍国葬的费用将在12亿日元左右的范围内,比最初估计的省了4亿[131]。 +当地时间1月12日,美国劳工部发布了数据显示,美国通胀继续降温。 2022年12月美国消费者物价指数(CPI)同比上涨6.5%,为2021年10月以来的最小涨幅,符合市场预期,较前值7.1%大幅回落0.6个百分点。 去年6月时,美国CPI同比涨幅一度触及9.1%峰值,创逾40年新高,此后该指标出现连续数月回落。 同时,2022年12月CPI环比下跌0.1%,符合预期,为2020年6月以来首次出现环比下跌,前值为环比上涨0.1%。 剔除波动性较大的食品和能源价格后,美国12月核心CPI同比上涨5.7%,较前值6.0%有所回落;环比上涨0.3%,高于前值0.2%。 +世界职业比利和斯诺克协会(WPBSA)公布了详细的处罚结果和处罚依据,具体处罚结果如下: 梁文博被终身禁赛; 李行被终身禁赛; 鲁宁被判禁赛8年,在配合和认罪后减至5年4个月,直至2028年4月; 颜丙涛被判禁赛7年6个月,在配合和认罪后减至5年,直至2027年12月11日; 赵心童被判禁赛2年6个月,在配合和认罪后减至1年8个月,直至2024年9月1日; 赵剑波被判禁赛3年6个月,在配合和认罪后减至2年4个月,直至2025年4月7日; 常冰玉被判禁赛3年,在配合和认罪后减至2年,直至2024年12月7日 +WTA罗马大师赛2023签表 +此外,指那些能够提供暖气的公共建筑的“Warm Bank”,表示热点话题转换的“Vibe Shift”等词汇也都进入了《柯林斯词典》的2022年年度词汇名单。 +公司研究所已布局总量研究、上游能源、高端制造、大消费以及TMT五大板块,基本实现研究全行业覆盖,海内外佣金逐年提升。2021年公司成功入选为社保基金签约券商,在2021年新财富评选中斩获本土最佳研究团队”第8名、“最佳销售服务团队”第3名等多项团队荣誉。   东吴证券资管业务继续向主动管理转型,不断丰富主动管理产品体系,销售渠道和机构客户不断增加,主动管理规模持续扩大,产品业绩良好。报告期内,资产管理业务实现营业收入4.58亿元,同比增长214.89%。   服务实体继续加速跑   投行业务方面,2021年东吴证券实现营业收入9.47亿元。 +© 2023 RFI – 版权所有版权所有。法广对非本网站内容不承担责任。通过 ACPM/OJD 认证。 俄罗斯的主要安全机构称拘留了《华尔街日报》记者Evan Gershkovich。俄罗斯联邦安全局指控该记者从从事间谍活动。华尔街日报否认间谍指控,并敦促俄罗斯放人。 发表时间: 30/03/2023 - 13:53 据华尔街日报今天报告,俄罗斯联邦安全局拘留一名《华尔街日报》记者。俄罗斯联邦安全局(Federal Security Service)是在俄罗斯东部城市叶卡捷琳堡拘留了美国公民Evan Gershkovich。 +5个预测是“基本全错”或“完全错误的”,如中国A股领涨新兴市场、2020年推迟的夏季奥运会将于7月举行并允许观众参加、由于需求被压抑低迷的酒店业和航空业股票表现强劲、经济增长的激增导致10年期美债收益率上升至2%; 1个是对错参半的——股票市场扩大,大盘股科技股这些股票今年表现落后(实际情况是:美股市场参与上涨的广度确实扩大了,但大型科技成长股和小盘价值表现一样好)。 而对于黑石的预测,其实对错可能并非重点,毕竟预测之后的应对方案比预测本身更加重要,有了策略才能信心满满。 +73辆,位居行业第九, 同比下降72%,居行业第九,跑输大盘。 总体看,在2022年上半年重卡企业销量排行中,重汽夺得冠军,解放及东风分别居第二和第三;主流车企销量同比均为较大幅度下降,其中大运重卡降幅最小。   上半年重卡市场份额同比增加最多的是中国重汽 表:2022年上半年重卡主流企业市场份额及同比变化情况(来源:根据公开数据) 上表可见,在2022年上半年, 重卡主流车企的市场份额变化特征是: ----重汽占有份额为24.1%,位居第一,且同比增加5.7个百分点,是主流车企中同比份额增加最多的车企,表现最突出。 ----解放市场占有份额为19. +此次主题口号的发布,将吸引越来越多的朋友关注冬奥、参与冬奥,向世界人民传递同舟共济、守望相助,携手走向未来的美好愿望。   北京冬奥组委自2020年5月起启动了主题口号创作征集工作,通过定向委托创作的方式,面向清华大学、北京大学、中国人民大学、中国传媒大学和中国社会科学院等单位征集主题口号创意,后经多轮评审,听取有关方面和专家意见,并和国际奥委会、国际残奥委会取得一致后,最终决定将“一起向未来”(英文为:“Together for a Shared Future”)作为北京冬奥主题口号。 +2020年9月,影片创新性地启动了全球青年电影人招募活动,甄选优秀人才加入影片拍摄制作团队。截至目前,影片已通过多方采访及线索收集,完成脚本定稿、赛前办赛团队拍摄、海内外运动员生活备赛及测试赛内容拍摄。据悉,北京冬奥会官方电影团队目前已投入北京冬奥会赛时拍摄。影片将于2022年上半年完成所有拍摄,计划于年内与观众见面。 +Feb 8, 2022 ... 北京冬奥会速度滑冰男子1500米比赛中,荷兰选手凯尔·内斯获得金牌,打破奥运纪录。 +1月12日,美国劳工部发布数据显示,2022年12月美国CPI同比上涨6.5%,预估值为6.5%,前值为7.1%;环比下降0.1%,是自2020年4月以来的最大月度跌幅,预估值为下降0.1%,前值为上涨0.1%。在剔除波动较大的食品和能源价格后,美国12月核心CPI同比上涨5.7%,创2021年12月以来最低水平,环比上涨0.3%。 +2023-01-12 18:02:53 据公安部统计,2022年全国机动车保有量达4.17亿辆,其中汽车3.19亿辆;机动车驾驶人达5.02亿人,其中汽车驾驶人4.64亿人。2022年全国新注册登记机动车3478万辆,新领证驾驶人2923万人。 新注册登记机动车3478万辆 新注册登记汽车2323万辆 截至2022年底,全国机动车保有量达4.17亿辆,扣除报废注销量比2021年增加2129万辆,增长5.39%。2022年全国新注册登记机动车3478万辆。汽车保有量达3.19亿辆,占机动车总量76.59%,比2021年增加1752万辆,增长5.81%。全国新注册登记汽车2323万辆。摩托车保有量达8072万辆,占机动车总量19. +人才新政 工作动态 招聘信息 我要招聘 我要求职 我要创业 图解政策 通知公告 来源:大众日报2022-10-26 17:21 记者24日从国家公务员局获悉,中央机关及其直属机构2023年度公务员招考报名即将开始。本次招考共计划招录3.71万人。 考生可于10月25日8:00至11月3日18:00期间,登录“中央机关及其直属机构2023年度考试录用公务员专题网站”进行网上报名。公共科目笔试将于12月4日在全国各直辖市、省会城市、自治区首府和部分较大的城市同时举行。 据介绍,本次招考录用计划向重点人群、重点地区倾斜。设置2. +一名军迷认为航母的命名应该是纪念近代以来中国的几次海上战争。第一艘命名为“辽宁舰”是纪念甲午旅大战争,那么第二艘自然是纪念甲午威海卫战争。当时有很多人猜对了,既然是威海卫,那自然是“山东舰”了。 那么,到如今的第三艘航母,命名线索基本被摆在明面上了,任何稍微懂点历史的人都能猜出来第三艘航母将命名为“福建舰”,来纪念和铭记中法马尾海战。以上提及的战争是中国近代史上最著名的三大海战。 +2021年,我国规模以上工业增加值增长9.6%,比2020年提高6.8个百分点,两年平均增长6.1%。   ——制造业创新能力明显提升。光伏、风电、船舶等产业链国际竞争优势进一步增强,集装箱产量同比增长110.6%,芯片产量同比增长33.3%。新型显示、工业母机、新材料等领域攻关取得阶段性成效。   ——制造业产业结构加快升级。高技术制造业、装备制造业增加值分别增长18.2%、12.9%,对规上工业增长的贡献率分别达28.6%、45%。规模以上工业单位增加值能耗同比下降5.6%。   ——制造业数字化转型全面提速。 +他们(中国队运动员)将全力争创佳绩,展现良好风貌,夺取运动成绩和精神文明双丰收。”   杭州亚运会共设40个竞赛大项,包括31个奥运项目和9个非奥运项目,既有田径、游泳等奥运大项,同时还有一些武术、藤球、板球、克柔术、柔术等代表东亚、东南亚、南亚、中亚、西亚体育文化的特色项目,还有滑板、攀岩、电子竞技等青少年喜爱的新兴项目。其中,电竞、霹雳舞被首次列入亚运会正式项目。 +根据《2022年全国硕士研究生招生工作管理规定》,现将2022年全国硕士研究生招生考试有关事项公告如下: 一、初试时间 2022年全国硕士研究生招生考试初试时间为2021年12月25日至26日(每天上午8:30—11:30,下午14:00—17:00)。超过3小时的考试科目在12月27日进行(起始时间8:30,截止时间由招生单位确定,不超过14:30)。考试时间以北京时间为准。不在规定日期举行的硕士研究生招生考试,国家一律不予承认。 二、初试科目 初试方式均为笔试。 +此情况发生在2021年1月,当时南希·佩洛西以216票胜出(而不是218票)。 由于职位空缺、缺席或成员出席但未投票,可能会出现赢得特定选举所需票数的这种变化。 如果没有候选人赢得多数选票,则将重复投票,直到选出议长为止。[15]自1789年以来,多次投票只出现14次;在2023选举之前,自1923年12月以来没有出现过,当时分歧严重的众议院需要九次选举才能选出议长。[21] 没有议长,议员就无法宣誓就职。[a]在选出议长之前,众议院只能不断重复选举,无法开展任何其他工作。[22] +西班牙选手拉斐尔·纳达尔和澳大利亚选手阿什莉·巴蒂是本次赛事的单打卫冕冠军,但由于巴蒂在2022年宣布退役,不会参加2023年的赛事。[2] 最终塞尔维亚选手诺瓦克·德约科维奇赢得男子单打冠军,这是他第10个澳网男单冠军,继续推高该奖项记录,成为第二个在单一大满贯赛事上获得10个以上冠军的网球选手(第一位达成成就的是2017年法国网球公开赛的纳达尔)。德约科维奇已经于2019年开始至今拿下澳网四连冠(2022年未参赛)暨28连胜。 +一直兜兜转转到2010年,印尼宣布以“入股”形式参加KF-X项目,才推动韩国真正认识到这一项目依然相当有价值。当时印尼政府表示将出资20%,并计划采购数十架。 但接着,KF-X又经历了单发双发之争、美国拒绝转让核心技术、机身布局多次重大修改等一系列波折。期间,韩国空军甚至早早签下了F-35的采购订单。 但就在大家都以为这个项目再度面临流产的时候,2021年4月7日,KF-X项目第一架原型机正式下线并被命名为KF-21。这一名字寓意为“21世纪保卫朝鲜半岛的国产战机”,绰号“猎鹰”(Boramae)。 +9%,虽然增速与全国平均水平基本持平,但是相较于2021年上半年同期下滑严重。西藏和新疆消费活力较之前恢复良好,消费市场较为稳定,主要原因还是由于各项促消费政策措施的加快落实,通过发放消费券和消费补贴等多种形式开展市场促销,拉动消费效果明显;随着疫情逐步平稳,前期受影响较大的小成本经营性活动开始恢复;前期制约消费潜力释放的问题有所改善,信心预期趋稳缓解了“无心消费”。 +印寺廟元旦人踩人十二亡     【香港中通社月一日電】印控克什米爾地區一座寺廟一月一日凌晨發生一宗踩踏事故,已造成十二人死亡、二十人受傷。     爭吵推搡釀慘劇     綜合媒體一月一日報道,當天二時四十五分左右,印控克什米爾地區冬季首府查謨附近一座寺廟發生踩踏事故。事發時,從各地趕來的大批信徒正準備進行新年祭拜,由於不少信徒沒有得到進入許可,他們圍擠在寺廟外並發生推搡,最終造成踩踏。 +对该模式的另一种批评在于它缺乏竞争性,每支球队只有两场小组赛,三分之二的球队有机会晋级。 另外一种模式是48支球队分成12个小组,每组4支球队。但12个小组在淘汰赛阶段无法直接形成对称的对阵模型。国际足联有意借鉴欧足联在欧锦赛上的比赛设计,即每个小组前两名和成绩最好的8个小组第三名,组成32强对垒。 这种模式的可取之处在于保留了和现在节奏一致的小组赛模式,每支球队打3场比赛。但被诟病之处在于多出更多比赛。比赛总量将增加至104场,单小组赛就有72场,完整赛程或拉长至35天以上。 美加墨世界杯将有16个城市参与承办比赛。 +记者从6月29日举行的上海市政府新闻发布会上了解到,2023世界人工智能大会将于7月6日至8日在上海世博中心及世博展览馆举办,并在浦东张江、徐汇西岸设分会场,同步在闵行等产业集聚区开展同期活动。 +从同比看,2022年12月份CPI上涨1.8%,涨幅比上月扩大0.2个百分点。食品价格上涨4.8%,涨幅比上月扩大1.1个百分点,其中猪肉价格上涨22.2%,涨幅比上月回落12.2个百分点;鸡蛋、食用油和粮食价格分别上涨10.0%、7.2%和2.6%,涨幅均有回落;鲜菜价格下降8.0%,降幅收窄13.2个百分点。非食品价格上涨1.1%,涨幅与上月相同,其中汽油和柴油价格分别上涨10.5%和11.4%,涨幅均有回落。扣除食品和能源价格的核心CPI略有回升,同比上涨0.7%,涨幅比上月扩大0.1个百分点。 +25岁的赵心童则被处以20个月禁赛,在禁赛前,他是世界排名最高的中国球员。 判决结果公布后, 他于周三凌晨在社交媒体上发布一份“道歉声明”,指自己“给中国斯诺克蒙羞”。 他称自己因长期独自的海外生活“枯燥而闭塞”,“盲从”地仿效他人选择了用赌球“打发时间”,同时表示自己在赌球和打假球过程中“并没有从中获得任何形式的利益回报”。 “我为当时的愚蠢行为付出了沉重的代价,并且每天都在懊悔中度过。”赵心童在声明中说。 他还称自己在禁赛后接受了世界职业台球与斯诺克协会提供的心理咨询协助,表示会“以更好的形象重返赛场”。 +为国家一线队伍提供后备人才,为2022年冬奥会做准备,是她当时的重点工作之一。 1978年11月出生的申雪,是黑龙江哈尔滨人。她和赵宏博是中国首枚冬奥会双人滑奖牌的获得者。2002年盐湖城冬奥会上,两人在双人滑中创造了在世界大赛上首次使用四周抛跳的历史,尽管动作失败,但仍获得了铜牌。8年后,在2010年温哥华冬奥会上,两人夺得了双人滑冠军,并由此成为中国历史上首对双人滑冬奥会冠军。 +当众人都以为Jim Keller将在AMD大展宏图的时候,他却毫无征兆地跳槽去了芯片初创公司Sibyte,负责MIPS芯片的研发。一年后,Sibyte被芯片巨头厂商博通收购,Jim Keller一跃成为了博通的首席架构师。但Keller也并没有始终待在博通公司。 2004年Jim Keller跳槽去一家初创公司——PA-Semi,巧的是这家公司在4年后被苹果收购,Jim Keller顺理成章的成为了苹果的芯片设计师。在苹果的四年,Jim Keller带领团队开发出了苹果A系列处理器的开山之作A4,以及第二代A5(对应iPhone4和iPhone4S),开启苹果的辉煌造芯之路,这也成就了乔布斯自研芯片的战略。 +RCEP协定由序言、20个章节(包括:初始条款和一般定义、货物贸易、原产地规则、海关程序和贸易便利化、卫生和植物卫生措施、标准、技术法规和合格评定程序、贸易救济、服务贸易、自然人临时流动、投资、知识产权、电子商务、竞争、中小企业、经济技术合作、政府采购、一般条款和例外、机构条款、争端解决、最终条款章节)、4个市场准入承诺表附件(包括:关税承诺表、服务具体承诺表、投资保留及不符措施承诺表、自然人临时流动具体承诺表)组成。   RCEP是目前全球体量最大的自贸区。2019年,RCEP的15个成员国总人口达22. +2022年春运购票日历: Copyright © 2006- 2023 All rights reserved. 本地宝 |粤ICP备17055554号 违法和不良信息举报电话: +文化和旅游部5月3日公布 2023年“五一”假期文化和旅游市场情况 全国国内旅游出游合计2.74亿人次,同比增长70.83% 按可比口径恢复至2019年同期的119.09% 实现国内旅游收入1480.56亿元,同比增长128.90% 按可比口径恢复至2019年同期的100. +2022中关村论坛定于11月25日至30日在京举办。本届中关村论坛的主题是“开放合作・共享未来”。论坛主会场设在国家会议中心,同时在中关村国家自主创新示范区展示中心、首钢园等地举办共126场相关活动。各主办单位共同策划了平行论坛、展览展示、技术交易、成果发布、前沿大赛、配套活动等6大板块。   本届论坛共举办60场平行论坛,论坛数量是去年的2.4倍。围绕工程创新、开源芯片、脑机接口、能源安全、碳中和等科技前沿和热点议题,来自全球的科学家、企业家、投资人将充分碰撞智慧、交流思想、共商合作。 +《超越》百度网盘高清免费衟资源在线观看: 链接:https://pan.baidu.com/s/1vX30kJMGSG_AgHwMxmAJ7Q?pwd=1234 提取码:1234 返回目录 如果您觉得本文对您有所帮助,请在文章结尾处点击“顶一下”以表示您的支持。如果您对本文有任何意见或建议,请点击“踩一下”,以便我们改进该篇文章。如果您想了解更多相关内容,请查看文章下方的相关链接。 +图1-1全国报告人群新型冠状病毒核酸检测阳性数及阳性率变化趋势    (数据来源于31个省(区、市)及新疆生产建设兵团报告)    (二)全国报告人群新冠病毒抗原检测结果。2022年12月以来,部分省份建立居民抗原检测信息收集应用程序(APP),居民可自愿上传抗原检测结果。结果显示:各省份报告抗原检测量较低,呈现逐渐减少趋势,从2022年12月19日的最高189万下降到2023年1月23日的10.5万,其后有所反弹,1月30日为13.2万。抗原检测阳性数及阳性率自2022年12月9日快速上升,12月22日达高峰(33.7万、21. +当地时间2022年12月9日下午,首届中国—阿拉伯国家峰会在沙特首都利雅得阿卜杜勒阿齐兹国王国际会议中心举行。峰会发表《首届中阿峰会利雅得宣言》,宣布中阿双方一致同意全力构建面向新时代的中阿命运共同体。 +在北京冬奥会张家口赛区,太子城遗址公园与冬奥村相邻不远。为更好保护历史文化遗存,冬奥村在设计建设时东移200多米,避开了遗址区。太子城遗址公园和冬奥赛场交相辉映,共同见证中华民族的历史进程。 北京携手张家口共办盛会,张家口赛区一共产生51块金牌,是本届冬奥会诞生冠军最多的赛区。这是一场冰雪奇缘,张家口由此改变,不再是寂静的塞外山城。踏上全面建设社会主义现代化国家新征程,冬奥会的筹办举办为北京、河北等地带来新机遇,为京津冀协同发展注入新活力。 +欧洲当地时间1月5日,IRONMAN官网宣布2023年 IRONMAN 世界锦标赛男子赛事将于2023年9月10日在法国尼斯举行;女子赛事将于2023年10月14日仍在夏威夷的KONA举办。2024年,男女赛事地点互换。2024年9月22日在尼斯进行女子赛事,男子比赛将于2024年10月26日在KONA举行,这种赛地轮换将持续到2026年。 2022年11月30日,IRONMAN官网首先确认2023年 IRONMAN 世界锦标赛将在两个不同的场地举行,并确定女子比赛于2023年10月14日仍在夏威夷的KONA举行。男子比赛日期和地点则需要评估。经由权衡,最终确定,法国尼斯将在2023年9月10日承办男子赛事。 +不过,民进党2022年几位可能的参选者,在实力上都不如1994年的陈水扁。在一年多后要到来的首都市长选战中,该党如能险胜(或者小胜),就可心满意足。最后要说的是,民进党已有较长时间未能掌控台北市政府。该党若想在台湾长期执政,拿下首都市长有其特殊意义。 +新华社石家庄9月23日电(记者杨帆、齐雷杰)23日,“唐山烧烤店打人案”在河北省廊坊市广阳区人民法院一审公开宣判,主犯陈继志被判有期徒刑24年。   今年6月10日凌晨,河北省唐山市路北区某烧烤店发生一起寻衅滋事、暴力殴打他人案件,造成恶劣影响,引发社会广泛关注。   9月13日至15日,廊坊市广阳区人民法院一审公开开庭审理广阳区人民检察院提起公诉的被告人陈继志等恶势力组织违法犯罪一案。 +特拉斯处于英国政治光谱中极右翼的一端,极力倡导自由主义,因此其支持者主要是右翼保守党、富人和英国南部保守人群。在特拉斯上台之前,减税政策广受这一人群的支持。甚至可以说,减税政策是特拉斯获得支持得以上台的主要原因。 因此,9月23日,被特拉斯任命的财政大臣夸西·克沃滕宣布英国自1972年以来最大的减税政策,达到450亿英镑,占GDP的1.5%,以提振经济,这一政策也被称为“迷你预算案”。 但是,减税政策后的市场却极差。 +莫斯科工会大厦位于莫斯科大剧院和议会下议院杜马之间,这里曾存放过已故苏联领导人列宁、斯大林、勃列日涅夫、安德罗波夫和契尔年科的遗体。 戈尔巴乔夫基金会的工作人员表示,戈尔巴乔夫的葬礼将由俄罗斯政府的礼宾服务部门组织,并向公众开放。葬礼结束后,戈尔巴乔夫将被安葬在莫斯科新圣女公墓,他的妻子赖莎也在此安息。 +此前一日,8个非通用语职位外语水平测试,中国银保监会及其派出机构职位、中国证监会及其派出机构职位以及公安机关人民警察职位专业科目笔试已经开考。   本次国考招录计划招录3.71万人,相比2022年计划招录人数增加了18.7%,这也是国考招录连续第四年扩招。   2022年10月,在为期10天的网上报名中,本次国考共有259.77万人通过用人单位资格审查,相比去年增加了50万人,同比增长25%,通过资格审查人数与录用计划数之比约为70:1。 +英国《简氏防务周刊》网站2021年12月29日发表题为《印度第三艘“歼敌者”级核潜艇悄然下水》的报道,全文摘编如下:   美国普兰尼特公司捕获的卫星图像显示,代号S4的印度第三艘“歼敌者”级核动力弹道导弹潜艇2021年11月23日在位于印度维萨卡帕特南的造船中心下水。   这艘潜艇后来被重新安置到码头以北靠近舾装码头的区域,正对着该级别潜艇的另一艘。印度媒体尚未报道该潜艇下水的消息,可能与第二艘“歼敌者”级潜艇服役时间因新冠疫情而延迟有关。 +根据春节档的预售票房以及目前的票房表现,多家机构表示看好2023年电影市场的复苏情况。 其中,中国电影参与出品或发行了春节档全部7部影片。猫眼娱乐参与制作发行《满江红》《中国乒乓》等5部影片。光线传媒主投发行了《深海》,并参投了《满江红》《交换人生》等4部影片。阿里影业参与出品了《流浪地球2》《无名》《交换人生》3部影片。华策影视和横店影视分别参投《流浪地球2》《熊出没》2部影片。博纳影业出品并发行了《无名》。 +企业投资也获得增加,这些都是拉动经济增长的重要因素。经济活动走向正轨,失业率也大幅下降到4.1%。 2020年下降6.1%,2021年又实现6.4%的增长,可以说是非常不容易,这也说明香港经济的韧性非常强,基础牢固。 不过,2021年内地各省市GDP增速很多都超过了8%,大幅超过香港。因此,香港2.37万亿的数据,下降到了全国第21名,被广西超越,广西为2.47万亿。 另外,从城市排名来看,香港仍然可以排到全国第六。位于上海、北京、深圳、广州、重庆之后。但只比苏州多了1000亿,很有可能在2022年被反超,滑落至第七。 +作者李路,系电视剧《人世间》导演、总制片人) +如果简单概括一下这场4个多小时听证会的内容,那么大致包括以下3点: 1、这场听证会的多数议员,尤其是共和党籍议员,并没有任何想与TikTok的CEO周受资进行对话和沟通的意思,而是早已经把他和TikTok定罪,认为TikTok是中国政府的代理人,所以他们问了周受资很多很多涉及中国政府、法律和政治的问题,甚至还问到了他有关中国新疆的问题。 然而周受资来自新加坡,是一位科技企业的高管,了解的是TikToK的业务,对中国的很多情况,他都表示自己并不了解。所以这部分的对话完全是鸡同鸭讲。 +生成型预训练变换模型 4(英语:Generative Pre-trained Transformer 4,简称GPT-4)是由OpenAI公司开发并于2023年3月14日发布的自回归语言模型[1][2]。Vox称GPT-4从各方面来说都优于OpenAI之前发布的GPT-3和GPT-3.5。[3]The Verge还在报道中引用了关于将大幅增加GPT-3的参数数量(从1750亿到100万亿)的传言,但OpenAI首席执行官山姆·柯曼将其斥责为“完全是胡说八道”。[4]美国众议员堂·拜尔和刘云平向《纽约时报》证实,奥尔特曼于2023年1月访问国会展示GPT-4及其与其他人工智能模型相比所改进的“安全控制”。[5] 3月9日,微软表示GPT-4是多模态(英语:Multimodal learning)的(将支持文本以外的内容)。 +根据印度海军发展规划,印度计划建造6艘“歼敌者”级核潜艇,现在3号和4号艇已经开工建造,原计划2025年前服役4艘,但现在看2024年才服役2艘,整个计划显然会推迟很多年。 “歼敌者”级核潜艇虽然性能平平,但是印度海军通过开发这一型号,总算跨入核潜艇俱乐部行列。除了6艘“歼敌者”级之外,印度政府还批准了名为S5的下一代战略核潜艇的计划,排水量将增大到13500吨左右,配备12枚潜射弹道导弹。 +6月4日,据中国载人航天工程办公室消息,经空间站阶段飞行任务总指挥部研究决定,陈冬、刘洋、蔡旭哲3名航天员将执行神舟十四号载人飞行任务,由洛阳籍航天员陈冬担任指令长。   消息一出,令许多河南人自豪,对于刘洋和陈冬两位航天员,大家并不陌生,因为这已经是他们第二次执行中国载人航天的飞行任务了。   第二次进入太空的洛阳籍航天员陈冬,成“最年轻乘组”指令长   2016年10月17日,38岁的陈冬和当时第三次进入太空的景海鹏,一同搭载神舟十一号成功发射升空,开始了自己的首次太空之旅。 +2022年全年,特斯拉总收入为815亿美元,同比增长51%;GAAP净利润为126亿美元,同比增长128%。 上海证券报社有限公司版权所有。本网站提供之资料或信息,仅供投资者参考,不构成投资建议。 Copyright 1998 Shanghai Securities News Co. Ltd. All rights reserved. 联系电话:021-38967777 转新媒体部 地址:上海浦东新区陆家嘴金融城东园路18号 邮编:200120 E-MAIL:webmaster@cnstock. +一、危机突起:美国三家银行面临破产危机(一)硅谷银行破产2023年3月11日,因“流动性不足与资不抵债”,硅谷银行(Silicon Valley Bank)被美国加利福尼亚州金融保护和创新局(简称“加州金融监管局”)关闭,并指定美国联邦存款保险公司(Federal Deposit Insurance Corporation,FDIC)为接管方,硅谷银行的总办事处和所有分行将于13日重新开放。为保护存款人利益,美国联邦存款保险公司设立一家过渡银行(Bridge Bank),并将硅谷银行的受保护的存款全部转移至过渡银行,由过渡银行提供网上银行和ATM取款等服务。截至2022年12月31日,硅谷银行总资产约为2090亿美元,总存款约为1754亿美元。 +经济学家预计,欧元区通胀率还未触顶。随着天然气价格和电价飙升,未来几个月欧元区通胀率将进一步上升,可能达到两位数。   从国别来看,欧盟主要经济体德国8月通胀率为8.8%,法国为6.5%,意大利为9.0%,西班牙为10.3%。   今年以来,在美联储激进加息外溢效应、欧洲能源危机蔓延等诸多负面因素影响下,欧元区通胀率持续走高。为遏制通胀进一步恶化,欧洲央行7月启动十余年来首次加息,将欧元区三大关键利率均上调50个基点。 +国家统计局近日发布数据显示,2022年我国全社会研究与试验发展经费(以下简称研发经费)继续保持两位数增长,投入总量迈上3万亿元新台阶;经费投入强度(研发经费与GDP之比)较快提升,达到2.55%。 初步测算,2022年我国研发经费投入达30870亿元,首次突破3万亿元大关,比上年增长10.4%,自“十三五”以来已连续7年保持两位数增长。按不变价计算,研发经费增长8.0%,高于“十四五”规划“全社会研发经费投入年均增长7%以上”的目标。 投入总量上规模,投入强度也较快提升。据初步测算,2022年,我国研发经费投入强度达到2.55%,再创新高,比上年提高0. +豆瓣 扫码直接下载 > 去 漫长的季节 的页面 导演: 辛爽 主演: +简介:影片共由四个动画短片组成,冬奥会就是连缀这四个短片的内在线索。该片讲述了众多中国动画角色与冬奥会吉祥物冰墩墩和冬残奥会吉祥物雪容融围绕冬奥村开村仪式展开的关于团结、梦想、勇气和拼搏的多篇章故事,将于2月19日正式上映。 影片:《零度极限》(未上映) 简介:该片由叶伟民执导,韩庚、尹昉、郎月婷领衔主演,讲述知名滑雪选手凌风因一场事故职业生涯陷入谷底,在一群青年人的帮助下寻回初心与勇气,最终突破极限破茧蜕变的故事。 +让人耳目一新的非典型短剧 无论是充满地域特色的大杂院生活气息,还是氛围感考究的怀旧风,京味儿扑面而来的《胡同儿》的确是让人耳目一新的非典型“短剧”:过往这个赛道都是古偶、甜宠、搞笑题材的天下,而胡同文化、家庭伦理情感则是长剧非常成熟的元素,《贫嘴张大民的幸福生活》《正阳门下》等电视剧早已突破京味儿剧的地域限制,成为几代人共同的情感回忆。 +最高法院还在判决中将堕胎权列为“基本权利”,这意味着各地法院需根据最严级别的“严格审查(英语:strict scrutiny)”标准审议当地的堕胎法是否应继续使用[7]。 最高法院做出的判决是美国历史上最具争议性的判决之一[8][9]。反堕胎团体和政客一直争取推翻判决。尽管该案受到了大量批评,且1992年的宾州东南部计划生育组织诉凯西案部分推翻(英语:List of overruled United States Supreme Court decisions)该案中的判决:“三个月周期”框架被废弃,而“严格审核”规则被更有弹性的“不当负担”规则所取代[5][10]。但最高法院仍强调该案是“核心判决”[11]。 +答:2023年春运起止时间是从2023年1月7日(农历腊月十六)开始,到2023年2月15日(正月二十五)结束。 网站地图 |  关于我们 |  联系方式 |  网站声明 | +祭祖仪式开始,马英九与三位姐姐、一位妹妹等家人肃立墓前。仪式遵循当地世代承袭的习俗,鸣炮之后,马英九和家人行三上香礼。马英九敬献鲜花、果品后,用湖南方言宣读祭祖文。   马英九在祭祖文中说:“亲爱的公公,这是我一生第一次来大陆祭祖与探亲,内心非常感动。您的遗训使我们子女都懂得自爱自强,为善助人,尽忠职守。这是我们人生最宝贵的资产,取之不尽,用之不竭。”   马英九献酒后,携家人向祖墓行三鞠躬礼。再次鸣炮后,仪式完成。 +该剧中塑造了以周建斌(张丰毅 饰)、陈晓静(王媛可 饰)、王吉祥(王栎鑫 饰)为代表的老中新三代基层派出所民警。他们有血有肉、情感细腻,这其中既有理想的碰撞、青春的阵痛,也有职业生涯的迷茫与坚守,向阳而生的力量因为真实喷薄而出。 现实主义题材的作品,细节的真实永远是第一道关。为此,《护卫者》搭建了一个超2000平方米的实景,还原了一个真实的“枫桥式派出所”。 +新华社北京4月18日电 题:一季度重要数据出炉,如何看待当前经济形势 新华社“新华视点”记者 2022年我国经济首季报18日出炉:国内生产总值(GDP)270178亿元,同比增长4.8%。 面对国际环境更趋复杂严峻和国内疫情频发带来的多重考验,如何看待这份“成绩单”?“新华视点”记者对关键数据进行了梳理。 GDP同比增长4.8% 一季度,我国GDP同比增长4.8%,增速高于2021年四季度0.8个百分点,环比增长1.3%。 +电子报 当前位置: 京报网首页 > 世界 > 正文 来源: 央视新闻客户端 2022-05-12 15:26 喀麦隆交通部当地时间12日表示,11日在该国境内失去联系的一架载有11人的飞机,被证实在喀麦隆中部的森林中坠毁。 喀麦隆交通部在一份声明中说,空管部门当天与一架执飞首都雅温得至东部大区贝拉博航线的飞机失去联系,机上载有11人。经过搜寻,飞机在位于首都雅温得东北约150公里的森林中坠毁,救援人员正在搜寻幸存者。 +各大城市2021年经济数据陆续揭晓。2021年GDP总量前十的城市分别是:上海、北京、深圳、广州、重庆、苏州、成都、杭州、武汉、南京。 这其中,上海和北京均首次超过了4万亿,深圳首次超过3万亿,广州稳居第四,成都逼近2万亿。 表:2021年GDP十强城市 数据显示,2021年,上海、北京、深圳和广州四大一线城市继续位居GDP总量前四。其中,上海和北京都是全年GDP首次超过4万亿大关。2021年上海市实现GDP43214.85亿元,按可比价格计算,比上年增长8.1%,两年平均增长4.8%。GDP总量继续稳居全国城市第一。 北京市统计局的数据显示,北京市2021年地区生产总值达到40269. +第二发枪声之后,安倍晋三上半身屈下,左手尝试掩盖胸膛,从演讲台下降到地面继而往前倒下,日本警方当场逮捕开枪的中年男子。安倍中弹后,右颈部有伤口,左胸位置流血,并失去呼吸心跳。尽管现场幕僚紧急抢救,并对安倍使用自动体外心脏除颤器,但15分钟后送到橿原市内的医院途中的安倍仍呈到院前心肺功能停止,生命状况极为危险[35][36]。 案发后30分钟,原预定由安倍助选,但临时被取消行程的长野县候选人松山三四六,其办公室接到一通恐吓电话,电话中对方说道:“下一个轮到你”[37]。 +中国商飞C919是由中国商用飞机有限责任公司制造的一款单通道150座级窄体干线客机,专为中短程的航线設計,标配168个座位,最多可容纳190个座位[2]。 C919项目于2008年11月启动。2009年9月8日,C919外形样机在香港举行的亚洲国际航空展(英语:Asian Aerospace)上首次公开亮相。 C919的首架原型机本计划于2014年首飞,2016年交付航企使用。其后经过延期,2015年11月2日,C919首架總裝完畢,原型机尾號為B-001A,於中国商飞公司总装制造中心浦东基地厂房内正式下线[3][4]。 +《搜救》是由甄子丹领衔主演并监制,罗志良编剧执导,韩雪、贾冰、唐旭、侯天来、徐光宇、袁近辉、蔡心、林辰涵、胡明等联袂主演的灾难冒险电影。影片讲述寒冬季节,一组游客家庭自驾进入东北长白山旅行,原本其乐融融的旅行,却因父亲阿德(甄子丹饰)的过失导致8岁的儿子不幸走失。 +#电视剧不期而至##不期而至# 特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。 Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services. +我们已经确定好了高启强的扮演者,张译、贾冰、高叶、合作过3次的倪大红老师也来了,我准备安排后续的工作了,这个时候,颂文突然和我联系,说想跟我聊一聊。 于是,《狂飙》导演亲自去了上海拍摄《心居》现场,那天是张颂文和海情的一场戏,一直拍到凌晨3点,徐纪周就在旁边一直看他拍戏,蚊子把他的腿叮了很大包,张颂文在导演的脑海中留下很深印象。 回来的路上,我满脑子都是张颂文演戏的画面,我告诉《狂飙》制片人,张颂文如果不来演高启强,我一定会遗憾终生的! +由博纳影业集团、博纳热爱影视、优酷信息技术(北京)有限公司出品,于冬、谢颖、唐海岩任出品人,唐海岩任总制片人,鲜橙编剧,闫宇彤执导,蔡文静、彭冠英领衔主演,王劲松、李乃文、岳旸特别主演,杨琼、林源、萨日娜等主演的电视剧《不期而至》定档11月2日在优酷独家播出。 +第二发枪声之后,安倍晋三上半身屈下,左手尝试掩盖胸膛,从演讲台下降到地面继而往前倒下,日本警方当场逮捕开枪的中年男子。安倍中弹后,右颈部有伤口,左胸位置流血,并失去呼吸心跳。尽管现场幕僚紧急抢救,并对安倍使用自动体外心脏除颤器,但15分钟后送到橿原市内的医院途中的安倍仍呈到院前心肺功能停止,生命状况极为危险[35][36]。 案发后30分钟,原预定由安倍助选,但临时被取消行程的长野县候选人松山三四六,其办公室接到一通恐吓电话,电话中对方说道:“下一个轮到你”[37]。 +52亿元5%的罚款,计8760万元。  2022年5月,市场监管总局依据反垄断法对知网涉嫌实施垄断行为立案调查。市场监管总局表示,经查,知网在中国境内中文学术文献网络数据库服务市场具有支配地位,包括:2014年-2021年,知网的市场份额均超过50%;数据库服务价格明显高于其他竞争者,且连年较大幅度上涨;具有较为强大的财力和先进的技术条件;用户对当事方高度依赖等。 +但在日本票房失利,截至1月5日累计票房为2000万美元[88]。 本片于2023年1月19日已在全球 四个市场破亿美元,分别是北美5.74亿美元,大陆2.14亿美元,法国1.22亿美元,德国1.07亿美元。 《阿凡达2》是《阿凡达》的四个续集计划中的第一部电影;《阿凡达3》于2017年9月25日在新西兰与《阿凡达2》同时拍摄[29][63][64][65][66][67]。 +原标题:《护卫者》每一个人物都有原型 +在世界杯如此重要的比赛当中,宁愿冒着失去重要射手的麻烦,也要送走本泽马,看起来双方之间的关系确实是非常复杂,更关键的是,本泽马也好,他的亲属也好,更关注法国队撒谎的事情,他们竟然把所有的责任都推给了本泽马,这就很难让人接受了。 本泽马在很长一段时间离开法国队,直到2021年才获得了回归的机会,本来是希望能够在本届世界杯有所作为的,没想到最后竟然落得如此结局。 +1、首先,电视剧《炽道》根据Twentine的同名小说改编,剧中不仅有甜美爱情,还有刺激的赛场竞技,酷飒女教练配上小奶狗运动员的恋爱既好嗑又有趣。 2、其次,《炽道》导演伊峥的名字你也许不熟悉,但提到由他执导的《大宋少年志》和《苍兰诀》你一定看过。 尽管伊峥的作品不多,但每一部的审美都在线。 特别是《炽道》,不仅把金晨和王安宇的吻戏拍得又纯又欲,而且整体的画面构图也特别唯美。 +2018年8月,零壹空间又对外宣布获得了3亿元人民币的新一轮融资,本轮融资由中金佳泰基金领投,沣途资本跟投,同时招商局创投、前海万得基金、前海梧桐并购基金等老股东继续追加投资。但截至2019年3月22日的股东信息中,记者并未查到中金佳泰基金和沣途资本的相关信息。   截止目前,工商注册信息显示,除了创始人舒畅之外,零壹空间已经有哈尔滨工大特种机器人有限公司在内的18名投资人。 +本届超级碗30秒广告的平均售价在600万至700万美元区间,部分30秒广告售价超过700万美元,所有广告已于2023年1月底售罄。[2]投放的广告包括:[37][38] +他于2018年7月10日因要求加薪不果而选择离开了皇家马德里,以1亿欧元加盟意大利足球甲级联赛球队祖云达斯,同赛季获得意甲最佳球员奖。2021年,C罗再次加入曼联。2022年11月22日,与曼联解约成为自由身。2022年12月30日,C罗宣布加盟沙特阿拉伯球会艾纳斯。 在葡萄牙国家队。2011及12年,他两度获得国际足协金球奖第二名;2013、14、16、17年四度获得金球奖[6]。2014、16年以及17年获得得欧洲足协最佳球员。 2021年1月21日,C罗成为足球史上入球最多的球员,共打入760球[7],而且数字仍持续增加中。 +2014年–2016年 梅赫伦足球俱乐部主教练 2016年-2017年 标准列日足球俱乐部主教练 2017年-2018年 梅赫伦足球俱乐部主教练 2018年 中国国家男子U-19足球队主教练 2019年 中国国家男子U-20足球队主教练 2020年 中国国家男子U-21足球队主教练 2021年 中国国家男子U-22足球队主教练 2022年 中国国家男子U-23足球队主教练 2023年 中国国家男子足球亚运队主教练 2023年至今 担任中国国家男子足球队主教练 教练荣誉 塞尔维亚冠军(红星2001-2004) +[6] 2022年9月29日獲民航局頒發適航证,2022年12月9日向中国东方航空交付首架飞机[7],早期產能僅能交付個位數[8],仍透過歐美合作商供應部分關鍵零件,國產化率也還在爬升[9],官方評估未來中國製造商取證將會填補與加上新冠疫情的影響趨緩,預計在2029年能達到年產量150架的初步規模[10]。售價大约1亿美元左右[11]。2023年5月28日首架C919開始在中国东方航空公司MU9191航班載客,未來機隊並先在虹橋至天府執飛第一個定期航班MU9197,該行程票價在919元[12]。 +「EMNLP 2019会议」,「在中国香港举办,时间:11月3日至11月7日」。今年会议主要是ACL 语言数据特别兴趣小组 (SIGDAT) 组织和亚洲自然语言处理联合会(AFNLP)共同组织举办。所以2019年的会议全称为:「EMNLP-IJCNLP」。 「EMNLP 2018会议」,在比利时布鲁塞尔举办,时间:10月31日至11月4日。其中Tutorials & Workshops放在了Day1、Day2;Main Conference放在了Day3-Day5。 「EMNLP 2017会议」,在丹麦哥本哈根举行,时间:2017年9月7日至11日。 +アプリをダウンロード 越来越多机构对3月加息达成「共识」,摩根大通、德意志银行和花旗等在内的多家华尔街大行,均已加入到了支持美联储在3月加息的阵营之中。 其次,12月加息的声音也不断出现。除了高盛,摩根大通首席美国经济学家也在周五非农发布后表示,「我们现在预计首次加息将出现在3月,然后每季度加一次,全年加息四次。」黑石集团此前也在“2022年的十大黑天鹅”中预测,2022年美联储将加息四次。 目前市场对加息速度和力度的预测主要看美联储关注的就业情况和通胀情况,而疫情是影响因素之一。 +2021年,规模以上外商及港澳台商投资工业企业资产总计28.8万亿元,比2012年增长67.2%;实现营业收入28.8万亿元,比2012年增长29.8%。 工业产品出口保持增长,结构逐步优化。2021年,我国规模以上工业实现出口交货值14.5万亿元,比2012年增长36.1%,年均增长3.5%;其中高技术制造业实现出口交货值比2012年增长63.7%,年均增长5.6%。2021年,高技术制造业占规模以上工业出口交货值的比重为51.5%,比2012年上升8.7个百分点。2013年以来,在出口总额中,机电产品所占比重均保持在55%以上,2021年达到59.0%,较2012年提高1.4个百分点。 +© 2023 RFI – 版权所有版权所有。法广对非本网站内容不承担责任。通过 ACPM/OJD 认证。 发表时间: 20/03/2023 - 14:37 3月10日,美国第16大银行硅谷银行(Silicon Valley Bank)突然倒闭,在全美金融和科技界引起恐慌。人们担心2008年雷曼兄弟银行倒闭引发全球金融海啸的事件,今又重演。硅谷银行1983年成立,拥有约2090亿美元资产,存款规模达1754亿美元,是美国高科技产业区硅谷存款最多的银行。硅谷银行倒闭,有多种因素,分析人士认为最重要的因素是,受到美联储连续大幅度加息所祸及。 +消失的她原型 +另外,8家北大在京医院派出的902名医疗服务保障人员参与到本次的冬奥志愿服务工作中。参与冬奥服务保障的北大师生达1600余人,居北京高校之首。北京大学是服务范围最广、承接任务最综合的高校,北大志愿者将服务于冰立方、兴奋剂检测中心、奥林匹克大家庭酒店、北京冬奥村、首钢滑雪大跳台、颁奖广场、国家体育馆和主媒体中心等8个重要场馆;北大医疗服务保障人员分布在北京、延庆、张家口两地三赛区,值守各大重要场馆。 +最终,飞机被定位在距中部大区楠加埃博科不远的森林中。至声明发出时,地面救援力量正前往飞机所在地为乘客提供帮助。 据多家媒体报道,该飞机由一家私营性质的喀麦隆石油运输公司(COTCO)租用,机上乘客为该公司员工,而该公司拥有着一条在喀麦隆和邻国乍得之间运输的油气管道。 另据当地媒体报道,这架飞机于11日14时左右与地面失去联系,飞机在失联前曾遭遇龙卷风。有消息称,飞机已坠毁在森林中,救援工作正在进行,目前事故导致的伤亡人数尚不明确。 +Oct 30, 2022 ... 中共中央对外联络部发言人胡兆明上周表示,阮富仲定于10月30日至11月2日访华。 据悉,阮富仲是在习近平成功连任中共总书记的第二十届党代会落幕后, ... +神舟十四号载人飞行任务是空间站建造阶段第二次飞行任务,也是该阶段首次载人飞行任务,航天员乘组将在轨工作生活6个月,任务主要目的为:配合问天实验舱、梦天实验舱与核心舱的交会对接和转位,完成中国空间站在轨组装建造;完成空间站舱内外设备及空间应用任务相关设施设备的安装和调试;开展空间科学实验与技术试验;进行日常维护维修等相关工作。 按计划,神舟十四号载人飞船入轨后,将采用自主快速交会对接模式,对接于天和核心舱径向端口,与天和核心舱及天舟三号、天舟四号货运飞船形成组合体。 +而2022年的考研报名人数457万人,这个基数已经相当高了,所以,2023年在这个基础上再大幅增长的可能性就非常小了。 毕竟,往届生就那么多,应届生也就那么多,真正满足考研条件的毕业生并不多。 综合以上分析,2023年的考研报名人数477万人,一点也不算少。 最后,还想给2023年考研的同学说的是,不管考研报名人数有多少,最终能被录取的考生每年就那么多,录取率可能都不到30%,所以,还是要认真准备才行。 在这里也提前预祝2023考研的同学成功上岸! 感谢您的阅读,喜欢文章就点赞转发一下吧! +。“维利”时尚的造型和“会踢球的狮子”这一噱头,吸引大批观众,吉祥物因为亲和力、符号性,成了日后世界杯的“活名片”。 吉祥物最开始定位的对象是小朋友,设计上更侧重返璞归真的童趣。不少主办方将当地独特的地域人文与足球元素融合,较多用卡通化的设计思路,以打破不同文化之间的壁垒。 2022年卡塔尔世界杯吉祥物“拉伊卜”,名字来源于阿拉伯单词“Laeeb”,在阿拉伯语中表示“超级技术球员”。 +中国新闻周刊希望用这份理性而向上的2021“年度影响力人物”榜单,串联起过去一年的故事与荣耀、精彩与遗憾,携手大家一起迈向充满未知却承载希望的2022年新征程。 +2022浙江省第二届国际龙舟公开赛暨温州第九届龙舟系列赛(总决赛)共有32支队伍参赛,比赛分为4个组别,分别是公开组22人龙舟8支队伍、公开组12人龙舟8支队伍、邀请组12人龙舟8支队伍、乡镇(街道)组12人龙舟8支队伍,比赛项目为500米直道赛。来自我省杭州、宁波、丽水、台州等地的龙舟队报名参赛,温州市龙舟协会选派50名经验丰富的裁判执裁本次赛事。 +中国互联网络信息中心(CNNIC)31日在京发布了第50次《中国互联网络发展状况统计报告》(以下简称《报告》)。《报告》显示,截至2022年6月,我国网民规模为10.51亿,互联网普及率达74.4%。 在网络基础资源方面,截至2022年6月,我国域名总数为3380万个,“.CN”域名数为1786万个,IPv6地址数量为63079块/32,较2021年12月增长0.04%;在信息基础设施建设方面,截至2022年6月,我国千兆光网具备覆盖超过4亿户家庭的能力,已累计建成开通5G基站185.4万个。 我国网民规模持续提升,网络接入环境更加多元。《报告》显示,我国网民规模较2021年12月新增网民1919万,互联网普及率较2021年12月提升1. +43公斤/亩,每亩产量比上年增加4.56公斤,增长1.0%;秋粮单产为359.70公斤/亩,每亩产量比上年减少44.85公斤,下降11.1%。小麦平均单产为445.50公斤/亩,每亩产量比上年增加4.50公斤,增长1.0%;玉米平均单产为354.97公斤/亩,每亩产量比上年减少54.03公斤,下降13.2%。   今年粮食总产量比上年减少56.32亿斤,下降4.1%。2021年,全省粮食总产量减少主要因秋粮减产所致。夏粮增加9.89亿斤,但秋粮减产66.21亿斤,全年减产56.32亿斤,下降4.1%,河南粮食总产量在全国仍位居第二位。 +此外,包括金鸡电影学术峰会、金鸡电影导演论坛、金鸡电影演员论坛、儿童电影百年论坛、数字影视产业高峰论坛和第四届金鸡电影创投大会等多场学术论坛活动也将在本届电影节期间举办。 +第四轮,对阵世界排名第10位的弗里茨,张之臻又是在先丢一盘的情况下把比赛拖进了决胜盘,而在决胜盘中,张之臻更是连续挽救3个赛点,并最终以2-1(3-6,7-6(5),7-6(8))险胜晋级8强,创造了中国男网在大师赛上的最好成绩,而接下来张之臻还有机会超越吴易昺,刷新中国男网历史最高世界排名。 +2023年01月10日 15:55:31 来源:中国新闻网   中新社台北1月10日电 台湾当局有关部门10日公布的最新统计数据显示,截至2022年12月底,台湾人口总数为23264640人,连续三年负增长。2022年全年累计出生人口数为138986人,创历史新低。   综合中央社、《经济日报》等台湾媒体报道,2020年,台湾人口首度出现负增长。2022年人口总数较2021年的23375314人,再减少110674人。   统计显示,台湾2022年全年出生人数比2021年的153820人,再减少14834人,2022年死亡人数则为207230人。   受生肖民俗影响,部分台湾民众在农历虎年生小孩的意愿较低。 +23万人次,航班起降31.46万架次,货邮吞吐量约21.54万吨。目前,在大兴机场运营已有南航、东航、国航、中联航、厦航、首都航、河北航、吉祥航、重庆航等26家国内航空运输企业,2021年8月运营国内航线145条,通达全国135个航点。   大兴机场运行管理部副总经理罗东介绍,2019年9月开航之初,大兴机场航班时刻为96个,现在航班时刻已达980个。随着即将迎来新的一季,大兴机场还将继续加密时刻,航班时刻将超过1000个。   旅客吞吐量也在快速增加。 +香港人均GDP已经达到比较高的水平,要保持很高的增长水平是比较难的,这点和东南亚其他国家不同,比如马来西亚和印度尼西亚经济在过去25年中依然整体保持了较高的增速,马来西亚从1997年到2021年增长了将近3倍,印度尼西亚更是增长了450%,但是印度尼西亚人均GDP才4355美元,马来西亚人均GDP为1.14万美元。 +由于全球性的2019冠状病毒病疫情和中国内地政府的疫情管制和旅行限制措施,以及WTA官方因彭帅事件对2022年中国赛事的抵制,中国网球公开赛2020-2022年连续三年取消举办。[3] 2023年6月12日,组委会宣布2023年中网阔别三年后回归,赛事时长由11天扩展为13天,男子比赛和女子比赛错时先后举办,男子赛事决赛在周三举行,女子赛事决赛在周日举行。同时青少年赛事升级为ITF青少年巡回赛J300赛事,总奖金预计达到1162万美元,其中ATP总奖金为371.6万美元,WTA赛事的总奖金近800万美元,为同级别赛事最高。 +接下來,該機將還會前往中國大陸各個主要機場,完成排練、定期檢修、人員驗收與經營成本等與航司規範相關的項目,東航並預計在2023年初能滿足主管方營運C919的資質要求[55]。根據東航內部的計畫,預計在明年春运时投入首航,而且將打破只飛區域航線,C919一開始就會以服務一二線城市旅客為主,北上廣深為首的市民將迎來全國產飛機執飛的航線[56]。 +2016年12月2日,北京信使未来科技创新中心、宁波梅山保税港区众咖投资管理合伙企业、深圳哈工智慧柒号投资合伙企业、深圳正轩前海成长科技投资基金、深圳正轩空间信息技术开发合伙企业成为零壹空间新一轮投资人。   2018年2月,深圳招商局创新投资基金中心、深圳南山鸿泰股权投资基金合伙企业、深圳市前海千意智合十二期投资合伙企业、深圳市万得空间技术合伙企业、深圳市正轩太空科技合伙企业、宁波乾立华钰投资中心等六名股东成为新的投资人。 +剧中陆溪云在亲情、爱情、物欲、家国梦想中的傲骨抉择,铺展出70年来代代冰雪健儿“不负少年志、燃梦冰雪间”、前赴后继将中国冬季运动推上世界舞台之巅的壮美诗篇。 丰富的表演形式,无与伦比的冰上盛宴 《踏冰逐梦》融合了花样滑冰、舞剧、冰上杂技等多种表演形式,结合当代舞台的多重特效,打造出一部前所未见的舞台艺术飨宴。 +203°)[9],当地时间为下午1时24分,震中附近最大烈度为麦加利地震烈度表IX(9)度。 这次地震的震源位于安那托利亚板块、阿拉伯板块和非洲板块这三块板块的交汇处附近,因此地震活动频繁。即使如此,自1970年以来,该地震震中距250公里范围内的区域仅发生过3次震级在6级以上的地震,而这些地震均发生在东安那托利亚断层附近。其中,规模最大的地震为2020年1月发生的6.7级地震。与这次地震的震中地区相比,土耳其南部的其他地区和叙利亚北部曾发生过更为严重的破坏性地震。 +文 | 杨丹 何苗 编辑 | 陈臣 2023年1月7日,为期40天的春运正式启动,首日全国发送旅客3473.6万人次。今年是对新冠病毒感染实施“乙类乙管”后的首个春运。在国新办新闻发布会上,交通运输部副部长徐成光表示,今年春运人流高峰与疫情高峰叠加,是近年来不确定性最多、情况最为复杂、困难挑战最大的一次春运。 交通运输部数据显示,春运首日全国铁路、道路、水路、民航发送旅客3473.6万人次。与疫情期间春运首日数据相比,虽不及2020年同期水平,但创下自2021年春运以来最高值。与疫情前春运首日数据相比,已恢复到2019年同期超5成。 +另一场男单半决赛,日本名将张本智和稳定出色的表现拿下比赛,以大比分4:0淘汰德国名将迪米特里·奥恰洛夫。接下来张本智和将与王楚钦争夺WTT世界杯决赛男单冠军。 (原标题:WTT世界杯半决赛:马龙不敌王楚钦 孙颖莎、陈梦会师决赛) 来源:中国新闻网 流程编辑:tf027 如遇作品内容、版权等问题,请在相关文章刊发之日起30日内与本网联系。版权侵权联系电话:010-85202353 +CBA2021-2022赛季已经于2022年4月26日结束了最后一场,很多人对于那支球队获得了冠军并不知晓,下面小编就来为大家介绍一下今年的冠军球队吧。 2021-2022赛季CBA总决赛经过激烈的争夺,最后辽宁以大比分4比0的成绩夺得了本次大赛的冠军,季后赛9战全胜,这也是辽宁队队史第二个总冠军,而且CBA的历史上能做到全胜夺冠的队伍也只有三只队伍,在辽宁之前只有八一男篮和广东男篮做多过,辽宁成为了第三个,可以看出辽宁队的球员实力都非常的强大。 +此後,马英九前往大陆地区(包括港澳),只要在出发前和回来後向总统府报备即可。 台湾总统府发言人林聿禅表示,总统府已收到马英九的出访申报并尊重其祭祖规画,了解安排后已洽相关单位,就马英九此行的安全等事宜给予必要协助,又指马英九在俄乌战争、台海局势敏感之际访问大陆,期盼他向对岸及世界展现符合国家利益与国民情感的作为。 +中新网5月12日电 北京时间12日,亚足联公布了2023年男足亚洲杯开赛时间安排,中国队的三场小组赛比赛时间也随之确定。   本届亚洲杯将在卡塔尔举行,由于当地夏季天气炎热,所以2023年亚洲杯的比赛时间为2024年1月12日至2月10日。在昨日进行的分组抽签仪式上,国足与塔吉克斯坦、黎巴嫩以及东道主卡塔尔分在A组。   比赛时间上,首场比赛,中国队对阵塔吉克斯坦。比赛将于北京时间2024年1月13日22时30分,在哈里发体育场进行。国足对阵黎巴嫩和卡塔尔的比赛,分别在2024年1月17日19时30分,以及2024年1月22日23时00分进行。 +四川省地震局表示,立即启动二级地震应急响应,成立应急指挥部,召开紧急会议,就应急处置工作做出安排部署 四川省消防救援总队泸定县前突小组 30 人赶赴震中核查灾情,甘孜、成都、德阳、乐山、雅安、眉山、资阳等7个支队共 530人地震救援力量正赶赴震中。 四川当地媒体报道,距离震中较近的泸定县民兵应急连90名民兵已第一时间赶赴受灾较为严重的得妥镇。 甘孜州称,相关部门已派出武警、消防、医疗救治、通讯电力、交通保畅等救援力量635人开展抢险工作。 +大会同期将举办首届世界职业院校技能大赛、世界职业教育产教融合线上博览会,并发布筹建世界职业技术教育发展联盟的倡议,形成“会、盟、赛、展”的职业教育国际交流合作崭新平台和范式。 “会”即世界职业技术教育发展大会。8月19日下午将举行大会开幕式和主论坛,来自18个国家的教育部长或驻华大使、部分国际组织、行业组织、知名企业和职业院校代表将发表演讲。 +与主要贸易伙伴进出口均实现稳定增长,对“一带一路”沿线国家进出口增速更快。2021年,中国对“一带一路”沿线国家进出口增长23.6%,比整体增速高2.2个百分点。 贸易方式进一步优化,一般贸易进出口占比超过六成。2021年,中国一般贸易进出口24.08万亿元,增长24.7%;加工贸易进出口8.5万亿元,增长11.1%。 外贸经营主体活力有效激发,民营企业进出口更加活跃。2021年,中国有进出口实绩企业56.7万家,增加3.6万家。其中,民营企业进出口19万亿元,增长26.7%,占48.6%,提升2个百分点。 机电产品出口、进口均保持良好增势。2021年,中国出口机电产品12.83万亿元,增长20. +晚上8点,全英默哀一分钟[150],伦敦大本钟原计划在8点整和8点01分各鸣响一次,象征默哀开始和结束,但最终由于技术原因没有鸣响[151]。国王在书面声明中感谢民众支持[152]。 伊丽莎白二世国葬在伦敦西敏寺大教堂举行[3][4],并于同日下午4时左右在温莎城堡圣乔治礼拜堂举行下葬仪式,仪式结束后女王灵柩随升降平台缓缓下降并正式完成仪式,标志著英国女王伊丽莎白二世的时代落下帷幕。 +我来泼个凉水,这个不是苹果品牌的挂绳,品牌是Incase。 (某些回答麻烦回答前看清楚...) 你愿意为了一个第三方品牌花 ¥98 么? Incase 这家公司的主要产品范围如下: Incase 在苹果官方商店还卖其他不少产品 而苹果的抛光布,则是自有品牌 在了解上述信息的情况下,你真的愿意花 ¥98 买 Incase 的挂绳么? 如果你愿意,那么大佬是真有钱人。 如果你不愿意买挂绳但愿意买抛光布,那就是品牌的力量。 如果你都不愿意,说明你是个持家的人。 +上海电视节是集评奖、市场交易与创投、论坛于一体的综合性国际电视节,一些小伙伴好奇第28届上海电视节什么时候举行、白玉兰奖什么时候颁奖,下面就让小编来给大家介绍一下,一起来看看吧。 1、举行时间 第28届上海电视节于2023年6月19日开幕,于2023年6月23日结束。 2、颁奖时间 2023白玉兰颁奖典礼将于2023年6月23日晚举办。 +·ЎеӣһиөӣгҖҒITFйқ’е°‘е№ҙе·Ўеӣһиөӣе’ҢдјҳиЎЈеә“ITFиҪ®жӨ…зҪ‘зҗғе·ЎеӣһиөӣпјҲиӢұиҜӯпјҡITF Wheelchair Tennis Tourпјүзҡ„дёҖйғЁеҲҶгҖӮжҜ”иөӣз”ұе…ЁиӢұиҚүең°зҪ‘зҗғдҝұд№җйғЁе’ҢеӣҪйҷ…зҪ‘зҗғиҒ”еҗҲдјҡдёҫеҠһгҖӮеЎһе°”з»ҙдәҡйҖүжүӢиҜәз“Ұе…ӢВ·еҫ +这个模式也让《三悦》慢慢地靠近它最终想要表达的那个主题――“向死而生”。   剧中角色的青春感、真实感,消解了话题的沉重,也让观众更加聚焦人的成长故事,获得了更好的观剧体验。   《三悦有了新工作》剧照 图/哔哩哔哩   但即便如此,仍有不少观众提出了自己对于该剧的意见。   “剧情中并没有真实地将殡仪馆的情况说清楚,是用一种刻板印象抒写另一种刻板印象。”   “太多的金句挂在嘴边,而非使用故事和表演推动剧情转折,很多地方显得生硬和做作。 +全英羽毛球公开赛收官——国羽斩获两冠两亚 北京时间3月20日凌晨,2023年全英羽毛球公开赛在伯明翰收官,中国羽毛球队闯入男单、女单和混双决赛,最终斩获男单和混双冠军。 国羽男单在本站比赛发挥出色,石宇奇半决赛2比0战胜4号种子、马来西亚名将李梓嘉,“00后”球员李诗沣2比1击败丹麦名将安东森,两人会师决赛,国羽男单时隔5年包揽冠亚军。 +索马里亚总统哈桑·谢赫·马哈茂德 在袭击发生后视察了现场并对外公布了袭击造成的死伤人数,根据马哈茂德总统公布的消息,袭击已造成110人死亡,300多人受伤,且伤亡人数仍在增加。[10],马哈茂德还下令政府为伤者提供紧急医疗救治。呼吁公众到医院献血,同时向国际社会请求医疗援助。还承诺将为受害者的孩子和过去青年党袭击的孩子提供免费教育。 [11] 马哈茂德指责伊斯兰组织青年党对袭击负责。 [9] 青年党已宣称对爆炸事件负责。[6] +加冕仪式预计11时开始,届时将演奏查尔斯亲自挑选的曲目,以及12首委托创作的曲目,其中包含纪念已故菲利普亲王(Prince Philip)创作的希腊东正教音乐。 9岁的乔治小王子(Prince George)与卡米拉的5名孙子女将成为“荣誉骑士”(page of honour)。 加冕仪式5大环节 ·承认:查尔斯将站在拥有700年历史的加冕椅(Coronation Chair)旁,英格兰教会坎特布里大主教(Archbishop of Canterbury)威尔比(Justin Welby)将主持加冕礼,将查尔斯展示给教堂内的观礼群众,宣布查尔斯为“不容质疑的国王”(undoubted King),全体高呼“天佑国王!” ,接着号角响起。 +高山滑雪运动员法伊克·阿卜迪是沙特阿拉伯历史上首位参加冬奥会的选手,不仅顺利实现了自己的冬奥梦,还准备在沙特成立一家冰雪运动培训中心。在他的北京冬奥之旅中,他参加了高山滑雪男子大回转的比赛,并以第44名完赛。   他想通过培养更多的滑雪运动员,让沙特在国际冬季运动赛场上拥有一席之地。“希望我的冬奥会经历,能为沙特乃至整个海湾地区民众打开一扇大门,激励他们更多地参与冬季体育运动。 +2023-08-07 23:46 来源:北京公积金管理中心 2023-08-07 23:45 来源:北京公积金管理中心 2023-08-07 23:42 来源:北京公积金管理中心 2023-08-07 23:39 来源:北京公积金管理中心 2023-08-07 23:25 来源:北京住房公积金管理中心  2023-08-07 23:25 来源:北京住房公积金管理中心 2023-08-05 02:27 来源:北京市延庆区住房和城乡建设委员会 2023-08-05 02:28 来源:北京市延庆区住房和城乡建设委员会 【导语】:北京家庭新能源小客车指标申请共计276823个有效编码,申请总数大于指标配置总数,详见正文。   ▶2023北京家庭新能源小客车指标有多少? +——2022年“海外中国旅游文化周”硕果累累 □ 本报见习记者 郭子腾 “真希望有机会去中国旅游,中国太美了!”“期待中国继续为全世界的非遗保护和乡村发展贡献智慧。”“古老的竹林如此宁静,美得像一幅中国画。”“中国的高铁实在太酷了!”2022年“海外中国旅游文化周”日前圆满结束,各海外中国文化中心和旅游办事处收到不少外国民众热情洋溢的留言。 今年9月至10月,由文化和旅游部指导的2022年“海外中国旅游文化周”在全球联动举办。 +中国载人航天工程办公室主任助理季启明于2021年6月16日上午在酒泉卫星发射中心举行的新闻发布会上宣布了神舟十二号载人飞行任务的飞行乘组[1]。 神舟十二号载人飞船构成包括轨道舱、返回舱和推进舱,有14个分系统。轨道舱配备有航天员在轨生活支持设备、交会对接敏感器等设备;返回舱是飞船发射和返回过程中航天员所乘坐的舱段,是飞船的“大脑”;推进舱装有推进系统、电源等,能够为飞船提供动力系统,在飞行过程中调整姿态轨道。[20] +C919飞机是我国首次按照国际通行适航标准自行研制、具有自主知识产权的喷气式干线客机,2007年立项,2017年首飞,2022年9月29日取得中国民航局型号合格证。2022年12月9日,编号为B-919A的全球首架商用C919交付中国东方航空,并经过5个多月的验证试飞和全旅客运行验证后,取得中国民航局批准,开展商业运行。 5月28日,C919飞机首次载客从上海飞北京,完成其商业运行首航。至此,翱翔蓝天的大型客机,除了代码为A的空客客机、代码为B的波音客机,新加入代码为C的国产大飞机。 +以下是英特尔官方针对财报要点进行的归纳:   其实在大众用户相对更加熟悉的半导体芯片方面,2022财年英特尔取得了不小的突破,持续推进在四年内推进五个制程节点的计划。目前,Intel 7已实现大规模量产,用于客户端和服务器端;Intel 4生产业已准备就绪,预计将随Meteor Lake处理器的推出在2023年下半年提升产能;Intel 3则依旧按计划推进中;Intel 20A和18A已经完成了测试芯片的流片工作。 +4公斤/亩),增长0.3%。  三、全国粮食总产量68285万吨(13657亿斤),比2020年增加1336万吨(267亿斤),增长2.0%。其中谷物产量63276万吨(12655亿斤),比2020年增加1602万吨(320亿斤),增长2.6%。                                                 国家统计局                   2021年12月6日   注:[1] 谷物主要包括稻谷、小麦、玉米、大麦、高粱、荞麦和燕麦等。 相关解读:【权威解读】2021年全国粮食产量再创新高           【图解】饭碗如何越端越牢,数据告诉你答案 ​ 附件: 网站地图 | 联系我们 +如果说青年时代的爱情牺牲来自于纯粹,而中老年人的爱情奉献则来自于时间馈赠的智慧和通达,在王响、龚彪两个男主角的爱情故事中,也都有出于宽厚和仁义的成全之美,他们超越了简单的占有,忍受个人的痛苦,送出掺着玻璃碴子的蜜糖,他们不以当下为准则,而以生活和历史作为尺度。   与最近热播的另一部悬疑推理剧《尘封十三载》类似,《漫长的季节》采用了倒叙与正叙掺杂,频繁来回切换的方法,有一种奇幻的不真实感。 +导演尔冬升在筹备阶段不仅阅遍所有文献资料,还走访多位“国家孩子”。经过60余年时间,原型们对童年大多只留下片段式的回忆,主创们从一个个真实的故事中抽离情感、凝练共鸣,全新创作出电影《海的尽头是草原》中的完整故事。 正因为历经如此的挖掘,才为观众带来虽距离遥远却极具代入感的作品,如映后观众评价所言:“本片就像一首来自草原的诗歌,有爱且优美,也因为有真实故事的支撑,所以格外动人。 +索马里首都汽车爆炸事件死亡人数上升至119人 当地时间10月31日,索马里政府官员表示,29日在索马里首都摩加迪沙发生的汽车炸弹爆炸导致的死亡人数已上升至119人,324人受伤,另有10人失踪,此前索马里“青年党”宣称对此次事件负责。 29日爆炸案是自2017年10月17日摩加迪沙爆炸案后,索马里遭遇的伤亡人数最大的一次袭击事件,2017年爆炸案造成至少587人死亡,316人受伤。 索马里“青年党”是与基地组织有关联的极端组织,近年来在索马里及其邻国多次发动恐怖袭击。 +2021年,塔里木油田天然气日产量突破1亿立方米,石油液体日产量冲上2万吨,油气产量达到3182万吨的历史新高,连续5年实现超百万吨增长,实现了“十四五”高质量开局。   同时,塔里木油田保民生、保公用、保重点,2021年向西气东输供气247.8亿立方米,向南疆五地州供气超50亿立方米。 (信息来源:中国石油) +为2025年世界科幻大会的举办地投票; 4.参加大会期间的世界科幻协会商务会议; 5.为2024年雨果奖、惊奇最佳新作家奖和北极星最佳青年图书奖提名投票(即使尚未成为2024年世界科幻大会的会员)。   此外,凡是2022年芝加哥世界科幻大会的会员,均享有成都世界科幻大会雨果奖的提名投票权(即使尚未成为2023年成都世界科幻大会的会员)。 +加强文明对话,尊重不同文化,杜绝在不同宗教、文化背景人群中宣扬仇恨、极端思想和文明冲突。强调反对各种形式的伊斯兰恐惧症。强调中阿两大文明为人类文明进步作出了独特贡献,愿继续倡导文明对话交流,维护世界文明多样性,摒弃对特定文明的歧视与偏见,反对“文明冲突论”。   22.强调应巩固中阿在文化、体育、旅游和新闻等领域的民间友好关系。   23.责成双方部委和机构通过中阿合作论坛执行计划及论坛其他机制落实峰会成果。 +Jan 3, 2023 ... 俄罗斯卫星通讯社北京1月3日电据香港交易及结算所有限公司官网消息,香港交易所恒生指数(Hang Seng)1月3日收盘报20145.29点,涨1.84%。 2023年1月3 ... +启动仪式上,贵州贵阳、江西赣州、浙江杭州、河南郑州、陕西西安、中国驻法兰克福旅游办事处、东京中国文化中心、人民网日本和韩国分公司9个分会场与北京主会场连线互动。来自英国、德国、意大利、法国、澳大利亚、泰国、墨西哥、埃及、尼日利亚等国嘉宾以视频形式祝贺2022年“海外中国旅游文化周”启动。启动仪式上还面向全球发布了“中国旅游课程”多语种学习平台。(记者 郑海鸥) (原标题:2022年“海外中国旅游文化周”在京启动) +截至2020年11月,只有史蒂夫·科恩(田納西州政治人物)(英语:Steve_Cohen_(politician))和吉姆·庫珀(Jim Cooper)(均為田納西州民主黨人)兩位眾議員宣佈了他們在2022年再次參選的計畫。[21]埃迪·伯尼斯·約翰遜(Eddie Bernice Johnson)(德克薩斯州民主黨人)宣佈她將退休。這些競選的現任者是在2020年眾議院選舉和隨後的特別選舉中確定的。由於這些選舉將是2020年後人口普查重新劃分地區後的首次選舉,一些地區可能缺少一名現任者或有多名現任者。 +C919飞机基本型全经济级布局为168座,混合级布局为158座,标准设计航程为4075-5555公里,相当于可以一口气从长春飞到拉萨,属于大客中的入门级机型。   C919到底啥意思?   其实C919的全称是“COMAC919”。   “COMAC”是中国商用飞机有限责任公司英文名称的简写,“C”是COMAC的第一个字母,也是中国的英文名称China的第一个字母。   C919,第一个“9”寓意天长地久、经久不衰,“19”代表我的最大载客量是190座。 +2023-07-27 15:57 来源:本地宝综合 2023-07-27 14:36 来源:本地宝综合 2023-07-27 14:41 来源:本地宝综合 2023-07-27 14:41 来源:本地宝综合 2023-07-27 11:53 来源:本地宝综合 2023-07-27 11:46 来源:本地宝综合 【导语】:2022金鹰奖最佳男演员提名名单:王一博、肖战、白敬亭、雷佳音、朱一龙、张嘉益、段奕宏、陈建斌等。 +同时,绿党、联合澳大利亚党、一国党、其他小党派和一些独立人士也将参加选举。 选举当晚,点票结果显示工党比自由-国家党联盟赢得更多席位,成功组建澳洲下届政府,并确定工党获得众议院多数。莫里森当晚承认败选,致电工党党魁阿尔巴尼斯表示祝贺,并表示将辞任自由党党魁。[2][3]此外这次选举中第三党获大胜。除了得票率上升以外,更有不少无党籍人士在这次选举中赢得议席,有评论指这或为澳洲两党制时代的结束[4]。 +[11][12]2021年2月,据国家电影局备案立项公示,《流浪地球2》已获准拍摄正式立项。[13]2022年1月,郭帆在接受央视电影频道采访时透露 《流浪地球2》的筹备细节和看点,“为了弥补前作的不足和遗憾,电影在故事层面上会有更多的科幻立意,由中科院多个学科专家组成的顾问团帮助完善了十几万字的世界观设定;而在视效等制作层面上增加多样性,有着丰富多样的造型、场景设计,用细节增加世界丰富度”。 +2001年8月时任总统金大中宣布将自主研制战斗机(KF-X),时隔21年, KF-21首次成功飞行。之所以耗时21年,不仅是因为技术开发的困难,还因为在7次“项目可行性调查”中,有6次得出“不可行性”的结论。理由是,虽然花费的资金太多,但事业能否成功还是未知数,而且与投入费用相比,无法赚取利润。花了9年时间才得出项目可行性的结论,而且项目的进行也总是反反复复。 军方和专家们最初就对自主研发战斗机项目本身持怀疑态度。 +人均GDP达到85698元,按年均汇率计算达到12741美元,连续两年保持在1.2万美元以上。2022年末外汇储备余额达到31277亿美元,稳居世界第一。 国民经济运行总体稳定。2022年,中国经济增速达3%,快于多数国际主要经济体。全年城镇新增就业1206万人,超额完成1100万的预期目标。在全球粮食和能源价格大幅上涨、输入性通胀压力较大的情况下,我国价格形势保持平稳,CPI全年上涨2%。 产业发展基础夯实。农业增产丰收,2022年中国粮食总产量达到13731亿斤,连续8年稳定在1.3万亿斤以上。工业生产持续发展,2022年全部工业增加值达到40.2万亿元,制造业增加值达到33. +根据这个思路,以后的第四艘、第五艘可能命名为“广东”、“江苏”,用来纪念鸦片战争和南京条约。当然,以上种种都是军迷的猜测,真正的命名也不是我等决定的。我们只要知道,祖国的海军越来越强,相信以后陆续有更多的航母下水形成战斗力,我辈将有幸见证海军“走向深蓝”,见证大国复兴! 又展劲旅之伟姿,执干戈以咤风云;再炫亮剑之锋锐,铸忠诚以灭鬼蜮。拥有3艘航空母舰的中国海军未来将大战鹏程,扬我国威! +安倍晋三当时正在为即将举行的第26届日本参议院议员通常选举发表演讲,奈良警方称刺客用一把土制手枪从背后朝他心脏射了两枪[4][5][6]。安倍晋三因胸部受伤被立即送往当地奈良县立医科大学附属医院抢救。被警方当场逮捕的疑凶是41岁的奈良市男子山上彻也[7][8],他曾在日本海上自卫队服役[9][10],原以杀人未遂被逮捕,安倍送医不治后,以杀人罪被移送奈良地方检控厅。 +2022-01-28 00:15:21 更多资讯 关注我们 简 讯 宝马集团2021年全球销量为252万辆, 电动车销量大涨70.4% 2021年,宝马集团向全球客户交付了252万辆宝马、MINI和劳斯莱斯汽车,同比增长8.4%。其中,宝马品牌销量创历史新高,达到221万辆,同比增长9.1%,成为全球高端汽车市场的领军品牌。此外,宝马集团纯电动汽车销量同比增长133.2%,达到10.3万辆。 +2023年温布尔登网球锦标赛女子单打比赛,是2023年温布尔登网球锦标赛的其中一个比赛项目。伊莲娜·莱巴金娜是卫冕冠军,[1]但她在1/4决赛中输给本届亚军昂丝·加博。 马尔凯塔·万卓索娃是本届比赛的冠军,也是公开赛年代以来首位打入温网女单决赛的非种子选手,也是她继2019年法网后再次进入大满贯决赛,世界排名第42位的她也是自2018年温布顿网球锦标赛的塞雷娜·威廉姆斯(第181位)以来打入温网女单决赛排名最低的选手。 +但由于澳大利亚严格的防疫政策,德约科维奇最终无法参加2022年澳大利亚网球公开赛并卫冕男单冠军头衔,无法向第21座大满贯冠军奖杯发起冲击,拉斐尔·纳达尔将会继续挑战这个记录并最终挑战成功,同时他也是本届赛事唯一一个曾捧起澳网冠军奖杯的男选手。大坂直美在第三轮中被淘汰。 2022年1月4日,卫冕冠军诺瓦克·乔科维奇宣布,他可以参加澳大利亚网球公开赛。 +双方此前交手过两次,各胜1场: 2022马德里半决赛:阿尔卡拉斯6-7(5)、7-5、7-6(5)德约科维奇 2023法网男单半决赛:德约科维奇6-3、5-7、6-1、6-1阿尔卡拉斯 吧友们,你认为谁将问鼎2023年温网男单冠军? +5G手机 Apple 苹果 iPhone 14 Pro系列 A2892 5G手机 Apple 苹果 iPhone 14系列 A2884 5G手机 Apple 苹果 iPhone 14系列 A2884 5G手机 Apple 苹果 iPhone 13 Pro系列 A2639国行版 5G手机 Apple 苹果 iPhone 13 Pro系列 A2639国行版 5G手机 Apple 苹果 iPhone X 4G手机 Apple 苹果 iPhone X 4G手机 Apple 苹果 iPhone XS Max 4G手机 Apple 苹果 iPhone XS Max 4G手机 Apple 苹果 iPhone 13 Pro Max系列 A2644国行版 5G手机 Apple 苹果 iPhone 13 Pro Max系列 A2644国行版 5G手机 Apple 苹果 iPhone 8 Plus 4G手机 Apple 苹果 iPhone 8 Plus 4G手机 Apple 苹果 iPhone SE系列 A2298国行版 手机 Apple 苹果 iPhone SE系列 A2298国行版 手机 Apple 苹果 iPhone 8 4G手机 Apple 苹果 iPhone 8 4G手机 Apple 苹果 iPhone 7 4G手机 Apple 苹果 iPhone 7 4G手机 Apple 苹果 iPhone 12 Pro Max系列 A2412国行版 手机 Apple � +图片来源:图虫创意 蓝鲸TMT频道2月23日讯,今日,网易公司发布2022年第四季度及全年财报。财报显示,网易2022年Q4营收为254亿元(人民币,下同),同比增长4%,非公认会计准则下,归属于公司股东的持续经营净利润48亿元,同比下降27%;2022年总营收为965亿元,同比增长10%,非公认会计准则下,归属于公司股东的持续经营净利润228亿元,同比增长15%。 具体到各项业务,2022年第四季度,网络游戏服务净收入为191亿元,同比增长1.6%;有道净收入为15亿元,同比增长9%;云音乐净收入为24亿元,同比增长25.8%;创新业务和其他净收入为24亿元,同比增长3.4%。 +《七人乐队》:七位港片大导,诉说七十年香港沧桑变化 洪金宝的动作展现,许鞍华的情感穿插,谭家明的偏执爱恋,袁和平的武德人情,杜琪峰的黑色讽刺,林岭东的无止愤怒,以及徐克的天马行空。但凡对这些大导演们有所关注,每当一段影像出来时,便都能判断出这是谁的作品。 《七人乐队》首映 ★7月25日,电影《七人乐队》在北京举行了“致敬胶片”首映礼。该片由徐克、许鞍华、杜琪峰等七位香港电影人联合执导,每人在片中执导一部短片,共计7部短片。 +2021年末,全国人口为141260万人,比2020年末增加48万人;全年出生人口1062万人,比2020年减少140万人;死亡人口1014万人,比2020年增加16万人。人口出生率为7.52‰,比2020年下降1.00个千分点;人口死亡率为7.18‰,微升0.11个千分点。   2021年人口自然增长率为0.34‰,比2020年下降1.11个千分点。人口增长持续放缓是由于出生人口继续减少,这主要受两方面因素影响。一是育龄妇女人数持续减少。2021年15—49岁育龄妇女比2020年减少约500万人,其中21—35岁育龄妇女减少约300万人。二是生育水平继续下降。 +在 GSM8K 数据集上(小学级别的问题),模型达到了 20% 的准确率。实验中 OpenAI 使用了微调和验证这两种技术,结果表明模型可以看到很多自身错误的例子,这一发现很有价值。 当时,OpenAI 的模型需要在 100 倍以上的数据上进行训练,才能在 GSM8K 上达到 80% 的准确率。但在今年 6 月,谷歌发布了 Minerva,达到 78% 的准确率。这一结果超出了预期,研究者表示,比预想的时间来的更快。 论文地址:https://arxiv.org/pdf/2206.14858.pdf Minerva 基于谷歌自研的 Pathways 语言模型 (PaLM),具有更多的数学数据集,包含 arXiv、 LaTeX 等数学格式。Minerva 还采用了其他策略,在思维链提示(chain-of-thought prompting)中,Minerva 将更大的问题分解成小块。 +浪姐4每周什么时间播出 +最终,阿尔菲安/阿德里安托21-13取得决胜局的胜利,夺得男双冠军。 至此,2023年世界羽联世界巡回赛马来西亚公开赛圆满落幕。中国羽毛球队延续了在双打项目上的强势,但单打项目还需总结经验,提高技战术水平,而安赛龙和山口茜继续着他们对男单女单的统治。祝贺所有取得优异成绩的选手们,感谢大家五天的陪伴。锁定Olympics.com,时刻关注羽坛动态。 +来源:财经网 2022-01-12 20:22:26 1月12日,财经网汽车讯,截至今日,宝马、奔驰、奥迪2021年的全年销量均已公布。宝马位列第一,全球销量2,213,795辆,达历史新高,同比增长9.1%。奔驰2021年全球销量2,093,476辆,同比下跌5%。奥迪2021年全球销量1,680,512辆,同比下滑0.7%。 从全球纯电动车型销量来看,宝马纯电动车销量103,855辆,同比增长133.2%。奔驰EQ系列纯电动销量48,936辆,奥迪纯电动车型销量达81,894辆。 聚焦中国市场,宝马2021年销量依然超越奔驰奥迪,稳居传统豪华车品牌首位。 +背后的原因或许是,2022年太特别了—— 任何一个问题放在以前,都是大事件,当它们叠加在一起,任谁都会焦头烂额,可能更需要全球政治领袖们坐在圆桌前申明立场、达成妥协,拿出方案。 特别之年举行的特别峰会,都有哪些看点?BBC中文为你逐一梳理。 G20全称为“Group of Twenty”,意思是“二十国集团”。G20是世界上经济规模最大、增长最快的国家领导人召开的年度会议,其成员国GDP总量占世界GDP的85%,人口占全球总人口三分之二。 G20峰会没有固定的工作人员。每年12月,G20都会选出轮值主席国,负责举办下届峰会以及明年的一些部长级会议。 +3月10日,中国人民政治协商会议第十三届全国委员会第五次会议在北京人民大会堂闭幕。新华社记者 翟健岚 摄 +澳大利亚 v 丹麦 突尼西亚 v 法国 德国 v 日本 西班牙 v 哥斯达黎加 日本 v 哥斯达黎加 西班牙 v 德国 日本 v 西班牙 哥斯达黎加 v 德国 摩洛哥 v 克罗地亚 比利时 v 加拿大 比利时 v 摩洛哥 克罗地亚 v 加拿大 克罗地亚 v 比利时 加拿大 v 摩洛哥 瑞士 v 喀麦隆 巴西 v 塞尔维亚 喀麦隆 v 塞尔维亚 巴西 v 瑞士 塞尔维亚 v 瑞士 +但近日已见积极加仓港股,再加上北水及外资的持续流入,已经将恒指推至近6个月高位。相信新年假期回来,绝对有能力试冲25000或以上上。   午后A股市场继续上午升势,维持在上行轨道上。但仅徘徊在窄幅区间内,最后上证升0.76%,深证及创业板分别升0.57%及0.56%,齐再升至近高位附近收市。人民银行公布2023年1月份的贷款市场报价利率LPR齐维持不变。1年期3.65%,而5年期4.3%。并连续5个月不变。日前人民银行联同银保监齐公布,决定建立首套房屋按揭贷款利率的调整机制。 +2022年7月3日,在陝西渭南機場召開總結大會,宣布六架C919試飛測試工作全數完成,慶祝階段性收官,獲得資格後的下一步,是將會朝取證方向攻關。[43]2022年8月1日,中国商飞公告C919完成取证试飞,接下來如果已考取成功,就是等待正式確認的發照。[44][45]媒體稱9月中左右,中國民航局完成核定後將會立即頒發適航證[46] 2022年9月29日,C919飞机获得中国民航局颁发的型号合格证。 +而且习近平自己也在周五南下广州,继续和马克龙得见面,据统计,这次马克龙访华期间,与习近平面对面交谈的时间可能超多6个小时,足以显示中方对法国总统此行的重视,在美中关系恶化得背景下,纽约时报认为,“这种特殊得待遇相当于一个严肃得外交意图声明”。而马克龙在和中国国家领导人见面时对方也多次提到这是习近平第三次当选国家主席后首位受到接待的西方大国领导。 在大学与中国青年见面会结束后,习近平邀请马克龙到广东省委书记的官邸饮茶,习近平说这是他父亲在担任广东省委书记时的住所,对他有特别的意义。 +成都大运会火炬:          成都大运会火炬“蓉火”取成都的简称“蓉”,同时寓有“融合”“包容”之意。火炬运用多彩渐变的大运会主视觉色块,将朱红、明黄、翠绿、湖蓝四个渐变色整合起来,又呈现成都热情、活力、时尚的多彩生活与大学生的斑斓青春。     成都大运会奖牌:          成都大运会奖牌以“蓉光”为名,谐音为“荣光”,寓意荣耀、光彩,寄托对大运健儿在成都青春展翅、乘梦而行的美好期许。 +暂时没有添加xgp的艾尔登法环 到目前为止,2022年10月18日,艾尔登法环还没有推出xgp平台,而这款游戏现在只推出了PC(Steam)、XBOXONE、PS4和PS5平台,官方没有发布关于在线xgp平台的消息,如果官方在线xgp平台将发布公告,玩家可以更加关注官方公告。 等待着你 From Software公司新游戏艾尔登法环于2022年2月25日正式在PS5、PS4、Xbox、Steam平台发售。而不同平台和不同区服以及不同版本的价格都是不同的。就steam平台而言,艾尔登法环国区标准版价格为298元,数字豪华版为398元。 +当时刘超发现,这些唱歌的孩子们总是很想跟她说话,但又不太好意思,很害羞。于是,刘超用孩子们最熟悉的方式发出邀请:“那咱们要不然唱个歌?”然后孩子们就围在她身边唱歌,她觉得很治愈。久而久之,孩子们唱着唱着,她心想:“那我们要不然成立一个合唱团?”因为刘超小时候也学过唱歌,她觉得这个目标应该能实现,于是她下定决心,一定要在学校组建一个合唱团,让这些爱唱歌的孩子们能有一个舞台。 2020年9月,喜德县中坝村成立了第一所公立小学。2020年10月左右,果果合唱团成立。 +据法新社报道,国际足联主席因凡蒂诺近日宣布,2023年女足世界杯总奖金将提升至1.52亿美元(约合人民币10.47亿元),是2019年女足世界杯总奖金的3倍多。不过,与2022年男足世界杯4.4亿美元的总奖金相比,仍有很大差距。 本届女足世界杯将在澳大利亚和新西兰举办,7月20日开赛。 专题 最热新闻 精彩推荐 +我国城镇化仍有较大提升空间 从国际经验看,在城镇化率达到60%以后的10多年仍保持较快的速度,当城镇化率达到70%以后增速将明显下降。2021年,我国人均GDP达到12551美元,处于中高收入国家行列;常住人口城镇化率为64.72%,而户籍人口城镇化率仅为46.7%,均低于中高收入国家的平均水平(68.38%),更低于高收入国家的平均水平(81.48%)。按照城镇化率保持每年1个百分点的速度估算,5年后我国常住人口城镇化率将达到70%左右,10年后将达到75%左右。 2. +2018年女篮世界杯,姑娘们战胜了日本队和加拿大队;2019年女篮亚洲杯,中国女篮战胜过世界亚军澳大利亚队;2020年东京奥运会落选赛3战全胜,其中第二场击败了当时的“欧洲之王”西班牙队;2020年东京奥运会,中国女篮赢过比利时队和澳大利亚队,小组赛3战全胜;2022年世界杯预选赛,中国女篮击败马里、尼日利亚、法国,挺进世界杯正赛。 尤其是在2020年东京奥运会落选赛,中国女篮3战全胜,用这样的成绩为正在齐心协力抗击新冠肺炎疫情的国人带来了信心和鼓励。 +但在近几年,除了美国队以外,中国女篮对阵世界排名前10的其他球队均有胜绩,具备了争夺奖牌的实力。 国际篮联也看好中国女篮在本届世界杯赛上的前景。在其最新公布的世界杯实力榜上,中国女篮仅次于美国队和澳大利亚位居第三(上一期榜单,中国队在美国队之后名列第二);在其官网评选的本届赛事值得关注的20位球员中,中国队“双塔”上榜,其中李月汝高居第5位,韩旭则名列第17位。 中国女篮主帅郑薇在接受媒体采访时表示,中国女篮在欧洲拉练的每场比赛中都表现出了进步,她相信队伍会越来越好。 +另一位航空业分析师亚历克斯·马克拉斯(Alex Macheras)当时对BBC国际台(BBC World Service)说:“我们不能归咎于天气,因为当时天气良好。飞机没发出紧张或求救信号,没有发出7700或7500代码,也就是紧急情况或被劫持。我们实在完全不知道发生了什么事。” MU5735航班的飞行员组成是另一主要讨论焦点。东航云南公司董事长孙世英曾公布,机长、副驾驶与观察员的飞行时数分别是6709小时、31769小时和556小时,并强调“三位飞行员的飞行执照和健康证都在有效期内,健康状况良好、飞行经历完备”,“平时的表现也都是很好的,家庭情况也都比较和睦”。 +经文化和旅游部数据中心测算,2022年国庆节假期7天,全国国内旅游出游4.22亿人次,同比减少18.2%,按可比口径恢复至2019年同期的60.7%。实现国内旅游收入2872.1亿元,同比减少26.2%,恢复至2019年同期的44.2%。全国文化和旅游假日市场总体安全平稳有序,呈现以下特点: 一、优秀文化产品和优质旅游产品供给丰富,满足群众假期需求 在落实好疫情防控要求前提下,国庆节假期,全国各级文化馆组织活动13940场,参与人次5927.48万,共有10801家A级旅游景区正常开放,占A级景区总数的75%。 +IT之家了解到,动画版《三体》在B站播出界面的信息显示,每周六 11:00 更新 1 集,首集免费,到第 2~4 集大会员抢先 1 集,第 5 集起则只有大会员专享,长安汽车、惠普笔记本、ROKID、南孚 4 个品牌在三体动画投放了广告。 据悉,《三体》动画还将在海外发行,B站通过与国际机构 CAA 达成合作,后续将推动《三体》动画在奈飞、亚马逊、迪士尼等流媒体平台上线。 广告声明:文内含有的对外跳转链接(包括不限于超链接、二维码、口令等形式),用于传递更多信息,节省甄选时间,结果仅供参考,IT之家所有文章均包含本声明。 软媒旗下网站: IT之家 +对耶伦上述言论,上海复旦大学国际问题研究院院长吴心伯称,耶伦访华让中美经贸团队有了一次实质性交流,让双方更好了解彼此观点,为下一步互动打下基础。不过,他同时也表示,美中能解决多少彼此之间的问题,这得看双方的政治意愿。(完) 相关文章 近期热门 我要评论 发表评论 热门评论 继续加载... +进入:2023年北京高考查分官网入口   北京高考工作日程安排   高考评卷工作:6月8日至24日   高考成绩公布:6月25日   本科志愿填报:6月27日至7月1日   本科批次录取:7月6日至7月21日   专科志愿填报:7月21日至22日   专科批次录取:7月23日至29日 ① 凡本站注明“稿件来源:中国教育在线”的所有文字、图片和音视频稿件,版权均属本网所有,任何媒体、网站或个人未经本网协议授权不得转载、链接、转贴或以其他方式复制发表。已经本站协议授权的媒体、网站,在下载使用时必须注明“稿件来源:中国教育在线”,违者本站将依法追究责任。 +小米13系列机型是小米在2022年下半年即将发布的智能手机,其搭载的骁龙8gen2处理器已经受到了不少用户们的期待了,毕竟这是高通最新发布的一款处理器,可以称得上是下半年安卓处理器领域最好的了,但发布时间一直没有公布,这可急坏了很多小米用户的了,但就在最近小米13的发布时间被泄露了,感兴趣的小伙伴们快来看看吧! 小米下代旗舰手机小米13已经完成入网,就等发布会就可以开售了,近日博主熊猫很禿然爆料了小米13的发布信息,小米13系列手机将于12月1日也就下周四发布,但并没有说是否首发,小米官方的海报暂时也只是说“率先发布”。 +2022年俄烏戰爭後,瓦格纳集团已经明显超出了一般雇佣兵组织的范畴,不光装备各种俄系现役武器装备,如BM-21“冰雹”,BM-27“飓风”(英语:BM-27 Uragan),鎧甲-S1彈炮合一近程防空系统,还拥有自己内部独特的无名墓地、纪念碑以及勋章体系。 +届时将有来自120余个国家和地区的各国政府、国际组织、行业机构、中外互联网企业、高校智库的近2000位代表,以线下或线上形式,共同围绕大会主题展开交流,为网络空间命运共同体建设献智献策。 同时,大会将紧扣主题,围绕合作与发展、技术与产业、人文与社会、治理与安全四大板块,就全球网络空间焦点热点议题设置“合作与发展”“科技与产业”“人文与社会”“治理与安全”4个板块共计20个分论坛。 +【导语】:北京台春晚官方微博于2023年1月3日公布北京广播电视台春节联欢晚会吉祥物为“兔小蕊”。   2023年北京卫视春晚吉祥物是什么?   吉祥物是“兔小蕊”。      兔小蕊官方图片设计:点击查看   主视觉海报:   春晚主视觉海报则是围绕“共赴春日之约,奔赴新征程”延展而生。海报中是由极具传统韵味的卷轴与春日花朵相融合,好似花瓣一样的卷轴磅礴展开,上面描绘着万里长城、中国空间站、北京广播电视台办公楼、北京雨燕等相关元素,将新时代的美好光景一一展现。 +2023年全英羽毛球公開賽為第113屆全英羽毛球公開錦標赛,是2023年世界羽聯世界巡迴賽的其中一站,屬於第二級別(超級1000賽)賽事。本屆賽事於2023年3月14日至3月19日在英格蘭的國家室內體育館舉行,並獲得優乃克贊助,總獎金為125萬美元[1]。 賽事包括:男子單打、女子單打、男子雙打、女子雙打及混合雙打五個項目,只設主賽(Main Draw)而不設預賽(Qualifying Rounds)[1]。 大會公布的日程如下[1]: +RCEP(Regional Comprehensive Economic Partnership),即区域全面经济伙伴关系协定   RCEP是Regional Comprehensive Economic Partnership的缩写,即区域全面经济伙伴关系协定,RCEP由东盟十国发起,邀请中国、日本、韩国、澳大利亚、新西兰、印度共同参加(“10+6”),通过削减关税及非关税壁垒,建立16国统一市场的自由贸易协定。   RCEP是东盟国家近年来首次提出,并以东盟为主导的区域经济一体化合作,是成员国间相互开放市场、实施区域经济一体化的组织形式。RCEP主要成员国计划包括与东盟已经签署自由贸易协定的国家,即中国、日本、韩国、澳大利亚、新西兰、印度。 +阿根廷国家足球队目前在世界杯历史总积分榜上排名第三,分别在1978年、1986年与2022年夺冠,此外在1930年、1990年和2014年进入决赛。另外在美洲杯上,与乌拉圭并列,获得过15次冠军(1921年、1925年、1927年、1929年、1937年、1941年、1945年、1946年、1947年、1955年、1957年、1959年 (阿根廷)、1991年、1993年、2021年),以及获得过十四次亚军(1916年、1917年、1920年、1923年、1924年、1926年、1935年、1942年、1959年 (厄瓜多尔)、1967年、2004年、2007年、2015年和2016年)。 +88亿元,但2022年一季度票房同比增速下滑,基数效应下,2023年一季度票房增速有望增长。 综合国泰君安香港、万联证券等研报观点,2023年春节档总票房(含服务费)预计在80亿元-90亿元区间。万联证券分析称,防疫政策优化+预售票价略微下降+观影热情高涨等多重利好驱动春节档表现,2023年春节档票房有望创造近几年新高。 +而为了能够达到均衡模式,小米MIX4内部搭载了3D石墨烯均温板,用石墨烯制成280微米厚度的3D石墨烯均温板,导热面积搞到1206平方毫米。 Xiaomi MIX 4正面是一块6.67英寸OLED材质屏幕,配有陶瓷白、陶瓷黑和影青灰三款颜色,高度约162.65毫米,宽度约75.35毫米,厚度约8.02毫米,重量约225克。 Xiaomi MIX 4采用高通骁龙888Plus八核处理器;摄像头总数四摄像头(后三),后置摄像头为1. +这也是他继成都团体世锦赛冠军、WTT澳门公开赛冠军之后,在一个月时间里收获的第三冠。 +另外,无论从德国要到多少钱,波兰都会交给美国(美军基地由波兰买单,总统杜达2018年就承诺过)。   波兰要趁着当前的局势,将德国压下去,无论是政治还是军事方面。   然后向俄罗斯提出索赔,将俄罗斯关在欧洲大门之外。   俄罗斯之前说了:波兰这种做法,是对牺牲在解放波兰战线的红军战士们的亵渎。   但德国目前非常被动,软的不行,硬的也不行。 +✨圆满完成神舟十三号载人飞行任务的航天员翟志刚、王亚平、叶光富,于2022年4月16日下午乘坐任务飞机平安抵达北京。空间站阶段飞行任务总指挥部领导和成员到机场迎接。 ✨3名航天员抵京后将进入医学隔离期,进行全面的医学检查和健康评估,并安排休养,调整从太空失重 期待神舟十三号能够安全回家 据报道,神舟十三号载人飞船已完成全部既定任务,将于近日择机撤离空间站核心舱组合体,返回东风着陆场。目前,神舟十三号乘组已做好飞船撤离前的各项准备,东风着陆场及工程相关系统正在开展迎接航天员返回的各项准备。 +速度与激情10什么时候下映 +《满江红》总票房破26亿,打破20项纪录,获得99项里程碑成就,包括中国影史春节档剧情片票房冠军、2023年春节档票房冠军、2023年春节档猫眼购票评分冠军。 《流浪地球2》总票房破22亿,打破36项纪录,获得91项里程碑成就,包括中国影史科幻片首映日票房冠军、中国影史灾难片首映日票房冠军、中国影史春节档冒险片首映日票房冠军。 《熊出没伴我熊芯”》累计总票房7. +[3][4]动画制作组依改编部分最初制定了三种拍摄计划,最终采纳了围绕《三体II:黑暗森林》重点内容展开的方案。为突出以中国内容为主的设定,动画在语言和场景上模糊了国别之分,并通过通过动画师手K关键帧的方式制作人物面部表演。[5] 动画在2022年10月30日的发布会上定于同年12月3日在bilibili播出[6],但因中華人民共和國前最高領導人江泽民去世而延期至2022年12月10日,首播兩集[7][8]。2023年2月16日,动画宣布暂停更新至3月4日,但未透露延期原因。[9] 《三體》開播三天後,播放量超過1.3億人次[10]。 +当时《重生》的剧情是跟《白夜追凶》有勾连的,就请他以关队的造型客串了一下。到了《重生之门》,一方面庄耀柏这个角色特别适合他来演,另一方面我们当然希望能够让《重生》里面的演员更多都出现在重生之门中,比如饰演廖德同的江柏萱老师,也是《重生》里边的演员。” “而饰演丁生火的田小洁老师,我非常喜欢他的表演,一直都想合作,丁生火选角时的第一人选就是田小洁老师,结果一聊他跟我们一拍即合。” 演员之外,一部戏的幕后团队同样十分重要。 +第三战面对小组首名的葡萄牙,在早段先落后一球的情况下,韩国凭借C罗的“助攻”扳平比分,最后更在补时阶段入球,反胜葡萄牙2比1,而另一边的乌拉圭仅以2比0击败加纳,令两队的分数及得失球相同,但南韩得球较多(南韩入4球,乌拉圭仅入2球),压到乌拉圭以小组次名出线16强,为继12年后再次出线16强。但在16强则以1比4的比数不敌巴西出局。 韩国的世界杯成绩虽然是亚洲球队所获得的最佳记录,但在亚洲杯足球赛的成绩远不如世界杯。 +反黑刑侦剧《狂飙》的艺术突破与现实启示 · 作者:田广最近,由中央电视台和爱奇艺出品,中央政法委指导拍摄,徐纪周导演,张译、 ... +亚历山大·武契奇 塞尔维亚前进党 亚历山大·武契奇 塞尔维亚前进党 2022年塞爾維亞大選(英語:2022 Serbian general election)在该年4月3日举行。本次选举同时进行总统选举和原定于2024年进行的议会选举。本次选举是该国设立总统职位以来第八次选举,最终由亚历山大·武契奇于第一轮投票胜出。[1][2]同时在议会选举中,武契奇所屬政黨在議會選舉中取得多數議席。在全国性大选举行的同时,包括贝尔格莱德在内的12个区和2个市进行了地方选举。 塞爾維亞總統採用两轮选举制產生,任期五年,連選限連任一次。 +澳大利亚本土组合坛纳西·科基纳基斯和尼克·克耶高斯获得男子双打冠军;捷克组合巴博拉·克雷吉茨科娃和凯特琳娜·丝妮柯娃获得女子双打冠军;法国和克罗地亚跨国组合克里斯蒂娜·美拉德诺维奇和伊万·多迪格获得混合双打冠军。 诺瓦克·乔科维奇和大坂直美分别是男女单打卫冕冠军。 +4级地震(图3),其余震的分布也主要集中在与主地震破裂长度相当的空间范围内。 图3. 2021年5月22日玛多7.4级地震破裂和余震时-空分布特征(数据来源:国家地震科学数据中心https://data.earthquake.cn) 在时间上,余震的持续时间与主地震发生地区的构造背景、地震断层活动性、地壳内部应力状态等综合因素 有关。根据已有研究,在全球范围内一个大地震的余震序列可以持续几年到上千年(图4)。因此,根据分布位置和时间间隔(时-空特征)(图5),把2022年6月1日芦山6.1级地震厘定为2013年芦山7级地震的余震是合理的。 +1月17日,国家统计局发布2021年中国经济数据。数据显示,就业形势总体稳定,城镇调查失业率降低。全年城镇新增就业1269万人,比上年增加83万人。全年城镇调查失业率平均值为5.1%,比上年平均值下降0.5个百分点。全国企业就业人员周平均工作时间为47.8小时。 +3〕1号),我市根据国家文件精神出台本市医疗保障贯彻落实相关政策。 二、文件执行时间 文件自新型冠状病毒感染实施“乙类乙管”之日起(2023年1月8日)施行,先行执行至2023年3月31日。 三、关于新冠患者住院治疗费用保障 为保障新型冠状病毒感染患者(以下简称“新冠患者”)不因住院费用问题影响治疗,文件规定对住院的新冠患者全额保障新冠患者的住院费用。 +第一棒火炬手罗致焕曾在1963年夺得世界速度滑冰锦标赛男子1500米冠军,是第一个获得冬季项目世界冠军的中国选手。他说:“我在运动员的巅峰时期没能参加冬季奥运会,十分遗憾。今年能在家门口,代表老一代运动员传递火炬,圆了我的梦想。” 今年77岁的火炬手,中国空间技术研究院技术顾问、中国科学院院士叶培建激动地说:“北京成为‘双奥之城’,全世界再次聚焦中国。国家的繁荣富强令我感慨万分、无比振奋。我要跑出我们航天人不懈奋斗的精神来。 +经历了2020年的蛰伏,2021年的中国电影市场是复苏也是重生。电影市场方面,国家电影局2022年1月1日发布数据显示,2021年我国电影总票房达472.58亿元,其中国产电影票房为399.27亿元,占总票房的84.49%。全年新增银幕6667块,银幕总数达到82248块,全年总票房和银幕总数继续保持全球第一,电影市场活力显现。电影内容方面,2021年度电影类型丰富,其中主旋律影片强势霸屏,呈现出体量大、票房高、话题热的电影群像,表现最为亮眼。此外,文艺片、喜剧片等口碑佳作频出,成为大银幕靓丽的一笔色彩。 +一. 背景介绍 1.1 基本信息 依据Wiki百科的介绍,ChatGPT是一种尚处于原型阶段的人工智能聊天机器人。ChatGPT由OpenAI公司在2022年11月30日发布。在同样由OpenAI开发的GPT-3.5模型基础上,ChatGPT通过监督学习与强化学习技术进行微调,并提供了客户端界面,支持用户通过客户端与模型进行问答交互。ChatGPT不开源,但通过WebUI为用户提供免费的服务。 1.1.1 研发组织 OpenAI 成立于 2015 年,由Elon Musk、Sam Altman等出资10亿美元成立,致力于研究安全、通用、对人类有益的人工智能技术。 +#陈凯歌新片少年时代定档 +前两天,《好好说话》官方正式官宣了此剧十二位人物海报,这十二人分别为领衔主演陈晓、王晓晨、王耀庆、曾黎、赖艺、朱近桐。另外六人为加盟的配演,分别为倪大红、王志飞、张光北、周小斌、涂凌、王思思。不论是主演,还是配演,这阵容,真是够豪华的了。 此剧不仅演员阵容强大,剧组班底也十分强,主创团队都是《逆流而上的你》的原班人马,张衍担任总制片人,杨栋执导,杨栋曾经执导过《都挺好》,可以说,此剧绝对有实力保证。 +以下人士曾公开宣布参选,但最终均未获得候选人资格。 其他曾对外表示参选特首的人士,还包括撰写37页政纲的女士李稚嘉[46]、上届曾宣布参选、自称“政治新鲜人”的萧德良[47]、“珍惜群组”召集人李璧而[48]等。 第六届行政长官选举于2022年5月8日于香港会议展览中心举行。结果唯一候选人李家超获得1416票当选,得票率达99%,创下历史新高。[49][50] 2022年5月9日,候任特首李家超先后拜会行政、司法、立法首长,当中包括在政府换届前完成政府架构重组工作。 +譬如剧中三条时间线的衔接,《漫长的季节》采用了非常冒险的手法,它连时间线都不给观众标注,观众也不必担忧看不懂,除了出神入化的转场以外,故事内部的肌理可以让观众自然地滑入不同的时空语境,我们有着在黑暗的电影院里沉浸于一部电影般的观剧体验。 《漫长的季节》又突破了以前东北犯罪故事阴暗的天空、苍茫的雪原、落魄的工业基地、萧瑟的氛围、挑战人体极限的寒冷等刻板的印象。 +2022年春节档以60.35亿票房收官,2月7日,灯塔研究院和灯塔专业版联合发布《2022春节档电影市场数据洞察报告》(以下简称灯塔报告)。 灯塔报告显示,2月1日大年初一,春节档首日揽下14.5亿票房,与2019年持平,后续走势也与疫情前一样平缓回落。 票房冠军《长津湖之水门桥》斩获25. +阮富仲总书记此次正式访华的目的在于提倡越南的对外方针,重申越南的一贯主张,即重视发展同中国的关系是越南对外政策的首要优先,希望在两党两国高层所达成共识的基础上推动两国关系朝着长期、稳定、务实、高效的方向迈进;同时明确越南的正确立场和正当利益。 +它从1989年的黑龙江短道速滑队创建和2014年青岛短道速滑队招新同时起笔,在两代教练员和两代运动员群像中,以第一代运动员转换为教练员为纽带,串接起三代人在短道赛场上和人生历练中的跌宕起伏。与以往行业剧创作多以行业内标志性事件来结构剧情不同,《超越》的叙事焦点和表意重点没有放在对短道速滑项目胜负的呈现中,而是放在了对“短道速滑人”精神世界的刻画里。《超越》所关注的“超越”,首要的不是对对手的超越,不是对计时器刻度的超越,而是对自我的超越,对内心局限的超越。 +按照新西兰政治制度,作为新党魁的希普金斯将在新一届大选之前担任新西兰总理一职。新西兰大选定于2023年10月14日举行。   [财新双语通产品,是为有双语需求读者专门订制的优惠产品, 按此可享超值优惠订阅。 +其中,上海、吉林影院暂停营业;山东、江苏、海南、福建、辽宁等地的影院营业率都在20%以下。电影专资办数据显示,2022年清明档首日,全国电影票房仅为4583万元,而去年这一天,全国电影票房达到了3亿元。 国产片“请假”,进口片补位 其实,相比于去年《我的姐姐》《第十一回》等影片,今年清明档电影给了观众更多类型上的选择,比如以罕见殡葬题材讲述温情故事的《人生大事》,就与清明节主题高度契合。 +2%,也是自1991年香港立法局选举以来最低[1][2]。香港开埠以来,该届立法会首次由建制派及中间派全数包揽所有立法机关议席,亦是历届立法会派别席位比例最悬殊的一届,而民主派则在立法会绝迹。 2021年3月,第十三届全国人大第四次会议决定审议《全国人大关于完善香港选举制度的决定》以改革香港选举模式。 +一季度多项重要经济指标已公布!国家统计局4月18日表示,一季度,生产需求企稳回升,就业物价总体平稳,居民收入持续增加,市场预期明显改善,经济运行开局良好。 中国2023年一季度GDP大幅超出市场预期,国内外多家权威机构纷纷发声进行解读。瑞银、摩根大通等外资巨头4月19日随即上调中国2023年GDP增长预测,表示看好中国经济的后续发展。 一季度GDP大幅超市场预期,消费反弹、工业生产逐步恢复 4月18日,国家统计局发布的数据显示,中国2023年一季度国内生产总值(GDP)284997亿元,同比增长4.5%,超出市场预期的4%;一季度GDP比上年四季度环比增长2.2%。 +据交通运输部数据,今年春运期间客流总量预计约为20.95亿人次,恢复到2019年同期的70.3%。从客流构成上看,今年春运客流以探亲流、务工流为主,二者约占春运客流总量近8成。 自新冠疫情发生以来,在近4年春运期间,全国旅客发送量与疫情前相比均出现下滑。2021年初,全国各地开始提倡“就地过年”“非必要不返乡”,这一年春运全国旅客发送量为近年来最低,比2019年少了21亿人次,降幅超7成。2022年开始,全国旅客发送量连续两年出现同比上涨,今年预计恢复到2019年同期的6成左右。 +博客 这或许是人类文明历史上值得载入史册的一件事,当然,不是因为伟大,而是因为荒谬。 一位英国首相的任期被民众拿来当赌注,而对标的物品居然是生菜。 在最近英国的一项直播挑战里,大家的赌注是,一位首相先下台,还是一把生菜先腐烂。一目了然是不是? 恭喜你,生菜赢了。 英国当地时间10月20日,特拉斯辞职了,在她被任命为首相的第45天。 01 特拉斯当首相的44天 先介绍下特拉斯上台时英国的经济情况。 俄乌冲突之后,英国通货膨胀率居高不下。 +球网资讯 2023-08-08 07:07:23 青蛙视频 2023-08-08 12:59:28 环球网资讯 2023-08-08 00:11:42 薪火视点 2023-08-08 11:23:39 河南都市频道 2023-08-08 15:19:52 黑色柳丁 2023-08-08 14:10:41 小萝卜丝 2023-08-08 14:44:17 环球网资讯 2023-08-08 04:05:17 南国今报 2023-08-08 11:59:37 中国新闻周刊 2023-08-08 13:51:18 +《狂飙》是什么类型讲述了什么年代 《狂飙》讲述了黑恶毒瘤非法生长的升级路,故事横跨20年全景式展现时代变迁下的黑白较量与复杂人性。 初出茅庐的年轻警察安欣与饱受欺凌的鱼贩高启强两人,因安欣的一次正义相助结为好友。从警民携手维护正义,到高启强走入歧途后两人展开长达20年生死较量的故事。 +C919在2007年立项三年后,2010年10月,中国商飞向中国民航局递交C919的型号合格证申请,并获得受理。之后再历时五年的研发和制造,2015年11月,C919首架飞机总装下线。 虽然下线,但原定于2016年交付之期,因各种开发问题被延后。 2017年5月C919成功首飞后进入全面试飞试验阶段——有六架试飞飞机参与动力、性能、操控等试飞科目,两架参与静力试验、疲劳试验等试验。 五年试飞和改进之后,9月29日获得型号合格证,证明C919的设计满足要求。 虽然已经正式交付,投入商业运营。 +2021年9月8日,19号线一期工程冷、热滑试验顺利完成,全线进入动车调试阶段[17]。 2021年12月下旬,北京地铁车站及车厢开始陆续更换线网图,全图右下角的贴纸显示,19号线北太平庄、平安里、太平桥、景风门站暂缓开通。 2022年5月21日至6月29日,19号线每日21时提前结束载客运营,新宫站上行及牡丹园站下行末班车时间均提前至20:30,以便开展余下四座车站设施设备的试运行及全线联调测试工作[18]。 2022年7月30日,19号线北太平庄、平安里、太平桥、景风门站4座车站开通运营[19]。 +62亿,较2021年12月增长2805万,占网民整体的91.5%。 即时通信用户规模达10.27亿,较2021年12月增长2042万,占网民整体的97.7%。网络新闻用户规模达7.88亿,较2021年12月增长1698万,占网民整体的75.0%。网络直播用户规模达7.16亿,较2021年12月增长1290万,占网民整体的68.1%。在线医疗用户规模达3.00亿,较2021年12月增长196万,占网民整体的28.5%。 有多少人在网络购物?多少人使用网络支付? 《报告》显示,截至2022年6月,以信息服务为主的企业(包括新闻资讯、搜索、社交、游戏、音乐视频等)互联网业务收入同比增长8.5%。网络新闻、搜索、游戏、音乐的网民使用率分别为75.0%、78.2%、52. +2023年8月8日 据知情人士称,中国有关部门已通知华特迪士尼公司(Walt Disney Company, DIS),《阿凡达:水之道》(Avatar: The Way Of Water)将于12月16日在中国上映。 该片同日也将在全球上映。 已经是会员? 登录 +李月汝贡献全场最高的19分和12个篮板,她成为2013年后首位在女篮世界杯(包括其前身世锦赛)决赛中拿下“两双”数据的球员。韩旭得到8分和6个篮板,她在赛后入选本届赛事的最佳阵容;武桐桐在第四节拼到受伤离场,得到13分;王思雨贡献11分和3次助攻。   中国队开场后打得很拼,美国队以18:13领先结束首节比赛。第二节中国队将比分追至16:18,美国队随后打出一波高潮领先11分,但韩旭和武桐桐连续得分,中国队连追6分再次将分差迫近。 +转自3月3日《中国体育报》07版) 国家体育总局版权所有 国家体育总局体育信息中心承办 国家体育总局通讯地址:北京市东城区体育馆路2号 邮政编码:100763 联系电话:010-87182008 信访电话:010-87182116 / 87182045  网站联系电话:010-87182998 / 87182280 网站标识码:bm33000001京ICP备05070991号 京公网安备 11010102004525号 +2022年5月24日,18岁的萨尔瓦多·拉莫斯(Salvador Ramos)在位于美国得克萨斯州尤瓦尔迪市的罗伯小学(英语:Robb Elementary School)连续无差别射击,造成包括19名儿童和2名成人[1][2]在内的21人死亡,17人重伤。[3][1]当天早些时候,拉莫斯在家中向开枪击中其祖母的前额,使其身负重伤。[3]之后,拉莫斯前往学校,并在学校外部进行了五分钟左右的枪击[4],其后手持一把AR-15式步枪,在没有受到任何武装抵抗的情况下通过一扇打开的学校侧门进入学校内部[5]。 +1月25日,在距北京冬奥会开幕十天之际,北京冬奥组委公布北京冬奥会官方电影主创团队。北京冬奥会和冬残奥会开闭幕式总导演张艺谋担任北京冬奥会官方电影总监制,原北京人民艺术剧院院长张和平担任北京冬奥会官方电影专家顾问团团长,著名导演陆川出任北京冬奥会官方电影总导演。   奥运会官方电影是国际奥委会根据《奥林匹克宪章》,要求每届奥运会主办城市制作的奥运会纪录影片。截至目前,奥运官方电影数量已经超过40部,记录着百年以来奥运盛会走过的足迹。 +5月25日,2023中关村论坛在北京开幕。2023中关村论坛由科技部、国家发展改革委、工业和信息化部、国务院国资委、中国科学院、中国工程院、中国科协、北京市政府共同主办,主题为“开放合作·共享未来”。 新华社记者 张玉薇 摄 5月25日,2023中关村论坛在北京开幕。2023中关村论坛由科技部、国家发展改革委、工业和信息化部、国务院国资委、中国科学院、中国工程院、中国科协、北京市政府共同主办,主题为“开放合作·共享未来”。 新华社记者 张玉薇 摄 5月25日,2023中关村论坛开幕式上进行重大科技成果发布。 当日,2023中关村论坛在北京开幕。 +厄瓜多尔 v 塞内加尔 荷兰 v 卡塔尔 英格兰 v 伊朗 美国 v 威尔士 威尔士 v 伊朗 英格兰 v 美国 威尔士 v 英格兰 伊朗 v 美国 阿根廷 v 沙乌地阿拉伯 墨西哥 v 波兰 波兰 v 沙乌地阿拉伯 阿根廷 v 墨西哥 波兰 v 阿根廷 沙乌地阿拉伯 v 墨西哥 丹麦 v 突尼西亚 法国 v 澳大利亚 突尼西亚 v 澳大利亚 法国 v 丹麦 +当时演说还未开始,刺客直接就投掷了一枚炸弹。在炸弹爆炸前,岸田文雄的安保人员就反应了过来,马上拉着岸田文雄撤离。在撤离过程中岸田文雄本人也十分错愕,还扭头看了一下。而在相关人员将刺客制服之后,炸弹才爆炸。但因为没有造成太大杀伤,并且产生的烟雾实在是太大。因此,也有部分日本媒体声称刺客使用的是一枚烟雾弹。 一名50多岁的日本现场民众参与了对刺客的制服,根据他的描述,这名刺客首先扔出了什么东西,然后还打算继续从背包中掏出更多的东西。 +如今,在孙燕飙看来,iPhone SE 3时隔两年后推出,正是为了加快刺激印度市场。   对于起售价上涨200元是否影响iPhone SE3在印度市场的受欢迎度,孙燕飙认为,iPhone SE虽不属于苹果的旗舰系列,但iPhone SE在印度市场属于中高端机型,因此,即便新一代iPhone SE起售价微调,也不会明显影响其在印度市场的市场份额。   除了印度等非发达国家,欧美地区也是iPhone SE的目标市场。   比如,2020年推出iPhone SE2时,当年第二季度,苹果在美国的整体iPhone销量下降了23%,但iPhone SE成为新的亮点,销量超出预期,帮助苹果提振了当时整个季度的销量。 +《Wordle》的游戏模式也被引入其他领域,比如数学领域的Nerdle[53]、历史领域的OTDLE[54]及世界领域的Worldle[55]等。 +EMNLP2022在阿布扎比举行 EMNLP是自然语言处理领域最有影响力的会议之一,在GoogleScholar计算语言学出版物索引中排名第二。与传统学术会议不同,EMNLP更注重自然语言算法与各领域应用的结合,吸引了谷歌、微软、麻省理工学院等全球顶尖科技公司和研究机构的参与。据介绍,今年主会及Findings共收到论文1381篇,其中主会接收829篇,录用率仅20%,创历史新低。主要会议共接受了22篇佛法学院报告,其中11篇报告被确认为结论(主要会议未涵盖的论文)。 达摩院NLP实验室高级算法专家冰立东有8篇论文入选本次会议主会场,个人入选论文数量位居全球研究者前列。 +总导演:冯小刚 2015年春晚总导演:哈文 2016年春晚总导演:吕逸涛 2017、2018年春晚总导演:杨东升 2019年春晚总导演:刘真 2020年春晚总导演:杨东升 2021年春晚总导演:陈临春 2022年春晚总导演:刘真 2023年春晚总导演:于蕾返回搜狐,查看更多 责任编辑: +2023年4月28日,ChatGPT再度能在意大利使用,ChatGPT亦做出部分修改,包含增加年齡認證系統、讓使用者能得知ChatGPT的隱私政策以及使用者能拒絕提供訓練演算法用的資料[88]。 2023年4月10日,日本内阁官房长官松野博一表示,ChatGPT对个人信息的处理方面等问题应得到重视。在这些问题得到有效解决的前提下,将考虑使用ChatGPT减轻公务员的工作负担。[89] 2023年5月10日,有香港立法會議員詢問有關ChatGPT未有在開放使用的原因。香港政府則回應尊重個別機構就其產品製訂的推出策略及商業安排。[90] +本届论坛将发布一批原创性、颠覆性科研成果和权威研究报告,中关村先行先试改革措施实施成效、国际科技合作计划等将在论坛重磅发布,还将签约一批国际科技合作项目,推出一批示范应用场景。   6.前沿大赛。今年我们继续举办2022中关村国际前沿科技创新大赛,来自全球30余个国家和地区的2500余个拥有前沿技术的初创企业和创新团队踊跃参赛。   7.配套活动。论坛期间,还将举办科技服务创新发展专场会、新型实体企业论坛、科学家科普演讲、科企专场发布等一系列配套活动。主会期外,我们全力打造永不落幕的中关村论坛。 +2023年也是中网举办20周年(不含北京沙龙公开赛时期)。 中国网球公开赛男子比赛的前身为在1993年-1997年称为北京沙龙公开赛,1998年-2003年比赛撤消,2004年开始称为中国网球公开赛的一部分。 +8月31日,欧盟统计局数据显示,2022年8月,欧元区年通胀率预计为9.1%,高于7月的8.9%。 从欧元区通胀的主要组成部分来看,8月份,能源的年增长率最高(38.3%,7月份为39.6%),其次是食品、酒精和烟草(10.6%,7月份为9.8%)、非能源工业品(5.0%,7月份为4.5%)和服务(3.8%,7月份为3.7%)。 2022年8月,比利时通胀率达到10.5%。 +但就目前为止,台积电尚未确定亚利桑那州晶圆厂二期的规划”。声明还说,“有鉴于客户对台积电先进制程的强劲需求,我们将就营运效率和成本经济因素来评估未来计划”。 而就在前几天,一架载有人员、机台组件的台积电包机已出发直飞凤凰城,参加预计在12月举行的首批机台设备到厂典礼。台媒称,这次赴美包机将有10班,除了台积电本身的工程相关人员外,台湾供应链厂商也将参加。而台积电在美方的投资至少有120亿美元,占其一年资本支出的1/3,“换言之,台积电的投资将会把整个产业聚落搬去美国”。 +本届世界杯使卡塔尔成为有史以来承办世界杯的最小国家[20][21],上一个保持这项纪录的国家是举办过1954年世界杯的瑞士,其国土面积是卡塔尔的三倍多[22]。 以下是按地区划分的出线球队名单,括号中的数字表示该球队在决赛圈前在国际足协世界排名的最终位置[23]。 亚洲区(6队) 非洲区(5队) 中北美洲及加勒比海区(4队) 南美洲区(4队) 大洋洲区(0队) 欧洲区(13队) 本届世界杯决赛周参赛球队与上届一样继续仍维持32队不变[24][25][26][27]: +等到看完,《漫长的季节》就是《漫长的季节》。 不怪大家联想。 又一次跨越时空追查悬案,又一次从90年代中后期改革讲起,又一次时代潮流中个体的浮沉。 光是今年,数得过来的同题作品就有《平原上的摩西》《尘封十三载》,品质都不错。再算上烂尾的《回来的女儿》和《他是谁》,小半年竟然来了5部。 如果说《平原上的摩西》压抑,《尘封十三载》热烈,明明同样底色残酷悲怆,《漫长的季节》竟然让人品出一丝……幽默? 这或许正是《漫长的季节》亮出的态度:命运也许残酷,人却能昂扬地活着。 +1万辆,同比增长14.8%,市占率同比提升0.8个百分点,重回汽车集团第四;实现营业收入1051.42亿元,同比增长24.33%,增幅创3年新高。 据长安汽车公布的年度报告显示,公司2021年实现营业收入1051.42亿元,同比增长24.33%;实现归属于上市公司股东的净利润35.52亿元,同比增长6.87%;基本每股收益0.47元。公司拟向全体股东每10股派发现金红利2.33元(含税),以资本公积金每10股转增3股。 销量方面,2021年,长安汽车实现销量230.1万辆,同比增长14.8%,市占率同比提升0.8个百分点,重回汽车集团第四;长安系中国品牌汽车销售175.5万辆,同比增长16. +《三体》是改编自作家刘慈欣创作的系列长篇科幻小说《三体》,由bilibili、三体宇宙及艺画开天联合出品,艺画开天参与制作的中國網路科幻動畫影集。 该动画原定于2022年12月3日在bilibili播出,但因江泽民去世而延期至2022年12月10日,首播兩集,全劇共15集。 2019年6月26日,bilibili十周年庆典活动上,艺画开天的创始人阮瑞正式宣布《三体》动画化。2019年11月17日,发布正式预告片[1];2021年11月20日,发布第二支预告片[2]。动画原定2021年上映,后延至2022年發行。原作者刘慈欣也受邀参加庆典活动,并对《三体》动画给予极高的赞扬。 +当然,如果继续梳理国内影史上演员的票房成绩,不难发现,男演员的个人票房要高过女演员,马丽是女演员票房第一,个人票房成绩不到160亿,这个成绩在男演员中只能排到第九,但也是唯一过百亿的中国女演员,她后面的周冬雨目前99.17亿个人总票房距百亿门槛还有一步之遥。 编辑: 张僡 责编: 李佳 编审: 王玺 扫描二维码,下载动静新闻 Copyright © 2011-2018 Limited All Rights Reserved. 贵州广播电视台版权所有。 +男排世锦赛将于2022年8月26日至9月11日在俄罗斯的十个城市举行。国际排联在国际体育仲裁法庭(CAS)于 2020 年 12 月 17 日对 WADA 诉俄罗斯反兴奋剂机构(RUSADA)案作出裁决后,向 WADA 提供了一份详细而全面的报告。 国际排联主席阿里·格拉萨在声明中表示:“国际排联欢迎世界反兴奋剂机构考虑到这项大型赛事已做了很多准备工作,承认取消在俄举行 2022 年男排世锦赛在法理上和实际上是不可行的。 +用微信扫码二维码 分享至好友和朋友圈 关于2022年法国网球公开赛,你需要了解的信息: 正赛日期:5月22日-6月5日 单打抽签时间:北京时间5月20日01:00 双打抽签时间:北京时间5月22日18:00 女单决赛:6月4日 男单决赛:6月5日 男单纪录: 单打夺冠次数:纳达尔 13冠 最长连冠:纳达尔 5连冠(2010-2014) 最年长冠军:希梅诺 34岁(1972年) 最年轻冠军:张德培 17岁(1989年) 最高排名夺冠:NO. +或许中国版“八公”故事评分略逊一筹,与此有关。 据悉,参演本片的狗狗们多为流浪狗 “拍摄动物是一个极其复杂的过程,带有很大的不确定性,等你完成了你想要拍摄的那个场景时,那是一种‘恩赐’。” 导演徐昂用“恩赐”来形容对“八公”的拍摄。而中华田园犬也不负所望地完成了导演的叙事。他们合谋召唤出一场眼泪,提醒不善告别的我们,唯有像“八公”这般赤诚之爱,才能抵御时间的侵蚀和死亡对记忆的剥夺。从这一点来看,中国版《忠犬八公》虽“败”犹荣。 +该片李茂假扮太子,太子变成李茂,和《狸猫换太子》有异曲同工之妙。除了两位当事人,其他人都被蒙在鼓里,都不知道李茂是假太子。太子与家珍一起在桶里戏水、家珍想和李茂生个他们自己的孩子、岳父认太子为女婿李茂…这些桥段从头到尾引得观众频频笑场。 但无厘头的喜剧存在一些缺点,让人看完不吐不快。第一,该片为了搞笑而搞笑,人物的行为经不起逻辑的推敲,古代人讲现代rap,人物的智商令人堪忧,笑点有些尴尬。太子千方百计出宫,不过是想听戏,但听戏又很多地方可以听。 +那么,《心居》的演员中谁是上海人呢?一起来看很哥解密: 1、张芝华—剧中扮演苏望娣,1958年出生,64岁 苏望娣是顾清俞的大伯母,虽然戏份不多,但扮演者张芝华却用精湛的演技,演活了上海老女人的形象。 尤其是大伯母家会亲家的戏份,不懂礼仪,却又要面子的角色形象,被张芝华演绎得活灵活现。 有人说张芝华是本色出演,很哥非常认可,因为她本人就是地道的上海人。 对于张芝华的名字,年轻的观众可能会陌生。但在上世纪80年代,张芝华却是非常有名的明星。 +图表:2020年全年城镇新增就业1186万人 新华社发 程硕 制图 主办单位:国务院办公厅 运行维护单位:中国政府网运行中心 版权所有:中国政府网 中文域名:中国政府网.政务 网站标识码bm01000001 京ICP备05070218号 京公网安备11010202000001号 中国政府网微博、微信 主办单位:国务院办公厅 运行维护单位:中国政府网运行中心 版权所有:中国政府网 中文域名:中国政府网.政务 +在1月14日举行的国新办新闻发布会上,海关总署新闻发言人、统计分析司司长李魁文介绍,2021年,中国外贸进出口实现较快增长,货物贸易进出口总值同比增长21.4%,规模再创新高、质量稳步提升,实现“十四五”外贸良好开局。 进出口规模突破6万亿美元 2021年,中国外贸交出了一份亮眼的成绩单—— 以美元计,2021年中国进出口规模达6.05万亿美元,在2013年首次达到4万亿美元的8年后,年内跨过5万亿、6万亿美元两大台阶,达到历史新高。全年外贸增量达1.4万亿美元。以人民币计,2021年中国货物贸易进出口总值达39.1万亿元人民币,同比增长21.4%。 +中新文娱北京4月6日(记者 任思雨)2022年清明小长假落下帷幕,但对影院来说,疫情的“倒春寒”仍在继续。据灯塔专业版,截至4月5日21:30,2022清明档(4.3-4.5)总票房1.20亿,观影总人次342.02万。 这也是除2020年外,近十年来该档期票房的最低值。 清明档票房,历史新低 每当提起清明档,一些观众可能会有疑问:这个档期真的存在吗? 2010年,由蒋雯丽执导的《我们天上见》上映,被称为“中国首部清明节档期电影”,“清明档”初现雏形。 +Jim Inhofe, R-OK)提前退休留下的空缺,因此总共有35个席位面临改选。 另外,有36个州将举行州长选举。46个州将举行州议会选举。 尽管总统的名字不在此次选举的选票上,但选举结果却可能对本届总统的后半段执政,甚至两年后的大选产生举足轻重的影响。 各界预计共和党有望翻盘众议院 今年中期选举将决定第118届新国会的组成。目前,民主党在众议院是多数党,拥有220个席位,共和党有212席。有3个席位空缺。换言之,共和党仅需要再新增至少6个席位,就足以达到过半的218席,掌控众议院。 +西班牙队在决赛中以95比75击败阿根廷队,获得本届世界杯冠军。国际篮联表示,本届篮球世界杯赛事组织十分成功,中国为篮球世界杯树立了一个全新标杆。 2019年10月至11月间,国际乒联男子、女子世界杯在四川成都举行,中国选手包揽全部冠军。2020年11月,因为疫情影响而暂停的国际乒联赛事重启,男子、女子世界杯在山东威海进行,中国选手再度上演包揽好戏。今年9月30日至10月9日,2022世界乒乓球团体锦标赛将在成都举办,国乒正厉兵秣马、积极备战。 +获奖名单: 最佳影片奖:长津湖 ​优秀影片奖:你好,李焕英 ​最佳导演奖:文牧野(影片:奇迹·笨小孩) ​最佳编剧将:里八神等(影片:杨名立万) ​最佳男主角奖:张译(影片:悬崖之上) ​最佳女主角奖:袁泉(影片:中国医生) ​最佳男配角奖:侯勇(影片:守岛人) ​最佳女配角奖:朱媛媛(影片:我的姐姐) ​最佳新人奖:陈哈琳(影片:奇迹·笨小孩) 热烈祝贺第三十六届大众电影百花奖电影节圆满成功!!! +《灌篮高手》没玩怀旧把观众整不会了?毕竟有遗憾的才是青春吶 上一个能跟电影《灌篮高手》上映整活盛况相提并论的,大概还是《魔兽世界》大电影。 让我看看,这是谁的27年青春? 2023年4月20日零点,有这么一群人悄悄聚集起来。 等待27年,上映即豆瓣9.2!电影《灌篮高手》究竟好在哪里? 是的,如果你们也打算去完梦青春,那不妨选一些人数较多的影院和场次。因为对这次的《灌篮高手》大电影来说,目标受众的现场反应也属于美好体验的必备环节。 二刷《灌篮高手》,流畅、清晰了许多 +中国汽车出口量已经排到了全球第二! 中汽协数据显示,2022年8月中国汽车出口量达30.8万辆,同比增长65%,这也是历史上首次超过30万辆。从今年前八个月整体情况来看,我国汽车出口量已经超越德国,仅次于日本汽车出口量。其中,新能源汽车1-8月出口量同比增长超九成,贡献了重要的增量。 而发达国家正成为我国汽车出口的主要市场。中汽协整理海关数据显示,2022年1-8月,我国汽车商品出口金额排名前十的国家分别是美国、墨西哥、日本、比利时、英国、俄罗斯联邦、德国、韩国、澳大利亚和沙特阿拉伯。 中国的汽车出口量增长究竟有多迅速?为何能成功在海外市场打开局面呢? +头部外壳造型取自冰雪运动头盔,装饰彩色光环,其灵感源自于北京冬奥会的国家速滑馆——“冰丝带”,流动的明亮色彩线条象征着冰雪运动的赛道和5G高科技;左手掌心的心形图案,代表着主办国对全世界朋友的热情欢迎。整体形象酷似航天员,寓意创造非凡、探索未来,体现了追求卓越、引领时代,以及面向未来的无限可能。     北京冬残奥会吉祥物“雪容融”以灯笼为原型进行设计创作。雪,象征洁白、美丽,是冰雪运动的特点;容,意喻包容、宽容,交流互鉴;融,意喻融合、温暖,相知相融。 +2023年男篮世界杯具体分组情况如下: A组:菲律宾男篮、多米尼加男篮、意大利男篮、安哥拉男篮 B组:塞尔维亚男篮、中国男篮、波多黎各男篮、南苏丹男篮 C组:美国男篮、新西兰男篮、希腊男篮、约旦男篮 D组:立陶宛男篮、墨西哥男篮、黑山男篮、埃及男篮 E组:日本男篮、德国男篮、澳大利亚男篮、芬兰男篮 F组:斯洛文尼亚男篮、格鲁吉亚男篮、委内瑞拉男篮、佛得角男篮 G组:西班牙男篮、伊朗男篮、巴西男篮、科特迪瓦男篮 H组:加拿大男篮、拉脱维亚男� +距离上一次GPT-4有消息流出,这还要追溯到今年年初。 当时OpenAI的首席执行官萨姆·阿尔特曼(Sam Altman)表示,GPT-4预计将在今年7月至8月发布。 然而近期,美国科技博主罗伯特·斯科布尔(Robert Scoble)却表示: 「颠覆即将来临。GPT-4比任何人的预期都要出类拔萃。它是将于明年推出的几大AI产品之一。」 Cambrian AI公司分析师阿尔贝托·罗梅罗(Alberto Romero)也在《算法桥》的专栏文章中,援引了硅谷工程师伊戈尔-拜科夫(Igor Baikov)9月时的一条推文: 「OpenAI已经在训练GPT-4,并计划于12月-2月间发布。」 此外,包含1. +其中狄志远和陆颂雄宣誓时,分别读漏誓辞中的“香港”和“议员”的字,立法会秘书长陈维安即场提醒他们,读誓辞的时候有不清楚之处,请他们重新宣誓。其后,林郑月娥确认全体90名立法会议员有效宣誓。 狄志远指宣誓后有一种负担 狄志远在宣誓仪式后接受传媒访问表示,早前已练习多次,自觉失误“不好意思”,但不担心会因此丧失议员资格。狄志远又表示,宣誓就职后有一种负担,预期新议会的工作不容易。 +该处先后发现了水平安定面、垂直尾翼、方向舵、左右发动机、左右大翼、机身部件、起落架及驾驶舱内部件等主要残骸。 此外,搜索人员在距离主撞击点约12公里处发现右翼尖小翼后缘。 搜寻工作进行六天之后,去年3月26日,应急处置指挥部宣布机上132人全部罹难。 据国际航空追踪网站FlightRadar24披露数据,MU5735航班在06:20:43 GMT从巡航高度2.91万英尺开始急速下降,06:21:55 GMT跌至7425英尺(2263米),即飞机在1分12秒间以每秒301英尺(92米)速度急降。 +从旅游收入来看,今年中秋假期国内旅游收入同比下降22.8%,恢复至2019年同期的60.6%。旅游收入的恢复速度不及出游人次。 与相同天数的清明、端午假期相比,中秋假期出去玩的人少了,但是花钱更多。从单日平均值来看,据界面数据计算,中秋假期单日出游约0.24亿人次,比清明、端午日均出游人次都要低。中秋假期日均旅游收入约95.6亿元,比清明假期高出超5成,比端午假期高出超1成。 中秋假期本地游占比超6成,消费者酒店、民宿住得越来越讲究。据携程数据,中秋假期日均订单量较端午呈双位数增长、较清明和“五一”增长1倍以上。 +从近十年的数据能够看到,山东的出生率经历了上升又快速下降的过程,2011年为11.5‰,2016年和2017年达到17.89‰和17.54‰,此后快速下降,2020年低于10‰,2021年降至7.38‰。   河北省2021年出生人口53.3万人,人口出生率为7.15‰;人口自然增长率为-0.43‰,比上年回落1.37个千分点,可计算得出,河北2020年人口自然增长率为0.94‰,结合其2020年统计年鉴可知,2021年也是河北省的自然增长率从1978年以来首次转负的年份。   2021年,湖南省全年出生人口47.3万人,出生率7.13‰;人口自然增长率-1.15‰;2020年,湖南省的人口自然增长率已低于1‰,2021年的-1. +《制造共识》出版后四年的1992年,该书被翻拍为纪录片,标题为《制造共识:诺姆·乔姆斯基与媒体》,由马克·阿赫巴和彼得·温托尼克执导。纪录片的语言为英语,并于多个英语系国家播出。首映会于纽约市的电影论坛举行。 该纪录片的长度为三小时,片中除讨论乔姆斯基的观点、宣传模式理论与大众传播行业内的政治生态外,亦介绍了乔姆斯基的生涯和背景。[18] +综合法媒报道,6月23日,2024年巴黎奥运会组委会公布火炬传递路线。根据计划,圣火将于2024年4月16日在希腊古奥林匹亚遗址进行采集,随后在希腊进行9天传递,4月27日上船,5月8日抵达法国马赛,开始为期68天、覆盖法国本土和5个海外省的传递,7月26日到达巴黎奥运会开幕式现场。 届时约1万名火炬手将在法国64个地区的400多个城市接力传递,途径凡尔赛宫、圣米歇尔山、拉斯克岩洞、戛纳节庆宫等165处自然风光、历史名胜、文化地标、体育场馆等。 +年份 大会 地点(城市,国家) 2022 第80届世界科幻大会, Chicon 8 芝加哥, 美国 2021 第79届世界科幻大会, DisCon III 华盛顿, 美国 2020 第78届世界科幻大会, CoNZealand 惠灵顿, 新西兰 2019 第77届世界科幻大会,Dublin 2019: An Irish Worldcon 都柏林, 爱尔兰 2018 第76届世界科幻大会,Worldcon 76 in San José 圣何塞, 美国 2017 第75届世界科幻大会 赫尔辛基, 芬兰 2016 第74届世界科幻大会, MidAmeriCon II 堪萨斯城, 美国 2015 第73届世界科幻大会, Sasquan 斯波坎, 美国 2014 第72届世界科幻大会, Loncon 3 伦� +2027年亚足联亚洲杯主办地将在印度和沙特阿拉伯之间产生。最终结果将在2023年2月的亚足联代表大会上揭晓。 +新华社新德里7月21日电(记者胡晓明)印度总统选举结果21日揭晓,执政的全国民主联盟推举的候选人德劳帕迪·穆尔穆击败反对党联合提名的候选人亚什万特·辛哈,当选印度新一任总统。   印度议会联邦院秘书长普拉莫德·钱德拉·莫迪当天宣布,在3219张有效选票中,穆尔穆获得2161张,辛哈获得1058张。辛哈在社交媒体上发文,祝贺穆尔穆获胜。   穆尔穆将于25日宣誓就职,接替完成5年任期的拉姆·纳特·科温德,成为印度首位来自部落地区的总统和历史上第二位女总统。 +据此推测,百度很可能从那时候就开始做文心一言。究其根本,涉及到类似 ChatGPT 的相关技术,在百度的人工智能框架中是现成的。在百度人工智能的架构中,文心一言位于模型层,属于百度的全栈布局的其中一层。 百度在人工智能领域深耕数十年,拥有产业级知识增强文心大模型 ERNIE,具备跨模态、跨语言的深度语义理解与生成能力。 ChatGPT 是人工智能里程碑,更是分水岭,这意味着 AI 技术发展到临界点。 同时,ChatGPT 走红后,不少人认为它有希望取代现在的搜索引擎业务。 谷歌即将推出类似 ChatGPT 的服务 Bard,而文心一言,则是百度给出的答案。 +电影《人生路不熟》由易小星导演,乔杉、范丞丞领衔主演,马丽、张婧仪特别出演,常远、田雨、张熙然特邀出演,尹正、张磊、小爱友情出演,庄园出演;上海亭东影业有限公司、上海淘票票影视文化有限公司、北京破壳而出影业有限公司、天津猫眼微影文化传媒有限公司、中国电影股份有限公司、浙江横店影业有限公司、北京开门见杉文化创意有限公司、北京微梦创科网络技术有限公司、厦门人马文化传媒有限公司出品。影片将于4月28日全国上映。 +[8]:205此外,两人先前于1979年共同的著作《人权的政治经济学》第一册第二章中亦曾对宣传模式(当时尚未有“宣传模式”该说法)的结构组成提出相似的观点,指出“尤其涉及到关乎美国的经济与政治利益以及和盟友与敌对势力之间的关系的议题时,大众媒体往往扮演者国家宣传机器的角色。”[9] 此书所提出的宣传模式的观点,于当今社会依然颇具参考意义。 此书指出,制造公众的共识的宣传模式,在新闻的报导上主要由五种有利于扭曲事实的过滤机制所制约,并采用于大众传播媒体中对于新闻的报导。这五种过滤机制如下: +海外网1月1日电 据印度新德里电视台报道,位于印控查谟和克什米尔地区的瓦希诺德维寺发生踩踏事件,目前已造成12人死亡、14人受伤。 当地时间1月1日,大批印度民众聚集在瓦希诺德维寺庆贺新年,期间发生踩踏事故。警方证实,12人在踩踏事故中丧生,14人受伤,救援行动立即展开,所有伤者已被送往医院,部分伤者情况严重。 当地官员透露,事件发生在寺庙外,当时有大量民众涌入寺庙,有的人甚至未经许可就进入寺庙,紧接着踩踏事件就发生了。 +本届世界杯使卡塔尔成为有史以来承办世界杯的最小国家[20][21],上一个保持这项纪录的国家是举办过1954年世界杯的瑞士,其国土面积是卡塔尔的三倍多[22]。 以下是按地区划分的出线球队名单,括号中的数字表示该球队在决赛圈前在国际足协世界排名的最终位置[23]。 亚洲区(6队) 非洲区(5队) 中北美洲及加勒比海区(4队) 南美洲区(4队) 大洋洲区(0队) 欧洲区(13队) 本届世界杯决赛周参赛球队与上届一样继续仍维持32队不变[24][25][26][27]: +7%;商用车出口58.2万辆,同比增长44.9%。新能源汽车出口67.9万辆,同比增长1.2倍。其中,去年11月,新能源汽车出口15.3万辆,环比增长5.5%,创下单月出口量新高。 主要车企出口量快速增长。从增速看,整车出口前10位企业出口量均呈不同程度的同比增长。 欧美市场持续取得突破。伴随着新能源汽车大踏步走出国门,欧洲和北美正成为中国汽车出口的两大增量市场,我国汽车产品国际市场地位进一步得到巩固。据海关总署数据,2022年前11个月,我国汽车出口量前10的国家中,阿联酋、墨西哥市场表现较强,同比分别增长2.7倍和1.6倍。 +APEC举办期间爆发了多场抗议活动。[8]11月18日,数百名抗议者与防暴警察发生冲突。多名抗议者和记者受伤,有一位抗议者一只眼睛失明。[9] +2023年乒乓球比赛哪里可以看到 +北京2022年冬残奥会中国残奥冰球队队员汪之栋在训练中。(记者 薄克国)   3月3日,中国体育代表团宣布,郭雨洁、汪之栋将担任北京2022年冬残奥会开幕式中国体育代表团旗手。其中,汪之栋是山东籍残奥冰球运动员。   获知消息后,汪之栋说:“能够担任北京2022年冬残奥会开幕式的旗手,对我来说是莫大的荣誉,我也会以此为动力,在赛场上奋勇拼搏,为国争光。也祝愿所有运动员取得理想的成绩。”   汪之栋出生于2000年7月,7岁时触摸高压电线,导致右小腿截肢。 +央视中秋晚会中,蔡国庆张含韵用一首《吉庆团圆》,介绍中秋习俗“请兔儿爷”,让我们跟随歌声一起了解~返回搜狐,查看更多 责任编辑: +戈尔巴乔夫的女儿伊琳娜和她的两名孙女坐在棺木旁。 戈尔巴乔夫葬礼虽非国葬,但有仪仗队等国葬“元素” 在沙皇统治时期,宏伟的圆柱大厅内曾举办贵族舞会,在苏联时期作为高级会议和代表大会以及国葬场所。虽然葬礼在这个著名地点举行,但克里姆林宫没有宣布举行国葬。总统新闻秘书佩斯科夫称,戈尔巴乔夫的遗体告别仪式将会包含一些国葬"元素",现场会有仪仗队,并且政府也协助丧仪的操办工作。 +《瞬息全宇宙》 《巴比伦》 《造梦之家》 最佳动画短片: 《男孩、鼹鼠、狐狸和马》 《飞行水手》 《冰商》 《我的失贞之年》 《一只鸵鸟告诉我世界是假的,我想我相信它》 责任编辑:建嘉 支持0人 反对 打赏 快科技(驱动之家旗下媒体)·1997-2023 版权所有 Copyright(C)Mydrivers.com, All Rights Reserved. 豫ICP备18024899号-2豫公网安备 41010502003949号 +CVPR 2022 将于2022年 6 月 21-24 日在美国的新奥尔良举行。CVPR是IEEE Conference on Computer Vision and Pattern Recognition的缩写,即IEEE国际计算机视觉与模式识别会议。该会议是由IEEE举办的计算机视觉和模式识别领域的顶级会议,会议的主要内容是计算机视觉与模式识别技术。CVPR 2022 一共有2067篇论文被接收,接收论文数量相比去年增长了24% https://openaccess.thecvf. +[3] 塞爾維亞國民議會的 250 名成員在一個全國單一選區按比例代表制選舉產生,[4]選舉門檻自上次選舉起降為 3% ,[5]少數民族的聯盟不須通過該門檻。 投票站於7:00至20:00開放,共有6,502,307名公民在大選中有投票權。[6]由於科索沃拒絕在其土地上允許投票站之後,來自前科索沃的塞族人搭乘大約 40 輛向北行駛的公共汽車參與投票。[7] +韩国则因为较晚批准该协定,因此该协定在韩国的生效日期为2022年2月1日[3]。 马来西亚则因为较晚批准该协定,因此该协定在马来西亚的生效日期为2022年3月18日[4]。 2022年5月1日,该协定在中缅之间生效实施[66]。 印度尼西亚则因为较晚批准该协定,因此该协定在印度尼西亚语的生效日期为2023年1月2日[67][68]。 2023年2月21日,菲律宾国会参议院批准RCEP核准书。随后菲律宾将向东南亚国家联盟秘书处提交核准书。RCEP将在核准书提交60天后正式对菲律宾生效。[69] +2023年8月8日 墨西哥外交部长马塞洛·埃布拉德·卡绍冯(Marcelo Ebrard Casaubon)周三表示,美国、墨西哥和加拿大的国家元首将于11月18日在华盛顿举行五年来的首次北美领导人峰会。 已经是会员? 登录 +王蔷退赛后,征战今年澳网的中国女网球员从8人减至7人,分别是张帅、郑钦文、王曦雨、王欣瑜、袁悦、朱琳和郑赛赛。 男网方面,由于美国选手奥佩尔卡确认退赛,作为替补第一顺位的张之臻已经入围澳网正赛。另一名中国球员吴易昺也成功收获了澳网正赛的外卡。 1月6日,女网方面又有伤病的消息传来。 2021年美网女单冠军拉杜卡努在WTA奥克兰站第二轮的比赛中扭伤脚踝,最终无奈退赛。 退赛后,拉杜卡努泪洒赛场,难掩失望之情。 +根据国家电影局公开信息显示,2022年中国电影市场年度总票房共计300.67亿元,城市院线观影总人次7.12亿,2022年中国电影市场在全球范围内依然扮演重要角色,位列全球影市年度票房排行第二名。值得一提的是,2022年二月和八月,中国影市分别获得全球影市当月月票房冠军。其中,二月票房更是第四次突破百亿大关。 2014-2022年中国电影票房收入统计 资料来源:国家电影局、共研产业咨询(共研网)   2022年国产电影依然是内地影市主角,据统计,2022年国产电影总票房完成255.11亿元,占全国电影总票房的84.85%。 2014-2022年中国国产电影票房收入统计及占比 +申雪/赵宏博,2010年温哥华冬奥会花样滑冰双人滑金牌。   周洋,2010年温哥华冬奥会短道速滑女子1500米、短道速滑女子3000米接力,2014年索契冬奥会短道速滑女子1500米金牌。   中国队,2010年温哥华冬奥会短道速滑女子3000米接力金牌。   李坚柔,2014年索契冬奥会短道速滑女子500米金牌。   张虹,2014年索契冬奥会速度滑冰女子1000米金牌。   武大靖,2018年平昌冬奥会短道速滑男子500米金牌。   让我们共同期待2022年北京冬奥会的金牌时刻! +当天,波兰执政党法律与公正党主席卡钦斯基宣读了一份报告,表示波兰政府将向德国寻求6.2万亿兹罗提(约合9万亿元人民币、1.3万亿美元)赔偿,以弥补二战期间纳粹德国入侵和占领造成的损失。 波兰总理莫拉维茨基当时也表示,这份报告是“从德国重新获得赔偿的重要一步”,“没有真相和赔偿,波德之间就无法实现真正的和解”。 但在9月1日晚些时候,德国外交部发言人在发给路透社的一封电子邮件中写道,“德国政府的立场没有改变,即赔偿问题已经结束。” 纳粹德国于1939年9月1日入侵波兰,随后占领波兰5年多。 +/CVPR2022 +在北京冬奥会期间,云顶滑雪公园设置了雪上技巧、空中技巧等6条赛道,产生20块金牌。根据冬残奥会赛程安排,张家口赛区云顶滑雪公园将设置障碍追逐和坡面回转2条赛道,产生8块金牌。目前,赛道塑形工作已经基本完成。 在冬残奥会期间,云顶滑雪公园保留原有的障碍追逐赛道,对赛道起点、长度和落差进行调整,适配冬残奥会比赛项目。同时,新塑造一条长550米的坡面回转赛道,举办残奥单板滑雪大项的比赛,2条赛道共产生8块金牌。 +2022-2023赛季欧洲冠军联赛于2022年9月15日拉开战幕,决赛于2023年5月29日在俄罗斯圣披德堡体育场进行。 欧冠 欧洲杯 中超 德甲 梅西巴黎圣日耳曼 德布劳内曼城 托马斯-穆勒拜仁慕尼黑 本泽马皇家马德里 莱万多夫斯基拜仁慕尼黑 菲尔米诺利物浦 违法和不良信息举报邮箱:2084106351#qq.com 版权投诉与合作邮箱:2084106351#qq.com CopyRight©2020-2023 kuzq. +任命两位首席运营官,则是海底捞在2021年8月新增七位年轻执行董事后,实现管理团队年轻化的又一举动。据了解,海底捞管理团队日趋年轻化,与其接班人计划息息相关。2020年,海底捞曾启动接班人计划,将管理人员的选拔机制面向所有员工开放,计划周期为10至15年。   从服务员到海底捞CEO   杨利娟的经历颇为传奇,为帮家里还债,杨利娟早早辍学到了简阳县城,干起了服务员。因为机智利索,被上门吃饭的张勇一眼看中,开出160元工资挖她,这比她当时120元的工资高出了不少。 +“狂花”乐队经纪人,彭莱的铁杆好友。业务能力虽然一般,但他凝聚力强,是乐队不可缺少的一分子。哪怕日后脱离了摇滚圈,当了火锅店老板,他依旧内心火热,从来没有放弃摇滚精神。年轻时与许多结婚生子,儿子未满四岁时,两人离婚。其后,想与彭莱一起重振“狂花”乐队。 彭莱与白泽奇之女,独立有主见,带着北京女孩特有的大咧咧性格。 +不过,此访也谈不上是“破冰”,因为中美(高层之间)此前已经有了一些接触:5月10日至11日,中共中央政治局委员、中央外事工作委员会办公室主任王毅和美国总统国家安全事务助理沙利文在维也纳会晤(编者注:“气球事件”以来两国最高级别的接触);5月25日至26日,中国商务部长王文涛赴美,同美国商务部长雷蒙多、美国贸易代表戴琪举行会谈。   因此,布林肯此访只能说是中美愿意结束前段时间的僵冷状态,继续推进高层互动,试看能否处理两国关系中的一些突出问题,以及推动两国在部分问题上的协调与合作。 +2011年时,中欧班列(前身)开行列数为17列,发送货物仅1000标准集装箱(TEU)。2013年“一带一路”倡议提出后,2014年的开行列数达到308列。2021年,中欧班列开行列数达到15183列,发送货物1464000TEU,相比2011年扩大了接近1000倍。 2021年7月27日,首趟联程运输的中越、中欧班列成功发车 中欧班列的发展势头还在持续。RCEP生效后,激活了东北亚物流和东亚域内航路,实现了中欧班列与中国·东盟跨境运输的衔接。最重要的是“一带一路”与RCEP实现了联动。陆上丝绸之路与海上丝绸之路相融合,使东亚地区的物流供应链发生了深刻变革。 +导语 北京铁路部门提醒,北京各火车站严格落实进出站旅客测温制度,做好测温工作。在进站口对乘车旅客进行100%北京“健康宝”健康码查验,绿码通行,红码和黄码劝返。   ➤2022年春运火车票什么时间开售?   根据火车票15天预售期安排,春运首日火车票1月3日开售,1月17日可以购买1月31日除夕当日的火车票。2022年除夕为腊月二十九,即1月31日。根据火车票15天预售期安排:   1月15日可以购买1月29日(腊月二十七)的火车票;   1月16日可以购买1月30日(腊月二十八)的火车票; +前后4年,徐梦桃一共获得了21个世界杯冠军,同时拥有世界第一难度动作,总积分排名世界第一。 带着这样的光环,徐梦桃参加了2014年索契冬奥会,并在自由式滑雪项目比赛中收获了银牌。成熟、稳重、自信,此时徐梦桃已经扛起了中国自由式滑雪空中技巧项目的大旗。冲击2018年平昌冬奥会的金牌是她不二的目标,然而天有不测风云,2016年初,徐梦桃再受重伤,这次是左腿前十字交叉韧带断裂,伤病直接影响了她在平昌冬奥会上的发挥,最终第9名的成绩令人遗憾。 +最佳电视剧《觉醒年代》   优秀电视剧 《百炼成钢》、《对手》、《功勋》、《绝密使命》、《跨过鸭绿江》、《人世间》、《山海情》、《装台》   最佳电视剧编剧龙平平《觉醒年代》   最佳电视剧导演李璐《人世间》   最佳女主角殷桃《人世间》   最佳男主角雷佳音《人世间》   中国文联终身成就电视艺术家 吕中、周振天 温馨提示:微信搜索公众号长沙本地宝,关注后在对话框回复【金鹰】可获2022金鹰节、最佳男女主角、最佳电视剧、最佳男女配角名单。 分享本文到: +春节档是中国影市一年当中最重要的档期,从2018年开始,几乎每年春节档的票房体量都超过50亿元(排除新冠疫情刚暴发时的2020年),比如2018年春节档67.71亿元,2019年春节档59.05亿元,2020年春节档1840.42万元,2021年春节档78.43亿元,2022年春节档60.4亿元。2022年对中国影市来说也是比较难熬的一年,但经历了坎坷之后,中国电影人终于在这个兔年春节交出了比较优异的“成绩单”。 +2023年土耳其-叙利亚地震,是指当地时间2023年2月6日凌晨4时17分发生在土耳其南部接壤叙利亚边境的强烈地震。地震震中位于土耳其加济安泰普省(北纬37.174度,东经37.032度)。依据美国地质调查局资料,震级为MW 7.8,震源深度为10.0公里,最大震度为IX(9)度。[3]地震发生后的凌晨4时17分至4时36分共发生3次地震,规模介于5.6至6.7之间。加济安泰普省附近的赛普勒斯、叙利亚、黎巴嫩、以色列、约旦、伊拉克均有震感[4]。 +第20届男排世锦赛将于8月26日至9月11日在波兰和斯洛文尼亚两国三地举办,共有24支球队参赛。 世界顶尖男子**排球**国家队将在世锦赛赛场上再度展现自己的实力,向世界冠军头衔发起冲击。 2020年东京奥运会男排比赛落下帷幕1年后,24支世界顶尖男子排球国家队将在斯洛文尼亚和波兰再度向世界冠军头衔发起冲击,2022年男排世锦赛将在8月26日至9月11日进行。 +高盛报告预测,在下一个十年间,全球GDP每年将提高7%。不过,AI的最终影响将取决于其能力和采用时间表。 哪些工作风险更大? 根据高盛的这份报告,相比蓝领工作,坐办公室的白领受AI冲击的可能性更高,其中行政人员、法律工作者、工程师等岗位面临的风险较大。 具体而言,在美国,行政人员的工作内容可被AI取代的比例最高,达到46%。随后是法律相关工作中的44%及建筑与工程工作中的37%。 在生命、物理和社会科学领域相关工作中,可被AI取代的工作内容占比达36%,财务和业务运营工作中的相关占比达35%。 +劳荣枝二审上诉时,提出了多个上诉理由,在程序上,辩护人提出劳荣枝案系重大刑事案件,一审采用三人合议庭而不是七人合议庭,程序违法,且对于一些情节没有排除和怀疑,请求江西省高级人民法院将此案发回南昌中院重审。 11月30日的庭上,审判长宣读了南昌、温州、常州、合肥四起案件的犯罪事实。审判长认为劳荣枝所有上诉理由均不成立。 +从出游人次来看,今年国庆假期出游人次同比减少18.2%,按可比口径恢复至2019年同期的60.7%。从旅游收入来看,今年国庆假期国内旅游收入同比减少26.2%,恢复至2019年同期的44.2%。旅游收入的恢复速度不及出游人次。 国庆假期出去玩的人比今年之前几个假期都多,花钱跟相同天数的春节假期差不多。从单日平均值来看,据界面数据计算,国庆假期单日出游约0.6亿人次,与春节假期相比增加近7成。国庆假期日均旅游收入约410.3亿元,与春节假期基本持平,略降不到1%。 另据交通运输部,10月1日至7日,全国铁路、公路、水路、民航预计发送旅客总量约2. +��位表↓↓↓ 2023年国考职务表可登录“中央机关及其直属机构2023年度考试录用公务员专题网站”(http://bm.scs.gov.cn/kl2023)【相关下载】栏目下载《2023年度招考简章》获取。 来源:红网 作者:宋芳 编辑:翁子茜 本文为湖南频道原创文章,转载请附上原文出处链接和本声明。 本文链接:https://hn.rednet.cn/content/2022/10/24/11972762. +太子儒雅得体,李茂随意松散,两人日常行为举止差异非常大。 不管太子怎么教,李茂总是状况百出。然而,有一秒,李茂突然一本正经说了一句:“用你说嘛?”那神态那语气,也不能说和太子毫无关系,只能说一模一样。 所以,他们会不会在某个时刻真的互换了身份呢? “互换身份”这个设定被用过那么多次,每部影片都有不同,《李茂扮太子》会不会有特别出乎意料的设计? 以上种种也只是我们的一些猜测,影片究竟如何?只能等它上映之后自行去电影里解锁了。就目前来看,还是很期待的。 一整年“哭片”那么多,也让我们笑一场吧! +微软为什么甘愿花如此高价也要吞下动视暴雪?微软和动视暴雪能擦出什么火花?   微软的游戏梦   微软此次吞下动视暴雪下了多大的决心?   据估算,微软此次收购动视暴雪溢价约45%,也就是说微软是以高出动视暴雪股价的情况下购入的,而且微软2020-2021财年经营现金净流量为767.4亿美元,这笔687亿美元的支出意味着微软用掉了11个月的经营净现金流。   微软的决心源于有一个“游戏梦”,微软对“游戏梦”的追逐可以说已经到了执拗的地步。这从2000年前后微软赔本连吆喝都没赚上的XBOX计划就可以看出。 +2021到2022年cba总冠军 +2022年主城都市区常住人口为2122.72万人,较2021年增加4.09万人,增长0.2%,占全市常住人口比重为66.1%,占比提高0.1个百分点。其中,中心城区常住人口为1047.76万人,增加8.77万人,增长0.8%,占比为32.6%,提高0.2个百分点;主城新区常住人口为1074.96万人,减少4.68万人,占比为33.5%。 渝东北三峡库区城镇群人口总量小幅减少,常住人口为804.14万人,比2021年减少3.48万人,占比为25.0%,下降0.1个百分点。 渝东南武陵山区城镇群常住人口为286.48万人,比2021年增加0.30万人,占8.9%,占比与2021年持平。 +国乒参加2023年德班世乒赛名单   男单:樊振东、马龙、王楚钦、梁靖崑、林高远   女单:孙颖莎、陈梦、王曼昱、王艺迪、陈幸同   男双:樊振东/王楚钦、林高远/林诗栋   女双:孙颖莎/王曼昱,陈梦/王艺迪   混双:王楚钦/孙颖莎,林诗栋/蒯曼   * 混双决赛,王楚钦/孙颖莎以3比0战胜日本的张本智和/早田希娜卫冕成功——   2023年世乒赛产生首项冠军,中国队的王楚钦/孙颖� +扫码打开虎嗅APP 本文来自微信公众号:数据线SJX (ID:shujuxian_kuaikan),作者:李童 孟令稀,题图来自:视觉中国 今年中秋节假期,国内出游人次、旅游收入虽不及去年同期,但跟今年清明、端午两个小长假相比,人们更愿意花钱了。 据文化和旅游部数据中心测算,2022年中秋节假期,全国国内旅游出游7340.9万人次,实现国内旅游收入286.8亿元。 疫情以来,因2020年中秋、国庆连休8天,在休假天数相同的两个中秋假期中,今年中秋假期不及2021年同期。 从出游人次来看,今年中秋假期出游人次同比下降16.7%,按可比口径恢复至2019年同期的72.6%。 +© 2023 RFI – 版权所有版权所有。法广对非本网站内容不承担责任。通过 ACPM/OJD 认证。 英国白金汉宫周六宣布,女王伊丽莎白二世的国葬定于本月19日星期一在伦敦西敏寺举行。预计包括美国总统拜登及法国总统马克龙在内的世界各国的领导人将云集伦敦,参加女王葬礼。英国安全部门正在准备英国史上“规模最大的维安和保护行动”。英王查理三世长子、王储威廉,联同妻子凯特及弟弟哈里王子夫妇,到温莎堡外与悼念离世女王伊丽莎白二世的民众会面。 +史上最挤的春节档, 猜猜哪些电影会在不久的将来,悄悄改档? +根据对全国31个省(区、市)的抽样调查和农业生产经营单位的全面统计,2021年全国粮食播种面积、单位面积产量和总产量分别如下:  一、全国粮食播种面积117632千公顷(176447万亩),比2020年增加863千公顷(1295万亩),增长0.7%。其中谷物[1]播种面积100177千公顷(150266万亩),比2020年增加2213千公顷(3320万亩),增长2.3%。  二、全国粮食单位面积产量5805公斤/公顷(387公斤/亩),比2020年增加71.5公斤/公顷(4.8公斤/亩),增长1.2%。其中谷物单位面积产量6316公斤/公顷(421公斤/亩),比2020年增加20.8公斤/公顷(1. +美国电影艺术与科学学院2023年1月24日公布第95届奥斯卡奖提名名单,3月12日正式颁奖。 +流浪地球二上映俄罗斯 +2022年U19国足第二期集训名单介绍 2022中超联赛在亚洲的排名 亚运会对于U23球员的年龄要求可能放宽 皇马队史最佳阵容 C罗 齐达内在列 皇马欧冠逆转三连的秘密 姆巴佩家人下周与皇马谈判 阿布时代切尔西获得过的冠军数量盘点 2022亚冠小组赛山东泰山和广州队成绩盘点 +2023-08-07 16:24 来源:北京本地宝管理频道 2023-08-07 13:23 来源:北京本地宝管理频道 2023-08-07 16:44 来源:海淀体育 【导语】:2022年1月7日晚,央视《新闻联播》消息,张艺谋担任2022年冬奥会开闭幕式总导演。   2022北京冬奥会开幕式总导演是谁?   ——张艺谋   【张艺谋简介】   中国电影“第五代导演”代表人物,早期执导的《红高粱》、《大红灯笼高高挂》、《秋菊打官司》等电影斩获多个国内外奖项。 +二十三、外长们回顾金砖国家同其他新兴市场国家和发展中国家拓展合作的努力,支持根据金砖国家事务协调人2021年通过的修订版《金砖国家建章立制文件》,通过包容、平等和灵活的作法和倡议,进一步推进金砖外联活动和“金砖+”合作。 二十四、外长们支持通过讨论推进金砖国家扩员进程,强调有必要明确相关指导原则、标准和程序。 二十五、巴西、俄罗斯、印度、南非支持中国作为2022年金砖国家主席国,以“构建高质量伙伴关系,共创全球发展新时代”为主题开展工作。四国全力支持共同推动金砖国家领导人第十四次会晤取得圆满成功。 中华人民共和国外交部 版权所有 +其中5月9日至6月7日在法国本土传递,随后火种将从布雷斯特港口出发开始越洋传递,途经五个法国海外省后于18日返回尼斯继续传递,直到7月26日火炬最终在开幕式上点燃。   整个传递路线将包括法国64个省份和地区,到访超过400个城镇。在火炬手选择方面,组委会此次创意性地提出“集体火炬手”的概念——即以集体形式作为火炬传递的一棒,其中1人执棒带领共计24人的团队参加接力。组委会计划共选拔10000名执棒火炬手,其中3000名火炬手将以集体接力的形式参加。 +国家体育总局版权所有 国家体育总局体育信息中心承办 国家体育总局通讯地址:北京市东城区体育馆路2号 邮政编码:100763 联系电话:010-87182008 信访电话:010-87182116 / 87182045  网站联系电话:010-87182998 / 87182280 网站标识码:bm33000001京ICP备05070991号 京公网安备 11010102004525号 +路透社報導,俄羅斯早於7月宣布,將於8月30日至9月5日舉行「東方-2022」演習(Vostok-2022)。俄方當時表示,有部分外國軍隊會參加,但沒有說明是哪些國家。 中國國防部17日表示,參加「東方-2022」演習是與俄羅斯正在進行的雙邊年度合作協議的一部分。該部聲明說,軍演「旨在深化與參與國軍隊的務實友好合作,提升參與方戰略協作水平,增強應對各種安全威脅的能力。 +立法会是香港的立法机构,亦是香港的一院制议会。第七届立法会(英语:Seventh Legislative Council)经2021年12月19日的选举产生,90名议员分别从地方选区普选20位、功能团体间选30位、选举委员会产生40名。任期原由2020年10月1日开始,但因全国人大常委会通过《全国人民代表大会常务委员会关于香港特别行政区第六届立法会继续履行职责的决定》,延长第六届立法会任期不少于一年。 +2022年2月5日 2022年2月4日 2022年1月24日 2022年1月28日 2021年12月16日 免费下载 纽约时报中文网iOS 和 Android App +搜索 2022-12-26     一、全国棉花播种面积3000.3千公顷(4500.4万亩),比2021年减少27.9千公顷(41.8万亩),下降0.9%。     二、全国棉花单位面积产量1992.2公斤/公顷(132.8公斤/亩),比2021年增加99.6公斤/公顷(6.6公斤/亩),增长5.3%。     三、全国棉花总产量597.7万吨,比2021年增加24.6万吨,增长4.3%。   国家统计局    2022年12月26日   2022年全国及各省(区、市)棉花生产情况   地区 播种面积 (千公顷) 单位面积产量 (公斤/公顷) 总产量 (万吨) 全国总计 3000.3 1992.2 597. +2023-08-07 16:42 来源:北京本地宝管理频道 2023-08-07 16:38 来源:北京本地宝管理频道 2023-08-07 13:53 来源:北京本地宝管理频道 2023-08-07 13:54 来源:北京本地宝管理频道 2023-08-07 16:24 来源:北京本地宝管理频道 2023-08-07 13:23 来源:北京本地宝管理频道 2023-08-07 16:44 来源:海淀体育 【导语】:2023年普通高等学校招生全国统一考试及普通高中学业水平等级性考试将于6月7日至6月10日进行,高考成绩公布时间也确定了。   2023北京高考查分网站入口是哪个? +2023年1月22日,利雅得胜利凭借塔利斯卡的进球1-0击败达曼协作,C罗迎来沙特联赛首秀。 2023年1月27日,利雅得胜利1-3不敌吉达联合无缘沙特超级杯决赛,C罗无缘沙特赛场首冠。 2023年2月3日,利雅得胜利在客场2-2逼平哈萨征服,C罗最后时刻绝平打入沙特联赛首粒进球。2月9日,利雅得胜利客场4-0击败麦加统一,C罗首次在沙特赛场上演大四喜。2月17日,利雅得胜利2-1击败布赖代合作,C罗上演助攻梅开二度。 +1949年5月由中国人民革命军事委员会任命市长1人、副市长3人,1949年12月中央人民政府任命副市长1人。 1950年10月,上海市二届一次各界人民代表会议选举市长1人、副市长2人;1952年7月中央人民政府政务院任命副市长1人;1953年3月政务院任命副市长3人。 +销售费用猛增 由于公司主要销售营养保健品,需要大量品牌营销推广投入,所以汤臣倍健的销售费用一直都不小。 2018年至2020年,汤臣倍健销售费用分别为12.8亿、16.5亿和18.18亿元,接近营收的29%。在2021年提出渠道变革后,汤臣倍健的销售费用增长至24.78亿,已接近营收的三分之一了。同时,市场推广费也由2.41亿猛增至4.78亿,平台费用也由0.91亿增加至4.89亿元。 2021年7月,为支持公司更健康和可持续的发展战略,汤臣倍健启动线下销售变革和线上线下一体化经营相关变革,平台费用与品牌推广费也进一步增加。 +开幕式于北京当地时间2月4日举行,举办日期恰逢中国农历新年正月初四及传统节气立春,开幕式节目以“构建人类命运共同体”为核心表达,以“简约、安全、精彩”为创作原则,加上2019冠状病毒病疫情防疫需要、此次冬奥会开幕式时长、人员数量相较往届奥运会均有一定程度的缩减。闭幕式则于北京当地时间2月20日举行。 北京冬奥会分为北京赛区、延庆赛区、张家口赛区。 +实施30年,继2005年、2018年两次修改后,妇女权益保障法完成一次大修。10月30日,新修订的妇女权益保障法经十三届全国人大常委会第三十七次会议表决通过,自2023年1月1日起施行。 修订后的法律由之前的9章61条增至10章86条。 +根据官方披露数据,特斯拉在2022年的最后一个季度实现新车交付40.5万辆,产量则达到44万辆。从具体的车型来看,特斯拉在2022年第四季度总共生产了约2万辆Model S和Model X,以及合计约42万辆的Model 3和Model Y;交付层面上,特斯拉实现交付约1.7万辆Model S和Model X,以及约38.8万辆Model 3和Model Y。 放眼全年,特斯拉在2022年总共交付131万辆新车,产量约为136.9万辆,同比增长40%,并成就了其史上首次产销“双破百”。其中,特斯拉Model 3和Model Y两款车型在2022全年合计交付了124.7万辆,依旧是支撑其销量的中流砥柱。 在业内看来,特斯拉2022年的生产端数据更具价值。 +第14轮则紧接着在7月2日和3日进行,之后在7月7日-8日、7月11日-12日、7月16日-17日再连续进行中超第15轮、第16轮和第17轮的角逐。其中7月11-12日进行的第15轮为全年第5次双赛。进入到8月份后,中超将只剩下1次双赛,即第21轮将穿插安排在8月8-9日进行。 从一周双赛的时间安排来看可以很容易得出结论,本赛季中超赛程编排属于前紧后松,联赛进入8月前将进行19轮比赛,而最后三个月时间,联赛轮次也就只有11轮。之所以出现这样的情况,是因为国际比赛日和亚冠联赛的双重影响。 +从前3季节目的播出时间来看,《浪姐1》首播时间是2020年6月12日,《浪姐2》首播时间是2021年1月22日,《浪姐3》首播时间是2022年5月20日,5月中上旬这个时间点很接近《浪姐3》的首播时间。 值得注意的是,《浪姐》前3季播出的时间都是星期五,周五观看节目也成了一种习惯。以此为依据,《浪姐4》播出的时间只有3个选项,5月5日、5月12日、5月19日。按照往年惯例,《浪姐》录制三公那一周的周五节目上线播出,目前节目只完成一公舞台的录制,5月5日和5月12日上线时间很赶,而5月19日节目播出的可能性非常大。 +5%,进入负增长,基数较低,所以在2020年低基数影响下,2021年美国GDP实现了较高的增长率。 同时,美国GDP数据也公布了,根据统计,2021年美国GDP总量首次突破23万亿美元大关,达到23.03万亿美元,依然是全球第一大经济体,要知道2020年美国GDP为20.89万亿美元,GDP增量超过2万亿美元。 但是,如果按照正常计算,美国GDP增长率应该是10.24%,为什么GDP增长率却是5.7%?事实上,10.24%属于名义增速,其中包括了通胀水平等因素,抛开这些因素之后就会得出GDP实际增长率,也就是5.7%。 +64亿元,宁夏、青海、西藏经济总量相对较小,居后三位;从经济增速来看,西部地区在采矿业及部分原材料行业生产较快增长等因素带动下,除青海(2.5%)与全国平均水平持平之外,其它省(市、区)经济均保持较快增势,涨幅明显高于全国整体水平(2.5%),其中宁夏(5.3%)、新疆(4.9%)、西藏(4.8%)位居前三,分别高出全国平均水平2.8、2.4、2.3个百分点;对比2020—2022上半年西部各省(市、区)经济增速来看,2022年上半年经济增速较2021年上半年同期有较大回落、整体接近于2020年上半年水平,其中青海降幅最大,达到9. +东浩兰生集团   2023世界人工智能大会是东浩兰生集团项目团队总承办世界人工智能大会的第五年。多年来,集团旗下的会展集团发挥专业优势,负责大会的整体策划、参会组织、论坛筹备、展览展示、运营服务以及宣传推广等。本届大会企业数量、展览面积均创历届之最。 +君子盟什么时候播出 君子盟播出时间:2023年1月30日在腾讯视频播出。该剧是由井柏然、宋威龙主演。 君子盟播出时间及播放电视台 君子盟播出平台:腾讯视频。 剧情发布平台:陪你看剧情网 寂静的大海 前夜 无神之地不下雨 暖叔老区的逆袭人生 半城风月 恋爱先生 古乐风华录 全职爸爸 那年匆匆后 沪上十年 君子盟王砚扮演者是谁?君子盟王砚结局如何? 发布时间2023-02-17 15:09:54 君子盟陈筹扮演者是谁?君子盟陈筹结局是什么? +至今,人们已经拍摄了包括中国版《忠犬八公》在内的三部以“八公”为原型的电影。其中,1987年日本版本的《忠犬八公物语》(新藤兼人为编剧)上映,以54亿日元票房佳绩成为当年日本最卖座的影片。之后好莱坞从日本购得版权,于2009年拍摄美国版《忠犬八公》,把场景挪到了美国本土,主角是一只可怜的流浪狗,影片再次用狗与人之间深厚情感打动观众。十多年过去,美国版《忠犬八公》共有136万人评价,豆瓣评分9.4,成为豆瓣电影TOP250中排名第12的电影。 +2023年土耳其-叙利亚地震,是指当地时间2023年2月6日凌晨4时17分发生在土耳其南部接壤叙利亚边境的强烈地震。地震震中位于土耳其加济安泰普省(北纬37.174度,东经37.032度)。依据美国地质调查局资料,震级为MW 7.8,震源深度为10.0公里,最大震度为IX(9)度。[3]地震发生后的凌晨4时17分至4时36分共发生3次地震,规模介于5.6至6.7之间。加济安泰普省附近的赛普勒斯、叙利亚、黎巴嫩、以色列、约旦、伊拉克均有震感[4]。 +任何外部势力对此次行政长官选举结果的攻击抹黑、对香港事务和中国内政的横加干涉,都是逆历史潮流而动的不自量力,是对香港真正民意的选择性失明失聪,是自取其辱的拙劣政治表演,蛊惑不了包括香港同胞在内的14亿中国人民,阻挠不了香港由乱转治、由治及兴的历史大势,动摇不了中国政府坚决捍卫国家主权、安全和发展利益的坚定决心。 发言人强调,香港是中国的香港,香港特区行政长官选举纯属中国内政。 +39亿元,并在2021年达到78.43亿元的档期票房最高记录。受疫情影响,2022年春节档观影总人次出现下滑,从2021年的1.6亿人次降至1.14亿人次。由于全年票房增长承压,春节档票房占比提升趋势明显,春节档占全年票房的比重从2014年的4.93%提升至2022年的20.17%。 随着疫情防控政策不断优化,全国电影市场正在迎来复苏。灯塔专业版数据显示,去年12月以来,全国影院营业率大幅回升,由11月下旬低于40%的营业率,恢复至今年1月中旬的80%以上。 +2023年1月18日,电影在CINITY影厅举办首场业内看片活动,不少业内人士与《流浪地球2》的科学顾问团队成为首波观众提前观影。1月19日,终极预告片发布。[44]1月20日,在北京举办“比一好一点”全国首映礼,导演郭帆,剧本指导王红卫,领衔主演吴京、李雪健、沙溢、宁理、王智及歌手周深等到场,监制刘慈欣和特别演出刘德华特别连线[45]。 +10%,扣除报废注销量比2021年增加526万辆,增长67.13%。其中,纯电动汽车保有量1045万辆,占新能源汽车总量的79.78%。2022年全国新注册登记新能源汽车535万辆,占新注册登记汽车总量的23.05%,与上年相比增加240万辆,增长81.48%。新注册登记新能源汽车数量从2018年的107万辆到2022年的535万辆,呈高速增长态势。 全国机动车驾驶人数量达5.02亿人,其中汽车驾驶人4.64亿人,占驾驶人总数92.54%。2022年,全国新领证驾驶人2923万人。“轻型牵引挂车”准驾车型(C6)驾驶人数量达44万人。 +该处先后发现了水平安定面、垂直尾翼、方向舵、左右发动机、左右大翼、机身部件、起落架及驾驶舱内部件等主要残骸。 此外,搜索人员在距离主撞击点约12公里处发现右翼尖小翼后缘。 搜寻工作进行六天之后,去年3月26日,应急处置指挥部宣布机上132人全部罹难。 据国际航空追踪网站FlightRadar24披露数据,MU5735航班在06:20:43 GMT从巡航高度2.91万英尺开始急速下降,06:21:55 GMT跌至7425英尺(2263米),即飞机在1分12秒间以每秒301英尺(92米)速度急降。 +陈芋汐则表示,比赛中的入水效果和空中姿态比较松散,还需要在训练中进一步磨炼技术动作。 根据赛程,两人将在21日的女子10米跳台决赛中为冠军展开较量。对于这场对决,陈芋汐表示:“自己一个人站在平台上,身边少一个搭档,虽然会觉得不一样,但还是希望自己能放平心态,把单人的比赛去完成好。”全红婵的回答依旧简练:“做好自己就好了。” 3月19日,陈芋汐(左)/全红婵在比赛中。 +税务局公告里只披露了邓伦偷逃个税款4765万,但是并没有说他到底有多少收入是偷逃税的,我们可以给大家算出来。算完之后,你就会发现,粉丝再多的洗白套路在真相面前都是可笑的。 邓伦偷税逃税的套路和他的“前辈”们差不多,都是虚构业务转收入,就是把个人劳务报酬所得,包装成个人独资企业的经营所得,利用税收洼地的核定征收政策,低税率纳税。那些XX工作室,要么是个体户,要么是个独,或者是合伙企业,这些主体都不是法人,不交企业所得税,而是以赚取的利润,直接交个税中的“经营所得”。 +9公里,共规划设置10座车站,线路运行时速可达100公里。 2021年12月31日已开通试运营6座车站,经过相关单位全力攻坚,北太平庄、平安里、太平桥、景风门等4座车站现已完成开通前各项调试和测试任务,相关测试指标均合格达标。4座车站开通后,地铁19号线一期实现全线10座车站开通试运营。 该线路采用“大站快车”运营模式,平均站间距2.3公里,从新宫到牡丹园单程用时约30分钟。该线路经过南苑边缘组团、金融街等重点功能区域,跨越丰台、西城、海淀三个城区,开通运营后有望缓解金融街等地区的交通压力。 +曼谷诗丽吉王后国家会议中心 2022年泰国APEC峰会是2022年在泰国举行的亚太经济合作组织会议。[1][2][3]当年会议的主题是“开放、连接、平衡。” [4] 2022年泰国APEC峰会的log由曼谷朱拉隆功大学建筑系学生设计。[1] [5][6] +数日之前,东吴证券披露了2021年度业绩快报,经营业绩显著增长,2021年,实现营业收入92.45亿元,同比增长25.68%;归属于上市公司股东的净利润23.92亿元,同比增长40.10%。   细数其往年业绩,均持续保持较快增长,2018年-2020年营业收入分别为41.62亿元、51.30亿元和73.56亿元;净利润分别为3.58亿元、10.37亿元和17.07亿元。   东吴证券表示,2021年,国内资本市场交投活跃,公司积极把握市场机遇,大力拓展各项业务,收入结构持续优化,经营业绩显著增长。 +的确,中美间这几年发生的事情降低了两国的互信。但该飞艇确实是气象飞艇,而非间谍气球。美国在这件事上夸大其词了。 问:为什么? 答:因为这很常见。这种事情经常会发生,美国也一样。经常会看到美国的间谍气球,或者用于其他用途的气球。此次事件中,中国政府收到美方通报后立即开展了调查。查实该飞艇属民用性质,用于气象等科研。中方对飞艇因不可抗力误入美国向美方表达了遗憾。我感觉起初美方是接受了中方解释的,因为五角大楼也表示该飞艇不会对美国造成地面军事和人员威胁。他们要求中方尽快让该飞艇离开美国空域。 +《心居》是中华人民共和国一部电视剧,根据鲁迅文学奖得主滕肖澜同名小说改编,讲述的是上海市的一对姑嫂冯晓琴(海清饰)和顾清俞(童瑶饰)的生活故事。该电视剧于2022年3月17日起在爱奇艺、浙江卫视中国蓝剧场[2]、东方卫视播出。该电视剧由滕华涛执导,海清、童瑶、张颂文、冯绍峰等人出演,上海佳和晖映文化传媒有限公司、上海阅文影视文化传播有限公司等公司联合出品[3]。该电视剧与《人世间》、《1921》并称腾讯影业与阅文影视的“时代旋律三部曲”。[4] +上海市生产总值 2022年全年 注:按照我国地区生产总值统一核算和数据发布制度规定,地区生产总值核算包括初步核算和最终核实两个步骤。经最终核实,2021年,上海地区生产总值现价总量为43653.17亿元,按可比价格计算,比上年增长8.3%。 地区生产总值统计范围、采集渠道及主要指标解释 一、统计范围 所有在本地区经济领土内具有经济利益中心的经济单位都应该纳入地区生产总值(GDP)统计范围,即在本地区经济领土内拥有一定的活动场所,从事一定规模的经济活动,并超过一定时期的经济单位创造的最终产品和服务的价值。 二、采集渠道 地区生产总值(GDP)由国家统计局统一核算。 +总督科尔在未寻求总理意见的情况下,召见了总理并免除了他的职务,同时任命反对党领袖福瑞澤为总理。此决定在当时以至现在都颇受争议。 同样,虽然法律上总督是由君主任命,而且按照惯例,总督的任命和免职都由总理通过对君主的建议來决定,但在英国的君主自1930年代以来也从不干预澳洲的宪政。 +两份样本均用一种特制的一次性容器保存,锁上后需用特制的机器才能打开。A瓶样本当时就检测,B瓶样本留存。如果A瓶样本被检出呈阳性,运动员可以申请对B瓶样本进行检测。按照要求,B瓶样本的复检应交由相同实验室的不同人操作。大多数运动员在A瓶样本检测呈阳性后都会选择开启B瓶样本重检,但通常情况下“翻盘”概率极低。一旦B瓶样本复检结果仍为阳性,也将判定该运动员的兴奋剂检查结果呈阳性。 除要求开启B瓶样本外,吕小军也有权提交与阳性检测结果相关的书面解释和证明材料,并申请召开听证会。 +这证明了亚洲国家在举办世界级赛事的能力。” 世界泳联2019年曾宣布俄罗斯喀山和匈牙利布达佩斯是2025和2027年的游泳世锦赛举办城市,但相信是鉴于俄罗斯和乌克兰的战争形势,最终只好转移举办地。 +在7月20日公布第36届大众电影百花奖提名情况时,中国金鸡百花电影节官方微博曾透露,参评影片范围限于取得国家电影局颁发的《电影公映许可证》、观影人次达100万以上、在当届评奖周期(2020年2月1日至2022年2月28日两年度)内全国城市影院发行放映的国产影片。本届符合参评条件的影片共108部。 +凡报名参加上海电视节白玉兰奖电视剧类别的评选, 即被视为承认并接受本章程。     2.本章程以中文拟定并翻译成英文,如英文版与中文版发生冲突,以中文版为准。     3.电视节组委会负责修订和解释本章程,最终解释权归电视节组委会所有。 +通信产业资深观察家项立刚则对北京商报记者表示,苹果在印度早就有销售,但是因为它的价格非常贵,所以和中国的手机、三星以及本土手机相比,没有太大竞争力,所以也没有旗舰店,一直是通过他们自己的销售体系来代售。   在2020年2月,苹果CEO库克就告诉投资者,苹果商店将在2021年扩张到印度,他不满足于把零售业务交给特许经营合作伙伴。库克在2020年的年度股东大会上称:“我不希望别人来替我们经营这个品牌。”   项立刚认为,在印度开旗舰店,在某种程度上说明苹果希望在印度市场有更多的作为、更多的拓展。 +“姗姗来迟的访问” 北京时间6日下午5时左右,耶伦乘机抵达北京。美联社称,这是耶伦首次以美国财政部长身份访华。报道称,这是拜登政府试图解冻美中关系努力的一部分。 与布林肯访华一样,耶伦此次访华也是“经中美双方商定”。据中国财政部网站此前的消息,经中美双方商定,耶伦于7月6日至9日访华。显然,耶伦这次访华时间比较长,有4天时间,是布林肯访华时间的两倍。 法新社称,美中双方目前都未公布耶伦在京的日程。不过,美国财政部官员对法新社称,耶伦可能会与多位中国官员或前官员就两国及全球经济等问题交换意见。 +这些球队都有着很高的水平和实力,与中国男篮相比可能会更加难以对付。 2.战术和执行力:与国际顶尖球队相比,中国男篮在战术和执行力方面可能存在差距。他们需要在比赛中更好地沟通和协调,才能确保达到预期目标。 3.状态和体能:在比赛中,球员的状态和体能也是非常重要的因素。如果球员们能够保持良好的状态和充足的体能,他们就有更大的机会获胜。 4.发挥自身实力:中国男篮的球员们在过去几年中一直在进步,他们有着很高的潜力和实力。如果他们能够在比赛中发挥出自己的实力,就有可能获得胜利。 5.团队合作:在国际比赛中,团队合作也非常重要。 +2022年四季度由于外部通胀压力减轻和疫情反复影响,CPI出现明显走低,使得2023年我国CPI面临的翘尾因素降低,有利于全年同比增速保持较低水平。   综合来看,2023年外部通胀压力减轻,食品价格保持温和与相对较低的翘尾因素,将限制CPI的涨幅,但随着疫情防控措施优化,我国内需开启复苏进程,将推升核心CPI的修复,并主导CPI中枢的回升。预计2023年全年CPI同比上涨2.1%,略高于2022年的水平。   展望2023年,预计PPI将缓步走出2022年末的通缩状态,全年同比涨幅约为0.5%左右。 +看完这一集,千万别错过片尾的花絮。 花絮会告诉你,这古筝行动的特效是如何做出来的。 3D建模。 前期讨论,开了20多天会。 最初考虑用特效,但这特效做起来也太难了。 这玩意要做对,需要力学仿真,如此大尺度的力学仿真需要的人力和算力,都超出想象。 而且要做的特别逼真也很难。 最终决定来真的,于是他们做了这样一艘铁皮船,用钢片做的船体。 重新设计了其中每一片结构。 然后窝成船形,然后焊接到一起,再拍摄其被切碎的样子。 通过这样一个庞大的工程,才有了古筝行动的真实效果。 +你对剧中的梁冠华又有哪些方面的感受呢?欢迎关注、点赞、转发与评论。一起期待精彩。 作者原创文章,如需转载请联系,擅自转载者必究! 图片来自网络,如有侵权,请联系删除,感谢! +7%。但两国统计机构在数据表达方式上习惯不同,中国直接公布GDP的季度环比增长率,而美国公布的是季度环比增长率折合年率的数据。此外,2021年第四季度美国能够实现较高增长,很大程度上是受到补充库存的影响。按照2012年不变价计算,2021年四季度美国GDP(折合年率)环比增加3271亿美元,其中库存增加2403亿美元,对GDP增长的贡献率达到73.5%。2021年四季度库存增加额占当季GDP比例略高于0.9%,而本世纪以来美国各季度库存增加额占GDP比例的平均值为0.2%。如果库存比例与平均值持平,则2021年第四季度的GDP环比增长率仅为0.7%,折合年率为2. +即将于6月21日上映的电影《别叫我“赌神”》领衔主演周润发、袁咏仪带领全体剧组亮相助阵。 《别叫我“赌神”》剧组合影 陈凯歌重回“少年时代” 胡玫十年梦“红楼” 发布片单上的首个好消息,是于冬当场宣布陈凯歌的《少年时代》终于过审,定档8月17日将与观众在影院相见了。 《少年时代》 《少年时代》拍摄于2019年,是陈凯歌心心念念的回望青春之作。现场陈凯歌介绍,这是一部“献给青春的颂歌”,他感慨:“已经不再是少年模样,但是少年时代还在心里,少年的心依然澎湃。 +[3]在决赛中,山东泰山击败首次进入决赛的浙江队,连续三年夺得足协杯冠军。上海海港获得本届赛事的公平竞争奖,济南兴洲获得黑马奖。[4] 第一轮抽签于2022年8月15日举行,所有18支2022年中甲联赛球队参加本轮比赛。[5][6] 第二轮及后续轮次抽签于2022年9月5日举行。[7][8]中冠联赛球队泾川文汇在本轮比赛以点球大战的方式淘汰了中超劲旅北京国安,爆出冷门,这也是中冠联赛球队第三次在足协杯战胜中超联赛球队。[9] +7%,居行业第二。其中,长安乘用品牌、欧尚品牌分别实现销量96.6万辆和22.8万辆,同比分别增长20%和49%。另外,长安福特2021年实现销量30.5万辆,同比增长20.3%;林肯品牌销售新车8.9万辆,同比增长109.1%。 面向2022年,长安汽车正在加快转型步伐,在2022年全球伙伴大会上,长安汽车发布了全新数字纯电品牌——长安深蓝以及一系列的新规划、新行动等。根据规划,2022年,长安汽车将陆续推出36款新产品,其中包括19款自主品牌产品,含9款全新产品和10款改款焕新产品;8款新能源产品。 年度目标方面,2022年,长安汽车计划完成245万辆的总产销目标,同比增长6. +中新网4月18日电 综合外媒报道,当地时间18日,苹果公司位于印度的第一家旗舰店,在印度金融之都孟买开业。当天,苹果公司首席执行官蒂姆·库克在一片欢呼声中,亲自开门迎接顾客。   据法新社报道,苹果在印度的首个门店位于孟买的一家豪华购物中心,全店面积为2万平方英尺(约1858平方米)。开业当天,几百人在商店周围排队,其中一些人通宵等待。   30岁的销售主管普拉夫·梅塔于开业前在店外扎营过夜,他在接受媒体采访时表示:“我们一直很期待……我们等了很长时间了。 +相机方面,前置一颗700万像素摄像头,后置一颗1200万像素广角镜头;电池方面,内置1800mAh锂离子物理电池,30分钟可充至50%,支持Qi无线充电;外壳方面,采用与iPhone 13和Pro背板相同的超瓷晶玻璃材质,依旧支持touch iD,防水级别仍是IP67。   不过在价格上,在发布会之前,就有众多苹果爆料人士表示这是一款史上最便宜的5G iPhone,其售价有望进一步下探至3000元附近,再次拉低iPhone的售价下限。   但实际上iPhone SE 3起售价429美元起、国行3499元起,相比于上一代还涨了200元,出乎外界预料。 +简体 繁体 [美国东部] 简体 繁体 【侨报网综合讯】近日,2022亚瑟士青少年网球巡回赛广州站,一个背背篓的网球少年受到关注。经过激烈比赛,他最终夺得U14组男单冠军。 背篓少年捧起冠军奖杯 新华社报道,这名少年名叫王发,在半决赛中,他成为黑马,以6-3战胜冠军热门人选。随后在决赛中,一鼓作气以6-2战胜对手,捧起冠军奖杯。皮肤黝黑,笑容憨厚,王发背着背篓,里面放着他心爱的球拍和网球。他说,好长时间没回家,背着背篓上赛场显得格外亲切。 +倒数第二位出场的ROC选手,平昌冬奥会双人滑冠军叶夫根尼娅·塔拉索娃和弗拉基米尔·莫罗佐夫拿出了非常精彩的一套节目,跳跃以及托举的质量都非常高,在自由滑的获得最好成绩155分,总分得到239.25分。 顶着巨大压力最后出场的隋文静和韩聪组合拿出了全场唯一的辗转四周,并且以极高的艺术表现力,在自由滑获得了155.47分,在所有竞争对手发挥都非常好的情况下,总分239.88分以微弱优势获得冠军。 另一对中国组合彭程和金杨最后排在了第五位。 +2021和2022年我国研发强度持续提升,2022年我国研发经费强度跃上2.5%的高度。 《中华人民共和国国民经济和社会发展第十四个五年规划和2035年远景目标纲要》提出,“十四五”时期全社会研发经费投入年均增长7%以上的发展目标。 从总量上看,中国的研发投入经费仅次于美国,位居世界第二。2020年,中国研发经费投入规模相当于美国的49%,是日本的2.1倍,德国的2.9倍,加拿大、意大利和法国研发经费总和的2.9倍。 对比《中国研发经费2018》中G7研发投入总量数据,2016年中国研发经费投入规模是美国的44%,日本的1. +2022年6月28日,中国共产党上海市第十二届委员会第一次全体会议选举龚正为上海市委副书记[13]。 北京:殷 勇天津:张 工上海:龚 正重庆:胡衡华 +《人世间》出品人、腾讯集团副总裁程武曾公开表示:“能获得梁老师的版权授权,深感肩上的责任和重担,希望联合最优质的创作力量,共同打造一部兼具收视和社会影响力的现实题材力作。” 此时,物色一位合适的编剧,成为《人世间》电视剧改编的第一要务。这般体量和重量级的作品,对于任何编剧来说,都是巨大挑战。李路曾询问过两位朋友,一是陈道明,一是周梅森:谁来做编剧合适?两位都推荐同一个人:王海鸰。 +小米MIX4摄像头参数一览 小米MIX4存储空间有多大? 小米MIX4内存有多大? 小米MIX4处理器的主频是多少? 小米MIX4的处理器是多少? 小米MIX4屏幕的分辨率是多少? 小米MIX4屏幕尺寸是多大的? 小米MIX4快充是多少瓦的? +03万人次,比上年同期增长52.3%,按可比口径计算,恢复到2019年同期的126.9%;实现旅游收入30.45亿元,比上年同期增长75.1%,按可比口径计算,恢复到2019年同期的138.4%。重点监测的4个景区累计接待人数149.90万人次,比上年同期增长203.8%,实现旅游收入1.36亿元,比上年同期增长811.1%,其中三坊七巷接待人数87.7万人次,鼓山风景区(含鼓岭)接待人数31万人次,青云山景区集群接待人数22.7万人次,福州森林公园接待人数8.5万人次。另外“闽江之心”核心区接待游客32.62万人次,实现旅游收入2.36亿元;新区滨海度假区接待游客17.72万人次,实现旅游收入1.15亿元。 +2014年世界杯外围赛,韩国在首轮分组赛以首名出线次轮分组赛,与伊朗、卡塔尔、乌兹别克以及黎巴嫩争逐两个直接出线决赛周资格,最后韩国以较佳的得失球差压倒乌兹别克,以小组次名取得2014年世界杯决赛周参赛资格,也是韩国连续八次晋身世界杯决赛周。但南韩在决赛周表现不济,三战一和两负小组末席出局。 2018年世界杯外围赛,韩国再次在首轮分组赛以首名出线次轮分组赛,再与伊朗、卡塔尔、乌兹别克同组,同组还有中国及叙利亚。 +土耳其境内有两条主干左旋走滑断裂带——东安纳托利亚断裂和北安纳托利亚断裂,两条断裂带在土耳其东部地区汇交,地震构造十分复杂,最新构造运动强烈。这次地震就发生在阿拉伯板块与欧亚板块边界北东向东安纳托利亚断裂带西南端与近南北向死海断裂带北端交汇部位,地震破裂长度预计在300千米左右。 这条地震带向东延伸就是喜马拉雅地震带,向西延伸就到了非洲板块跟阿拉伯板块之间的边界断裂——地震同样比较集中的地中海地震带。土耳其位于这条地震带的中西部地区。 土耳其7. +全国政协十三届四次会议闭幕会 [详细] [详细] [详细] [详细] [详细] [详细] [详细] +总之,ChatGPT对于原有系统商业模式的影响更多是悬而未决的,不妨再来探讨其对于百度可能带来的利好层面。 例如,百度此前一直梦寐以求的“框计算”会实现吗?2009年8月18日,李彦宏在百度技术创新大会上提出了这个全新的技术概念。 简单来说,“框计算”就是要在百度的搜索框里,几乎能够解决用户的所有需求,相当于百度成为一切信息乃至服务的入口。此后,为了完善“框计算”概念,百度先后布局“中间页”、“轻应用”,又大手笔投资或收购一些具有巨大用户需求的垂直平台,等等。 +神舟十六号(简称神十六)是中国“神舟”系列飞船的第十六次任务和中国载人航天工程的第十一次载人飞行任务,也是中国空间站运营阶段的首次飞行任务。2023年5月30日于酒泉卫星发射中心发射,随后与天宫空间站的天和核心舱径向端口对接,与神舟十五号完成在轨轮换任务[1]。计划在轨驻留5个多月,于2023年11月返回。 +2021年,受益于全国疫情的有效管控,行业复苏较快,截至12月底,国产影片数量突破新高,达到740部。 472.58亿元票房领跑全球 从电影票房收入来看,2016-2019年,中国电影票房收入持续增长,并成功突破600亿大关。2019年,我国票房收入达641亿元,较2018年增长5.4%,增速整体呈现下滑态势。2020年,受新冠疫情影响,我国电影票房收入仅为203亿元,不到2019年票房收入的三成。2021年,根据M大数据的《2021中国电影年度调查报告》中披露的数据,中国电影市场年度总票房472.58亿元,领跑全球。 +据四川省“9·5”泸定地震抗震救灾省市(州)县前线联合指挥部消息,截至9月11日17时,地震已经造成93人遇难,其中甘孜州遇难55人、雅安市遇难38人;另有25人失联,其中泸定县9人、石棉县16人。(朱虹 王洪江) 据四川省“9·5”泸定地震抗震救灾省市(州)县前线联合指挥部消息,截至9月11日17时,地震已经造成93人遇难,其中甘孜州遇难55人、雅安市遇难38人;另有25人失联,其中泸定县9人、石棉县16人。(朱虹 王洪江) +购买入口:   购票渠道   1、“成都大运会官方票务”小程序(扫码进入)   2、成都大运会官方票务网站   中文网址:点击进入   英文网址:点击进入   点击查看:成都大运会门票官方购买指南(入口+材料+时间)   拓展阅读:成都大运会开幕式   开幕式地点:东安湖体育公园主体育场   开幕式时间:2023年7月28日,成都第31届世界大学生夏季运动会开幕式将在东安湖体育公园主体育场举行。 2023成都大运会观赛攻略 大运会门票 开售时间 购票方式 门票价格 退换/转让规则 儿童购票 常见问答 大运会开/闭幕式 开幕式 闭幕式 +2023年1月31日,国务院总理李克强致电克里斯·希普金斯,祝贺他就任新西兰政府总理。 李克强在贺电中表示,中国和新西兰都是亚太地区重要国家,双方互为重要合作伙伴。近年来,中新关系发展良好,各领域合作给两国人民带来福祉,为地区和平、稳定与繁荣作出重要贡献。中新关系已经走过50个年头,在新的历史起点,双方应共同努力,发扬“争先”精神,加强沟通,增进互信,拓展交流,推进合作,推动中新全面战略伙伴关系不断向前迈进。 中华人民共和国驻瑞典王国大使馆 版权所有 京ICP备06038296号 +北京时间8月27日,2022年WTA250格兰比站和克利夫兰站两站赛事都结束了半决赛争夺。 WTA250格兰比站决赛对阵 [1/WC]卡萨金娜VS萨维尔[9] 卡萨金娜打出一波连赢七局的攻击波,最终6-2/6-0横扫19岁法国小将帕里,本赛季第二次,也是生涯第11次闯入到WTA巡回赛女单决赛。帕里出局后将赶赴纽约,并会于北京时间8月30日凌晨在美网女单首轮中与中国球员王曦雨隔网而战。 +除“最佳男主角”、“最佳女主角”、“最佳电视剧”、“最佳电视纪录片”、“最佳电视综艺(文艺)节目”、“最佳电视动画片”、“最佳电视剧编剧”、“最佳电视剧导演”、“中国文联终身成就电视艺术家”外,“优秀电视剧”奖项由上届的8部增加到9部,台、网播出作品一起进行评选;暌违8年的“最佳电视节目主持人”也将再次颁发;而在时隔22年之后,“最佳男、女配角”的奖项也将回归,共享金鹰荣耀。   相关推荐:2022金鹰节获奖名单(全) +QQ好友 微博 微信好友 QQ空间 复制链接 5999元起的iPhone 14你可能觉得贵,那么苹果一根售价98元的挂绳,你还觉得便宜吗? 在苹果2022年秋季新品发布会上,苹果除了推出iPhone 14系列、Apple Watch S8、AirPods Pro 2等新品外,还推出了本次发布会最便宜单品——Incase挂绳,售价98元。 据介绍,这根挂绳长23.5厘米,重4.54克,适用于AirPods Pro 2。用户可将柔软的编织绳像手环一样戴在腕上,也可用自带的卡夹将挂绳固定在背包或手提包上,确保充电盒随身,还方便取用。 +从只关注自己的爱恨到可以体会众生的遭遇,赵三悦改变了自己自怨自艾的性格,对平凡的生活充满了感动,她的精神世界逐渐辽阔。 透过角色,观众隐约能看到当代年轻人工作和生活的的状态,又透过这些年轻人的视角去重新认识这个社会,重新定义自己的人生。《三悦有了新工作》把生活比作一张空白的画布,其中出现的每一个过客,每一段经历,每一种感情都是冥冥缘分里赋予的独特馈赠,就像素净底色上涂抹的明艳色彩,只要用心体会就能发现生活的含义。 +厄瓜多尔 v 塞内加尔 荷兰 v 卡塔尔 英格兰 v 伊朗 美国 v 威尔士 威尔士 v 伊朗 英格兰 v 美国 威尔士 v 英格兰 伊朗 v 美国 阿根廷 v 沙乌地阿拉伯 墨西哥 v 波兰 波兰 v 沙乌地阿拉伯 阿根廷 v 墨西哥 波兰 v 阿根廷 沙乌地阿拉伯 v 墨西哥 丹麦 v 突尼西亚 法国 v 澳大利亚 突尼西亚 v 澳大利亚 法国 v 丹麦 +燕京啤酒2022中国足球协会杯,是第30届中國足協盃。[1]本届足协杯冠军将获得2023–24年亚足联冠军联赛小组赛资格。 本届赛事由2022年中国足球超级联赛、2022年中国足球甲级联赛联赛的所有球队、2022年中国足球乙级联赛的前三名和2021年中国足球协会会员协会冠军联赛排名前二的未升级球队参加。前三轮比赛为单败淘汰制,之后的轮次原定为主客场双败淘汰制[2],后改为八强赛仍进行两回合淘汰,半决赛和决赛为单败淘汰的赛会制。 +在8月14日下午铜牌争夺战中,巴林男排以3比0击败韩国男排,历史上首夺亚洲杯铜牌,韩国队获得第四名。 首届男排亚洲杯于2008年9月在泰国呵叻举行,因为新冠肺炎疫情导致2020年男排亚洲杯取消,因此在亚洲杯14年历史上共举行过七届赛事。亚排联最新决定,本届也是最后一届亚洲杯,未来该项赛事将变成亚洲挑战者杯赛,每年举行一次,作为世界男排联赛资格赛存在。可见,不管中日男排谁夺冠,都将是最后一届亚洲杯冠军。 +智通财经APP讯,一汽解放(000800.SZ)发布2022年半年度报告,该公司上半年营业收入为228.72亿元,同比减少70.90%。归属于上市公司股东的净利润为1.7亿元,同比减少94.79%。归属于上市公司股东的扣除非经常性损益的净亏损为1.06亿元。基本每股收益为0.0366元。营业收入下降主要为本期销量减少使收入减少。 公告显示,公司上半年实现中重卡销售8.5万辆,终端市场份额25.6%,较2021年提升1.7个百分点,持续保持行业领先地位;海外市场实现销售近万辆,同比提升42%。 +唐山烧烤店打人事件,又称唐山打人事件、唐山打人案、烧烤店事件、唐山性暴力事件、6·10事件、陈某志等涉嫌恶势力组织违法犯罪案件,是指2022年6月10日凌晨一宗发生在中华人民共和国河北省唐山市路北区文化路街道机场路“老汉城烧烤”[1]烧烤店的性骚扰暴力打人事件。男子陈继志与其同伙欲性骚扰在店内与朋友聚餐的女子不成,无端发疯与同行多名男子暴力围殴四名中国女子。 +在剧中,高晓晨飙车,还袭警,高启强不得不亲自出马去警局里“捞人”,但即使如此,高晓晨也不把继父对他的提醒和劝告放在眼里,直呼其名“高启强”,还和继父飙车,想要证明自己。 这样一个不安分的角色,似乎又要为高启强带来新麻烦,而有人发现,高晓晨的扮演者、演员岳阳,居然是演员吴刚的儿子! 在《人民的名义》中成功扮演达康书记的吴刚,这次在《狂飙》中出演省扫黑督导专员徐忠。 +比如《误杀》,男主角是为了救自己的家人而犯罪,一个男人对于家庭的责任。 比如《我不是药神》,男主角是为了让千万病人少花钱,而选择犯罪,将问题抛向社会。 而《四海》选择的点是爱情。 有点像《少年的你》,但《少年的你》里面的主人公又在“校园霸凌”的社会问题下,把陈念这个女孩拍得饱受欺凌,而得到观众同情。 这类犯罪电影是彻头彻尾的黑色。 可《四海》不行,它又夹杂了喜剧元素,所以拍得让人笑也不是,哭也不是。 导演试图塑造的是两个单纯的恋人。 他们的单纯注定不会被大多数人理解。 +电子报 当前位置: 京报网首页 > 艺绽 > 正文 来源: 艺绽 记者:金力维 2022-03-15 22:24 今天,央视新闻报道,演员邓伦因偷逃税被处罚并追缴1.06亿元。 娱乐圈新增计量单位: “一伦”=1.06亿 通报中称,这1.06亿包括偷逃个人所得税4765.82万元,其他少缴个人所得税1399.32万元,以及罚款。 邓伦在2019年至2020年期间,通过虚构业务转换收入性质进行虚假申报,偷逃个人所得税4765.82万元,其他少缴个人所得税1399.32万元。上海市税务局第四稽查局对邓伦追缴税款、加收滞纳金并处罚款,共计1.06亿元。 +在2022年台湾地方选举中,台北市长选战会是关键之役。目前来看,国民党与民进党,还有柯文哲所代表的白色力量,都不会缺席。 就国民党方面而言,蓝营“少主”、立法委员蒋万安成为众所瞩目的人选,但党内不会没有人向他发起挑战。台北市议员、战将罗智强四年前就想参选台北市长,这次应该会参加党内初选。目前来看,蒋万安胜出机率更高些。 而白色力量方面,台北市副市长黄珊珊一般被视为现任市长、民众党主席柯文哲的接班人,她几乎肯定会参选。此次若放弃,她以后不会再有更好机会。 +第二轮对阵沙波瓦洛夫,张之臻在先胜一盘,决胜盘更是以2-4落后的情况下完成了大逆转,以2-1(6-7(4),6-4,7-6(1))取胜。第三轮对阵世界排名第13位的诺里,张之臻再次在先丢一盘的情况下完成逆转,以2-1(2-6,7-6(2),7-6(2))取胜。 +《我们的冬奥》剧照 动画电影《我们的冬奥》由北京文投互娱投资有限责任公司、万维仁和(北京)科技有限公司、上海美术电影制片厂有限公司、华强方特(深圳)动漫有限公司、北京耀影电影发行有限公司、北京国影纵横电影发行有限公司、北京阿里巴巴影业文化有限公司出品,由文投控股股份有限公司、北京国通华体育文化有限公司、哔哩哔哩影业(天津)有限公司、北京分子互动文化传播有限公司、理想核(天津)文化传媒有限公司联合出品,由万维猫动画策划,中国传媒大学联合摄制。 +而预告中,刘昊然饰演的角色受伤躺在病床上,陈飞宇面对质问一言不发,张雪迎擦干眼泪倔强且隐忍,文淇大声嘶吼换来一记耳光,每个角色都颇具个性,令人对他们的命运产生无限遐想。 天真勇气互相交织,陈凯歌心血之作打造有血有肉的青春奏鸣曲! 《少年时代》今日还发布“相信未来”定档海报,海报中,天降大雨,路人四散奔逃,而刘昊然、陈飞宇、张雪迎、文淇四人则站在雨里看着头顶的天空,安静地等着风雨过去。 +注:本文研究生指硕士研究生,不包含博士研究生。 2022年研究生录取人数为110.35万人,2021年研究生录取人数为105.07万,2020年研究生研究生录取人数为99.05万人,以下是历年录取人数统计,希望对大家有所帮助。 从统计来看,研究生报名人数是逐年增长的,2022年较2021年增长高达80万人,但2023年并未出现高增长;同时也可以看到录取人数也是逐年增长的,但是除了2020年,也没有出现大规模扩招。 +其中《长津湖之水门桥》《这个杀手不太冷静》《熊出没·重返地球》《四海》《奇迹·笨小孩》《狙击手》等贺岁片目前领跑中国虎年春节贺岁档票房。而《长津湖之水门桥》2月1日大年初一当天票房达到8.31亿元,成中国影史剧情题材电影首映日票房冠军、中国影史春节档战争题材电影票房冠军、中国影史春节档剧情题材电影单日票房冠军。 据灯塔专业版实时数据,截至3日12时30分,2022春节档新片(含预售)总票房已突破30亿元。 +2019年,全国高考报名人数达到1031万;2020年创出报考人数新高,为1071万人;此后的3年,高考报名人数也持续增多,2021年为1078万人,2022年在此基础上增加115万人,达到1193万人;2023年达到峰值,为1291万人,接近1300万人的规模。 值得关注的是,今后几年高考人数还将持续上升。 根据教育部公布的年鉴数据显示,以高一新生人数为例,2017年为800万人,2018年为793万人, 2019年为839万人,2020年为876万人,对应的3年后高考人数,2020年为1071万人,2021年为1078万人,2023年为1193万人,2023年为1291万人。 +大会期间,中国教育国际交流协会将联合部分国内外高校、职业院校、研究机构、行业组织和企业等,以“自愿、平等、互利、共赢”原则,发起筹建世界职业技术教育发展联盟的倡议,拓展职业教育领域国际交流的渠道和模式。 “赛”即世界职业院校技能大赛。大赛分为竞赛和展演两类赛项,其中机电一体化项目等竞赛类赛项15个,能工巧匠等展演类赛项8个。大赛设天津主赛区和江西赛区。 “展”即世界职业教育产教融合博览会。 +最后更新于2021-07-15资料来源: 中超官网 最后更新于2021-07-15资料来源: 中超官网 主队进球数列前。 最后更新于2021-07-15资料来源: 中超官网 最后更新于2021-07-16资料来源: 中超官网 最后更新于2021-07-16资料来源: 中超官网 主队进球数列前。 最后更新于2021-07-16资料来源: 中超官网 |}最后更新于2022-01-04资料来源: 中超官网 最后更新于2022-01-04资料来源: 中超官网 最后更新于2022-01-04资料来源: 中超官网 主队进球数列前。 最后更新于2022-01-04资料来源: 中超官网 最后更新于2022-1-3资料来源: 中超官网 最后更新于2022-1-3资料来源: 中超官网 最后更新于2022-1-3资料来源: 中超官网 主队进球数列前。 +第三个不寻常之处,他这次要造访的几个城市不一般。 看了一下,已披露的几个城市,南京、武汉、长沙、重庆、上海……因为这次大陆之行的主题是祭祖,同时要带年轻人参访辛亥革命、抗日战争等重要历史遗迹。 南京,自然可以理解。不出意外的话,一身正装的马英九,肯定会拜谒中山陵。当他站在中山先生陵寝前,眺望祖国大好河山,不知会如何感想? 武汉。辛亥革命首义之地,抚今追昔,估计又会是别有一番感慨在心头。 长沙、重庆。 +在叙事结构上,《漫长的季节》三条时间线交错并行。一条时间线是2016年,另外两条时间线则是案发前的1997年和案发后的1998年。辛爽说:“我们找到这三条时间线、三条故事线,其实是互为谜题和谜面的。在创作过程中,我们会比较注意什么时候给谜面,什么时候在另一条线里给谜底。”片中王阳写的诗,其实是班宇的《漫长的》,其中有一个“响指”的意象。“这三条时间线,每一条线都像是另一条时间线的‘响指’,只有这几个‘响指’产生共鸣的时候,故事才真正开始展现出它的全貌。” 关注人的情感 由于涉及三条时间线,剧中有大量转场镜头,但每次转场不仅时间线变化,也带领观众情绪变化。 +图说报名大数据 国省每日播报 目前2500701人报名,2235503人过审 2023国家公务员考试报考指导 考试日程 考试公告 考试大纲 职位下载 报名入口 报名人数 专业分类 历年真题 图书教材 网校课程 面授课程 2023职位表职位表查询分数线查询报名人数统计招考人数排名报名人数排名冷门人数排名竞争比排名访问人气排名 2022职位表职位表查询分数线查询报名人数统计招考人数排名报名人数排名冷门人数排名竞争比排名访问人气排名 2021职位表职位表查询分数线查询报名人数统计招考人数排名报名人数排名冷门人数排名竞争比排名访问人气排名 +全球PC芯片巨头英特尔竟挖走苹果M1芯片首席设计师,到底想干什么? 近日,苹果Mac(前)系统架构总监宣布,将离开苹果赴任英特尔,担任英特尔院士(Intel Fellow)和设计工程部门的技术总监(CTO),主要负责所有英特尔客户端系统单晶片(SoC)架构设计。 不仅仅是出现了挖人的动作,英特尔还在1月7日当周发布第12代酷睿移动处理器,一连推出了28款型号的12代酷睿芯片。英特尔还将其中的酷睿i9-12900HK称为“世界最快的移动处理器”。 有业内分析师表示,在过去的两年间,苹果芯片团队陆续有一些工程师出走,后续影响尚未可知。 +妇女人权保障机制的新发展 本次妇女权益保障法修订总结和完善了实践中的一些成熟的做法和经验,在法律中新增和创设了一系列保障妇女人权的新机制。 01 男女平等评估机制 在全国妇联和国务院妇女儿童工作委员会推动下,2011年至今,全国31个省(区、市)已经建立了法规政策性别平等评估机制。2020年4月,国务院妇女儿童工作委员会印发《关于建立健全法规政策性别平等评估机制的意见》,要求对有关法规、规章、政策的制定和实施进行评估,有效避免或者纠正涉嫌性别歧视的相关内容。 +8个百分点。 二、外贸外资保持稳定态势。一季度,中国货物进出口同比增长10.7%,实际使用外资同比增长25.6%。外贸外资显著增长凸显了中国为稳定全球产业链供应链、推动世界经济持续复苏作出的积极贡献。外资企业纷纷对中国经济发展前景投下信任票。中国德国商会、中国美国商会近期的报告显示,71%的德资企业、超六成的美资企业计划增加在华投资。一季度,中国高技术产业引进外资同比增长超过50%,其中高技术服务业吸收外资增长近60%。这些都是外商“投资中国就是投资未来”信念的充分体现。 三、民生保障坚强有力。 +中央机关及其直属机构2023年度考试录用公务员招考简章 >>点击查看 中央机关及其直属机构2023年度考试录用公务员报考指南 >>点击查看 中央机关及其直属机构2023年度考试录用公务员公共科目笔试考试大纲 >>点击查看 8个非通用语职位外语水平测试大纲 >>点击查看 中国银保监会招考职位专业科目笔试考试大纲 >>点击查看 中国证监会招考职位专业科目笔试考试大纲 >>财金类 >>财金类 >>会计类 >>计算机类 公安机关人民警察职位专业科目笔试考试大纲 >>点击查看 中央机关及其直属机构2023年度考试录用公务员公告 根据公务员法和《公务员录用规定》等法律法规,国家公务员局将组织实施中央机关及其直属机构202 +明天2022年男排亚洲杯将进入收官日,赛程安排如下(注:均为北京时间): 10:00 7、8名决赛 澳大利亚VS泰国 13:00 5、6名决赛 巴基斯坦VS伊朗 16:00 3、4名决赛 巴林VS韩国 19:00 冠亚军决赛 日本VS中国 (高加索) +国务院新闻办公室1月17日举行新闻发布会,国家统计局介绍2021年国民经济运行情况。2021年中国经济怎么样?一起看! 经济增长国际领先 2021年,我国国内生产总值比上年增长8.1%,经济增速在全球主要经济体中名列前茅;经济总量达114.4万亿元,突破110万亿元,按年平均汇率折算,达17.7万亿美元,稳居世界第二,占全球经济的比重预计超过18%。 我国已超过世界人均GDP水平 我国人均国内生产总值超过8万元人民币,按年均汇率折算为12551美元,虽然尚未达到高收入国家人均水平的下限,但逐年接近。 +电影以香港为背景,由1950年代作为起点,八位导演以抽签形式各自拣选一个年代作为主题,以35厘米底片拍摄十几分钟的短片,同时向“菲林”及过往时代致敬,并用半个故事展望未来作为收尾。由于吴宇森因身体原因退出,影片以新名《七人乐队》于2019年重新立项,而吴宇森原定抽中的1970年代主题短片创作则遗憾留空。 杜琪峯在接受采访时表示︰“现时香港导演,有更大的空间到内地拍摄电影和发展他们的事业,多年下来,好像对香港电影的关注减低了。 +之后仅历时五年的研发和制造,2015年11月,C919首架飞机总装下线,但此时距离真正的研制成功还早——原定于2016年交付的飞机,由于各种问题被延后,直到2017年5月C919才成功首飞。 首飞成功后,C919又进入试飞和验证阶段,同样历时五年,到2022年9月29日获得型号合格证,证明C919的设计满足要求——这五年间,中国商飞制造了八架飞机,其中六架参与动力、性能、操控等试飞科目,两架参与静力试验、疲劳试验等试验。 2022年底,中国商飞正式交付首架C919给中国东方航空。五个月后,C919从上海飞向北京,开启首航。 +本届冬奥会2月4日在中国的首都开幕,这将是沙特阿拉伯历史上首次参赛。在沙特这个地方,雪从天降是一件稀奇事,足以成为全世界的新闻。 所以,阿卜迪是怎么来到这里的? 他的奥林匹克梦有一个不寻常的开端。 阿卜迪一开始不过就是和其他100多名申请者一样,回复了一个广告。那是当时刚刚成立不久的沙特阿拉伯冬季运动联合会(Saudi Arabian Winter Sports Federation)发放的,寻找有潜力的人加入奥运队。阿卜迪在四岁时就学滑雪了,而且在美国上大学的时候,是一有时间就走上雪道。 +由于我们与合作方暴雪娱乐的协议期限即将届满,在中国大陆地区由上海网之易网络科技发展有限公司所运营的《魔兽世界》《炉石传说》《守望先锋》《暗黑破坏神 III》《星际争霸 II》《魔兽争霸 III:重制版》《风暴英雄》(以下统称“暴雪游戏产品”),将于 2023 年 1 月 24 日 0 时终止运营,现将终止中国大陆地区运营相关事项通知如下: 2022 年 11 月 23 日起,关闭暴雪游戏产品在战网以及客户端内的充值服务及用户注册入口。 +转自5月19日《中国体育报》07版) 国家体育总局版权所有 国家体育总局体育信息中心承办 国家体育总局通讯地址:北京市东城区体育馆路2号 邮政编码:100763 联系电话:010-87182008 信访电话:010-87182116 / 87182045  网站联系电话:010-87182998 / 87182280 网站标识码:bm33000001京ICP备05070991号 京公网安备 11010102004525号 +《三体》是改编自作家刘慈欣创作的系列长篇科幻小说《三体》,由bilibili、三体宇宙及艺画开天联合出品,艺画开天参与制作的中國網路科幻動畫影集。 该动画原定于2022年12月3日在bilibili播出,但因江泽民去世而延期至2022年12月10日,首播兩集,全劇共15集。 2019年6月26日,bilibili十周年庆典活动上,艺画开天的创始人阮瑞正式宣布《三体》动画化。2019年11月17日,发布正式预告片[1];2021年11月20日,发布第二支预告片[2]。动画原定2021年上映,后延至2022年發行。原作者刘慈欣也受邀参加庆典活动,并对《三体》动画给予极高的赞扬。 +王羽铮2011年中戏表演系毕业之后,在话剧舞台呆了六年,曾经跟何冰、宋丹丹、濮存昕等同台演过《窝头会馆》,前辈的艺术滋养和京味大戏的独特魅力,让北京土著王羽铮一直心心念念拍一部地道北京剧,导演陆添带着《胡同儿》剧本找到他,一拍即合。 +建团以来,北京松果昆明团队精心打造,师生辛勤排练,艺术总顾问郑小瑛先生、吴灵芬教授、艺术总监刘晓耕教授、常任指挥叶明菊教授悉心指导加持,松果合唱团迅速成长为一支朝气蓬勃、特色鲜明的团队。 +电影消失的她是由朱一龙、倪妮、文咏珊领衔主演的悬疑犯罪片,讲述了何非的妻子李木子在结婚周年旅行中离奇消失后发生的故事,那么消失的她原型是什么?下面就让小编为大家介绍一下。 【原型事件】 《消失的她》改编自前苏联电影《为单身汉设下的陷阱》,故事原型事件为泰国坠崖案。 2019年6月9日,怀孕3个月的中国籍女子王暖暖(化名)在泰国乌汶帕登国家公园游玩时,从约34米高的悬崖坠落。王暖暖很快被人发现,送往医院抢救后奇迹生还。 +6月22日晚,举行的是2022年金砖国家工商论坛。   通过线上线下参会的金砖国家经贸部长、驻华使节和工商界代表,有约1000人。   6月23日晚,举行的是金砖国家领导人第十四次会晤。   南非总统拉马福萨、巴西总统博索纳罗、俄罗斯总统普京、印度总理莫迪出席。金砖五国,面积占全球26%,人口占42%,经济总量占25%。   6月24日晚,举行的是全球发展高层对话会。   这场会,与会国领导人共有18位。而这些国家,不少都是区域组织今年的轮值主席国和候任轮值主席国。 +新赛季中超联赛的脚步将越来越近,相信不少球迷们都非常期待中超联赛能够早日开赛,那么新赛季中超联赛何时开赛呢,接下来就随小编一起来了解一下吧。 2022赛季中国足球超级联赛开赛时间 5月23日下午,中超联赛通过社交媒体官方宣布2022赛季中超联赛将于6月3日在大连、海口、梅州三大赛区开赛,详细的赛程和赛制将在稍后公布。 想了解更多中超赛事资讯吗,那就请关注奥分体育中超专区 +按照今年的赛事规划,一共将会进行4个分站的角逐,冠亚军可以直接锁定总决赛的宝贵名额。在结束广州站的争夺后,第二站赛事信息将会择日公布,更多精彩敬请期待! ( 转载自:全网球 ) 微信扫一扫关注 广州钧泰体育发展有限公司 钧泰网球中心 订场电话:020-39096333 南沙国际网球中心 订场电话:13250301138 电子邮箱:oc@juntaisports.com Copyright @ 广州钧泰体育发展有限公司 All Rights Reserved. +其七,万卓索娃温网夺冠后,温网连续6年迎来新的女单冠军。 其八,万卓索娃连克五位种子,成为公开赛年代第一位夺得温网女单冠军的非种子选手。 6号种子贾巴尔是上届温网亚军,她今年在晋级决赛之旅,她有3场比赛是打满三盘胜出,其中1/4决赛三盘淘汰3号种子莱巴金娜,半决赛三盘淘汰2号种子萨巴伦卡。非种子选手万卓索娃晋级决赛之旅,她有两场比赛打满三盘胜出,其中半决赛两盘横扫斯维托丽娜,后者此前淘汰世界第一的斯瓦泰克。 +全部 篮球频道 足球频道 电竞频道 综合频道 超级碗是NFL职业橄榄球大联盟年度冠军赛,这场赛事的获胜者将会是世界冠军,这场比赛可以说是美国最引人注意的一场比赛了,如今比赛已经完成吗,那么2022年超级碗冠军是那个队伍呢? 洛杉矶公羊队 2022超级碗参赛队伍是洛杉矶公羊和辛辛那提猛虎。其中洛杉矶公羊队是1937年成立的一支队伍,拥有两个NFL冠军以及两个超级碗冠军,其中一届超级碗冠军是在1999年还有一次就是本年的第56届超级碗。 +亚洲45个国家和地区奥委会全部报名参赛杭州亚运会 相关负责人介绍,杭州亚运会将于9月23日开幕,明天将是杭州亚运会倒计时100天。目前亚洲各国报名踊跃,亚洲45个国家和地区奥委会全部报名参赛,其中有很多将派出历史上规模最大的代表团参加杭州亚运会。 杭州亚运会56个比赛场馆全部完成赛事功能验收 相关负责人介绍,杭州亚运会场馆全部准备就绪,工程验收与惠民利民并行。亚运会比赛将在杭州以及宁波、温州、金华、绍兴、湖州六个赛区举办。目前,56个比赛场馆全部完成赛事功能验收,具备了赛事运行的功能。 +文/顾翎羽 编辑/刘以秦 当地时间12月6日,美国亚利桑那州凤凰城,全球最大半导体代工厂台积电(TSMC)晶圆厂设备入厂,即将投入生产。台积电宣布,在美国投资计划将由120亿美元扩大到400亿美元。这是亚利桑那州史上最大规模的境外直接投资,也是美国史上规模最大的境外直接投资之一。 台积电称,目前兴建中的第一期工程预计2024年量产4nm(纳米)制程,较之此前宣布转移5nm制程到新厂更进一步;同时在亚利桑那州厂兴建第二期工程,预计2026年生产3nm制程。这意味着台积电将其最先进的部分制程放至美国,美国也将重新获得最先进的半导体生产能力。 +不过,中国艺术研究院副研究员孙佳山对2023年春节档的票房表现还是持较为冷静的预测。孙佳山认为,“真正的市场回暖,应该是在夏天的暑期档,春节档到暑期档的中间市场上还会有所波折。 +《满江红》总票房破26亿,打破20项纪录,获得99项里程碑成就,包括中国影史春节档剧情片票房冠军、2023年春节档票房冠军、2023年春节档猫眼购票评分冠军。 《流浪地球2》总票房破22亿,打破36项纪录,获得91项里程碑成就,包括中国影史科幻片首映日票房冠军、中国影史灾难片首映日票房冠军、中国影史春节档冒险片首映日票房冠军。 《熊出没伴我熊芯”》累计总票房7. +时间:2021-12-29 14:58:03  来源:海外网 分享到微信朋友圈 据香港大公文汇全媒体报道,香港第七届立法会议员的宣誓仪式将在2022年1月3日上午11时在立法会会议厅举行,由行政长官林郑月娥监誓。 宣誓仪式前,候任议员将面向 香港立法会 据香港大公文汇全媒体报道,香港第七届立法会议员的宣誓仪式将在2022年1月3日上午11时在立法会会议厅举行,由行政长官林郑月娥监誓。 宣誓仪式前,候任议员将面向国旗及区旗肃立,同唱国歌,之后逐一宣誓。 +票房将继续走高 春节档是影院最重要的档期,2014年至2019年,我国春节档票房从14.52亿元连续攀升至59亿元。2020年受疫情影响,影院春节档暂停营业,但2021年春节档即以78.43亿元票房,创下历史新高。 近年来,春节档票房占比节节攀升。2021年,全年票房470.36亿元,春节档78.43亿元,占比16.7%。而2022春节档占全年票房的比重进一步攀升至20%。 今年春节档票房形势虽然较为复杂,但从目前的情况来看,首日票房有望超过2022年。 (2022年大年初一首日票房) 灯塔平台数据显示,2018年、2019年春节档首日票房分别为12. +救治安倍的奈良县立医科大学附属医院当天下午举行记者会宣布,安倍晋三于17时3分确认死亡[42][43]。院方福岛英贤教授表示:安倍送院时心肺功能已停止,多个部位大量出血且心脏血管破裂。院方为安倍胸部止血和总共输了100包红血球血浆[a][44],但许多地方无法完全止血,而且心跳未再恢复。检查发现颈部略右侧有相距约5公分的两处枪伤,大血管和心室也受伤严重,判断伤势可能是从颈部射入的子弹造成。此外左肩前部有疑似子弹从体内穿出的创伤,但急救手术过程未发现子弹[45][46]。 +未经事先授权,禁止任何形式的转载或部分复制使用。 安倍晋三 吉田茂 日本武道馆 日本政府 前首相 国葬 枪击身亡 +一、关于新冠患者住院治疗费用保障 为保障新冠患者不因住院费用问题影响治疗,文件规定对住院的新冠患者延续“乙类甲管”时的政策,全额保障新冠患者的住院费用。新冠患者在所有收治医疗机构发生的,符合卫生健康部门制定的新型冠状病毒感染诊疗方案的住院医疗费用,由基本医保、大病保险、医疗救助等按规定支付后,个人负担部分由财政给予补助。该政策以新冠患者入院时间计算,先行执行至2023年3月31日。 +君子盟主要演员: 热门电视剧 上映:2023/07/24 上映:2016/01/14 上映:2023/07/27 上映:2023/07/17 上映:2023/07/12 上映:2023/07/05 上映:2022/08/01 上映:2023/01/14 +12月10日,记者获悉,河南正式公布2021年全年粮食总产量。国家统计局河南调查总队日前发布数据,经对全省夏、秋粮产量抽样调查样本实割实测和播种面积遥感监测并报国家统计局核准:2021年,河南粮食总产量为1308.84亿斤,比上年减少56.32亿斤,减产4.1%。其中,夏粮总产量为760.64亿斤,比上年增产9.89亿斤,增长1.3%;秋粮总产量为548.20亿斤,比上年减少66.21亿斤,减产10.8%。   据了解,今年粮食播种面积稳中有增。2021年,各地认真落实粮食安全责任制,按照党政同责要求,千方百计完成粮食面积目标任务。 +2023年马来西亚羽毛球公开赛为第66届马来西亚羽毛球公开赛,是2023年世界羽联世界巡回赛的其中一站,由去年的第三级别(超级750赛)赛事升级为第二级别(超级1000赛)赛事。本届赛事于2023年1月10日至1月15日在马来西亚首都吉隆坡内的亚通体育馆举行,并获得马来西亚国家石油(Petronas)赞助,总奖金由62万5千美元提升至125万美元[1]。 赛事包括:男子单打、女子单打、男子双打、女子双打及混合双打五个项目,只设会内赛(Main Draw)而不设会外赛(Qualifying Rounds)[1]。 大会公布的日程如下[1]: +6%;销售额突破214亿元人民币,同比增长15.5%。2022继续增长,上半年家用投影机出货量193.5万台,同比增长15.4%;销售额超出64亿元人民币,同比增长12.9%。 影片内容方面,三年来,对于国内影片,人们对主旋律影片的态度在转变,期待有更多新题材、高质量的内容;对于进口片,传统动作大片的吸引力也在下降,《阿凡达2》在国内市场遭遇的口碑下滑便是一个例子。 +台湾的前总统马英九将于3月27日赴中国大陆祭祖,若成行,他将是1949年以来,首位访问中国大陆的卸任台湾元首。 据台湾中央社报道, 马英九将于3月27日至4月7日赴中国大陆祭祖,并将带领马英九基金会“大九学堂”青年学子,参访辛亥革命、抗日战争等重要历史遗迹,并访问湖北武汉大学、湖南大学及上海复旦大学,与大陆学生进行交流。 另据香港钜亨网报道,由于马英九此行主要是前往湖南祭祖,他并不会前往北京,也未安排与中共总书记习近平会面,希望因此减少政治效应。 +带着这些问题,红星新闻独家专访了对吕小军处以临时禁赛处罚的国际兴奋剂检测机构(以下简称为ITA)。以下为ITA联络部高级主管马尔塔·纳夫罗茨卡对于红星新闻问题的详细回复。 “吕小军有权检测B血样瓶” 红星新闻:为何ITA处罚吕小军? ITA:正如ITA于2022年12月22日发布的声明,吕小军在今年10月30日收集的一份赛外兴奋剂检测样本中呈现EPO(促红细胞生成素)结果阳性。EPO属于2022年世界反兴奋剂机构的禁药清单。 +扎基尔·侯赛因和法赫鲁丁·阿里·艾哈迈德在任上去世,副总统代理总统职责直至选出新总统。扎基尔·侯赛去世后,代理总统的瓦拉哈吉里·文卡塔·吉里很快就辞职参加大选,穆罕默德·希达亚乌拉(Mohammad Hidayatullah)继任成为第二位代理总统,直至吉里赢得选举就职为止[8]。2007年,普拉蒂巴·帕蒂尔赢得大选,成为首位女总统[9]。 2017年,拉姆·纳特·科温德赢得大选,于7月25日就职第14任印度总统[10][11]。2022年,德拉帕迪·慕尔穆赢得大选(英语:2022 Indian presidential election),于7月25日就职第15任印度总统。 +历届世界杯吉祥物一览广百观点:虽然在形态上这个吉祥物可能有很多负面消极的联想,但在整个设计处理上融入了卡通感,并加以动态呈现,感官上是可爱有趣的。‍一组萌化的动态图组La’eeb弹吉他La’eeb加油助威La’eeb颠球La’eeb吃汉堡喝可乐La’eeb傲娇La’eeb打鼓La’eeb捧奖杯你们怎么看2022年卡塔尔世界杯吉祥物?Do you like it?作者公众号:广告百货(ID:storead) 首发:广告常识原标题:2022年世界杯吉祥物发布!网友:这是幽灵还是抹布? +温馨提醒:微信搜索公众号【北京本地宝】,关注后回复【春运】可获2023年春运火车票购票入口(官网/APP)、春运起止时间/火车票预售时间、各火车站起售时间/退票规定。 分享本文到: 2023-01-05 10:12 898 2023-01-05 09:54 895 2023-01-05 09:48 480 2023-01-05 09:35 952 2023-01-05 09:27 629 2023-01-05 09:20 727 +人民网北京10月31日电 (记者杜燕飞)记者今日从世界互联网大会乌镇峰会新闻发布会上获悉,2022年世界互联网大会乌镇峰会将于11月9日至11日举行。今年大会主题为“共建网络世界 共创数字未来――携手构建网络空间命运共同体”。 世界互联网大会乌镇峰会新闻发布会现场。人民网记者 杜燕飞摄 据世界互联网大会秘书长任贤良介绍,本次乌镇峰会是世界互联网大会国际组织成立后的首届年会,采用“线上+线下”相结合的方式举办。在线下,继续于浙江乌镇设置实景会场,邀请千余名嘉宾现场参会,开展各项会议活动。 +具体分组为:   A组:卡塔尔(东道主)、厄瓜多尔、塞内加尔、荷兰   B组:英格兰、伊朗、美国、威尔士VS苏格兰/乌克兰   C组:阿根廷、沙特、墨西哥、波兰   D组:法国、秘鲁VS澳大利亚/阿联酋、丹麦、突尼斯、   E组:西班牙、新西兰VS哥斯达黎加、德国、日本   F组:比利时、加拿大、摩洛哥、克罗地亚   G组:巴西、塞尔维亚、瑞士、喀麦隆   H组:葡萄牙、加纳、乌拉圭、韩国   卡塔尔世界杯吉祥物。 +《漫长的季节》是一部由企鹅影视出品,由辛爽执导,范伟、秦昊、陈明昊等领衔主演、李庚希、刘奕铁、蒋奇明等特别主演的生活悬疑剧,讲述了一座小城“桦林”中多个人物由于一场碎尸案而跨越近20年的故事[1]。2023年4月22日在腾讯视频独播。 该剧主要人物与故事框架来自于编剧于小千创作的原创故事及剧本《凛冬之刃》,但相对于最初版本,编剧团队及导演对这个剧本进行了大幅度的改编,改动重点包括沈墨的人设、王阳之死、龚彪之死,以及王响与沈墨之间的恩怨[2]。 +2022年9月8日,由于医生担忧其健康状况,伊丽莎白二世在苏格兰的巴尔莫勒尔堡接受医疗监护[36],随后伊丽莎白二世于当地时间当天下午3时10分逝世[37],王室于下午6时30分左右发布其死讯。 2000年起,公众发现伊丽莎白二世在公众场合表现出更多的情绪。虽然她大多数时候还是保持君主的庄严形象,但她开始在公众场合微笑,并在为911事件死难者举行的西敏寺悼念会上流泪。 +新浪科技讯 6月2日下午消息,美团今日发布2022年第一季度及全年财报,财报显示,该公司第一季度营收462.7亿元,同比增长25%;净亏损57.0亿元人民币,调整后净亏损35.9亿元人民币。   截至2022年3月31日,美团持有的现金及现金等价物及短期理财投资分别为人民币354亿元及人民币680亿元。   餐饮外卖业务:   财报显示,2022年第一季度,美团餐饮外卖业务收入同比增长17.4%至人民币242亿元;经营溢利同比增加41.3%至人民币16亿元,经营利润率上升至6.5%。 +该剧讲述了自2000年起,意气风发的刑警安欣(张译 饰演)与被受欺负的鱼贩子高启强(张颂文 饰演)因一场打架事故相识,随后高启强受社会影响逐渐偏离正途,安欣意识到在京海市社会发展的背后,正是以高家兄弟为首的黑恶势力暗流汹涌,两人从此分道扬镳并展开了长达20年正邪较量的故事。 有剧评人认为,《狂飙》之所以口碑如潮 ,一是试图将高启强这个黑道大佬的二十年人生展开,讲述其从守法公民到为恶一方是如何逐渐完成转变的;二是安欣和高启强这一对人物关系的复杂性。 +因韩国在2021年12月2日才批准该协定,该协定在韩国的生效日期为2022年2月1日[3][14];因马来西亚在2022年1月17日交存核准书,该协定在马来西亚的生效日期为2022年3月18日[4];因印度尼西亚在2022年11月3日交存核准书,该协定在印度尼西亚的生效日期为2023年1月2日。 2022年1月1日,协议正式生效[注 1][15][注 2][注 3][注 4],由此该协定超越欧洲联盟,成为目前世界最大的自由贸易协议[16]。 2023年6月2日起,RECP对菲律宾正式生效。RCEP对菲律宾生效后,全部15个成员均完成生效程序,并相互实施关税减让。[17] +银发网 摘编   本届世乒赛在南非夸祖鲁—纳塔尔省德班举行,从5月20日开始,持续9天,最后三天,也就是5月26、27和28日决出五项冠军。目前的世乒赛没有预选赛和小组赛阶段,所有项目都是从淘汰赛直接打起,男单和女单各有128人参赛,首轮将从1/64决赛开始打起,混双、男双和女双则各有64对(128人)选手参赛,首轮从1/32决赛打起。2023年德班世乒赛28日在南非海滨城市德班落下战幕。最后中国队包揽本届世乒赛五个单项冠军。 +2020年,海底捞曾发布一则“接班人计划”,意在通过各岗位的管理实践和长期的观察与判断,找到符合“爱海底捞、业务熟练、又能洞察人性”标准的领导接班者,继续承载公司发展的使命。   2021年8月,海底捞董事会新增7位年轻执行董事,被认为是“接班人计划”的后续。此次任命两位“80后”首席运营官,无疑是海底捞在管理团队年轻化上的又一尝试,对于正在寻求内部调整、走向更高质量发展道路的海底捞而言,或许能带来更多发展可能性。 +大会的官方宣传与公众相对沉默之间的对比十分鲜明。[85]有许多有关的讨论、辩论、争论转移到了海外。有人质疑习近平突破过去中共最高权力交接将近50年的惯例[86]。也有人认为,习近平连任对中国大陸是好事,是民心所向[83]。 据报道,在二十大开幕式直播的同时, 有近五十万人涌入一个线上卖老母鸡的直播间,刷屏留言讽刺习近平。弹幕评论包括“这鸡太贵了,主播不能保证坚持散养一百年不动摇吗?”、“只上过小学的老母鸡我们不买”[註 7]、“老母鸡还能再养五年吗? +加冕典礼时间及地点在2022年的正式登基仪式之后,2023年将会举行更为盛大的加冕仪式,这也是新君主即位的巅峰时刻。但由于筹备工作需要时间,因此预计会持续相当长的时间。例如,伊丽莎白女王在父亲去世后一年多没有加冕,她于1952年2月继位,但直到1953年6月才正式加冕。加冕典礼将在威斯敏斯特大讲堂进行,自从威廉一世成为第一位在威斯敏斯特教堂加冕的英国君主以来,近千年来所有英国君主的加冕典礼都在这里举行。查尔斯国王将成为第40位在此加冕的君主,他的加冕仪式定于2023年5月6日上午11点举行。 +中国新闻网 2023-01-09 07:02 8日17时,中央机关及其直属机构2023年度公务员招录笔试结束。 本次国考计划招录3.71万人,考试当天共152.5万人实际参加考试,实际参加考试人数与录用计划数之比约为41:1。 北京一考点外,考生正在排队进入考场 刘欢 摄 考试:152.5万人参考应届生占比高 根据国家公务员局网站8日发布的消息,本次国考在全国31个省(自治区、直辖市)的287个城市、66863个考场同时举行,共194.8万考生考前进行了报名确认、152.5万人实际参加考试,参考率约为78.3%,参加考试人数与录用计划数之比约为41 : 1。 “本次国考招录人数同比增加18. +Jim Inhofe, R-OK)提前退休留下的空缺,因此总共有35个席位面临改选。 另外,有36个州将举行州长选举。46个州将举行州议会选举。 尽管总统的名字不在此次选举的选票上,但选举结果却可能对本届总统的后半段执政,甚至两年后的大选产生举足轻重的影响。 各界预计共和党有望翻盘众议院 今年中期选举将决定第118届新国会的组成。目前,民主党在众议院是多数党,拥有220个席位,共和党有212席。有3个席位空缺。换言之,共和党仅需要再新增至少6个席位,就足以达到过半的218席,掌控众议院。 +如果是郝伟方向,那么,山东泰山队有可能受到牵连 如果是争冠对手方向,那么武汉三镇队有可能受到牵连 事实上,2021赛季,山东泰山队确实有几场球,让球迷有些看不懂 而到了2022赛季,山东泰山队和武汉三镇队有几场球,看起来也是比较诡异,同样让球迷有些看不懂,尤其是有几场球,武汉三镇队那边什么结果,山东泰山队这边就是什么结果,但愿这只是一种巧合吧 如果没记错的话! +原标题:央视中秋晚会《吉庆团圆》介绍中秋民俗 央视中秋晚会《吉庆团圆》介绍中秋民俗 +根据财报披露,汤臣倍健在2022年的1月至6月份的营业收入为42.21亿元,与2021年1月至6月份的41.98亿元营收相比,其相差不大,基本在同一水平。   而在生产内控方面,汤臣倍健的主营业务的成本与上一年同期相比,甚至整体还呈现了下降。具体来看,2022年1月至6月份占营业成本比重达到75.21%的直接材料费用为9.73亿元,比上一年同期产生的费用下降了5.17%,也就是说,公司上半年最大的成本费用支出其实是下降的。   此外,作为公司第二大成本支出的制造费用也出现大幅下降。根据汤臣倍健披露,2022年1月至6月份公司制造费用为1. +2022年卡塔尔世界杯,阿根廷最终通过点球大战击败法国夺冠,这是阿根廷历史上第三次获得世界杯冠军,此前他们曾在1978年和1986年获得冠军。 在拿到第三个冠军后,阿根廷现在在世界杯夺冠历史榜上排名第四。 排名第一的是巴西,他们曾在1958、1962、1970、1994和2002年夺冠。 德国和意大利都是4次夺冠,其中德国在1954、1974、1990和2014年夺冠。 意大利是在1934、1938、1982和2006夺冠。 此外,法国队2次夺冠,时间是1998年和2018年。 乌拉圭也是2次夺冠,1930年和1950年。 +《Wordle》是乔什·沃德尔(Josh Wardle)编写的网页文字游戏(英语:word game)。 在《Wordle》中,玩家要在一天内用六次机会内猜中某个有五字英文字母的词汇。每次尝试后,玩家可能得到三种反馈:绿色表示字母位置正确;黄色表示答案包含该字母但位置错误;灰色表示答案没有该字母。这种玩法和珠玑妙算 (Mastermind)之类的游戏相似,但《Wordle》会明确指出哪些字母猜中了。 沃德尔曾在Reddit上创作了社会实验《Place》和《The Button》。 之后,他设计了《Wordle》,但最初只是给自己和伴侣帕拉克·沙(Palak Shah)游玩。2021年10月,他正式在网上发布了游戏。 +最高法院推翻了该院之前于1973年“罗诉韦德案”(Roe v. Wade)以及另一个“计划生育组织诉凯西案”(Planned Parenthood v. Casey)中的裁决。虽然这项最新裁决并没有禁止堕胎,但是其法律影响几乎会立即波及全美国。 支持选择权、也就是堕胎权利的研究组织古特马赫研究所(Guttmacher Institute)预计,26个州将会在“罗诉韦德案”裁决被推翻后禁止堕胎,其中大多数州在美国南方和中西部。这可能会迫使数百万想要寻求堕胎的女性前往堕胎权受到保护的州。 +卡塔尔世界杯冠军是谁,可能义乌早就知道了》 阅读原文 +2023-06-11 22:55 陈凯歌新片《少年时代》定档8月17日、胡玫执导《红楼梦之金玉良缘》年内上映、高群书《风声》后再推谍战片《刀尖》、林超贤警匪片《爆裂点》携手张家辉……6月11日,博纳影业在上影节举行2023新片发布会,现场公布了20部电影、5部剧集的豪华片单。 无数影迷期待但迟迟没有上映消息的电影《少年时代》首先宣布进军暑期档。该片根据陈凯歌自传小说改编,由刘昊然、陈飞宇、张雪迎、文淇等主演,讲述特殊年代里一群北京孩子的故事。陈凯歌说,这部电影是献给青春的颂歌。 +中新网4月5日电 4月5日下午,法国总统马克龙抵达北京。应国家主席习近平邀请,马克龙将于4月5日至7日对中国进行国事访问。这是马克龙就任法国总统后第三次到访中国,也是他第二任总统任期内首次访华。多家外媒予以高度关注,称马克龙此行是一次集政治、经济、外交和文化交流为一体的访问行程,不仅给法国带来积极影响,也给欧洲国家传递出积极信号。 资料图:法国总统马克龙。 +日前结束的北京冬奥会速度滑冰比赛中,中国队表现出色。高亭宇在男子500米比赛中以超冬奥会纪录的成绩夺冠,实现了1980年参加冬奥会以来,我国速度滑冰男子项目的历史性突破。与此同时,女子1500米、女子5000米、男子1500米、男子集体出发、男子团体追逐等项目均创造了冬奥会历史最佳成绩。女子团体追逐以突破本赛季平原最好成绩、接近高原最好成绩的出色表现平冬奥会历史最佳名次,且有多名运动员在比赛中刷新了个人最佳平原成绩。 +《四海》(英语:Only Fools Rush In)由韩寒执导,刘昊然、刘浩存、沈腾、尹正、乔杉、张宥浩、冯绍峰等演员出演。这是中国大陆导演韩寒的第4部导演作品,主要讲述了一群年轻人(留守少年吴仁耀、少女欢颂、不败传说摩托车队等)在不同城市的冒险中,逐渐领悟爱情和友情的真谛、体会离别和相聚意义的故事[1]。 +电影《扬名立万》导演刘循子墨,演员秦霄贤、柯达三位一致表示观影过程让人畅快、开心,对电影赞不绝口。   除了各路喜剧人代表,现场更有很多业内嘉宾及主创亲友到场。演员刘昊然表示,“果然还是要看喜剧”,凸显出《人生路不熟》五一唯一喜剧的独特类型吸引力。电影《了不起的夜晚》的导演马凯称,《人生路不熟》是一部可以带朋友、带兄弟、带爱人、带孩子看的五一必看佳作。梁龙则感性地表达“生活中的喜剧回归了”。 +总理通常必須是聯邦議員(Member of Parliament),在澳洲政治史上,唯一以參議員身份出任總理的是约翰·戈顿。 现任的澳大利亚总理是工党籍的安东尼·阿尔巴尼斯,为第31任,于2022年5月23日上任。 議會制的政府首腦一职英语常被尊称为“Prime Minister”,意即議會共和體制的第一部长(中文語境常譯為總理)或者君主立憲制的首席大臣(中文語境常譯為首相)。澳大利亞雖然是君主立憲制国家,但是君主將政府首腦的任命權授予英聯邦王國各成員國總督代行皇權,即總督制。 +2022年1月1日零点刚过,随着汽笛声响,满载800多吨货物的X9101次集装箱班列从南宁国际铁路港开出,一路朝着终点站越南河内进发。 这是RCEP(区域全面经济伙伴关系协定)生效后,我国首趟开往RCEP成员国的国际货运班列。 我国首趟开往RCEP成员国的国际货运班列从南宁国际铁路港发出(央广网发 冯登海 摄) “南宁国际铁路港自2018年5月开通运营以来,累计到发货物1218万吨,每年到发货物量约270万吨。”广西宁铁国际物流有限公司总经理宋坚强介绍。 +大会采用“线上+线下”相结合的方式举办,除在乌镇设置实景会场举办各项活动外,还将邀请部分重要嘉宾以线上形式参会[25]。 2022年11月9日,2022年世界互联网大会乌镇峰会在浙江乌镇开幕。[26] 在第二届会议举办期间,乌镇实施了全面的戒严,政府也已經設立了一個专门的安保總部。其中,南京軍區的裝甲車部隊進駐乌镇,平均每500米就有武警和公安站崗巡邏,並隨時封路。而會場所在地於10日起停止對外開放,场内只允许會務人員、志願者、記者和安保人員入内。 +第四季度,B站营业成本同比增加62%至46.8亿元,全年营业成本达154亿元。第四季度收入分成的成本更是增加91%,主要原因是向直播主和内容创作者支付的收入分成增加。 B站的营收由增值服务、游戏、广告、电商及其他四个业务构成。其中,增值服务和广告一直维持着高速增长,在最新一季度,继增值服务后,在不加贴片广告保证用户体验的前提下,广告收入也首次超过游戏,成为营收占比第二大的业务, 财报显示,2021年第四季度 B站游戏业务收入约为13亿元,同比增长15%,而广告收入同比增长120%至15.9亿元。从全年来看,广告业务收入达约45.2亿元,同比增长145%。 广告不仅是2021年第四季度,也是B站全年增长幅度最大的业务。 +顶部的如意造型象征吉祥幸福;和平鸽和天坛构成的连续图案,寓意着和平友谊,突出了举办地的特色;装饰图案融入了中国传统剪纸艺术;面部的雪块既代表“瑞雪兆丰年”的寓意,又体现了拟人化的设计,凸显吉祥物的可爱。灯笼以“中国红”为主色调,渲染了2022年中国春节的节日气氛,身体发出光芒,寓意着点亮梦想,温暖世界,代表着友爱、勇气和坚强,体现了冬残奥运动员的拼搏精神和激励世界的冬残奥会理念。 +全球站 更多城市 2022年07月28日 10:54来源:土流网点击量:0 一人当兵,全家光荣。党的十八大以来,国家和地方政府为保障军人权益出台了一系列相关政策,今年是实行一年两次征兵两次退役的第二年。那么,2022年下半年征兵报名和体检时间是什么时候?需要符合什么要求和条件? 一、2022年下半年征兵报名和体检时间是什么时候? 1、2022年下半年征兵报名时间 下半年男兵应征报名:2021年12月1日至2022年8月10日18时前。 下半年女兵应征报名:2022年7月1日至2022年8月10日18时。 +【此前消息】   2022澳大利亚联邦大选正式开始投票   5月21日是2022年澳大利亚联邦大选的选举日,从澳大利亚东部时间8时(北京时间6时)开始,位于澳大利亚各地的八千多个投票站陆续开放,选民可以到投票站投票,以选出新一届澳大利亚联邦议会。   今年澳大利亚共有1700多万名合格选民登记,选举将会改选众议院全部151个席位以及参议院76个席位中的40个席位。在众议院赢得多数席位的政党或政党联盟将组建新政府,政党领袖将担任政府总理。 +我们预计随着就业形势改善,叠加政策支持和消费场景的增加,消费对经济的拉动作用将逐步增强,投资增长继续保持稳定,产业持续转型升级将对我国经济发展注入新动力。此外,2022年基数较低,也有利于今年同比增速提升。我们维持今年中国经济增长5.7%的预测。 产出方面,2023年一季度全国规模以上工业增加值同比增长3.0%,较去年四季度回升0.2个百分点。1月以来稳增长政策持续显效,市场需求回暖,产业链供应链加快恢复,工业生产正在稳步修复过程中,3月工业增加值同比增长2.9%,较前两个月加快1.5个百分点。 +比2021年的79.07万人,增长了4.23万人,增长率是5.35%。2022年高考报考总人数连续多年位居全国第一位。 2、广东省,720000人。比2021年63.6万人,增长了8.4万人,增长率是13.21%。2022年高考报考总人数位居全国第二位。 3、山东省,657000人。比2021年63万人,增长了2.7万人,增长率是4.29%。2022年高考报考总人数位居全国第三位。 4、四川省,575600人。比2021年51.5万人,增长了6.06万人,增长率是11.77%。2022年高考报考总人数位居全国第四位。 5、河北省,527400人。比2021年44.13万人,增长了8.6万人,增长率是19.49%。2022年高考报考总人数位居全国第五位。 6、湖南省,497000人。 +由于俄罗斯法律禁止私营军事公司,该集团于法律之外的灰色地带营运[48][49][47]。瓦格纳集团的运作旨在支持俄罗斯的利益,故该集团从俄罗斯国防部获得装备,并使用国防部的设施进行训练,因此有观点认为瓦格纳集团事实上隶属于俄罗斯国防部或俄罗斯军事情报机构格鲁乌[50]。虽然瓦格纳集团本身不受意识形态驱动[51][52],但该集团的各种元素都与新纳粹主义和极右极端主义有关[3][53][54]。 +《柯林斯英语词典》近日也公布了它的2022年度词汇,和剑桥年度词汇完全不同,他们公布的年度词汇是“permacrisis”(长期危机) "Permacrisis", a term that describes "an extended period of instability and insecurity", has been named Collins Word of the Year 2022. 根据官方的定义,名词“permacrisis”(长期危机)指“长期的不稳定与不安全,尤指由一系列灾难性事件导致的。” 此外, 其他热门词汇及术语,包括Kyiv(基辅)、Partygate(聚会门)、Warm bank(取暖银行)、Carolean、Lawfare(法律战)、Quiet quitting(躺平/摆烂)词汇,也在2022年度词汇榜单上名列前茅。 +3亿美元,同比下降36%,这是自上世纪90年代以来最大的跌幅;数据中心和人工智能业务(DCAI)营收为43亿美元,同比下降33%;网络和边缘业务(NEX)营收为20.6亿美元,同比下降1%;加速计算和图形业务(AXG)营收为2.45亿美元,同比增长1%;Mobileye的营收为5.65亿美元,同比增长59%;英特尔代工服务(IFS)营收为3.19亿美元,同比增长30%。 英特尔2022年全年的业绩看起来也不太好,收入勉强达到上个季度更新的预期值下限,部分财务指标甚至没有达到预期。其2022年总收入为631亿美元,同比下降20%;毛利率下降至42.6%;净利润为80亿美元,同比下降60%。 +2023成都大运会观赛攻略 大运会门票 开售时间 购票方式 门票价格 退换/转让规则 儿童购票 常见问答 大运会开/闭幕式 开幕式 闭幕式 大运会比赛 比赛场馆 比赛项目详情 比赛赛程表 参赛名单 大运会交通(限行) 限行车辆 限行时间+尾号+区域 临时/货车通行码 乘车优惠 大运会其他相关信息 大运会奖牌 大运会博物馆 大运会工地 大运会禁飞规定 2023成都大运会观赛攻略 +2023年澳大利亚网球公开赛(英语:2023 Australian Open)是一项在室外硬地球场进行的网球大满贯赛事,于2023年1月16日至29日期间在澳大利亚墨尔本公园举行。这是第111届澳大利亚网球公开赛,也是公开赛年代以来第55届,2023年的第一个大满贯赛事。澳大利亚网球公开赛的赛事类型包括单打、双打和混合双打,还包括青少年赛事和轮椅网球项目。单打比赛有128名球员参加(包括16名资格赛选手)。澳网资格赛将在1月9-12日在墨尔本举行。[1] +剧中,“草莓世界”的成年人林朝夕分别在纪江、裴之陪同下两次来到“芝士世界”,变回学生时期的自己,并由此引发一系列故事。 很多人看到这里,第一反应会觉得剧情走向“不出意外”,会有林朝夕、裴之利用时空漏洞而吃红利的戏份,毕竟这样的桥段不止一次在以往影视作品中上演,且的确经过市场检验,剧情又爽又搞笑。但《天才基本法》并没有这么做。 +北京冬奥会吉祥物“冰墩墩”,以熊猫为原型进行设计创作。冰,象征纯洁、坚强,是冬奥会的特点。墩墩,意喻敦厚、健康、活泼、可爱,契合熊猫的整体形象,象征着冬奥会运动员强壮的身体、坚韧的意志和鼓舞人心的奥林匹克精神。   以熊猫为原型进行设计创作。将熊猫形象与富有超能量的冰晶外壳相结合,体现了冬季冰雪运动和现代科技特点。 +2022年二十国集团峇里岛峰会(英语:2022 G20 Bali summit)是20国集团第十七次高峰会,于2022年11月15日至16日在印度尼西亚巴厘省努沙杜瓦举行[1]。原先是意大利取得该届峰会主办国家,但印度总理纳伦德拉·莫迪则提出延至2022年印度独立75周年之时举行,因此于2018年峰会上向意大利总理朱塞佩·孔特进行协调,最终达成共识改为印度承办[2]。这么一来,印度本来将担任2022年G20峰会主席国,印尼最初原计划在2023年担任G20峰会主席国。 +当时喜剧演员威尔·史密斯走上舞台,在喜剧演员克里斯·洛克取笑史密斯的妻子贾达·萍克特·史密斯之后打了他一巴掌。 史密斯在被禁止参加10年后将不会参加今年的活动。 根据数据公司Statista的数据,奥斯卡也面临收视率下降的问题,2022年收视人数略高于1500万人,而2019年接近3000万人,2000年超过4600万人。 在2023年颁奖典礼之前,关于颁奖典礼对有色人种演员和电影制作人存在偏见的指控也重新浮出水面。 +这些年他的演艺事业发展非常顺利,影视剧的片约也从未断过,我觉得最主要的原因,就是他的演技好。演啥像啥——这才是一个演员的看家本领。 在《相逢时节》中,梁冠华再一次证明了自己的实力。他将张立新看似忠厚实则精明的特点,体现得淋漓尽致。 梁冠华一直都很胖。这一方面跟遗传基因有关,另一方面,也跟他幸福的家庭、如意的婚姻有直接的关系。所谓“心宽体胖”嘛。 很喜欢梁冠华的表演,也渐渐适应了他的“胖子”形象。仿佛不胖,就不是他了。而胖,已然成为了他的一个标识。 二、严晓频扮演宁惠 +2022年,“双奥之城”北京正敞开怀抱,迎接全世界冰雪健儿共赴一场冬奥之约。 北京欢迎你,我们北京见! 主办单位:国务院办公厅 运行维护单位:中国政府网运行中心 版权所有:中国政府网 中文域名:中国政府网.政务 网站标识码bm01000001 京ICP备05070218号 京公网安备11010202000001号 中国政府网微博、微信 主办单位:国务院办公厅 运行维护单位:中国政府网运行中心 版权所有:中国政府网 中文域名:中国政府网.政务 +神舟十五号航天员六个月的太空出差已经接近尾声,本月10日,天舟六号货运飞船已经发射并对接于空间站组合体。 一起期待神舟十六号发射!各系统已经准备就绪,航天员出征在即 今天,神舟十六号载人飞船发射任务组织全区合练。目前,发射任务各系统已经完成了相关功能检查,并做好发射前的各项准备工作。这次发射也是我国载人航天工程空间站应用与发展阶段的首次载人任务。 +一位旁听人员参与旁听后表示,法庭宣布判决结果后,劳荣枝发表了意见,她认为中国是一个法治国家,但她对判决结果很失望,并当庭表示不服,认为这是在污蔑她,把屎盆子扣在她头上。审判长提醒劳荣枝,后期最高法将进行死刑复核的程序,询问劳荣枝是否继续自己委托律师或者是接受法律援助,劳荣枝表示会考虑一下。 劳荣枝的二哥劳声桥接受红星新闻采访时也提到,劳荣枝不认可二审判决,“为什么把你(指法子英)做的事往我头上栽?这是把屎盆子往我头上扣。 +2004年7月28日,武汉轨道交通1号线一期工程通车,经过19年的发展,武汉地铁线网运营里程达460公里,迈入世界级地铁城市,里程排名进入世界前十。 8月10日-12日,一场业内瞩目的盛会2022世界5G大会在哈尔滨举办。众多院士大咖、行业专家,汇聚龙江;世界5G发展的最新成果和观点,齐聚冰城。 作为国家发改委、科技部、工信部共同主办的全球5G领域的国际性盛会,世界5G大会此前三届举办地分别在北京、广州、北京。今年,第四届世界5G大会花落冰城,对黑龙江意义深远。 +2021年1月7日,漫画《灌篮高手》原作者井上雄彦在Twitter宣布将制作新的《灌篮高手》的动画电影[21][22]。 2021年8月13日,宣布电影将由井上雄彦编剧和执导,并在PV公布制作人员情报[23][24][25]。 2022年7月2日,公布正式片名为《灌篮高手》(THE FIRST SLAM DUNK)[26][27]。 2022年11月4日,释出正式预告片和主题曲情报,以及公布全新声优阵容[28][29]。 2022年11月11日,电影发行商羚邦娱乐正式宣布引进,并预定2023年年初于港澳地区上映[30]。 2022年12月1日,确定正式上映日期为“2023年1月12日”[31]。 +4月7日,环球影业官方微博发布消息:“定了!《速度与激情10》内地定档5月17日!生死对决,终途启程,期待与你大银幕见!” 据悉,该片将于5月19日在北美地区上映。 +根据《北京市小客车数量调控暂行规定》(市政府令第296号)、《<北京市小客车数量调控暂行规定>实施细则(2020年修订)》的有关规定,经市交通行政主管部门会同市发展改革、公安机关交通管理、生态环境等相关行政主管部门研究,并报请市人民政府批准,现就2023年北京市小客车指标配额及配置比例等有关事项通告如下: 一、2023年小客车指标配额为10万个,其中普通指标额度3万个,新能源指标额度7万个。 二、2023年小客车指标配置比例如下: 1.普通小客车指标。家庭和个人指标额度共计28600个, 家庭和个人同池摇号;单位指标额度1200个;营运小客车指标额度200个。 2.新能源小客车指标。 +成都大运会会徽主体在世界大学生运动会对应英文首字母“U”基础上,结合天府文化象征元素之一的太阳神鸟,由大红、明黄、翠绿、湖蓝四个渐变色块组成,对应成都大运会绿色、智慧、活力、共享办赛理念,并与国际大体联标志元素一脉相承。 成都大运会吉祥物为一只名叫“蓉宝”的大熊猫。除手中“31”字样火焰的大运火炬,“蓉宝”的耳朵、眼睛、尾巴也呈火焰形态。 +乌江特大桥位于贵州省铜仁市思南、石阡、凤岗三县交界处,全长1834米,主桥为目前世界上最大跨径上承式钢管混凝土拱桥,主跨504米,矢高90米,是德余高速全线关键控制性工程。大桥拱肋采用“缆索吊装+斜拉扣挂”的无支架安装工艺,斜拉扣挂最大悬臂长度237米,全桥共60个节段,最大节段吊重157.8吨,结构新、精度高,难度大、风险高,施工难度位居世界同类型桥梁前列。 “到目前为止,大桥主拱完成了30个节段安装。越往跨中,线形控制会越难,不过我们已经掌握了核心技术。 +� 1998年春晚总导演:孟欣 1999年春晚总导演:刘铁民 2000年春晚总导演:赵安、张晓海 2001年春晚总导演:王冼平、王宪生、金越 2002年春晚总导演:陈雨露 2003年春晚总导演:金越 2004年春晚总导演:袁德旺 2005年春晚总导演:郎昆 2006年春晚总导演:郎昆 2007年春晚总导演:金越 2008年春晚总导演:张晓海、陈临春 2009年春晚总导演:郎昆 2010年春晚总导演:金越 2011年春晚总导演:马东、陈临春、张晓海 2012、2013年春晚总导演:哈文 2014年春晚 +2023浙江常山龙舟公开赛队伍名单 +木村隆二是第一个向岸田文雄扔炸弹的日本人,但他会是最后一个吗?这还真的说不好。 图源网络,侵删。 特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。 Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services. +在罗伯小学枪案发生前,今年校园枪杀案有38起,其中30起发生在中小学,10人死亡、51人受伤。 罗伯小学枪杀案,就死亡人数来讲,是美国的平常抢案,只因19名儿童死亡,才令人震惊。之前的枪杀案,拉斯维加斯60人死亡,奥兰多49人死亡,桑迪胡克小学26人死亡,哥伦拜恩高中13人死亡,在罗伯小学抢案前几天发生的布法罗抢案10人死亡。 枪杀已超越车祸,成为美国儿童和青少年头号死亡原因。《华盛顿邮报》数据库显示,过去20年,331所学校有超过31万1000名学童遭枪击受伤或死亡。 +原标题:《从《重生》到《重生之门》,一个“新导演”的“重生宇宙”丨专访导演杨冬》 阅读原文 +《沉香如屑·沉香重华》(英语:Immortal Samsara),是改编自苏寞的小说《沉香如屑》的2022年中国大陆玄幻仙侠古装剧。由郭虎执导,张鸢盎编剧,杨紫、成毅、张睿、孟子义、朱泳腾、傅方俊、徐恺咛、李欣泽、韩承羽领衔主演。2021年3月12日于横店影视城开机,同年10月14日杀青。于2022年7月20日在优酷首播,上档后热度惊人,上线49小时就冲破10000热度值,创下优酷历史新纪录[2]。台湾由LINE TV、LiTV 线上影视、MyVideo上架,全球由Netflix上架。 +但雷佳音在处理每一个阶段、不同状态下的老林时,真的特别准确,我特别佩服。”  对张子枫、张新成的表现,沈严也是不吝赞美。除了实力派演员,《天才基本法》前十集几乎都是“少年戏”。当“林朝夕”第一次穿行到“芝士世界”时,她还是个五年级的学生,“前十集让观众看小孩的戏,行吗?”沈严坦言,这是剧本策划初期,主创团队内部的最大分歧,“真的是咬牙坚持下来的。”  这种坚持,是基于沈严对原著的了解,“这是原著小说当中的核心,然后才能延伸到后面所有故事。 +数据来源:中国石油塔里木油田公司 +© 2023 RFI – 版权所有版权所有。法广对非本网站内容不承担责任。通过 ACPM/OJD 认证。 (法新社华盛顿10日电) 美国今天正式认定俄罗斯不当拘留「华尔街日报」记者格什科维奇,敦促俄方立即释放外,也代表格什科维奇对俄国加强施压。 发表时间: 11/04/2023 - 09:02更改时间: 11/04/2023 - 08:35 格什科维奇(Evan Gershkovich)是在3月29日遭到羁押。法新社报导,美国国务院异常迅速地作出这项正式决定,表明华盛顿对此案的重视。这是苏联时代以来莫斯科首次指控美国记者涉及间谍活动。 +市场监管总局调查表明,知网实施不公平高价、限定交易行为排除、限制了中文学术文献网络数据库服务市场竞争,侵害了用户合法权益,影响了相关市场创新发展和学术交流传播,构成反垄断法第二十二条第一款第(一)项、第(四)项禁止的“以不公平的高价销售商品”和“没有正当理由,限定交易相对人只能与其进行交易”的滥用市场支配地位行为。 根据反垄断法第五十七条、第五十九条规定,综合考虑知网违法行为的性质、程度、持续时间和消除违法行为后果的情况等因素,2022年12月26日,市场监管总局依法作出行政处罚决定,责令知网停止违法行为,并处以其2021年中国境内销售额17. +如果买不到下一代主机,以后买上一代的艾尔登法环也可以升级为下一代版。 看清了自己 从官网的通知我们可以看到,艾尔登法环发售日期是在明年的一月21日,即2022年1月21日。 以上就是对艾尔登法环发售日期是什么时候的回答。 +据中国载人航天工程办公室消息,经空间站阶段飞行任务总指挥部研究决定,陈冬、刘洋、蔡旭哲3名航天员将执行神舟十四号载人飞行任务,由陈冬担任指令长。神舟十四号载人飞行任务瞄准6月5日10时44分发射。北京时间2022年6月4日11时,3名乘组航天员将在酒泉卫星发射中心问天阁与媒体记者集体见面,并回答记者提问。   来源:中国载人航天公号   陈冬同志简历   陈冬,男,汉族,籍贯河南郑州,河南洛阳出生,中共党员,硕士学位。 +国家统计局 2022年12月26日 2022年全国及各省(区、市)棉花生产情况 本文编选自“国家统计局官网”;智通财经编辑:徐文强。 +重庆交巡警总队相关负责人表示,当前疫情防控进入新阶段,跨区域出行和公路客货运输限制全面取消,群众回家探亲过节等出行意愿强烈,春运人口流动规模将快速恢复,预计今年春运人口流动规模将达到疫情以来的高峰。 经预测,春运期间,全市铁公水空客运量将达3009万人次,较2022年上升19%;其中道路运输客运量1400万人次、增长21.2%;铁路运输客运量1040万人次、增长18%;民航运输客运量514万人次、增长22%;水路运输客运量55万人次、降低30%。 购票! +具体到个人,所有参赛球员只要参加小组赛就可每人拿到3万美元的奖金,冠军球队每名球员可以得到27万美元。其他球员按照成绩,进入16强每人能够拿到6万美元,八强为9万美元,二至四名分别可以得到19.5万、18万和16.5万美元。 国际足联保证,2027年女足世界杯的奖金将与2026年男足世界杯的奖金相同。国际足联主席因凡蒂诺在今年卢旺达的国际足联大会上称,球员的奖金将不通过各足协发放,而是直接交到球员手中,并保证无论2023年女足世界杯收益如何,都不会影响这个奖金分配方案。 +一般的影视剧里,若要暗示男女主角存在发展的可能性,顶多就是镜头对切,而《炽道》把氛围直接拉到顶,在男女主角不熟的时候,直接大特写、微表情、配乐起,生怕别人不知道这二位陌生人要开始谈恋爱了。这同时也相当于在通知观众:这是一部言情剧,和严肃意义上的竞技体育不会有太大关系。 在具体情节的处理上,剧中的很多细节都有些生硬。起初,二人并没有那么多交集,段宇成虽有做运动员的执念,但对罗娜来说,他只是个倒霉的、进不了队的陌生小孩,谈不上有什么感情。 +包括男运动员21人,女运动员23人,总计44人,其中有30人在张家口赛区参赛。 +赖德准将还说:“我们确实知道,该气球侵犯了美国领空和国际法,这是不可接受的。因此,我们已经在多个层面将这一点直接传达给中国。”“现在,我们评估,它(气球)可能会在美国上空停留几天。我们将继续监测和审查我们的选择,并尽可能地让你们了解最新情况。” 美国军方一点不相信中国的飞艇“民用误入说”,因为这不仅不是第一次,而且一年前就在台湾上空发现多个此类气球。 +来源:证券时报 兔年春节档混战中,大盘刚刚站上40亿元。其中,《满江红》票房已反超《流浪地球2》,暂时领跑,两强竞争格局基本成型。 头部影片尚在胶着“对打”,演员的高光时刻已先到来。 大年初三这天,凭借《流浪地球2》,吴京主演的全部电影总票房突破300亿元,成为中国影史第一人。而《满江红》热映背后,沈腾的个人票房冲上265亿,易烊千玺达成了“首个00后150亿影人”。 首个“300亿演员” 灯塔专业版数据显示,1月24日17时41分,吴京主演的全部电影总票房达到300亿元,成为中国影史首个达到此票房成就的演员。 +8%,2021年人数虽同比小幅增加,但仍比2019年减少614万人、下降3.5%,为1.69亿人左右。未来进城农民工及其随迁家属的增长规模将进一步减少,这将带来常住人口城镇化率增幅逐步减缓。   发展不均衡是另一个挑战。根据2022年中国统计年鉴,有12个省(区、市)城镇化率高于全国水平,其中上海、北京、天津位列前三,分别为89.3%、87.55%、84.7%;19个低于全国水平,其中10个低于60%,最低的为35.73%。 +3%,且在2022年前三季度,重庆GDP增速依然达到3.1%。 这表明在2022年第四季度,重庆经济增长遇到阻碍。据2023年重庆市政府工作报告的表述,2022该市的经济社会发展面临多重挑战,如遭遇了抗疫三年来最严峻的疫情、有完整气象记录以来最极端的高温干旱天气、近年来最严重的电力资源紧张,困难和压力超出预期。此外,对照2022年政府工作报告确定的年度目标,地区生产总值、固定资产投资、社会消费品零售总额、一般公共预算收入等部分指标未达到预期。 +其整体形象在中国白兔的特征基础上,融入了传统中国工笔审美风格,采用3D立体建模技术完成。   同时发布的2023年春晚主视觉标识,从“兔圆圆”奔跃向上的姿态定格而来,又是书法草书“卯”字的幻化变体,演绎了“奔跃向上的癸卯兔年”寓意。 +新华社北京3月13日电 13日,北京冬残奥会中国体育代表团宣布,杨洪琼将担任北京冬残奥会闭幕式中国体育代表团旗手。 云南籍运动员杨洪琼1989年9月出生,曾为轮椅篮球运动员,2018年进入国家残奥越野滑雪队。本届冬残奥会上,她包揽了残奥越野滑雪女子坐姿组短距离、中距离、长距离3个项目金牌,是中国体育代表团获得金牌数量最多的运动员。 主办单位:国务院办公厅 运行维护单位:中国政府网运行中心 版权所有:中国政府网 中文域名:中国政府网.政务 +此外,Minerva 还使用多数投票(majority voting),不是要求模型给出一个答案,而是要求它提出 100 种答案。在这些答案中,Minerva 选择最常见的一种答案。 这些新策略的收益是巨大的,Minerva 在 MATH 上的准确率高达 50%,在 GSM8K 以及 MMLU(包括化学和生物学在内的一组更通用的 STEM 问题)上的准确率接近 80%。当 Minerva 被要求重做稍微调整过的问题时,它的表现同样很好,这表明它的能力不仅仅是来自记忆。 Minerva 可能有奇怪、混乱的推理,但仍然得出正确的答案。尽管像 Minerva 这样的模型可能会得出与人类相同的答案,但它们所遵循的实际过程可能大不相同。 +小米13全系出厂搭载基于Android 13的MIUI 14操作系统,二者均可通过系统更新升级至后续版本。 小米13系列在中国大陆地区提供的销售版本及售价如下: 小米13及小米13 Pro均于北京时间2022年12月11日晚21时30分在全渠道开启定金预售,北京时间2022年12月14日10时全渠道正式开售[14];小米13 Ultra则于2023年4月18日21时30分在全渠道开启定金预售,2023年4月21日上午10时全渠道正式开售[15]。 +评论 在面临被美国全面封禁或出售的压力下,TikTok的首席执行官周受资3月23日在美国国会众议院能源和商业委员会作证,接受两党议员针对TikTok用户隐私、数据安全以及美国国家安全等问题的质询。这是1983年出生、来自新加坡的周受资首次以证人身份赴国会山出席听证会。 (有关这次听证会的直播和其它报道,请锁定美国之音中文网。) 本栏目暂停更新。请通过本网站以及美国之音社媒平台继续关注相关新闻与分析。 从早晨10点开始的听证会到下午3:24分结束,中间有两次短暂的休会。 +中新网北京12月7日电(记者 王禹)北京时间7日凌晨,卡塔尔世界杯结束八分之一决赛的全部争夺。八支球队从万军丛中脱颖而出,即将展开更为激烈的角逐。四强席位近在咫尺,当足球变成“只需要再赢三场”的游戏,谁能距离梦想中的大力神杯更进一步?虽然上周六预测1/8决赛只取得了75%正确率,但小编还是要继续斗胆预测一下,卡塔尔世界杯1/4决赛的走势。 +2022年春运时间:   2022年1月17日—2月25日,共40天   2022年春运抢票时间:   春运第一天的火车票(2022年1月17日农历腊月十五)——2022年1月3日开抢   春运第二天的火车票(2022年1月18日农历腊月十六)——2022年1月4日开抢   春运第三天的火车票(2022年1月19日农历腊月十七)——2022年1月5日开抢   春运第四天的火车票(2022年1月20日农历腊月十八)——2022年1月6日开抢   除夕前一天的火车票(2022年1月30日农历腊月廿九)——2022年1月16日开抢   除夕当天的火车票(2022年1月31日农历腊月三十)——2022年1月17日开抢 +3世界錦標賽重返北美,這是自2013年以來首次在美國西南部舉辦該賽事。 此外,IRONMAN今天還宣布了一項新的為期五年的主辦場地協議,其中包括引入新的全距離IRONMAN鐵人三項,該鐵人三項鐵人將從2020年聖喬治開始在整個北美的一系列城市之間輪換。每三年舉辦一次全程鐵人三項鐵人三項賽,聖喬治將在2023年再次舉辦鐵人三項賽。2020年和2023年鐵人聖喬治鐵人三項也將被指定為北美冠軍。 +参议院则较势均力敌,目前两党席位大致相当,但民主党拥有控制权,这是因为一旦出现平局,副总统卡玛拉·哈里斯(Kamala Harris, 中文名:贺锦丽)拥有决定性的一票。共和党今年中期选举只需要再赢得一个席位即可夺得控制权。 2022年中期选举之所以比大多数选举更重要,是因为在今后数年美国和世界面临的一些重大议题上,民主党人和共和党人观点截然相反,而美国的立场和政策变化将对世界产生影响。 这些议题包括堕胎权、乌克兰、气候变化、难民政策、美国民主体制的前途。 +9%;Q4游戏及相关增值服务净收入为190.85亿元,同比增加1.6%。 Q4游戏业务的营收增速有所下降,同时其毛利润和毛利率也在下降。财报提到,Q4游戏及相关增值服务的毛利率为 59.1%,上一季度和去年同期分别为65.0%和60.9%,下降主要由于第四季度一次性确认若干代理游戏的版权费用。 网易2022年来自于在线游戏的净收入占游戏及相关增值服务净收入的92.5%。2022年来自于手游的净收入占在线游戏净收入的67.0%,2021年该占比为70.4%。2022年手游收入金额同比虽有所增加,但其占比下降,主要是由于《梦幻西游》电脑版、《永劫无间》等带来的端游收入贡献增加。 +5万亿元,均居世界首位。基础设施日益完善,截至2022年末,中国铁路营业里程达到15.5万公里,其中高速铁路营业里程4.2万公里,在全世界遥遥领先。 高水平开放扎实推进。货物贸易总额再创新高,2022年中国货物贸易总额突破40万亿元,达到42.1万亿元,较上年增长7.7%。服务贸易较快增长,1-11月份服务进出口总额达到5.4万亿元,同比增长15.6%。吸引外资逆势增长,1-11月份实际使用外资11561亿元,同比增长9.9%,创历史新高。 民生保障有力有效。居民收入稳定增长,2022年中国居民人均可支配收入达36883元,同比增长2.9%。 +北京 2022 年冬奥会吉祥物(冰墩墩) 北京 2022 年冬残奥会吉祥物 (雪容融) +时间:2021年12月20日 10:40     点击数:     深圳大学2022年计划招收国家任务全日制艺术类本科生约为609名,具体如下 : 一、招生专业、计划及收费标准 (一)分省分专业招生计划(以各省公布的《招生专业目录》为准): 备注: 1.如招生省份艺术类计划不分文理,则艺术文理兼招,否则仅招艺术文或艺术历史(广西、湖南、黑龙江、江苏、福建只招艺术文或艺术历史,以各省招生专业目录为准); 2. +首先不得不承认微软当前的这笔收购实在是一笔非常高价的收购,毕竟这么高额的收购金额,可以说即使是如此强大的巨头,微软也不是一个小数字,毕竟600多亿美金即使是微软也不是可以随便拿出来的,不过不可否认的是暴雪是有名的游戏巨头,所以微软花如此大价钱收购暴雪,至少从投资的这个角度来看,不是一个亏本的买卖,动视暴雪在全球190个国家和地区拥有近4亿活跃玩家,占比高达13.3%,直接营收每年都将近几十亿美元。 +2023中关村论坛由科技部、国家发展改革委、工业和信息化部、国务院国资委、中国科学院、中国工程院、中国科协、北京市政府共同主办,主题为“开放合作·共享未来”。 新华社记者 张玉薇 摄 主办单位:国务院办公厅 运行维护单位:中国政府网运行中心 版权所有:中国政府网 中文域名:中国政府网.政务 网站标识码bm01000001 京ICP备05070218号 京公网安备11010202000001号 中国政府网微博、微信 主办单位:国务院办公厅 运行维护单位:中国政府网运行中心 版权所有:中国政府网 中文域名:中国政府网.政务 +[2] 因卡塔尔夏季户外酷热不宜比赛,本届亚洲杯延至2024年1月至2月举行。 下列三个国家有意角逐主办权:[3] 由于印度和韩国相继退出竞选,中国承办亚洲杯几乎已经是囊中之物。亚足联于2019年6月4日表决,正式决定2023年亚洲杯由中国承办。2022年5月14日,由于受2019冠状病毒病疫情影响,亚足联、中国足协和2023年亚洲杯中国组委会决定亚足联亚洲杯将易地举办。[14]2022年10月17日,亚足联宣布本届亚洲杯新的举办地为卡塔尔。[2] 卡塔尔 v 黎巴嫩 +扫码打开虎嗅APP 本文来自微信公众号:果壳 (ID:Guokr42),作者:中子星,编辑:Steed,头图来自:《三体》电视剧 《三体》电视剧的第29集,都看过了没有啊? 这一集堪称神作,近乎完美展现了原著第一部里的高潮情节——古筝行动。 这是全球军方的一场联合行动,利用剧中人物汪淼研发的纳米材料“飞刃”,在巴拿马运河最窄处拉起数十条纳米细线,如同古筝上的琴弦。 当地球叛军ETO的大本营——“审判日”号巨轮驶过时,强度极高的细线将巨轮切割成了40多张薄片,一举消灭了船上的ETO成员,同时截获了三体人的重要信息。 +23日,记者从生态环境部获悉,2022年环境日的主题为“共建清洁美丽世界”。 在联合国第一次人类环境会议召开50周年之际,中国将“共建清洁美丽世界”作为环境日的主题,旨在促进全社会增强生态环境保护意识,投身生态文明建设,在共建美丽中国的同时,进一步体现中国在全球生态文明建设中的重要参与者、贡献者、引领者作用。 +Jan 25, 2022 ... 在今年的冬奥会和冬残奥会上,首都高校有1.4万名师生志愿者为出征2022年北京 ... 北京大学举办了隆重的出征仪式,为志愿者授旗壮行,奥运冠军代表丁宁 ... +莱恩在任期间,共和党在不获民主党的支持下,通过2017年减税与就业法案。 2018年期中选举,民主党经过了8年的少数党后,重新获得众议院多数,众议院民主党领袖南希·佩洛西再度出任议长一职。 2022年中期选举,共和党获得众议院多数席位,2个月后的2023年1月3日,即第118届美国国会的开幕日,开始众议院议长的选举。源于众议院共和党会议内部的分歧,经过15次投票,凯文·麦卡锡终于在1月7日获得了多数票当选为众议院议长。[7] +1%,与经济增长基本同步。社会消费品零售总额突破40万亿元,达到44.1万亿元新高,同比增长12.5%。 就业与物价总体稳定。全年城镇新增就业1269万人,全国城镇调查失业率为5.1%,优于5.5%的预期目标;居民消费价格同比上涨0.9%,低于3%的预期目标,涨幅比上年回落1.6个百分点。 国际影响力进一步扩大。2021年,中国经济增长对世界经济增长的贡献率约为25%,继续成为引领世界经济恢复增长的主要力量。中国货物贸易额、外汇储备余额保持世界第一,全年货物进出口额达39.1万亿元,顺差43687亿元,同比增长20. +2007年底,她在比赛中不慎受伤,右膝前十字韧带断裂,内侧副韧带撕裂,这使她在随后一整年几乎没有参加任何比赛。直到2010年在温哥华冬奥会上获得第6名的成绩后,徐梦桃才完成了膝关节取钉手术。 伤愈之后,徐梦桃逐渐迎来了职业生涯的巅峰。她先在2011-2012赛季和2012-2013赛季连续夺得两年的世界杯总冠军头衔,赛季6站世界杯比赛收获了5站冠军;还在2009年和2011年收获两枚世锦赛银牌。2013年在挪威,她收获了个人第一枚世锦赛冠军。 +Nov 20, 2022 ... [环球网报道记者张晓雅]据法新社最新消息,北京时间今天凌晨,法国队证实金球奖得主、知名球星卡里姆·本泽马因左大腿受伤无法参加本届卡塔尔世界杯。 +2022年冬季奥林匹克运动会开幕式是2022年冬季奥林匹克运动会的开幕式,于北京时间2022年2月4日晚上于北京国家体育场举行。奥运会开幕式恰逢中国农历新年正月初四及传统节气立春。 以2008年夏奥开幕式为依据,播报顺序为国际奥林匹克委员会官方语言之一的法语,其次是国际奥委会另一官方语言英语,最后是东道主中国的官方语言汉语普通话。 时长176分钟的开幕式重点突出三个主题[11]: 19时25分,持续30分钟的暖场表演“行进式广场舞”开始,演员由5至70岁的表演者组成。 +艺绽君看《搜救》时,脑海中很自然就想到了2012年艾默里奇执导的《后天》,该片讲述了丹尼斯·奎德饰演的气候学家父亲杰克·霍尔,当得知儿子山姆(吉伦哈尔饰)因突发洪水被困在纽约曼哈顿公共图书馆后,决定冒险前进纽约在冰天雪地中展开救援行动的故事。《后天》当年在全球取得了5.5亿美元的高票房。 从某种程度上说,《搜救》跟《后天》有点像,都是灾难救援类型片。这类影片,好莱坞已经做得很成熟了,有一整套讲故事的“套路”。 +U17国少年龄是从2005年出生是球员挑选,2005年龄段队伍在未来一年和2001年龄段队伍一样,没有正式的洲际赛事任务,但因属于2028年洛杉矶奥运会适龄年龄段队伍,所以中国足协从去年开始就已经组建,任命U16国少队主教练杨晨同时兼任该队主教练,负责组建、准备工作,2022年主要以国内集训为主。 U19国少年龄是从2003年出生是球员挑选,由西班牙人安东尼奥担任主教练的中国2003年龄段U19国青队,今年将迎来第一次小考。2022年9月10日至18日,这支球队将参加第41届U20亚洲杯预选赛小组赛。 +及2022级新生参加典礼。本科新生生源质量稳定 硕博生源质量持续提升2022年,深大录取人数再创历史新高。荔园迎来了12691名新生,其中包括7436名本科生、5010名硕士生、245名博士生,以及来自55个国家的238名国际学生。开学典礼现场(何亚南/摄影)数据显示,深圳大学2022级本科新生整体生源质量稳定,录取的本科生来自31个省、自治区、直辖市及港澳台地区,覆盖面广、体量大。各省录取分数线平均超过54%以上双一流高校,同比增加2个百分点。 +莫德里奇、姆巴佩、梅西和布法尔。 2022世界杯进入最后的白热化阶段,残酷的淘汰赛令巴西与英格兰两大夺冠热门提前出局,葡萄牙八强赛落败亦意味着克里斯蒂亚诺·罗纳尔多(Cristiano Ronaldo,基斯坦奴·朗拿度)的世界杯冠军梦碎。 如今战至最后四强,阿根廷、克罗地亚、法国和摩洛哥是目前仍有机会在这个周末的卡塔尔捧起大力神杯的球队。 在此之前将进行半决赛,决出最后决赛的双方。 +神舟十四号(简称神十四)是中国“神舟”系列飞船的第十四次任务,也是中国载人航天工程的第九次载人飞行任务与中国空间站建造阶段的首次载人飞行任务,于2022年6月5日10时44分7秒于酒泉卫星发射中心发射[1][2]。 任务开始之时,神舟十四号搭载了三名航天员进驻天宫空间站天和核心舱,与天舟三号和天舟四号一同形成组合体。根据计划,神舟十四号乘组将在轨驻留6个月。 +3%;2022年第49周以来,流感病毒阳性率则逐步降低,至12月下旬降至极低水平,目前流感阳性率维持在1.0%以下(图2-5)。    图2-5 全国哨点医院流感样病例新冠和流感病毒阳性率变化趋势    (数据来源于402家网络实验室)      三、住院诊疗情况    (一)在院新冠病毒感染者结果。全国在院新冠病毒感染者于2023年1月5日达到峰值162.5万人,随后持续下降,1月30日下降至14.4万人,较峰值减少了91.1%(图3-1)。  图3-1 全国在院新冠病毒感染者每日变化情况 +这是张帅首次打进辛辛那提赛女单8强,也是她在职业生涯里第4次挺进到WTA1000女单八强阶段,此前她曾在2014罗马站、2016和2018中网跻身8强,只不过那3次张帅都没能更进一步。 此外,这也是张帅本赛季首次击败世界排名前10的选手,终于结束了此前自己对TOP10之前的6连败尴尬纪录。 张帅上一次击败世界前十还是2018年,她在中网战胜科贝尔,而再加上这次战胜康塔维特,张帅至今7次战胜世界前十。 在打进辛辛那提赛女单8强后,张帅收获了190个排名积分,女单即时排名升至第35位。 +据中国民航局航空安全办公室公布的初步调查结果,客机在13:27——起飞后11分钟——上升至巡航高度海拔8900米(2.92万英尺),14:17进入广州管制区,14:20:55广州区域管制雷达出现“偏离指令高度”警报,飞机脱离巡航高度,管制员随即呼叫机组,但未收到任何回复。 14:21:40——即起飞后1小时5分钟——雷达最后一次记录到MU5735航班的飞机信息,随后,雷达信号消失。 其后,飞机被发现坠毁于广西梧州市藤县埌南镇莫埌村附近一处山谷,现场有一个相信由飞机撞击而造成,面积约45平方米、深2.7米的积水坑,被调查人员判定为主撞击点。 +但12个小组在淘汰赛阶段无法直接形成对称的对阵模型。国际足联有意借鉴欧足联在欧锦赛上的比赛设计,即每个小组前两名和成绩最好的8个小组第三名,组成32强对垒。 这种模式的可取之处在于保留了和现在节奏一致的小组赛模式,每支球队打3场比赛。但被诟病之处在于多出更多比赛。比赛总量将增加至104场,单小组赛就有72场,完整赛程或拉长至35天以上。 美加墨世界杯将有16个城市参与承办比赛。 +高亭宇身高180厘米,24岁,来自黑龙江。2017年他获得亚冬会冠军,崭露头角。2021年9月他以33秒83打破了全国纪录,距33秒61的世界纪录仅差0.22秒。高亭宇以短距离见长,特别是起跑很快。在速度滑冰项目中,500米是最短的项目,而男子项目成绩快于女子。可以说,高亭宇在北京奥运会上,成为速度滑冰滑得最快的人。 纪录的故事:最快的冰 北京冬奥会速度滑冰14个小项,除了集体出发不设纪录之外,12个小项中,除了女子500米和男子1000米之外,其它10个小项的奥运纪录被改写,还包括1项世界纪录。 +环境日采用了跟当年的会议相同的口号——“只有一个地球”,聚焦保护和恢复人类唯一家园的迫切需要。 在2022年的官方活动中,东道国瑞典承诺不再为新的煤炭、石油、天然气开采项目发放许可证。超过6500万人在线庆祝世界环境日。   聚焦“生态系统修复”,主题是“重构,重建,重塑”。由巴基斯坦主办,聚焦人类对地球生态系统的开发,呼吁全球齐心协力修复已成事实的伤害。每三秒钟,我们的世界就会失去一个足球场大小的森林,而在上世纪,全球一半的湿地遭到破坏。   2020年世界环境日的主题是生物多样性这一紧迫且关乎生存的问题。 +2022年中国金鸡百花电影节于2022年11月10日—12日在中国厦门举行,由中国文联、中国电影家协会、厦门市人民政府共同主办。本届电影节举办金鸡国际影展、金鸡国产新片展、香港影片展、金鸡VR影展等多个影展活动。[1][2]其中金鸡国际影展于11月9日—20日展映,开幕影片为泰国电影《速度与爱情》。[3]本届电影节闭幕式暨第35届中国电影金鸡奖颁奖典礼于11月12日晚在厦门海峡大剧院举行。[4] 本届金鸡国际影展分为竞赛单元和全景单元。其中竞赛单元的10部作品为:[5] +苹果2022年春季发布会什么时候?苹果2022年春季发布会产品预测。iPad Air5什么时候发布?iPad Air5配置参数信息和升级。iPhone SE3什么时候发布?iPhone SE3配置参数信息和提升。 苹果官网发布海报:北京时间 3 月 9 号 凌晨 2 点举办2022年春季新品发布会。 据悉,2022年的苹果春季新品发布会将发布以下3-4款产品。 新款 iPhone SE 据曝有两个版本,一款保持 iPhone SE2 的设计,采用 4.7 寸屏幕,实体 Touch ID。另一款或命名为 iPhone SE Plus ,类似 iPhone XR 的设计,采用约 5.5 英寸的刘海全面屏。 发布的是第一款的概率较大。搭载A15处理器,支持5G网络,希望续航也能够提升。 +中国国家男子足球队,现任主教练亚历山大·扬科维奇,将带队备战2023年亚洲杯、2026年世界杯亚洲区预选赛。 亚历山大·扬科维奇2023年2月24日,担任中国国家男子足球队主教练。 球员生涯 塞尔维亚贝尔格莱德红星俱乐部 澳大利亚悉尼ASC俱乐部 法国波城、帕乌俱乐部 美国堪萨斯城俱乐部 教练生涯 2001年 贝尔格莱德红星足球俱乐部助理教练 2002年-2003年 索非亚列夫斯基足球俱乐部助理教练 +彭莱(姚晨 饰) 曾在国内红极一时的女子摇滚乐队——狂花乐队主唱 大崔(常远 饰) 白天(庄达菲 饰) 彭莱的女儿 罗俊(袁弘 饰) 李彬彬(李逸男 饰) 陈月(赵子琪 饰) 许多(代乐乐 饰) 安哲(李俊墨 饰) 丁慧茹(苇青 饰) 白泽奇(李雅男 饰) 以上分享的摇滚狂花简介、摇滚狂花一共多少集 全剧总共12集的详细内容了,希望能给您带来帮助! +2022世界5G大会由国家发改委、科技部、工信部和黑龙江省人民政府共同主办,以“筑5G生态·促共创共利”为主题,设置国际合作、5G及数字产业、技术前瞻、“5G+行业应用”四个板块和14个分论坛及主题研讨会,采用线上线下相结合的方式,以会、展、赛、投资洽谈等形式呈现5G的技术进步和产品创新,搭建跨区域产业协作联动桥梁。 +除“最佳男主角”、“最佳女主角”、“最佳电视剧”、“最佳电视纪录片”、“最佳电视综艺(文艺)节目”、“最佳电视动画片”、“最佳电视剧编剧”、“最佳电视剧导演”、“中国文联终身成就电视艺术家”外,“优秀电视剧”奖项由上届的8部增加到9部,台、网播出作品一起进行评选;暌违8年的“最佳电视节目主持人”也将再次颁发;而在时隔22年之后,“最佳男、女配角”的奖项也将回归,共享金鹰荣耀。   相关推荐:2022金鹰节获奖名单(全) +北京市住房租赁条例 (2022年5月25日北京市第十五届人民代表大会常务委员会第三十九次会议通过) 北京市人民代表大会常务委员会公告 〔十五届〕第76号   《北京市住房租赁条例》已由北京市第十五届人民代表大会常务委员会第三十九次会议于2022年5月25日通过,现予公布,自2022年9月1日起施行。 +新华社俄罗斯乌苏里斯克8月31日电(记者梅世雄)“东方-2022”演习8月31日上午在俄罗斯乌苏里斯克市谢尔盖耶夫斯基训练场开幕。中国、阿尔及利亚、印度、白俄罗斯、塔吉克斯坦、蒙古国等国派出部队参加此次演习。开幕式上,俄罗斯国防部副部长叶夫库罗夫宣布演习开始,随后各国参演部队指挥员致辞,并举行了分列式。 +她在1989年世界花样滑冰锦标赛上成为亚洲第一位花样滑冰世界冠军,在1992年冬奥会上成为亚洲第一位花样滑冰奥运会奖牌获得者 (*2) ^ 即滑冰技巧、动作衔接、动作完成、舞蹈编排、音乐表现 奥运会 花样滑冰 索契 浅田真央 体育运动 +10月16日,中國郵政發行「中國共產黨第二十次全國代表大會」紀念郵票一套2枚,小型張1枚。[77][78] 二十大闭幕后的第一个交易日,A股大跌,其中沪指跌破3000点,唯国防军工板块逆势上涨。[79]香港恒生指數亦暴跌逾千点,创13年半新低。[80] 由于中国大陆反复强调要坚决打击“妄议中央”[81][82],因此二十大的不少话题在中国大陆都是禁忌话题,公众不得公开讨论甚至私下讨论[83]。中国大陸网民通常以迂回曲折的方式发表自己的意见,以免因言贾祸[84]。当局进一步决心对二十大会议过程保持全面控制。 +杨紫琼凭借她在《瞬息全宇宙》中的变形角色成为最佳女主角的热门人选,但古典音乐剧《塔尔》中的凯特·布兰切特也是有力竞争者。 在最佳男演员类别中,布兰登·弗雷泽凭借他在《鲸鱼》中角色成为领跑者,但他面临来自奥斯汀·巴特勒的激烈竞争,后者因将传记片《猫王》中的主角赋予生命而获得提名。 今年的颁奖典礼是在2022年臭名昭著的“耳光”事件的阴影下举行的。 +2021赛季欧冠四分之一决赛即半决赛和决赛的抽签时间为3月18日星期五(欧洲中部时间)。 2021赛季开始淘汰赛取消了客场进球规则,无论球队在主客场的进球数如何,180分钟后若出现平局都将进入加时赛。加时赛如果仍然无法分出胜负,则将进入点球大战。 2021赛季欧冠16强淘汰赛抽签结果 上一篇: 欧洲联盟杯赛事介绍 下一篇: 2021赛季欧冠小组赛巴萨小组出局 ... +当地时间9月14日下午,女王的灵柩从白金汉宫被运到威斯敏斯特大厅,进行为期四天的停放仪式。不少英国民众特地从全国各地赶往伦敦瞻仰女王。 中新网9月16日电 据外媒报道,已故英女王伊丽莎白二世的国葬将于当地时间19日举行,当天上午11时55分葬礼仪式结束时,英国将为女王举行两分钟的默哀仪式。 届时,希思罗机场也将停飞30分钟以降低噪音,以此向英女王致敬。预计将有超过2000名宾客参加葬礼,包括多国元首和政要等。国葬仪式将进行现场直播。 +经中美双方商定,美国国务卿安东尼·布林肯将于6月18日至19日访华。 您当前使用的浏览器版本过低,导致网站不能正常访问,建议升级浏览器 谷歌(Chrome)浏览器 下载 360安全浏览器 下载 +乌江特大桥主拱预计在今年上半年完成合龙,为德余高速这条山区群众期盼已久的幸福路早日通车奠定坚实基础。 +本场对决的首盘比赛,张帅一上来就两度被对手破发,早早连丢4局陷入0-4落后,也是仅抵抗了28分钟,就以2-6先丢一盘。 所幸,张帅之后及时调整,并未很快崩盘溃败,她在第二盘与康塔维特开启缠斗模式,并在第7局完成关键破发取得领先优势。及至第十局张帅成功拿下发球胜盘局,从而以6-4扳回一盘。 +相关链接: 教育部关于印发《2022年全国硕士研究生招生工作管理规定》的通知 +具体球队分档:   第一档:卡塔尔(东道主)、巴西、比利时、法国、阿根廷、英格兰、西班牙、葡萄牙   第二档:墨西哥、荷兰、丹麦、德国、乌拉圭、瑞士、美国、克罗地亚   第三档:塞内加尔、伊朗、日本、摩洛哥、塞尔维亚、波兰、韩国、突尼斯   第四档:喀麦隆、加拿大、厄瓜多尔、沙特、加纳、三支附加赛球队(新西兰VS哥斯达黎加、威尔士VS苏格兰/乌克兰、秘鲁VS澳大利亚/阿联酋)。 +新一期《好好说话》节目成功结束,周登梁在台下向杨光道谢,他以前认为《好好说话》栏目太假了,因为每次节目都是以欢喜圆满收场,如今亲自参与到节目中,他才感同身受,认可了节目的真实性质。廖望参加完节目,回到了家里。廖母发现廖望化了妆,而且衣服也特意精心挑选过一样。廖望在母亲的追问下透露自己成了《好好说话》节目的法律顾问,廖母与廖父惊喜交加,《好好说话》是一档非常出名的民生节目,杨光靠着这档节目收获大量中老年粉丝,廖望以后将经常与杨光有接触,自然让廖母有些羡慕。 +2022年冬季奥林匹克运动会花样滑冰女子单人滑比赛于2022年2月15日至2月17日在中国北京首都体育馆举行。其中短节目于15日举行,而自由滑则于17日举行。最后俄罗斯奥委会代表安娜·谢尔巴科娃与亚历山德拉·特鲁索娃取得金牌与银牌,铜牌则由日本选手坂本花织获得。[1]这同时是三名选手第一次在奥运获得个人赛金牌。 +暴雪娱乐公司于发布声明称,由于未能就符合暴雪运营原则和对玩家及员工承诺的协议续签达成协议,同网易的现有授权协议将在2023年1月23日到期,届时将暂停在中国大陆的大部分暴雪游戏服务。 中国大陆地区的《魔兽世界》《炉石传说》《守望先锋》《暗黑破坏神III》《星际争霸II》《魔兽争霸III:重制版》《风暴英雄》(以下统称“暴雪游戏产品”),将于2023年1月24日0时终止运营。 其中,从2022年11月23日其关闭暴雪游戏产品在战网以及客户端内的充值服务及用户注册入口。 +781亿元增加至2022年同期的人民币9.287亿元,主要由于补贴及税收优惠以及某些投资的收益净额增加所致。   其他方面:   美团研发开支由2021年第四季度的46亿元增加至2022年第一季度的49亿元,占收入百分比由9.3%上升1.2个百分点至10.5%,乃主要由于雇员福利开支增加所致。   截至2022年3月31日,美团交易用户数达6.929亿,上年为5.69亿,同比增长21.7%。活跃商家数目900万,上年为710万,同比增长26.6%。 +1905电影网讯 3月10日,《流浪地球2》发布俄罗斯定档预告,预告片采用俄语配音,曝光太空电梯打斗、月球核爆等新画面,以宏观视角讲述地球即将面临的灾难危机,人类命运将何去何从引发巨大悬念。 电影《流浪地球2》由郭帆导演,刘慈欣监制,吴京、李雪健、沙溢、宁理、王智、朱颜曼滋领衔主演,刘德华先生特别演出,将于4月12日俄罗斯上映。 目前,《流浪地球2》全球票房达5.8亿美元,其中,中国内地票房超39.8亿人民币,北美票房达496万美元,澳大利亚票房达124万美元。 +康雅吉丽影视化妆学校剧组化妆师《沉香如屑》 剧组工作花絮 返回搜狐,查看更多 责任编辑: +冰上舞剧《踏冰逐梦》 主演介绍:领衔主演 世界冠军 张丹饰:陆溪云中国最杰出的花样滑冰双人滑运动员之一,2006年都灵冬奥会双人滑亚军,为中国双人滑赢得首枚冬奥银牌。2008-2012年,先后多次获得世锦赛亚军、四大洲锦标赛冠军等优异成绩。领衔主演 世界冠军 张昊饰:杜远洲中国最杰出的花样滑冰双人滑运动员之一,2006年都灵冬奥会双人滑亚军,为中国双人滑赢得首枚冬奥银牌。 +黑龙江省冰上训练中心教练员王濛担任第一棒,火炬手中还有中国滑雪协会原秘书长单兆鉴、短道速滑世界冠军刘秋宏等多位出自冬季项目的代表。 “冬奥梦交汇中国梦,梦想能够照进现实,是因为有各行各业的付出和努力。点滴付出汇聚成流,才能向世界奉上一场精彩的冬奥会。”担任火炬手的北京市工商联副主席、奇安信集团董事长齐向东说。 “火炬也点燃了我们每一个人心中的梦想。奥运健儿在赛场拼搏,每一个中国人也都在自己的人生舞台上拼搏奋进。 diff --git a/examples/debate_simple.py b/examples/debate_simple.py index 953f664f3..fa634c532 100644 --- a/examples/debate_simple.py +++ b/examples/debate_simple.py @@ -14,9 +14,9 @@ from metagpt.roles import Role from metagpt.team import Team gpt35 = Config.default() -gpt35.llm.model = "gpt-3.5-turbo-1106" +gpt35.llm.model = "gpt-3.5-turbo" gpt4 = Config.default() -gpt4.llm.model = "gpt-4-1106-preview" +gpt4.llm.model = "gpt-4-turbo" action1 = Action(config=gpt4, name="AlexSay", instruction="Express your opinion with emotion and don't repeat it") action2 = Action(config=gpt35, name="BobSay", instruction="Express your opinion with emotion and don't repeat it") alex = Role(name="Alex", profile="Democratic candidate", goal="Win the election", actions=[action1], watch=[action2]) diff --git a/examples/di/README.md b/examples/di/README.md index f63795f13..3dc9b7b1b 100644 --- a/examples/di/README.md +++ b/examples/di/README.md @@ -12,9 +12,97 @@ ## Example List - Tool usage: web page imitation - Tool usage: web crawling - Tool usage: text2image -- Tool usage: email summarization and response\ +- Tool usage: email summarization and response - More on the way! Please see the [docs](https://docs.deepwisdom.ai/main/en/guide/use_cases/agent/interpreter/intro.html) for more explanation. -We are continuously releasing codes, stay tuned! +## Experiments in the Paper + +Before running the experiments, download the [di_dataset](https://drive.google.com/drive/folders/17SpI9WL9kzd260q2DArbXKNcqhidjA7s?usp=sharing) and place it in the specified path (default DATA_PATH, where DATA_PATH = METAGPT_ROOT / "data"). + +To reproduce the results in the paper, run the following commands: + +``` +python run_ml_benchmark.py --task_name 04_titanic +``` +``` +python run_open_ended_tasks.py --task_name 14_image_background_removal --data_dir directory_to_di_dataset --use_reflection True +``` + +The `run_ml_benchmark.py` and `run_open_ended_tasks.py` scripts implement the pipeline of the Data Interpreter. + +Some key arguments: + +- `--task_name`: required, specifies the task to run. e.g., 04_titanic and 14_image_background_removal. Refer to the table below for available task names. +- `--data_dir`: optional, the directory that stores the `di_dataset` (default is `DATA_PATH`). +- `--use_reflection`: optional, the flag to use reflection or not (default is True). + +### Data Interpreter Dataset Structure + +di_dataset + +- ml_benchmark + - 04_titanic + - 05_house-prices-advanced-regression-techniques + - 06_santander-customer-transaction-prediction + - 07_icr-identify-age-related-conditions + - 08_santander-value-prediction-challenge +- open_ended_tasks + - 01_ocr + - 02_ocr + - 03_ocr + - 14_image_background_removal + - 16_image_2_code_generation + - 17_image_2_code_generation + +### ML-Benchmark Dataset and Requirements + +ML-Benchmark contains 8 typical machine learning datasets. + +| ID | Task Name | Dataset Name | User Requirement | +|----|-----------------------|--------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 01 | 01_iris | Iris | Run data analysis on sklearn Iris dataset, include a plot | +| 02 | 02_wines_recognition | Wine recognition | Run data analysis on sklearn Wine recognition dataset, include a plot, and train a model to predict wine class with 20% as test set, and show prediction accuracy | +| 03 | 03_breast_cancer | Breast Cancer | Run data analysis on sklearn Wisconsin Breast Cancer dataset, include a plot, train a model to predict targets (20% as validation), and show validation accuracy | +| 04 | 04_titanic | Titanic | This is a titanic passenger survival dataset, your goal is to predict passenger survival outcome. The target column is Survived. Perform data analysis, data preprocessing, feature engineering, and modeling to predict the target. Report accuracy on the eval data. Train data path: '{data_dir}/ml_benchmark/4_titanic/split_train.csv', eval data path: '{data_dir}/ml_benchmark/04_titanic/split_eval.csv'. | +| 05 | 05_house_prices | House Prices | This is a house price dataset, your goal is to predict the sale price of a property based on its features. The target column is SalePrice. Perform data analysis, data preprocessing, feature engineering, and modeling to predict the target. Report RMSE between the logarithm of the predicted value and the logarithm of the observed sales price on the eval data. Train data path: '{data_dir}/ml_benchmark/05_house-prices-advanced-regression-techniques/split_train.csv', eval data path: '{data_dir}/ml_benchmark/05_house-prices-advanced-regression-techniques/split_eval.csv'. | +| 06 | 06_santander_customer | Santander Customer | This is a customers financial dataset. Your goal is to predict which customers will make a specific transaction in the future. The target column is target. Perform data analysis, data preprocessing, feature engineering, and modeling to predict the target. Report AUC on the eval data. Train data path: '{data_dir}/ml_benchmark/06_santander-customer-transaction-prediction/split_train.csv', eval data path: '{data_dir}/ml_benchmark/06_santander-customer-transaction-prediction/split_eval.csv' . | +| 07 | 07_icr_identify | ICR - Identifying | This is a medical dataset with over fifty anonymized health characteristics linked to three age-related conditions. Your goal is to predict whether a subject has or has not been diagnosed with one of these conditions. The target column is Class. Perform data analysis, data preprocessing, feature engineering, and modeling to predict the target. Report F1 Score on the eval data. Train data path: '{data_dir}/ml_benchmark/07_icr-identify-age-related-conditions/split_train.csv', eval data path: '{data_dir}/ml_benchmark/07_icr-identify-age-related-conditions/split_eval.csv' . | +| 08 | 08_santander_value | Santander Value | This is a customers financial dataset. Your goal is to predict the value of transactions for each potential customer. The target column is target. Perform data analysis, data preprocessing, feature engineering, and modeling to predict the target. Report RMSLE on the eval data. Train data path: '{data_dir}/ml_benchmark/08_santander-value-prediction-challenge/split_train.csv', eval data path: '{data_dir}/ml_benchmark/08_santander-value-prediction-challenge/split_eval.csv' . | + +**Note**: +1. `data_dir` is the directory where the di_dataset is stored. + +### Open-Ended Tasks Dataset and Requirements + +Open-Ended Tasks have collected and designed 20 moderately challenging open-ended tasks, requiring Data Interpreters to understand user requirements, plan and decompose tasks, and generate and execute code. + +| ID | Task Name | Scenario | Scenario Description | User Requirement | +|----|-----------------------------|------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 01 | 01_ocr | OCR | Scan all the necessary fields and amounts from the given file and then create an Excel sheet with the extracted data. | This is an English invoice image. Your goal is to perform OCR on the image, extract the total amount from ocr result and save as table, using PaddleOCR. The PaddleOCR environment has been fully installed, try to use Paddleocr as much as possible. Image path: '{data_dir}/open_ended_tasks/01_ocr.png | +| 02 | 02_ocr | OCR | Scan all the necessary fields and amounts from the given file and then create an Excel sheet with the extracted data. | This is a Chinese invoice image. Your goal is to perform OCR on the image and only output the recognized text word results, nothing else is needed, then extract the total amount and receipt ID starting with 'No' from ocr text words results and save as table, using PaddleOCR. The PaddleOCR environment has been fully installed, try to use Paddleocr as much as possible. Image path: '{data_dir}/open_ended_tasks/02_ocr.jpg' | +| 03 | 03_ocr | OCR | Scan all the necessary fields and amounts from the given file and then create an Excel sheet with the extracted data. | This is an invoice image for OCR. Your goal is to perform OCR on the image, extract the total amount and save it into an Excel table format, using PaddleOCR with lang='en' The PaddleOCR environment has been fully installed, try to use Paddleocr as much as possible. Image path: '{data_dir}/open_ended_tasks/03_ocr.jpg' | +| 04 | 04_web_search_and_crawling | Web search and crawling | Crawling and organizing web form information | Get data from `paperlist` table in https://papercopic.com/statistics/iclr-statistics/iclr-2024-statistics/ , and save it to a csv file. paper title must include `multiagent` or `large language model`. **notice: print key variables** | +| 05 | 05_web_search_and_crawling | Web search and crawling | Crawling and organizing web form information | Obtain the CPI data from https://www.stats.gov.cn/sj/sjjd/202307/t20230718_1941322.html, please follow this plan step by step: 1. Detect the encoding type and HTML structure of the target webpage. 2. Crawl the webpage, de-duplicate the body content, convert it to a clear paragraph suitable for reading as plain text, and save it to target.txt. 3. Design multiple regular expressions to match key sentences in target.txt, use try-except statements to combine the various regular expression matches, note that the webpage text is in Chinese. 4. Finally, use a Chinese summary to summarize the key sentences to answer the user's request. **Note: If it is a code block, print out the key variable results of the code block; if it is webpage text, print the first 200 characters.** | +| 06 | 06_web_search_and_crawling | Web search and crawling | Crawling and organizing web form information | Get products data from website https://scrapeme.live/shop/ and save it as a csv file. Notice: Firstly parse the web page encoding and the text HTML structure; The first page product name, price, product URL, and image URL must be saved in the csv; | +| 07 | 07_web_search_and_crawling | Web search and crawling | Crawling and organizing web form information | 从36kr创投平台https://pitchhub.36kr.com/financing-flash所有初创企业融资的信息, **注意: 这是⼀个中⽂⽹站**; 下⾯是⼀个⼤致流程, 你会根据每⼀步的运⾏结果对当前计划中的任务做出适当调整: 1. 爬取并本地保存html结构; 2. 直接打印第7个**快讯**关键词后2000个字符的html内容, 作为**快讯的html内容示例**; 3. 反思**快讯的html内容示例**中的规律, 设计正则匹配表达式**来获取快讯**的标题、链接、时间; 4. 筛选最近3天的初创企业融资**快讯**, 以list[dict]形式打印前5个。5. 将全部结果存在本地csv中 | +| 08 | 08_email_reply | Email reply | Filter through my emails and respond to them as necessary | You are an agent that automatically reads and replies to emails. I will give you your Outlook email account and password. You need to check the content of the latest email and return it to me. If the email address suffix of this email is @xxx.xxx, please automatically reply with "I've received your email and will reply as soon as possible. Thank you!" Email account: xxx@xxx.xxx Email Password: xxxx | +| 09 | 09_web_page_imitation | Web page imitation | Using Selenium and WebDriver to access a webpage and convert it to an image, with the assistance of GPT-4V to mimic the creation of a one-page website. | This is a URL of webpage: https://medium.com/ . Firstly, utilize Selenium and WebDriver for rendering. Secondly, convert image to a webpage including HTML, CSS and JS in one go. Finally, save webpage in a text file. All required dependencies and environments have been fully installed and configured. | +| 10 | 10_web_page_imitation | Web page imitation | Using Selenium and WebDriver to access a webpage and convert it to an image, with the assistance of GPT-4V to mimic the creation of a one-page website. | This is a URL of webpage: https://pytorch.org/ . Firstly, utilize Selenium and WebDriver for rendering. Secondly, convert image to a webpage including HTML, CSS and JS in one go. Finally, save webpage in a file. NOTE: All required dependencies and environments have been fully installed and configured. | +| 11 | 11_web_page_imitation | Web page imitation | Using Selenium and WebDriver to access a webpage and convert it to an image, with the assistance of GPT-4V to mimic the creation of a one-page website. | This is a URL of webpage: https://www.kaggle.com/ . Firstly, utilize Selenium and WebDriver to render the webpage, ensuring the browser window is maximized for an optimal viewing experience. Secondly, convert image to a webpage including HTML, CSS and JS in one go. Finally, save webpage in a file. NOTE: All required dependencies and environments have been fully installed and configured. | +| 12 | 12_web_page_imitation | Web page imitation | Using Selenium and WebDriver to access a webpage and convert it to an image, with the assistance of GPT-4V to mimic the creation of a one-page website. | This is a URL of webpage: https://chat.openai.com/auth/login . Firstly, utilize Selenium and WebDriver to render the webpage, ensuring the browser window is maximized for an optimal viewing experience. Secondly, convert image to a webpage including HTML, CSS and JS in one go. Finally, save webpage in a file. NOTE: All required dependencies and environments have been fully installed and configured. | +| 13 | 13_web_page_imitation | Web page imitation | Using Selenium and WebDriver to access a webpage and convert it to an image, with the assistance of GPT-4V to mimic the creation of a one-page website. | This is a URL of webpage: https://deepmind.google/technologies/gemini/#introduction . Firstly, utilize Selenium and WebDriver to render the webpage, ensuring the browser window is maximized for an optimal viewing experience. Secondly, convert image to a webpage including HTML, CSS and JS in one go. Finally, save webpage in a file. NOTE: All required dependencies and environments have been fully installed and configured. | +| 14 | 14_image_background_removal | Image Background Removal | Remove the background of a given image | This is an image, you need to use python toolkit rembg remove the background of the image. image path:'{data_dir}/open_ended_tasks/14_image_background_removal.jpg'; save path:'{data_dir}/open_ended_tasks/14_image_background_removal.jpg' | +| 15 | 15_text2img | Text2Img | Use SD tools to generate images | I want to generate an image of a beautiful girl using the stable diffusion text2image tool, sd_url = "http://your.sd.service.ip:port" | +| 16 | 16_image_2_code_generation | Image2Code Generation | Web code generation | This is a image. First, convert the image to webpage code including HTML, CSS and JS in one go, and finally save webpage code in a file.The image path: '{data_dir}/open_ended_tasks/16_image_2_code_generation.png'. NOTE: All required dependencies and environments have been fully installed and configured. | +| 17 | 17_image_2_code_generation | Image2Code Generation | Web code generation | This is a image. First, convert the image to webpage code including HTML, CSS and JS in one go, and finally save webpage code in a file.The image path: '{data_dir}/open_ended_tasks/17_image_2_code_generation.png'. NOTE: All required dependencies and environments have been fully installed and configured. | +| 18 | 18_generate_games | Generate games using existing repo | Game tool usage (pyxel) | Create a Snake game. Players need to control the movement of the snake to eat food and grow its body, while avoiding the snake's head touching their own body or game boundaries. Games need to have basic game logic, user interface. During the production process, please consider factors such as playability, beautiful interface, and convenient operation of the game. Note: pyxel environment already satisfied | +| 19 | 19_generate_games | Generate games using existing repo | Game tool usage (pyxel) | You are a professional game developer, please use pyxel software to create a simple jumping game. The game needs to include a character that can move left and right on the screen. When the player presses the spacebar, the character should jump. Please ensure that the game is easy to operate, with clear graphics, and complies with the functional limitations of pyxel software. Note: pyxel environment already satisfied | +| 20 | 20_generate_games | Generate games using existing repo | Game tool usage (pyxel) | Make a mouse click game that click button as many times as possible in 30 seconds using pyxel. Note: pyxel environment already satisfied | + +**Note**: +1. `data_dir` is the directory where the di_dataset is stored. +2. The specific email account and password need to be replaced with the actual email account and password in `requirements_prompt.py`. +3. The specific sd_url need to be replaced with the actual sd_url in `requirements_prompt.py`. +4. Codes related to "Generate games using existing repo" and Math benchmark are being integrated. Stay tuned. diff --git a/examples/di/requirements_prompt.py b/examples/di/requirements_prompt.py new file mode 100644 index 000000000..04a0414b1 --- /dev/null +++ b/examples/di/requirements_prompt.py @@ -0,0 +1,65 @@ +# ML-Benchmark requirements +IRIS_REQ = "Run data analysis on sklearn Iris dataset, include a plot" +WINES_RECOGNITION_REQ = "Run data analysis on sklearn Wine recognition dataset, include a plot, and train a model to predict wine class with 20% as test set, and show prediction accuracy" +BREAST_CANCER_WISCONSIN_REQ = "Run data analysis on sklearn Wisconsin Breast Cancer dataset, include a plot, train a model to predict targets (20% as validation), and show validation accuracy" +TITANIC_REQ = "This is a titanic passenger survival dataset, your goal is to predict passenger survival outcome. The target column is Survived. Perform data analysis, data preprocessing, feature engineering, and modeling to predict the target. Report accuracy on the eval data. Train data path: '{data_dir}/di_dataset/ml_benchmark/04_titanic/split_train.csv', eval data path: '{data_dir}/di_dataset/ml_benchmark/04_titanic/split_eval.csv'." +HOUSE_PRICES_ADVANCED_REGRESSION_TECHNIQUES_REQ = "This is a house price dataset, your goal is to predict the sale price of a property based on its features. The target column is SalePrice. Perform data analysis, data preprocessing, feature engineering, and modeling to predict the target. Report RMSE between the logarithm of the predicted value and the logarithm of the observed sales price on the eval data. Train data path: '{data_dir}/di_dataset/ml_benchmark/05_house-prices-advanced-regression-techniques/split_train.csv', eval data path: '{data_dir}/di_dataset/ml_benchmark/05_house-prices-advanced-regression-techniques/split_eval.csv'." +SANTANDER_CUSTOMER_TRANSACTION_PREDICTION_REQ = "This is a customers financial dataset. Your goal is to predict which customers will make a specific transaction in the future. The target column is target. Perform data analysis, data preprocessing, feature engineering, and modeling to predict the target. Report AUC on the eval data. Train data path: '{data_dir}/di_dataset/ml_benchmark/06_santander-customer-transaction-prediction/split_train.csv', eval data path: '{data_dir}/di_dataset/ml_benchmark/06_santander-customer-transaction-prediction/split_eval.csv' ." +ICR_IDENTITY_AGE_RELATED_CONDITIONS_REQ = "This is a medical dataset with over fifty anonymized health characteristics linked to three age-related conditions. Your goal is to predict whether a subject has or has not been diagnosed with one of these conditions. The target column is Class. Perform data analysis, data preprocessing, feature engineering, and modeling to predict the target. Report F1 Score on the eval data. Train data path: '{data_dir}/di_dataset/ml_benchmark/07_icr-identify-age-related-conditions/split_train.csv', eval data path: '{data_dir}/di_dataset/ml_benchmark/07_icr-identify-age-related-conditions/split_eval.csv' ." +SANTANDER_VALUE_PREDICTION_CHALLENGE_REQ = "This is a customers financial dataset. Your goal is to predict the value of transactions for each potential customer. The target column is target. Perform data analysis, data preprocessing, feature engineering, and modeling to predict the target. Report RMSLE on the eval data. Train data path: '{data_dir}/di_dataset/ml_benchmark/08_santander-value-prediction-challenge/split_train.csv', eval data path: '{data_dir}/di_dataset/ml_benchmark/08_santander-value-prediction-challenge/split_eval.csv' ." + +# Open-Ended Tasks requirements +OCR_REQ_01 = "This is an English invoice image. Your goal is to perform OCR on the image, extract the total amount from ocr result and save as table, using PaddleOCR. The PaddleOCR environment has been fully installed, try to use Paddleocr as much as possible. Image path: '{data_dir}/di_dataset/open_ended_tasks/01_ocr.png" +OCR_REQ_02 = "This is a Chinese invoice image. Your goal is to perform OCR on the image and only output the recognized text word results, nothing else is needed, then extract the total amount and receipt ID starting with 'No' from ocr text words results and save as table, using PaddleOCR. The PaddleOCR environment has been fully installed, try to use Paddleocr as much as possible. Image path: '{data_dir}/di_dataset/open_ended_tasks/02_ocr.jpg" +OCR_REQ_03 = "This is an invoice image for OCR. Your goal is to perform OCR on the image, extract the total amount and save it into an Excel table format, using PaddleOCR with lang='en' The PaddleOCR environment has been fully installed, try to use Paddleocr as much as possible. Image path: '{data_dir}/di_dataset/open_ended_tasks/03_ocr.jpg" +WEB_SEARCH_AND_CRAWLING_REQ_04 = "Get data from `paperlist` table in https://papercopic.com/statistics/iclr-statistics/iclr-2024-statistics/ , and save it to a csv file. paper title must include `multiagent` or `large language model`. **notice: print key variables**" +WEB_SEARCH_AND_CRAWLING_REQ_05 = "Obtain the CPI data from https://www.stats.gov.cn/sj/sjjd/202307/t20230718_1941322.html, please follow this plan step by step: 1. Detect the encoding type and HTML structure of the target webpage. 2. Crawl the webpage, de-duplicate the body content, convert it to a clear paragraph suitable for reading as plain text, and save it to target.txt. 3. Design multiple regular expressions to match key sentences in target.txt, use try-except statements to combine the various regular expression matches, note that the webpage text is in Chinese. 4. Finally, use a Chinese summary to summarize the key sentences to answer the user's request. **Note: If it is a code block, print out the key variable results of the code block; if it is webpage text, print the first 200 characters.**" +WEB_SEARCH_AND_CRAWLING_REQ_06 = "Get products data from website https://scrapeme.live/shop/ and save it as a csv file. Notice: Firstly parse the web page encoding and the text HTML structure; The first page product name, price, product URL, and image URL must be saved in the csv;" +WEB_SEARCH_AND_CRAWLING_REQ_07 = "从36kr创投平台https://pitchhub.36kr.com/financing-flash所有初创企业融资的信息, **注意: 这是⼀个中⽂⽹站**; 下⾯是⼀个⼤致流程, 你会根据每⼀步的运⾏结果对当前计划中的任务做出适当调整: 1. 爬取并本地保存html结构; 2. 直接打印第7个**快讯**关键词后2000个字符的html内容, 作为**快讯的html内容示例**; 3. 反思**快讯的html内容示例**中的规律, 设计正则匹配表达式来获取**快讯**的标题、链接、时间; 4. 筛选最近3天的初创企业融资**快讯**, 以list[dict]形式打印前5个。5. 将全部结果存在本地csv中" +EMAIL_REPLY_REQ_08 = """You are an agent that automatically reads and replies to emails. I will give you your Outlook email account and password. You need to check the content of the latest email and return it to me. If the email address suffix of this email is @xxx.xxx, please automatically reply with "I've received your email and will reply as soon as possible. Thank you!" Email account: xxx@xxx.xxx Email Password: xxxx""" +WEB_PAGE_IMITATION_REQ_09 = "This is a URL of webpage: https://medium.com/ . Firstly, utilize Selenium and WebDriver for rendering. Secondly, convert image to a webpage including HTML, CSS and JS in one go. Finally, save webpage in a text file. All required dependencies and environments have been fully installed and configured." +WEB_PAGE_IMITATION_REQ_10 = "This is a URL of webpage: https://pytorch.org/ . Firstly, utilize Selenium and WebDriver for rendering. Secondly, convert image to a webpage including HTML, CSS and JS in one go. Finally, save webpage in a file. NOTE: All required dependencies and environments have been fully installed and configured." +WEB_PAGE_IMITATION_REQ_11 = "This is a URL of webpage: https://www.kaggle.com/ . Firstly, utilize Selenium and WebDriver to render the webpage, ensuring the browser window is maximized for an optimal viewing experience. Secondly, convert image to a webpage including HTML, CSS and JS in one go. Finally, save webpage in a file. NOTE: All required dependencies and environments have been fully installed and configured." +WEB_PAGE_IMITATION_REQ_12 = "This is a URL of webpage: https://chat.openai.com/auth/login . Firstly, utilize Selenium and WebDriver to render the webpage, ensuring the browser window is maximized for an optimal viewing experience. Secondly, convert image to a webpage including HTML, CSS and JS in one go. Finally, save webpage in a file. NOTE: All required dependencies and environments have been fully installed and configured." +WEB_PAGE_IMITATION_REQ_13 = "This is a URL of webpage: https://deepmind.google/technologies/gemini/#introduction . Firstly, utilize Selenium and WebDriver to render the webpage, ensuring the browser window is maximized for an optimal viewing experience. Secondly, convert image to a webpage including HTML, CSS and JS in one go. Finally, save webpage in a file. NOTE: All required dependencies and environments have been fully installed and configured." +IMAGE_BACKGROUND_REMOVAL_REQ_14 = "This is an image, you need to use python toolkit rembg remove the background of the image. image path:'{data_dir}/di_dataset/open_ended_tasks/14_image_background_removal.jpg'; save path:'{data_dir}/di_dataset/open_ended_tasks/14_image_background_removal_result.jpg'" +TEXT2IMG_REQ_15 = """I want to generate an image of a beautiful girl using the stable diffusion text2image tool, sd_url = 'http://your.sd.service.ip:port'""" +IMAGE2CODE_GENERATION_REQ_16 = "This is a image. First, convert the image to webpage code including HTML, CSS and JS in one go, and finally save webpage code in a file.The image path: '{data_dir}/di_dataset/open_ended_tasks/16_image_2_code_generation.png'. NOTE: All required dependencies and environments have been fully installed and configured." +IMAGE2CODE_GENERATION_REQ_17 = "This is a image. First, convert the image to webpage code including HTML, CSS and JS in one go, and finally save webpage code in a file.The image path: '{data_dir}/di_dataset/open_ended_tasks/17_image_2_code_generation.png'. NOTE: All required dependencies and environments have been fully installed and configured." +GENERATE_GAMES_REQ_18 = "Create a Snake game. Players need to control the movement of the snake to eat food and grow its body, while avoiding the snake's head touching their own body or game boundaries. Games need to have basic game logic, user interface. During the production process, please consider factors such as playability, beautiful interface, and convenient operation of the game. Note: pyxel environment already satisfied" +GENERATE_GAMES_REQ_19 = "You are a professional game developer, please use pyxel software to create a simple jumping game. The game needs to include a character that can move left and right on the screen. When the player presses the spacebar, the character should jump. Please ensure that the game is easy to operate, with clear graphics, and complies with the functional limitations of pyxel software. Note: pyxel environment already satisfied" +GENERATE_GAMES_REQ_20 = "Create a Snake game. Players need to control the movement of the snake to eat food and grow its body, while avoiding the snake's head touching their own body or game boundaries. Games need to have basic game logic, user interface. During the production process, please consider factors such as playability, beautiful interface, and convenient operation of the game. Note: pyxel environment already satisfied" + +ML_BENCHMARK_REQUIREMENTS = { + "01_iris": IRIS_REQ, + "02_wines_recognition": WINES_RECOGNITION_REQ, + "03_breast_cancer": BREAST_CANCER_WISCONSIN_REQ, + "04_titanic": TITANIC_REQ, + "05_house_prices": HOUSE_PRICES_ADVANCED_REGRESSION_TECHNIQUES_REQ, + "06_santander_customer": SANTANDER_CUSTOMER_TRANSACTION_PREDICTION_REQ, + "07_icr_identify": ICR_IDENTITY_AGE_RELATED_CONDITIONS_REQ, + "08_santander_value": SANTANDER_VALUE_PREDICTION_CHALLENGE_REQ, +} + +OPEN_ENDED_TASKS_REQUIREMENTS = { + "01_ocr": OCR_REQ_01, + "02_ocr": OCR_REQ_02, + "03_ocr": OCR_REQ_03, + "04_web_search_and_crawling": WEB_SEARCH_AND_CRAWLING_REQ_04, + "05_web_search_and_crawling": WEB_SEARCH_AND_CRAWLING_REQ_05, + "06_web_search_and_crawling": WEB_SEARCH_AND_CRAWLING_REQ_06, + "07_web_search_and_crawling": WEB_SEARCH_AND_CRAWLING_REQ_07, + "08_email_reply": EMAIL_REPLY_REQ_08, + "09_web_page_imitation": WEB_PAGE_IMITATION_REQ_09, + "10_web_page_imitation": WEB_PAGE_IMITATION_REQ_10, + "11_web_page_imitation": WEB_PAGE_IMITATION_REQ_11, + "12_web_page_imitation": WEB_PAGE_IMITATION_REQ_12, + "13_web_page_imitation": WEB_PAGE_IMITATION_REQ_13, + "14_image_background_removal": IMAGE_BACKGROUND_REMOVAL_REQ_14, + "15_text2img": TEXT2IMG_REQ_15, + "16_image_2_code_generation": IMAGE2CODE_GENERATION_REQ_16, + "17_image_2_code_generation": IMAGE2CODE_GENERATION_REQ_17, + "18_generate_games": GENERATE_GAMES_REQ_18, + "19_generate_games": GENERATE_GAMES_REQ_19, + "20_generate_games": GENERATE_GAMES_REQ_20, +} diff --git a/examples/di/run_ml_benchmark.py b/examples/di/run_ml_benchmark.py new file mode 100644 index 000000000..327ab986e --- /dev/null +++ b/examples/di/run_ml_benchmark.py @@ -0,0 +1,22 @@ +import os + +import fire + +from examples.di.requirements_prompt import ML_BENCHMARK_REQUIREMENTS +from metagpt.const import DATA_PATH +from metagpt.roles.di.data_interpreter import DataInterpreter +from metagpt.tools.tool_recommend import TypeMatchToolRecommender + + +# Ensure ML-Benchmark dataset has been downloaded before using these example. +async def main(task_name, data_dir=DATA_PATH, use_reflection=True): + if data_dir != DATA_PATH and not os.path.exists(os.path.join(data_dir, "di_dataset/ml_benchmark")): + raise FileNotFoundError(f"ML-Benchmark dataset not found in {data_dir}.") + + requirement = ML_BENCHMARK_REQUIREMENTS[task_name].format(data_dir=data_dir) + di = DataInterpreter(use_reflection=use_reflection, tool_recommender=TypeMatchToolRecommender(tools=[""])) + await di.run(requirement) + + +if __name__ == "__main__": + fire.Fire(main) diff --git a/examples/di/run_open_ended_tasks.py b/examples/di/run_open_ended_tasks.py new file mode 100644 index 000000000..abe10015e --- /dev/null +++ b/examples/di/run_open_ended_tasks.py @@ -0,0 +1,22 @@ +import os + +import fire + +from examples.di.requirements_prompt import OPEN_ENDED_TASKS_REQUIREMENTS +from metagpt.const import DATA_PATH +from metagpt.roles.di.data_interpreter import DataInterpreter +from metagpt.tools.tool_recommend import TypeMatchToolRecommender + + +# Ensure Open-Ended Tasks dataset has been downloaded before using this example. +async def main(task_name, data_dir=DATA_PATH, use_reflection=True): + if data_dir != DATA_PATH and not os.path.exists(os.path.join(data_dir, "di_dataset/open_ended_tasks")): + raise FileNotFoundError(f"Open-ended task dataset not found in {data_dir}.") + + requirement = OPEN_ENDED_TASKS_REQUIREMENTS[task_name].format(data_dir=data_dir) + di = DataInterpreter(use_reflection=use_reflection, tool_recommender=TypeMatchToolRecommender(tools=[""])) + await di.run(requirement) + + +if __name__ == "__main__": + fire.Fire(main) diff --git a/examples/llm_hello_world.py b/examples/hello_world.py similarity index 58% rename from examples/llm_hello_world.py rename to examples/hello_world.py index 62fc2ed68..04bb88091 100644 --- a/examples/llm_hello_world.py +++ b/examples/hello_world.py @@ -3,7 +3,7 @@ """ @Time : 2023/5/6 14:13 @Author : alexanderwu -@File : llm_hello_world.py +@File : hello_world.py """ import asyncio @@ -11,20 +11,15 @@ from metagpt.llm import LLM from metagpt.logs import logger -async def main(): - llm = LLM() - # llm type check - question = "what's your name" - logger.info(f"{question}: ") - logger.info(await llm.aask(question)) - logger.info("\n\n") +async def ask_and_print(question: str, llm: LLM, system_prompt) -> str: + logger.info(f"Q: {question}") + rsp = await llm.aask(question, system_msgs=[system_prompt]) + logger.info(f"A: {rsp}") + return rsp - logger.info( - await llm.aask( - "who are you", system_msgs=["act as a robot, just answer 'I'am robot' if the question is 'who are you'"] - ) - ) +async def lowlevel_api_example(llm: LLM): + logger.info("low level api example") logger.info(await llm.aask_batch(["hi", "write python hello world."])) hello_msg = [{"role": "user", "content": "count from 1 to 10. split by newline."}] @@ -39,5 +34,12 @@ async def main(): logger.info(llm.completion(hello_msg)) +async def main(): + llm = LLM() + await ask_and_print("what's your name?", llm, "I'm a helpful AI assistant.") + await ask_and_print("who are you?", llm, "just answer 'I am a robot' if the question is 'who are you'") + await lowlevel_api_example(llm) + + if __name__ == "__main__": asyncio.run(main()) diff --git a/examples/ping.py b/examples/ping.py new file mode 100644 index 000000000..20eab5cb0 --- /dev/null +++ b/examples/ping.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +@Time : 2024/4/22 14:28 +@Author : alexanderwu +@File : ping.py +""" + +import asyncio + +from metagpt.llm import LLM +from metagpt.logs import logger + + +async def ask_and_print(question: str, llm: LLM, system_prompt) -> str: + logger.info(f"Q: {question}") + rsp = await llm.aask(question, system_msgs=[system_prompt]) + logger.info(f"A: {rsp}") + logger.info("\n") + return rsp + + +async def main(): + llm = LLM() + await ask_and_print("ping?", llm, "Just answer pong when ping.") + + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/examples/rag/omniparse.py b/examples/rag/omniparse.py new file mode 100644 index 000000000..b9159dae5 --- /dev/null +++ b/examples/rag/omniparse.py @@ -0,0 +1,64 @@ +import asyncio + +from metagpt.config2 import config +from metagpt.const import EXAMPLE_DATA_PATH +from metagpt.logs import logger +from metagpt.rag.parsers import OmniParse +from metagpt.rag.schema import OmniParseOptions, OmniParseType, ParseResultType +from metagpt.utils.omniparse_client import OmniParseClient + +TEST_DOCX = EXAMPLE_DATA_PATH / "omniparse/test01.docx" +TEST_PDF = EXAMPLE_DATA_PATH / "omniparse/test02.pdf" +TEST_VIDEO = EXAMPLE_DATA_PATH / "omniparse/test03.mp4" +TEST_AUDIO = EXAMPLE_DATA_PATH / "omniparse/test04.mp3" + + +async def omniparse_client_example(): + client = OmniParseClient(base_url=config.omniparse.base_url) + + # docx + with open(TEST_DOCX, "rb") as f: + file_input = f.read() + document_parse_ret = await client.parse_document(file_input=file_input, bytes_filename="test_01.docx") + logger.info(document_parse_ret) + + # pdf + pdf_parse_ret = await client.parse_pdf(file_input=TEST_PDF) + logger.info(pdf_parse_ret) + + # video + video_parse_ret = await client.parse_video(file_input=TEST_VIDEO) + logger.info(video_parse_ret) + + # audio + audio_parse_ret = await client.parse_audio(file_input=TEST_AUDIO) + logger.info(audio_parse_ret) + + +async def omniparse_example(): + parser = OmniParse( + api_key=config.omniparse.api_key, + base_url=config.omniparse.base_url, + parse_options=OmniParseOptions( + parse_type=OmniParseType.PDF, + result_type=ParseResultType.MD, + max_timeout=120, + num_workers=3, + ), + ) + ret = parser.load_data(file_path=TEST_PDF) + logger.info(ret) + + file_paths = [TEST_DOCX, TEST_PDF] + parser.parse_type = OmniParseType.DOCUMENT + ret = await parser.aload_data(file_path=file_paths) + logger.info(ret) + + +async def main(): + await omniparse_client_example() + await omniparse_example() + + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/examples/rag/rag_bm.py b/examples/rag/rag_bm.py new file mode 100644 index 000000000..a6a1145b5 --- /dev/null +++ b/examples/rag/rag_bm.py @@ -0,0 +1,230 @@ +"""RAG benchmark pipeline""" + +import asyncio + +from llama_index.core.node_parser import SentenceSplitter +from llama_index.core.schema import NodeWithScore + +from metagpt.const import DATA_PATH, EXAMPLE_BENCHMARK_PATH, EXAMPLE_DATA_PATH +from metagpt.logs import logger +from metagpt.rag.benchmark import RAGBenchmark +from metagpt.rag.engines import SimpleEngine +from metagpt.rag.factories import get_rag_embedding, get_rag_llm +from metagpt.rag.schema import ( + BM25RetrieverConfig, + CohereRerankConfig, + ColbertRerankConfig, + FAISSIndexConfig, + FAISSRetrieverConfig, +) +from metagpt.utils.common import write_json_file + +DOC_PATH = EXAMPLE_DATA_PATH / "rag_bm/summary_writer.txt" +QUESTION = "2023年7月20日,应急管理部、财政部联合下发《因灾倒塌、损坏住房恢复重建救助工作规范》的通知,规范倒损住房恢复重建救助相关工作。" + +TRAVEL_DOC_PATH = EXAMPLE_DATA_PATH / "rag_bm/documents.txt" +TRAVEL_QUESTION = "国家卫生健康委在2023年7月28日开展的“启明行动”是为了防控哪个群体的哪种健康问题,并请列出活动发布的指导性文件名称。" + +DATASET_PATH = EXAMPLE_DATA_PATH / "rag_bm/test.json" +SAVE_PATH = EXAMPLE_DATA_PATH / "rag_bm/result.json" +GROUND_TRUTH_TRANVEL = "2023-07-28 10:14:27作者:白剑峰来源:人民日报 ,正文:为在全社会形成重视儿童眼健康的良好氛围,持续推进综合防控儿童青少年近视工作落实,国家卫生健康委决定在全国持续开展“启明行动”——防控儿童青少年近视健康促进活动,并发布了《防控儿童青少年近视核心知识十条》。本次活动的主题为:重视儿童眼保健,守护孩子明眸“视”界。强调预防为主,推动关口前移,倡导和推动家庭及全社会共同行动起来,营造爱眼护眼的视觉友好环境,共同呵护好孩子的眼睛,让他们拥有一个光明的未来。国家卫生健康委要求,开展社会宣传和健康教育。充分利用网络、广播电视、报纸杂志、海报墙报、培训讲座等多种形式,广泛开展宣传倡导,向社会公众传播开展儿童眼保健、保护儿童视力健康的重要意义,以《防控儿童青少年近视核心知识十条》为重点普及预防近视科学知识。创新健康教育方式和载体,开发制作群众喜闻乐见的健康教育科普作品,利用互联网媒体扩大传播效果,提高健康教育的针对性、精准性和实效性。指导相关医疗机构将儿童眼保健和近视防控等科学知识纳入孕妇学校、家长课堂内容。开展儿童眼保健及视力检查咨询指导。医疗机构要以儿童家长和养育人为重点,结合眼保健和眼科临床服务,开展个性化咨询指导。要针对儿童常见眼病和近视防控等重点问题,通过面对面咨询指导,引导儿童家长树立近视防控意识,改变不良生活方式,加强户外活动,养成爱眼护眼健康行为习惯。提高儿童眼保健专科服务能力。各地要积极推进儿童眼保健专科建设,扎实组织好妇幼健康职业技能竞赛“儿童眼保健”项目,推动各层级开展比武练兵,提升业务能力。" +GROUND_TRUTH_ANSWER = "“启明行动”是为了防控儿童青少年的近视问题,并发布了《防控儿童青少年近视核心知识十条》。" + +LLM_TIP = "If you not sure, just answer I don't know." +LLM_ERROR = "Retrieve failed due to LLM wasn't follow instruction" +EMPTY_ERROR = "Empty Response" + + +class RAGExample: + """Show how to use RAG for evaluation.""" + + def __init__(self): + self.benchmark = RAGBenchmark() + self.embedding = get_rag_embedding() + self.llm = get_rag_llm() + + async def rag_evaluate_pipeline(self, dataset_name: list[str] = ["all"]): + dataset_config = self.benchmark.load_dataset(dataset_name) + + for dataset in dataset_config.datasets: + if "all" in dataset_name or dataset.name in dataset_name: + output_dir = DATA_PATH / f"{dataset.name}" + + if output_dir.exists(): + logger.info("Loading Existed index!") + logger.info(f"Index Path:{output_dir}") + self.engine = SimpleEngine.from_index( + index_config=FAISSIndexConfig(persist_path=output_dir), + ranker_configs=[ColbertRerankConfig()], + retriever_configs=[FAISSRetrieverConfig(), BM25RetrieverConfig()], + ) + else: + logger.info("Loading index from documents!") + self.engine = SimpleEngine.from_docs( + input_files=dataset.document_files, + retriever_configs=[FAISSRetrieverConfig()], + ranker_configs=[CohereRerankConfig()], + transformations=[SentenceSplitter(chunk_size=1024, chunk_overlap=0)], + ) + results = [] + for gt_info in dataset.gt_info: + result = await self.rag_evaluate_single( + question=gt_info["question"], + reference=gt_info["gt_reference"], + ground_truth=gt_info["gt_answer"], + ) + results.append(result) + logger.info(f"=====The {dataset.name} Benchmark dataset assessment is complete!=====") + self._print_bm_result(results) + + write_json_file((EXAMPLE_BENCHMARK_PATH / dataset.name / "bm_result.json").as_posix(), results, "utf-8") + + async def rag_evaluate_single(self, question, reference, ground_truth, print_title=True): + """This example run rag pipeline, use faiss&bm25 retriever and llm ranker, will print something like: + + Retrieve Result: + 0. Productivi..., 10.0 + 1. I wrote cu..., 7.0 + 2. I highly r..., 5.0 + + Query Result: + Passion, adaptability, open-mindedness, creativity, discipline, and empathy are key qualities to be a good writer. + + RAG BenchMark result: + { + 'metrics': + { + 'bleu-avg': 0.48318624982047, + 'bleu-1': 0.5609756097560976, + 'bleu-2': 0.5, + 'bleu-3': 0.46153846153846156, + 'bleu-4': 0.42105263157894735, + 'rouge-L': 0.6865671641791045, + 'semantic similarity': 0.9487444961487591, + 'length': 74 + }, + 'log': { + 'generated_text': + '国家卫生健康委在2023年7月28日开展的“启明行动”是为了防控儿童青少年的近视问题。活动发布的指导性文件名称为《防控儿童青少年近视核心知识十条》。', + 'ground_truth_text': + '“启明行动”是为了防控儿童青少年的近视问题,并发布了《防控儿童青少年近视核心知识十条》。' + } + } + """ + if print_title: + self._print_title("RAG Pipeline") + try: + nodes = await self.engine.aretrieve(question) + self._print_result(nodes, state="Retrieve") + + answer = await self.engine.aquery(question) + self._print_result(answer, state="Query") + + except Exception as e: + logger.error(e) + return self.benchmark.set_metrics( + generated_text=LLM_ERROR, ground_truth_text=ground_truth, question=question + ) + + result = await self.evaluate_result(answer.response, ground_truth, nodes, reference, question) + + logger.info("==========RAG BenchMark result demo as follows==========") + logger.info(result) + + return result + + async def rag_faissdb(self): + """This example show how to use FAISS. how to save and load index. will print something like: + + Query Result: + Bob likes traveling. + """ + self._print_title("RAG FAISS") + + # save index + output_dir = DATA_PATH / "rag_faiss" + + SimpleEngine.from_docs( + input_files=[TRAVEL_DOC_PATH], + retriever_configs=[FAISSRetrieverConfig(dimensions=512, persist_path=output_dir)], + ) + + # load index + engine = SimpleEngine.from_index( + index_config=FAISSIndexConfig(persist_path=output_dir), + ) + + # query + nodes = engine.retrieve(QUESTION) + self._print_result(nodes, state="Retrieve") + + answer = engine.query(TRAVEL_QUESTION) + self._print_result(answer, state="Query") + + async def evaluate_result( + self, + response: str = None, + reference: str = None, + nodes: list[NodeWithScore] = None, + reference_doc: list[str] = None, + question: str = None, + ): + result = await self.benchmark.compute_metric(response, reference, nodes, reference_doc, question) + + return result + + @staticmethod + def _print_title(title): + logger.info(f"{'#'*30} {title} {'#'*30}") + + @staticmethod + def _print_result(result, state="Retrieve"): + """print retrieve or query result""" + logger.info(f"{state} Result:") + + if state == "Retrieve": + for i, node in enumerate(result): + logger.info(f"{i}. {node.text[:10]}..., {node.score}") + logger.info("======Retrieve Finished======") + return + + logger.info(f"{result}\n") + + @staticmethod + def _print_bm_result(result): + import pandas as pd + + metrics = [ + item["metrics"] + for item in result + if item["log"]["generated_text"] != LLM_ERROR and item["log"]["generated_text"] != EMPTY_ERROR + ] + + data = pd.DataFrame(metrics) + logger.info(f"\n {data.mean()}") + + llm_errors = [item for item in result if item["log"]["generated_text"] == LLM_ERROR] + retrieve_errors = [item for item in result if item["log"]["generated_text"] == EMPTY_ERROR] + logger.info( + f"Percentage of retrieval failures due to incorrect LLM instruction following:" + f" {100.0 * len(llm_errors) / len(result)}%" + ) + logger.info( + f"Percentage of retrieval failures due to retriever not recalling any documents is:" + f" {100.0 * len(retrieve_errors) / len(result)}%" + ) + + async def _retrieve_and_print(self, question): + nodes = await self.engine.aretrieve(question) + self._print_result(nodes, state="Retrieve") + return nodes + + +async def main(): + """RAG pipeline""" + e = RAGExample() + await e.rag_evaluate_pipeline() + + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/examples/rag_pipeline.py b/examples/rag/rag_pipeline.py similarity index 86% rename from examples/rag_pipeline.py rename to examples/rag/rag_pipeline.py index b5111b75c..5b716ce03 100644 --- a/examples/rag_pipeline.py +++ b/examples/rag/rag_pipeline.py @@ -8,7 +8,6 @@ from metagpt.const import DATA_PATH, EXAMPLE_DATA_PATH from metagpt.logs import logger from metagpt.rag.engines import SimpleEngine from metagpt.rag.schema import ( - BM25RetrieverConfig, ChromaIndexConfig, ChromaRetrieverConfig, ElasticsearchIndexConfig, @@ -19,13 +18,13 @@ from metagpt.rag.schema import ( ) from metagpt.utils.exceptions import handle_exception +LLM_TIP = "If you not sure, just answer I don't know." + DOC_PATH = EXAMPLE_DATA_PATH / "rag/writer.txt" -QUESTION = "What are key qualities to be a good writer?" +QUESTION = f"What are key qualities to be a good writer? {LLM_TIP}" TRAVEL_DOC_PATH = EXAMPLE_DATA_PATH / "rag/travel.txt" -TRAVEL_QUESTION = "What does Bob like?" - -LLM_TIP = "If you not sure, just answer I don't know." +TRAVEL_QUESTION = f"What does Bob like? {LLM_TIP}" class Player(BaseModel): @@ -43,16 +42,19 @@ class Player(BaseModel): class RAGExample: """Show how to use RAG.""" - def __init__(self, engine: SimpleEngine = None): + def __init__(self, engine: SimpleEngine = None, use_llm_ranker: bool = True): self._engine = engine + self._use_llm_ranker = use_llm_ranker @property def engine(self): if not self._engine: + ranker_configs = [LLMRankerConfig()] if self._use_llm_ranker else None + self._engine = SimpleEngine.from_docs( input_files=[DOC_PATH], - retriever_configs=[FAISSRetrieverConfig(), BM25RetrieverConfig()], - ranker_configs=[LLMRankerConfig()], + retriever_configs=[FAISSRetrieverConfig()], + ranker_configs=ranker_configs, ) return self._engine @@ -60,8 +62,9 @@ class RAGExample: def engine(self, value: SimpleEngine): self._engine = value + @handle_exception async def run_pipeline(self, question=QUESTION, print_title=True): - """This example run rag pipeline, use faiss&bm25 retriever and llm ranker, will print something like: + """This example run rag pipeline, use faiss retriever and llm ranker, will print something like: Retrieve Result: 0. Productivi..., 10.0 @@ -80,6 +83,7 @@ class RAGExample: answer = await self.engine.aquery(question) self._print_query_result(answer) + @handle_exception async def add_docs(self): """This example show how to add docs. @@ -101,7 +105,7 @@ class RAGExample: """ self._print_title("Add Docs") - travel_question = f"{TRAVEL_QUESTION}{LLM_TIP}" + travel_question = f"{TRAVEL_QUESTION}" travel_filepath = TRAVEL_DOC_PATH logger.info("[Before add docs]") @@ -149,6 +153,7 @@ class RAGExample: except Exception as e: logger.error(f"nodes is empty, llm don't answer correctly, exception: {e}") + @handle_exception async def init_objects(self): """This example show how to from objs, will print something like: @@ -161,6 +166,7 @@ class RAGExample: await self.add_objects(print_title=False) self.engine = pre_engine + @handle_exception async def init_and_query_chromadb(self): """This example show how to use chromadb. how to save and load index. will print something like: @@ -234,8 +240,14 @@ class RAGExample: async def main(): - """RAG pipeline""" - e = RAGExample() + """RAG pipeline. + + Note: + 1. If `use_llm_ranker` is True, then it will use LLM Reranker to get better result, but it is not always guaranteed that the output will be parseable for reranking, + prefer `gpt-4-turbo`, otherwise might encounter `IndexError: list index out of range` or `ValueError: invalid literal for int() with base 10`. + """ + e = RAGExample(use_llm_ranker=False) + await e.run_pipeline() await e.add_docs() await e.add_objects() diff --git a/examples/rag_search.py b/examples/rag/rag_search.py similarity index 88% rename from examples/rag_search.py rename to examples/rag/rag_search.py index 258c5ba60..3b0e047f8 100644 --- a/examples/rag_search.py +++ b/examples/rag/rag_search.py @@ -2,7 +2,7 @@ import asyncio -from examples.rag_pipeline import DOC_PATH, QUESTION +from examples.rag.rag_pipeline import DOC_PATH, QUESTION from metagpt.logs import logger from metagpt.rag.engines import SimpleEngine from metagpt.roles import Sales diff --git a/metagpt/environment/android_env/__init__.py b/examples/stanford_town/__init__.py similarity index 100% rename from metagpt/environment/android_env/__init__.py rename to examples/stanford_town/__init__.py diff --git a/examples/stanford_town/requirements.txt b/examples/stanford_town/requirements.txt new file mode 100644 index 000000000..e69de29bb diff --git a/examples/stanford_town/run_st_game.py b/examples/stanford_town/run_st_game.py new file mode 100644 index 000000000..1a2d50f21 --- /dev/null +++ b/examples/stanford_town/run_st_game.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : entry of Stanford Town(ST/st) game +# README see `metagpt/ext/stanford_town/README.md` + +import asyncio +from typing import Optional + +import fire + +from metagpt.ext.stanford_town.roles.st_role import STRole +from metagpt.ext.stanford_town.stanford_town import StanfordTown +from metagpt.ext.stanford_town.utils.const import STORAGE_PATH +from metagpt.ext.stanford_town.utils.mg_ga_transform import ( + get_reverie_meta, + write_curr_sim_code, + write_curr_step, +) +from metagpt.ext.stanford_town.utils.utils import copy_folder +from metagpt.logs import logger + + +async def startup( + idea: str, fork_sim_code: str, sim_code: str, temp_storage_path: str, investment: float = 30.0, n_round: int = 500 +): + town = StanfordTown() + logger.info("StanfordTown init environment") + + # copy `storage/{fork_sim_code}` to `storage/{sim_code}` + copy_folder(str(STORAGE_PATH.joinpath(fork_sim_code)), str(STORAGE_PATH.joinpath(sim_code))) + + # get role names from `storage/{simulation_name}/reverie/meta.json` and then init roles + reverie_meta = get_reverie_meta(fork_sim_code) + roles = [] + sim_path = STORAGE_PATH.joinpath(sim_code) + sim_path.mkdir(exist_ok=True) + for idx, role_name in enumerate(reverie_meta["persona_names"]): + has_inner_voice = True if idx == 0 else False + role = STRole( + name=role_name, + profile=role_name, + sim_code=sim_code, + step=reverie_meta.get("step", 0), + start_time=reverie_meta.get("start_date"), + curr_time=reverie_meta.get("curr_time"), + sec_per_step=reverie_meta.get("sec_per_step"), + has_inner_voice=has_inner_voice, + ) + roles.append(role) + + # init temp_storage + write_curr_sim_code({"sim_code": sim_code}, temp_storage_path) + write_curr_step({"step": reverie_meta.get("step", 0)}, temp_storage_path) + + await town.hire(roles) + + town.invest(investment) + town.run_project(idea) + + await town.run(n_round) + + +def main( + idea: str, + fork_sim_code: str, + sim_code: str, + temp_storage_path: Optional[str] = None, + investment: float = 30.0, + n_round: int = 500, +): + """ + Args: + idea: idea works as an `inner voice` to the first agent. + fork_sim_code: old simulation name to start with, choose one inside `generative_agents/environment/frontend_server/storage/` + sim_code: new simulation name to save simulation result + temp_storage_path: generative_agents temp_storage path inside `environment/frontend_server` to interact. + investment: the investment of running agents + n_round: rounds to run agents + """ + + asyncio.run( + startup( + idea=idea, + fork_sim_code=fork_sim_code, + sim_code=sim_code, + temp_storage_path=temp_storage_path, + investment=investment, + n_round=n_round, + ) + ) + + +if __name__ == "__main__": + fire.Fire(main) diff --git a/examples/stanford_town/storage/.gitignore b/examples/stanford_town/storage/.gitignore new file mode 100644 index 000000000..962820861 --- /dev/null +++ b/examples/stanford_town/storage/.gitignore @@ -0,0 +1,4 @@ +# path to store simulation data +test_* +unittest* +July* \ No newline at end of file diff --git a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/environment/0.json b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/environment/0.json new file mode 100644 index 000000000..6eaa46c51 --- /dev/null +++ b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/environment/0.json @@ -0,0 +1,26 @@ +{ + "Isabella Rodriguez": { + "maze": "the_ville", + "x": 72, + "y": 14 + }, + "Klaus Mueller": { + "maze": "the_ville", + "x": 126, + "y": 46 + }, + "Maria Lopez": { + "maze": "the_ville", + "x": 123, + "y": 57 + } +} + + + + + + + + + diff --git a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Isabella Rodriguez/bootstrap_memory/associative_memory/embeddings.json b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Isabella Rodriguez/bootstrap_memory/associative_memory/embeddings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Isabella Rodriguez/bootstrap_memory/associative_memory/embeddings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Isabella Rodriguez/bootstrap_memory/associative_memory/kw_strength.json b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Isabella Rodriguez/bootstrap_memory/associative_memory/kw_strength.json new file mode 100644 index 000000000..6dc73c1c8 --- /dev/null +++ b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Isabella Rodriguez/bootstrap_memory/associative_memory/kw_strength.json @@ -0,0 +1,2 @@ +{"kw_strength_event": {}, + "kw_strength_thought": {}} \ No newline at end of file diff --git a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Isabella Rodriguez/bootstrap_memory/associative_memory/nodes.json b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Isabella Rodriguez/bootstrap_memory/associative_memory/nodes.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Isabella Rodriguez/bootstrap_memory/associative_memory/nodes.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Isabella Rodriguez/bootstrap_memory/scratch.json b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Isabella Rodriguez/bootstrap_memory/scratch.json new file mode 100644 index 000000000..dbed4b705 --- /dev/null +++ b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Isabella Rodriguez/bootstrap_memory/scratch.json @@ -0,0 +1,51 @@ +{ + "vision_r": 8, + "att_bandwidth": 8, + "retention": 8, + "curr_time": null, + "curr_tile": null, + "daily_plan_req": "Isabella Rodriguez opens Hobbs Cafe at 8am everyday, and works at the counter until 8pm, at which point she closes the cafe.", + "name": "Isabella Rodriguez", + "first_name": "Isabella", + "last_name": "Rodriguez", + "age": 34, + "innate": "friendly, outgoing, hospitable", + "learned": "Isabella Rodriguez is a cafe owner of Hobbs Cafe who loves to make people feel welcome. She is always looking for ways to make the cafe a place where people can come to relax and enjoy themselves.", + "currently": "Isabella Rodriguez is planning on having a Valentine's Day party at Hobbs Cafe with her customers on February 14th, 2023 at 5pm. She is gathering party material, and is telling everyone to join the party at Hobbs Cafe on February 14th, 2023, from 5pm to 7pm.", + "lifestyle": "Isabella Rodriguez goes to bed around 11pm, awakes up around 6am.", + "living_area": "the Ville:Isabella Rodriguez's apartment:main room", + "concept_forget": 100, + "daily_reflection_time": 180, + "daily_reflection_size": 5, + "overlap_reflect_th": 4, + "kw_strg_event_reflect_th": 10, + "kw_strg_thought_reflect_th": 9, + + "recency_w": 1, + "relevance_w": 1, + "importance_w": 1, + "recency_decay": 0.995, + "importance_trigger_max": 150, + "importance_trigger_curr": 150, + "importance_ele_n": 0, + "thought_count": 5, + + "daily_req": [], + "f_daily_schedule": [], + "f_daily_schedule_hourly_org": [], + "act_address": null, + "act_start_time": null, + "act_duration": null, + "act_description": null, + "act_pronunciatio": null, + "act_event": ["Isabella Rodriguez", null, null], + "act_obj_description": null, + "act_obj_pronunciatio": null, + "act_obj_event": [null, null, null], + "chatting_with": null, + "chat": null, + "chatting_with_buffer": {}, + "chatting_end_time": null, + "act_path_set": false, + "planned_path": [] +} \ No newline at end of file diff --git a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Isabella Rodriguez/bootstrap_memory/spatial_memory.json b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Isabella Rodriguez/bootstrap_memory/spatial_memory.json new file mode 100644 index 000000000..f88157950 --- /dev/null +++ b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Isabella Rodriguez/bootstrap_memory/spatial_memory.json @@ -0,0 +1,66 @@ +{ + "the Ville": { + "Hobbs Cafe": { + "cafe": [ + "refrigerator", + "cafe customer seating", + "cooking area", + "kitchen sink", + "behind the cafe counter", + "piano" + ] + }, + "Isabella Rodriguez's apartment": { + "main room": [ + "bed", + "desk", + "refrigerator", + "closet", + "shelf" + ] + }, + "The Rose and Crown Pub": { + "pub": [ + "shelf", + "refrigerator", + "bar customer seating", + "behind the bar counter", + "kitchen sink", + "cooking area", + "microphone" + ] + }, + "Harvey Oak Supply Store": { + "supply store": [ + "supply store product shelf", + "behind the supply store counter", + "supply store counter" + ] + }, + "The Willows Market and Pharmacy": { + "store": [ + "behind the pharmacy counter", + "pharmacy store shelf", + "pharmacy store counter", + "grocery store shelf", + "behind the grocery counter", + "grocery store counter" + ] + }, + "Dorm for Oak Hill College": { + "garden": [ + "dorm garden" + ], + "common room": [ + "common room sofa", + "pool table", + "common room table" + ] + }, + "Johnson Park": { + "park": [ + "park garden" + ] + } + } +} \ No newline at end of file diff --git a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Klaus Mueller/bootstrap_memory/associative_memory/embeddings.json b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Klaus Mueller/bootstrap_memory/associative_memory/embeddings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Klaus Mueller/bootstrap_memory/associative_memory/embeddings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Klaus Mueller/bootstrap_memory/associative_memory/kw_strength.json b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Klaus Mueller/bootstrap_memory/associative_memory/kw_strength.json new file mode 100644 index 000000000..6dc73c1c8 --- /dev/null +++ b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Klaus Mueller/bootstrap_memory/associative_memory/kw_strength.json @@ -0,0 +1,2 @@ +{"kw_strength_event": {}, + "kw_strength_thought": {}} \ No newline at end of file diff --git a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Klaus Mueller/bootstrap_memory/associative_memory/nodes.json b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Klaus Mueller/bootstrap_memory/associative_memory/nodes.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Klaus Mueller/bootstrap_memory/associative_memory/nodes.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Klaus Mueller/bootstrap_memory/scratch.json b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Klaus Mueller/bootstrap_memory/scratch.json new file mode 100644 index 000000000..7b0ce7d72 --- /dev/null +++ b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Klaus Mueller/bootstrap_memory/scratch.json @@ -0,0 +1,51 @@ +{ + "vision_r": 8, + "att_bandwidth": 8, + "retention": 8, + "curr_time": null, + "curr_tile": null, + "daily_plan_req": "Klaus Mueller goes to the library at Oak Hill College early in the morning, spends his days writing, and eats at Hobbs Cafe.", + "name": "Klaus Mueller", + "first_name": "Klaus", + "last_name": "Mueller", + "age": 20, + "innate": "kind, inquisitive, passionate", + "learned": "Klaus Mueller is a student at Oak Hill College studying sociology. He is passionate about social justice and loves to explore different perspectives.", + "currently": "Klaus Mueller is writing a research paper on the effects of gentrification in low-income communities.", + "lifestyle": "Klaus Mueller goes to bed around 11pm, awakes up around 7am, eats dinner around 5pm.", + "living_area": "the Ville:Dorm for Oak Hill College:Klaus Mueller's room", + "concept_forget": 100, + "daily_reflection_time": 180, + "daily_reflection_size": 5, + "overlap_reflect_th": 4, + "kw_strg_event_reflect_th": 10, + "kw_strg_thought_reflect_th": 9, + + "recency_w": 1, + "relevance_w": 1, + "importance_w": 1, + "recency_decay": 0.99, + "importance_trigger_max": 150, + "importance_trigger_curr": 150, + "importance_ele_n": 0, + "thought_count": 5, + + "daily_req": [], + "f_daily_schedule": [], + "f_daily_schedule_hourly_org": [], + "act_address": null, + "act_start_time": null, + "act_duration": null, + "act_description": null, + "act_pronunciatio": null, + "act_event": ["Klaus Mueller", null, null], + "act_obj_description": null, + "act_obj_pronunciatio": null, + "act_obj_event": [null, null, null], + "chatting_with": null, + "chat": null, + "chatting_with_buffer": {}, + "chatting_end_time": null, + "act_path_set": false, + "planned_path": [] +} \ No newline at end of file diff --git a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Klaus Mueller/bootstrap_memory/spatial_memory.json b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Klaus Mueller/bootstrap_memory/spatial_memory.json new file mode 100644 index 000000000..4f4168677 --- /dev/null +++ b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Klaus Mueller/bootstrap_memory/spatial_memory.json @@ -0,0 +1,86 @@ +{ + "the Ville": { + "Oak Hill College": { + "hallway": [], + "library": [ + "library sofa", + "library table", + "bookshelf" + ], + "classroom": [ + "blackboard", + "classroom podium", + "classroom student seating" + ] + }, + "Dorm for Oak Hill College": { + "garden": [ + "dorm garden" + ], + "Klaus Mueller's room": [ + "bed", + "game console", + "closet", + "desk" + ], + "woman's bathroom": [ + "toilet", + "shower", + "bathroom sink" + ], + "common room": [ + "common room sofa", + "pool table", + "common room table" + ], + "man's bathroom": [ + "shower", + "bathroom sink", + "toilet" + ] + }, + "The Willows Market and Pharmacy": { + "store": [ + "grocery store shelf", + "behind the grocery counter", + "grocery store counter", + "pharmacy store shelf", + "pharmacy store counter", + "behind the pharmacy counter" + ] + }, + "Harvey Oak Supply Store": { + "supply store": [ + "supply store product shelf", + "behind the supply store counter", + "supply store counter" + ] + }, + "Johnson Park": { + "park": [ + "park garden" + ] + }, + "The Rose and Crown Pub": { + "pub": [ + "shelf", + "refrigerator", + "bar customer seating", + "behind the bar counter", + "kitchen sink", + "cooking area", + "microphone" + ] + }, + "Hobbs Cafe": { + "cafe": [ + "refrigerator", + "cafe customer seating", + "cooking area", + "kitchen sink", + "behind the cafe counter", + "piano" + ] + } + } +} \ No newline at end of file diff --git a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Maria Lopez/bootstrap_memory/associative_memory/embeddings.json b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Maria Lopez/bootstrap_memory/associative_memory/embeddings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Maria Lopez/bootstrap_memory/associative_memory/embeddings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Maria Lopez/bootstrap_memory/associative_memory/kw_strength.json b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Maria Lopez/bootstrap_memory/associative_memory/kw_strength.json new file mode 100644 index 000000000..6dc73c1c8 --- /dev/null +++ b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Maria Lopez/bootstrap_memory/associative_memory/kw_strength.json @@ -0,0 +1,2 @@ +{"kw_strength_event": {}, + "kw_strength_thought": {}} \ No newline at end of file diff --git a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Maria Lopez/bootstrap_memory/associative_memory/nodes.json b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Maria Lopez/bootstrap_memory/associative_memory/nodes.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Maria Lopez/bootstrap_memory/associative_memory/nodes.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Maria Lopez/bootstrap_memory/scratch.json b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Maria Lopez/bootstrap_memory/scratch.json new file mode 100644 index 000000000..c3a304952 --- /dev/null +++ b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Maria Lopez/bootstrap_memory/scratch.json @@ -0,0 +1,51 @@ +{ + "vision_r": 8, + "att_bandwidth": 8, + "retention": 8, + "curr_time": null, + "curr_tile": null, + "daily_plan_req": "Maria Lopez spends at least 3 hours a day Twitch streaming or gaming.", + "name": "Maria Lopez", + "first_name": "Maria", + "last_name": "Lopez", + "age": 21, + "innate": "energetic, enthusiastic, inquisitive", + "learned": "Maria Lopez is a student at Oak Hill College studying physics and a part time Twitch game streamer who loves to connect with people and explore new ideas.", + "currently": "Maria Lopez is working on her physics degree and streaming games on Twitch to make some extra money. She visits Hobbs Cafe for studying and eating just about everyday.", + "lifestyle": "Maria Lopez goes to bed around 2am, awakes up around 9am, eats dinner around 6pm. She likes to hang out at Hobbs Cafe if it's before 6pm.", + "living_area": "the Ville:Dorm for Oak Hill College:Maria Lopez's room", + "concept_forget": 100, + "daily_reflection_time": 180, + "daily_reflection_size": 5, + "overlap_reflect_th": 4, + "kw_strg_event_reflect_th": 10, + "kw_strg_thought_reflect_th": 9, + + "recency_w": 1, + "relevance_w": 1, + "importance_w": 1, + "recency_decay": 0.99, + "importance_trigger_max": 150, + "importance_trigger_curr": 150, + "importance_ele_n": 0, + "thought_count": 5, + + "daily_req": [], + "f_daily_schedule": [], + "f_daily_schedule_hourly_org": [], + "act_address": null, + "act_start_time": null, + "act_duration": null, + "act_description": null, + "act_pronunciatio": null, + "act_event": ["Maria Lopez", null, null], + "act_obj_description": null, + "act_obj_pronunciatio": null, + "act_obj_event": [null, null, null], + "chatting_with": null, + "chat": null, + "chatting_with_buffer": {}, + "chatting_end_time": null, + "act_path_set": false, + "planned_path": [] +} \ No newline at end of file diff --git a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Maria Lopez/bootstrap_memory/spatial_memory.json b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Maria Lopez/bootstrap_memory/spatial_memory.json new file mode 100644 index 000000000..0a58212bd --- /dev/null +++ b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Maria Lopez/bootstrap_memory/spatial_memory.json @@ -0,0 +1,87 @@ +{ + "the Ville": { + "Oak Hill College": { + "hallway": [], + "library": [ + "library sofa", + "library table", + "bookshelf" + ], + "classroom": [ + "blackboard", + "classroom podium", + "classroom student seating" + ] + }, + "Dorm for Oak Hill College": { + "garden": [ + "dorm garden" + ], + "Maria Lopez's room": [ + "closet", + "desk", + "bed", + "computer", + "blackboard" + ], + "woman's bathroom": [ + "toilet", + "shower", + "bathroom sink" + ], + "common room": [ + "common room sofa", + "pool table", + "common room table" + ], + "man's bathroom": [ + "shower", + "bathroom sink", + "toilet" + ] + }, + "The Willows Market and Pharmacy": { + "store": [ + "grocery store shelf", + "behind the grocery counter", + "grocery store counter", + "pharmacy store shelf", + "pharmacy store counter", + "behind the pharmacy counter" + ] + }, + "Harvey Oak Supply Store": { + "supply store": [ + "supply store product shelf", + "behind the supply store counter", + "supply store counter" + ] + }, + "Johnson Park": { + "park": [ + "park garden" + ] + }, + "The Rose and Crown Pub": { + "pub": [ + "shelf", + "refrigerator", + "bar customer seating", + "behind the bar counter", + "kitchen sink", + "cooking area", + "microphone" + ] + }, + "Hobbs Cafe": { + "cafe": [ + "refrigerator", + "cafe customer seating", + "cooking area", + "kitchen sink", + "behind the cafe counter", + "piano" + ] + } + } +} \ No newline at end of file diff --git a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/reverie/meta.json b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/reverie/meta.json new file mode 100644 index 000000000..1e81ec12d --- /dev/null +++ b/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/reverie/meta.json @@ -0,0 +1,13 @@ +{ + "fork_sim_code": "base_the_ville_isabella_maria_klaus", + "start_date": "February 13, 2023", + "curr_time": "February 13, 2023, 00:00:00", + "sec_per_step": 10, + "maze_name": "the_ville", + "persona_names": [ + "Isabella Rodriguez", + "Maria Lopez", + "Klaus Mueller" + ], + "step": 0 +} \ No newline at end of file diff --git a/examples/stream_output_via_api.py b/examples/stream_output_via_api.py new file mode 100644 index 000000000..5961f3a08 --- /dev/null +++ b/examples/stream_output_via_api.py @@ -0,0 +1,117 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +@Time : 2024/3/27 9:44 +@Author : leiwu30 +@File : stream_output_via_api.py +@Description : Stream log information and communicate over the network via web api. +""" +import asyncio +import json +import socket +import threading +from contextvars import ContextVar + +from flask import Flask, Response, jsonify, request, send_from_directory + +from metagpt.const import TUTORIAL_PATH +from metagpt.logs import logger, set_llm_stream_logfunc +from metagpt.roles.tutorial_assistant import TutorialAssistant +from metagpt.utils.stream_pipe import StreamPipe + +app = Flask(__name__) + + +def stream_pipe_log(content): + print(content, end="") + stream_pipe = stream_pipe_var.get(None) + if stream_pipe: + stream_pipe.set_message(content) + + +def write_tutorial(message): + async def main(idea, stream_pipe): + stream_pipe_var.set(stream_pipe) + role = TutorialAssistant() + await role.run(idea) + + def thread_run(idea: str, stream_pipe: StreamPipe = None): + """ + Convert asynchronous function to thread function + """ + asyncio.run(main(idea, stream_pipe)) + + stream_pipe = StreamPipe() + thread = threading.Thread( + target=thread_run, + args=( + message["content"], + stream_pipe, + ), + ) + thread.start() + + while thread.is_alive(): + msg = stream_pipe.get_message() + yield stream_pipe.msg2stream(msg) + + +@app.route("/v1/chat/completions", methods=["POST"]) +def completions(): + """ + data: { + "model": "write_tutorial", + "stream": true, + "messages": [ + { + "role": "user", + "content": "Write a tutorial about MySQL" + } + ] + } + """ + + data = json.loads(request.data) + logger.info(json.dumps(data, indent=4, ensure_ascii=False)) + + # Non-streaming interfaces are not supported yet + stream_type = True if data.get("stream") else False + if not stream_type: + return jsonify({"status": 400, "msg": "Non-streaming requests are not supported, please use `stream=True`."}) + + # Only accept the last user information + # openai['model'] ~ MetaGPT['agent'] + last_message = data["messages"][-1] + model = data["model"] + + # write_tutorial + if model == "write_tutorial": + return Response(write_tutorial(last_message), mimetype="text/plain") + else: + return jsonify({"status": 400, "msg": "No suitable agent found."}) + + +@app.route("/download/") +def download_file(filename): + return send_from_directory(TUTORIAL_PATH, filename, as_attachment=True) + + +if __name__ == "__main__": + """ + curl https://$server_address:$server_port/v1/chat/completions -X POST -d '{ + "model": "write_tutorial", + "stream": true, + "messages": [ + { + "role": "user", + "content": "Write a tutorial about MySQL" + } + ] + }' + """ + server_port = 7860 + server_address = socket.gethostbyname(socket.gethostname()) + + set_llm_stream_logfunc(stream_pipe_log) + stream_pipe_var: ContextVar[StreamPipe] = ContextVar("stream_pipe") + app.run(port=server_port, host=server_address) diff --git a/examples/ui_with_chainlit/.gitignore b/examples/ui_with_chainlit/.gitignore new file mode 100644 index 000000000..1e528c384 --- /dev/null +++ b/examples/ui_with_chainlit/.gitignore @@ -0,0 +1,3 @@ +*.chainlit +chainlit.md +.files \ No newline at end of file diff --git a/examples/ui_with_chainlit/README.md b/examples/ui_with_chainlit/README.md new file mode 100644 index 000000000..0ad466162 --- /dev/null +++ b/examples/ui_with_chainlit/README.md @@ -0,0 +1,34 @@ +# MetaGPT in UI with Chainlit! 🤖 + +- MetaGPT functionality in UI using Chainlit. +- It also takes a **one line requirement** as input and outputs **user stories / competitive analysis / requirements / data structures / APIs / documents, etc.**, But `everything in UI`. + +## Install Chainlit + +- Setup initial MetaGPT config from [Main](../../README.md). + +```bash +pip install chainlit +``` + +## Usage + +```bash +chainlit run app.py +``` + +- Now go to: http://localhost:8000 + +- Select, + - `Create a 2048 game` + - `Write a cli Blackjack Game` + - `Type your own message...` + +- It will run a metagpt software company. + +## To Setup with own application + +- We can change `Environment.run`, `Team.run`, `Role.run`, `Role._act`, `Action.run`. +- In this code, changed `Environment.run`, as it was easier to do. +- We will need to change `metagpt.logs.set_llm_stream_logfunc` to stream messages in UI with Chainlit Message. +- To use at some other place we need to call `chainlit.Message(content="").send()` with content. \ No newline at end of file diff --git a/examples/ui_with_chainlit/__init__.py b/examples/ui_with_chainlit/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/examples/ui_with_chainlit/app.py b/examples/ui_with_chainlit/app.py new file mode 100644 index 000000000..3b449a12c --- /dev/null +++ b/examples/ui_with_chainlit/app.py @@ -0,0 +1,83 @@ +import chainlit as cl +from init_setup import ChainlitEnv + +from metagpt.roles import ( + Architect, + Engineer, + ProductManager, + ProjectManager, + QaEngineer, +) +from metagpt.team import Team + + +# https://docs.chainlit.io/concepts/starters +@cl.set_chat_profiles +async def chat_profile() -> list[cl.ChatProfile]: + """Generates a chat profile containing starter messages which can be triggered to run MetaGPT + + Returns: + list[chainlit.ChatProfile]: List of Chat Profile + """ + return [ + cl.ChatProfile( + name="MetaGPT", + icon="/public/MetaGPT-new-log.jpg", + markdown_description="It takes a **one line requirement** as input and outputs **user stories / competitive analysis / requirements / data structures / APIs / documents, etc.**, But `everything in UI`.", + starters=[ + cl.Starter( + label="Create a 2048 Game", + message="Create a 2048 game", + icon="/public/2048.jpg", + ), + cl.Starter( + label="Write a cli Blackjack Game", + message="Write a cli Blackjack Game", + icon="/public/blackjack.jpg", + ), + ], + ) + ] + + +# https://docs.chainlit.io/concepts/message +@cl.on_message +async def startup(message: cl.Message) -> None: + """On Message in UI, Create a MetaGPT software company + + Args: + message (chainlit.Message): message by chainlist + """ + idea = message.content + company = Team(env=ChainlitEnv()) + + # Similar to software_company.py + company.hire( + [ + ProductManager(), + Architect(), + ProjectManager(), + Engineer(n_borg=5, use_code_review=True), + QaEngineer(), + ] + ) + + company.invest(investment=3.0) + company.run_project(idea=idea) + + await company.run(n_round=5) + + workdir = company.env.context.git_repo.workdir + files = company.env.context.git_repo.get_files(workdir) + files = "\n".join([f"{workdir}/{file}" for file in files if not file.startswith(".git")]) + + await cl.Message( + content=f""" +Codes can be found here: +{files} + +--- + +Total cost: `{company.cost_manager.total_cost}` +""" + ).send() diff --git a/examples/ui_with_chainlit/init_setup.py b/examples/ui_with_chainlit/init_setup.py new file mode 100644 index 000000000..2b00fe465 --- /dev/null +++ b/examples/ui_with_chainlit/init_setup.py @@ -0,0 +1,69 @@ +import asyncio + +import chainlit as cl + +from metagpt.environment import Environment +from metagpt.logs import logger, set_llm_stream_logfunc +from metagpt.roles import Role +from metagpt.utils.common import any_to_name + + +def log_llm_stream_chainlit(msg): + # Stream the message token into Chainlit UI. + cl.run_sync(chainlit_message.stream_token(msg)) + + +set_llm_stream_logfunc(func=log_llm_stream_chainlit) + + +class ChainlitEnv(Environment): + """Chainlit Environment for UI Integration""" + + async def run(self, k=1): + """处理一次所有信息的运行 + Process all Role runs at once + """ + for _ in range(k): + futures = [] + for role in self.roles.values(): + # Call role.run with chainlit configuration + future = self._chainlit_role_run(role=role) + futures.append(future) + + await asyncio.gather(*futures) + logger.debug(f"is idle: {self.is_idle}") + + async def _chainlit_role_run(self, role: Role) -> None: + """To run the role with chainlit config + + Args: + role (Role): metagpt.role.Role + """ + global chainlit_message + chainlit_message = cl.Message(content="") + + message = await role.run() + # If message is from role._act() publish to UI. + if message is not None and message.content != "No actions taken yet": + # Convert a message from action node in json format + chainlit_message.content = await self._convert_message_to_markdownjson(message=chainlit_message.content) + + # message content from which role and its action... + chainlit_message.content += f"---\n\nAction: `{any_to_name(message.cause_by)}` done by `{role._setting}`." + + await chainlit_message.send() + + # for clean view in UI + async def _convert_message_to_markdownjson(self, message: str) -> str: + """If the message is from MetaGPT Action Node output, then + convert it into markdown json for clear view in UI. + + Args: + message (str): message by role._act + + Returns: + str: message in mardown from + """ + if message.startswith("[CONTENT]"): + return f"```json\n{message}\n```\n" + return message diff --git a/examples/ui_with_chainlit/public/2048.jpg b/examples/ui_with_chainlit/public/2048.jpg new file mode 100644 index 000000000..7042e6f63 Binary files /dev/null and b/examples/ui_with_chainlit/public/2048.jpg differ diff --git a/examples/ui_with_chainlit/public/MetaGPT-new-log.jpg b/examples/ui_with_chainlit/public/MetaGPT-new-log.jpg new file mode 100644 index 000000000..f67872008 Binary files /dev/null and b/examples/ui_with_chainlit/public/MetaGPT-new-log.jpg differ diff --git a/examples/ui_with_chainlit/public/blackjack.jpg b/examples/ui_with_chainlit/public/blackjack.jpg new file mode 100644 index 000000000..b3a412bd4 Binary files /dev/null and b/examples/ui_with_chainlit/public/blackjack.jpg differ diff --git a/examples/werewolf_game/evals/eval.py b/examples/werewolf_game/evals/eval.py new file mode 100644 index 000000000..c890773de --- /dev/null +++ b/examples/werewolf_game/evals/eval.py @@ -0,0 +1,218 @@ +""" +Filename: MetaGPT/examples/werewolf_game/evals/eval.py +Created Date: Oct 18, 2023 +Updated Date: Oct 24, 2023 +Author: [Aria](https://github.com/ariafyy) +Info: eval the Voting Accuracy Rate of non_werewolves and Vote Difficulity +""" + +import glob +import os +import re +from pathlib import Path + +import numpy as np +import pandas as pd +from tqdm import tqdm +from utils import Utils + +from metagpt.const import DEFAULT_WORKSPACE_ROOT, METAGPT_ROOT +from metagpt.environment.werewolf.const import RoleType + + +class Vote: + """Vote Evaluation""" + + def __init__(self): + self.OUT_PATH = DEFAULT_WORKSPACE_ROOT / "outputs" + os.makedirs(self.OUT_PATH, exist_ok=True) + self.SUB_FOLDER_LIST = ["01-10", "11-20", "21-30"] + + def _get_log_fileslist(self, IN_PATH) -> list[str]: + files_list = [] + for SUB_FOLDER in self.SUB_FOLDER_LIST: + files_list.extend(glob.glob(str(IN_PATH / SUB_FOLDER / "*.txt"))) + return files_list + + def extract_votes_from_logs(self, files_list: list): + for in_logfile in tqdm(files_list): + SUB_FOLDER = (Path(in_logfile).parent).stem + out_txtfile = self.OUT_PATH / "# {0}_{1}.txt".format(SUB_FOLDER, Path(in_logfile).stem) + Utils().pick_vote_log(in_logfile, out_txtfile) + votefiles_list = Utils().get_file_list(self.OUT_PATH) + return votefiles_list + + @staticmethod + def parse_vote_text2chunks(text: str): + """ + parse each game vote log into text chunks + + one chunk example: + ['Player1', 'Player2', 'Player3', 'Player5', 'Player6']. Say ONLY: I vote to eliminate ... + Player1(Witch): 49 | I vote to eliminate Player5 + Player2(Villager): 49 | I vote to eliminate Player5 + Player3(Villager): 49 | I vote to eliminate Player5 + Player5(Werewolf): 49 | I vote to eliminate Player6 + Player6(Seer): 49 | I vote to eliminate Player5 + """ + pattern = re.compile(r"""\[([^\]]+)\]. Say ONLY: I vote to eliminate ...""") + chunks = {} + chunk_id = 0 + last_end = 0 + for match in pattern.finditer(text): + start = match.start() + chunk = text[last_end:start] + chunks[f"vote_{chunk_id}"] = chunk.strip() + last_end = match.end() + chunk_id += 1 + final_chunk = text[last_end:].strip() + if final_chunk: + chunks[f"vote_{chunk_id}"] = final_chunk + return chunks + + def _vote_rate_players(self, text: str): + """ + # calculate the rate of goodteam vote werewolves + :example: + + input: + ['Player1', 'Player2', 'Player3', 'Player5', 'Player6']. Say ONLY: I vote to eliminate ... + Player1(Witch): 49 | I vote to eliminate Player5 + Player2(Villager): 49 | I vote to eliminate Player5 + Player3(Villager): 49 | I vote to eliminate Player5 + Player5(Werewolf): 49 | I vote to eliminate Player6 + Player6(Seer): 49 | I vote to eliminate Player5 + + output: + werewolves: ['Player5'] + non_werewolves: ['Player1', 'Player2', 'Player3', 'Player6'] + as you can see :Player2(Villager) and Player3(Villager) vote to eliminate Player5(Werewolf) + :return goodteam vote rateability: 100.00% + """ + pattern = re.compile(r"(\w+)\(([^\)]+)\): \d+ \| I vote to eliminate (\w+)") + # find all werewolves + werewolves = [] + for match in pattern.finditer(text): + if match.group(2) == RoleType.WEREWOLF.value: + werewolves.append(match.group(1)) + + # find all non_werewolves + non_werewolves = [] + for match in pattern.finditer(text): + if match.group(2) != RoleType.WEREWOLF.value: + non_werewolves.append(match.group(1)) + num_non_werewolves = len(non_werewolves) + + # count players other than werewolves made the correct votes + correct_votes = 0 + for match in pattern.finditer(text): + if match.group(2) != RoleType.WEREWOLF.value and match.group(3) in werewolves: + correct_votes += 1 + + # cal the rateability of non_werewolves + rate = correct_votes / num_non_werewolves + good_vote_rate = round(rate, 2) + return {"good_vote_rate": good_vote_rate, "werewolves": werewolves, "non_werewolves": non_werewolves} + + def get_goodteam_vote_rate(self, text: str) -> float: + goodteam_vote_rate = self._vote_rate_players(text)["good_vote_rate"] + return goodteam_vote_rate + + def get_werewolves(self, text: str) -> list: + werewolves_list = self._vote_rate_players(text)["werewolves"] + return werewolves_list + + def get_non_werewolves(self, text: str) -> list: + non_werewolves_list = self._vote_rate_players(text)["non_werewolves"] + return non_werewolves_list + + def get_votewolf_difficulty(self, werewolves: list, non_werewolves: list) -> str: + num_living_wolfs = len(werewolves) + num_living_players = len(werewolves) + len(non_werewolves) + votewolf_difficulty = "_{0} / {1}".format(num_living_wolfs, num_living_players) + return votewolf_difficulty + + def get_result_df(self, out_txtfile: str) -> pd.DataFrame: + """ + folder: sub folders for evals + file: evaluation file, each file represents one game + votes: the number of votes, eg. vote_1 represents the first vote of this game, + good_vote_rate:the rateability of a good person voting against a werewolf, + correct_votes / the total number of players other than werewolves + total_votes:the total number of votes cast + """ + with open(out_txtfile, "r") as out_file: + text = out_file.read() + chunks = self.parse_vote_text2chunks(text) + res = [] + for k, v in chunks.items(): + if v != "": + chunks_list = list(chunks.keys()) + total_votes = len(chunks_list) - 1 + werewolves = self.get_werewolves(v) + non_werewolves = self.get_non_werewolves(v) + good_vote_rate = self.get_goodteam_vote_rate(v) + votewolf_difficulty = self.get_votewolf_difficulty(werewolves, non_werewolves) + folder = Utils().filename_to_foldername(out_txtfile) + result = { + "folder": folder, + "file": Path(out_txtfile).stem + ".txt", + "vote_round": k, + "good_vote_rate": good_vote_rate, + "total_votes": total_votes, + "votewolf_difficulty": votewolf_difficulty, + } + res.append(result) + df = pd.DataFrame(res) + return df + + def calc_avg_rate(self, IN_PATH) -> pd.DataFrame: + """ + get avg_rate for each game + avg_rate : the good_rate/total number of votes in the game + vote1_rate: First Round Voting Accuracy Rate + """ + infiles_list = self._get_log_fileslist(IN_PATH) + votefiles_list = self.extract_votes_from_logs(infiles_list) + df_list = [self._load_df_from_file(file) for file in votefiles_list] + combined_df = pd.concat(df_list, ignore_index=True) + # calculate the average good_vote_rate for each file + mean_rates = self._calculate_mean_rates(combined_df) + combined_df["avg_rate"] = combined_df["file"].map(mean_rates) + # calculate vote1 rate + vote1_rates = self._calc_vote1_rates(combined_df) + combined_df["vote1_rate"] = combined_df["folder"].map(vote1_rates.set_index("folder")["good_vote_rate"]) + combined_df.loc[combined_df["vote_round"] != "vote_1", "vote1_rate"] = np.nan + combined_df["vote1_rate"] = combined_df["vote1_rate"].apply(self._format_rates) + combined_df["good_vote_rate"] = combined_df["good_vote_rate"].apply(self._format_rates) + combined_df["avg_rate"] = combined_df["avg_rate"].apply(self._format_rates) + combined_df.sort_values(["file"], ascending=True, inplace=True) + return combined_df + + def _calc_vote1_rates(self, df): + df_vote1 = df[df["vote_round"] == "vote_1"] + vote1_rates = df_vote1.groupby("folder")["good_vote_rate"].mean().reset_index() + return vote1_rates + + def _load_df_from_file(self, file): + return self.get_result_df(file) + + def _calculate_mean_rates(self, df): + return df.groupby("file")["good_vote_rate"].mean() + + def _format_rates(self, s): + return Utils().float_to_percent(s) + + def get_eval_csv(self, IN_PATH, EVAL_RESULT): + """ + IN_PATH : parent folder of ["01-10", "11-20", "21-30"] + EVAL_RESULT : output csv file path + """ + combined_df = self.calc_avg_rate(IN_PATH) + combined_df.to_csv(EVAL_RESULT, index=False) + + +if __name__ == "__main__": + IN_PATH = METAGPT_ROOT / "examples/werewolf_game/evals" + EVAL_RESULT = DEFAULT_WORKSPACE_ROOT / "outputs" / "goodteam_vote_rate.csv" + Vote().get_eval_csv(IN_PATH, EVAL_RESULT) diff --git a/examples/werewolf_game/evals/utils.py b/examples/werewolf_game/evals/utils.py new file mode 100644 index 000000000..490e7126f --- /dev/null +++ b/examples/werewolf_game/evals/utils.py @@ -0,0 +1,134 @@ +""" +Filename: MetaGPT/examples/werewolf_game/evals/utils.py +Created Date: Oct 11, 2023 +Revised Date: Oct 20, 2023 +Author: [Aria](https://github.com/ariafyy) +""" +import glob +import os +import re +from pathlib import Path + +from metagpt.const import METAGPT_ROOT + + +class Utils: + """Utils: utils of logs""" + + @staticmethod + def polish_log(in_logfile, out_txtfile): + """polish logs for evaluation""" + pattern_text = r"(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}) \| (\w+) +\| ([\w\.]+:\w+:\d+) - (.*\S)" + pattern_player = r"(Player(\d{1}): \w+)" + pattern_start = False + json_start = False + + with open(in_logfile, "r") as f, open(out_txtfile, "w") as out: + for line in f.readlines(): + matches = re.match(pattern_text, line) + if matches: + message = matches.group(4).strip() + pattern_start = True + json_start = False + + if ( + "Moderator(Moderator) ready to InstructSpeak" not in message + and "Moderator(Moderator) ready to ParseSpeak" not in message + and "Total running cost:" not in message + ): + out.write("- " + message + "\n") + else: + out.write("\n") + + elif pattern_start and not matches: + if "gpt-4 may update over time" in line: + line = "" + out.write(line) + + elif line.strip().startswith("{"): + out.write(line.strip()) + json_start = True + + elif json_start and not line.strip().endswith("}"): + out.write(line.strip()) + + elif json_start and line.strip().endswith("}"): + out.write(line.strip()) + json_start = False + + elif ( + line.startswith("(User):") or line.startswith("********** STEP:") or re.search(pattern_player, line) + ): + out.write(line) + + else: + out.write("\n") + + @staticmethod + def pick_vote_log(in_logfile, out_txtfile): + """ + pick the vote log from the log file. + ready to AnnounceGameResult serves as the 'HINT_TEXT ' which indicates the end of the game. + based on bservation and reflection, then discuss is not in vote session. + """ + pattern_vote = r"(Player\d+)\(([A-Za-z]+)\): (\d+) \| (I vote to eliminate Player\d+)" + ignore_text = """reflection""" + HINT_TEXT = r"ready to AnnounceGameResult" + pattern_moderator = r"\[([^\]]+)\]\. Say ONLY: I vote to eliminate ..." + in_valid_block = False + + with open(in_logfile, "r") as f: + lines = f.read() + split_lines = lines.split(HINT_TEXT) + + if len(split_lines) < 2: + print(f"Key text :{HINT_TEXT} not found in {in_logfile}") + return + + relevant_lines = split_lines[1].split("\n") + with open(out_txtfile, "w") as out: + for line in relevant_lines: + if re.search(pattern_moderator, line): + in_valid_block = True + out.write(line.lstrip() + "\n") + + elif in_valid_block and re.search(pattern_vote, line): + out.write(line + "\n") + elif ignore_text in line: + in_valid_block = False + + @staticmethod + def get_file_list(path: str) -> list: + file_pattern = os.path.join(path, "*.txt") + files_list = glob.glob(file_pattern) + return files_list + + @staticmethod + def filename_to_foldername(out_txtfile: str): + """ + convert filename into its parent folder name + input:"....../# 01-10_10132100.txt" + output:# 01-10 + """ + s = Path(out_txtfile).stem + pattern_folder = r"([^_]*)_" + match = re.match(pattern_folder, s) + if match: + folder = match.group(1) + return folder + + @staticmethod + def float_to_percent(decimal: float) -> str: + """ + input: 1.00 + output: 100.00% + """ + percent = decimal * 100 + return f"{percent:.2f}%" + + +if __name__ == "__main__": + in_logfile = METAGPT_ROOT / "logs/log.txt" + out_txtfile = "input your wish path" + # Utils().polish_log(in_logfile, out_txtfile) + Utils().pick_vote_log(in_logfile, out_txtfile) diff --git a/examples/werewolf_game/start_game.py b/examples/werewolf_game/start_game.py new file mode 100644 index 000000000..fe31c6c55 --- /dev/null +++ b/examples/werewolf_game/start_game.py @@ -0,0 +1,68 @@ +import asyncio + +import fire + +from metagpt.ext.werewolf.roles import Guard, Moderator, Seer, Villager, Werewolf, Witch +from metagpt.ext.werewolf.roles.human_player import prepare_human_player +from metagpt.ext.werewolf.werewolf_game import WerewolfGame +from metagpt.logs import logger + + +async def start_game( + investment: float = 3.0, + n_round: int = 5, + shuffle: bool = True, + add_human: bool = False, + use_reflection: bool = True, + use_experience: bool = False, + use_memory_selection: bool = False, + new_experience_version: str = "", +): + game = WerewolfGame() + game_setup, players = game.env.init_game_setup( + role_uniq_objs=[Villager, Werewolf, Guard, Seer, Witch], + num_werewolf=2, + num_villager=2, + shuffle=shuffle, + add_human=add_human, + use_reflection=use_reflection, + use_experience=use_experience, + use_memory_selection=use_memory_selection, + new_experience_version=new_experience_version, + prepare_human_player=prepare_human_player, + ) + logger.info(f"{game_setup}") + + players = [Moderator()] + players + game.hire(players) + game.invest(investment) + game.run_project(game_setup) + await game.run(n_round=n_round) + + +def main( + investment: float = 20.0, + n_round: int = 100, + shuffle: bool = True, + add_human: bool = False, + use_reflection: bool = True, + use_experience: bool = False, + use_memory_selection: bool = False, + new_experience_version: str = "", +): + asyncio.run( + start_game( + investment, + n_round, + shuffle, + add_human, + use_reflection, + use_experience, + use_memory_selection, + new_experience_version, + ) + ) + + +if __name__ == "__main__": + fire.Fire(main) diff --git a/metagpt/actions/action.py b/metagpt/actions/action.py index 1b93213f7..20c052aa9 100644 --- a/metagpt/actions/action.py +++ b/metagpt/actions/action.py @@ -8,12 +8,14 @@ from __future__ import annotations -from typing import Optional, Union +from typing import Any, Optional, Union from pydantic import BaseModel, ConfigDict, Field, model_validator from metagpt.actions.action_node import ActionNode +from metagpt.configs.models_config import ModelsConfig from metagpt.context_mixin import ContextMixin +from metagpt.provider.llm_provider_registry import create_llm_instance from metagpt.schema import ( CodePlanAndChangeContext, CodeSummarizeContext, @@ -35,6 +37,19 @@ class Action(SerializationMixin, ContextMixin, BaseModel): prefix: str = "" # aask*时会加上prefix,作为system_message desc: str = "" # for skill manager node: ActionNode = Field(default=None, exclude=True) + # The model name or API type of LLM of the `models` in the `config2.yaml`; + # Using `None` to use the `llm` configuration in the `config2.yaml`. + llm_name_or_type: Optional[str] = None + + @model_validator(mode="after") + @classmethod + def _update_private_llm(cls, data: Any) -> Any: + config = ModelsConfig.default().get(data.llm_name_or_type) + if config: + llm = create_llm_instance(config) + llm.cost_manager = data.llm.cost_manager + data.llm = llm + return data @property def repo(self) -> ProjectRepo: diff --git a/metagpt/actions/action_node.py b/metagpt/actions/action_node.py index f0ffbe085..ad3f0a1d1 100644 --- a/metagpt/actions/action_node.py +++ b/metagpt/actions/action_node.py @@ -457,7 +457,6 @@ class ActionNode: self, schema, mode, images: Optional[Union[str, list[str]]] = None, timeout=USE_CONFIG_TIMEOUT, exclude=None ): prompt = self.compile(context=self.context, schema=schema, mode=mode, exclude=exclude) - if schema != "raw": mapping = self.get_mapping(mode, exclude=exclude) class_name = f"{self.key}_AN" diff --git a/metagpt/actions/design_api_an.py b/metagpt/actions/design_api_an.py index 5977cbd95..ca7aea95a 100644 --- a/metagpt/actions/design_api_an.py +++ b/metagpt/actions/design_api_an.py @@ -5,7 +5,7 @@ @Author : alexanderwu @File : design_api_an.py """ -from typing import List +from typing import List, Optional from metagpt.actions.action_node import ActionNode from metagpt.utils.mermaid import MMC1, MMC2 @@ -45,9 +45,10 @@ REFINED_FILE_LIST = ActionNode( example=["main.py", "game.py", "new_feature.py"], ) +# optional,because low success reproduction of class diagram in non py project. DATA_STRUCTURES_AND_INTERFACES = ActionNode( key="Data structures and interfaces", - expected_type=str, + expected_type=Optional[str], instruction="Use mermaid classDiagram code syntax, including classes, method(__init__ etc.) and functions with type" " annotations, CLEARLY MARK the RELATIONSHIPS between classes, and comply with PEP8 standards. " "The data structures SHOULD BE VERY DETAILED and the API should be comprehensive with a complete design.", @@ -66,7 +67,7 @@ REFINED_DATA_STRUCTURES_AND_INTERFACES = ActionNode( PROGRAM_CALL_FLOW = ActionNode( key="Program call flow", - expected_type=str, + expected_type=Optional[str], instruction="Use sequenceDiagram code syntax, COMPLETE and VERY DETAILED, using CLASSES AND API DEFINED ABOVE " "accurately, covering the CRUD AND INIT of each object, SYNTAX MUST BE CORRECT.", example=MMC2, diff --git a/metagpt/actions/rebuild_sequence_view.py b/metagpt/actions/rebuild_sequence_view.py index 0e67de908..2aac9bf20 100644 --- a/metagpt/actions/rebuild_sequence_view.py +++ b/metagpt/actions/rebuild_sequence_view.py @@ -486,7 +486,7 @@ class RebuildSequenceView(Action): Returns: List[str]: A list of participants extracted from the sequence diagram. """ - pattern = r"participant ([a-zA-Z\.0-9_]+)" + pattern = r"participant ([\w\.]+)" matches = re.findall(pattern, mermaid_sequence_diagram) matches = [re.sub(r"[\\/'\"]+", "", i) for i in matches] return matches diff --git a/metagpt/actions/research.py b/metagpt/actions/research.py index 2a99a8d99..5086f10cf 100644 --- a/metagpt/actions/research.py +++ b/metagpt/actions/research.py @@ -161,6 +161,8 @@ class CollectLinks(Action): """ max_results = max(num_results * 2, 6) results = await self.search_engine.run(query, max_results=max_results, as_string=False) + if len(results) == 0: + return [] _results = "\n".join(f"{i}: {j}" for i, j in zip(range(max_results), results)) prompt = COLLECT_AND_RANKURLS_PROMPT.format(topic=topic, query=query, results=_results) logger.debug(prompt) diff --git a/metagpt/actions/write_code_plan_and_change_an.py b/metagpt/actions/write_code_plan_and_change_an.py index f99bffd84..a90946981 100644 --- a/metagpt/actions/write_code_plan_and_change_an.py +++ b/metagpt/actions/write_code_plan_and_change_an.py @@ -128,6 +128,9 @@ CODE_PLAN_AND_CHANGE_CONTEXT = """ ## User New Requirements {requirement} +## Issue +{issue} + ## PRD {prd} @@ -211,7 +214,8 @@ class WriteCodePlanAndChange(Action): design_doc = await self.repo.docs.system_design.get(filename=self.i_context.design_filename) task_doc = await self.repo.docs.task.get(filename=self.i_context.task_filename) context = CODE_PLAN_AND_CHANGE_CONTEXT.format( - requirement=self.i_context.requirement, + requirement=f"```text\n{self.i_context.requirement}\n```", + issue=f"```text\n{self.i_context.issue}\n```", prd=prd_doc.content, design=design_doc.content, task=task_doc.content, diff --git a/metagpt/actions/write_code_review.py b/metagpt/actions/write_code_review.py index ac6fe7045..c9b494dff 100644 --- a/metagpt/actions/write_code_review.py +++ b/metagpt/actions/write_code_review.py @@ -27,6 +27,8 @@ ATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenc # Context {context} +----- + ## Code to be Reviewed: {filename} ```Code {code} @@ -38,7 +40,8 @@ EXAMPLE_AND_INSTRUCTION = """ {format_example} -# Instruction: Based on the actual code situation, follow one of the "Format example". Return only 1 file under review. +# Instruction: Based on the actual code, follow one of the "Code Review Format example". +- Note the code filename should be `{filename}`. Return the only ONE file `{filename}` under review. ## Code Review: Ordered List. Based on the "Code to be Reviewed", provide key, clear, concise, and specific answer. If any answer is no, explain how to fix it step by step. 1. Is the code implemented as per the requirements? If not, how to achieve it? Analyse it step by step. @@ -56,7 +59,9 @@ LGTM/LBTM """ FORMAT_EXAMPLE = """ -# Format example 1 +----- + +# Code Review Format example 1 ## Code Review: {filename} 1. No, we should fix the logic of class A due to ... 2. ... @@ -92,7 +97,9 @@ FORMAT_EXAMPLE = """ ## Code Review Result LBTM -# Format example 2 +----- + +# Code Review Format example 2 ## Code Review: {filename} 1. Yes. 2. Yes. @@ -106,10 +113,12 @@ pass ## Code Review Result LGTM + +----- """ REWRITE_CODE_TEMPLATE = """ -# Instruction: rewrite code based on the Code Review and Actions +# Instruction: rewrite the `{filename}` based on the Code Review and Actions ## Rewrite Code: CodeBlock. If it still has some bugs, rewrite {filename} with triple quotes. Do your utmost to optimize THIS SINGLE FILE. Return all completed codes and prohibit the return of unfinished codes. ```Code ## {filename} @@ -169,6 +178,7 @@ class WriteCodeReview(Action): ) cr_prompt = EXAMPLE_AND_INSTRUCTION.format( format_example=format_example, + filename=self.i_context.code_doc.filename, ) len1 = len(iterative_code) if iterative_code else 0 len2 = len(self.i_context.code_doc.content) if self.i_context.code_doc.content else 0 diff --git a/metagpt/actions/write_prd_an.py b/metagpt/actions/write_prd_an.py index 5733b29da..6a995e184 100644 --- a/metagpt/actions/write_prd_an.py +++ b/metagpt/actions/write_prd_an.py @@ -133,10 +133,10 @@ REQUIREMENT_ANALYSIS = ActionNode( REFINED_REQUIREMENT_ANALYSIS = ActionNode( key="Refined Requirement Analysis", expected_type=List[str], - instruction="Review and refine the existing requirement analysis to align with the evolving needs of the project " + instruction="Review and refine the existing requirement analysis into a string list to align with the evolving needs of the project " "due to incremental development. Ensure the analysis comprehensively covers the new features and enhancements " "required for the refined project scope.", - example=["Require add/update/modify ..."], + example=["Require add ...", "Require modify ..."], ) REQUIREMENT_POOL = ActionNode( diff --git a/metagpt/config2.py b/metagpt/config2.py index f3273419f..27b228b33 100644 --- a/metagpt/config2.py +++ b/metagpt/config2.py @@ -12,6 +12,8 @@ from typing import Dict, Iterable, List, Literal, Optional from pydantic import BaseModel, model_validator from metagpt.configs.browser_config import BrowserConfig +from metagpt.configs.embedding_config import EmbeddingConfig +from metagpt.configs.file_parser_config import OmniParseConfig from metagpt.configs.llm_config import LLMConfig, LLMType from metagpt.configs.mermaid_config import MermaidConfig from metagpt.configs.redis_config import RedisConfig @@ -47,6 +49,12 @@ class Config(CLIParams, YamlModel): # Key Parameters llm: LLMConfig + # RAG Embedding + embedding: EmbeddingConfig = EmbeddingConfig() + + # omniparse + omniparse: OmniParseConfig = OmniParseConfig() + # Global Proxy. Will be used if llm.proxy is not set proxy: str = "" @@ -65,6 +73,7 @@ class Config(CLIParams, YamlModel): workspace: WorkspaceConfig = WorkspaceConfig() enable_longterm_memory: bool = False code_review_k_times: int = 2 + agentops_api_key: str = "" # Will be removed in the future metagpt_tti_url: str = "" @@ -75,6 +84,7 @@ class Config(CLIParams, YamlModel): iflytek_api_key: str = "" azure_tts_subscription_key: str = "" azure_tts_region: str = "" + _extra: dict = dict() # extra config dict @classmethod def from_home(cls, path): @@ -127,6 +137,14 @@ class Config(CLIParams, YamlModel): self.reqa_file = reqa_file self.max_auto_summarize_code = max_auto_summarize_code + @property + def extra(self): + return self._extra + + @extra.setter + def extra(self, value: dict): + self._extra = value + def get_openai_llm(self) -> Optional[LLMConfig]: """Get OpenAI LLMConfig by name. If no OpenAI, raise Exception""" if self.llm.api_type == LLMType.OPENAI: diff --git a/metagpt/configs/embedding_config.py b/metagpt/configs/embedding_config.py new file mode 100644 index 000000000..f9b41b9dc --- /dev/null +++ b/metagpt/configs/embedding_config.py @@ -0,0 +1,54 @@ +from enum import Enum +from typing import Optional + +from pydantic import field_validator + +from metagpt.utils.yaml_model import YamlModel + + +class EmbeddingType(Enum): + OPENAI = "openai" + AZURE = "azure" + GEMINI = "gemini" + OLLAMA = "ollama" + + +class EmbeddingConfig(YamlModel): + """Config for Embedding. + + Examples: + --------- + api_type: "openai" + api_key: "YOU_API_KEY" + dimensions: "YOUR_MODEL_DIMENSIONS" + + api_type: "azure" + api_key: "YOU_API_KEY" + base_url: "YOU_BASE_URL" + api_version: "YOU_API_VERSION" + dimensions: "YOUR_MODEL_DIMENSIONS" + + api_type: "gemini" + api_key: "YOU_API_KEY" + + api_type: "ollama" + base_url: "YOU_BASE_URL" + model: "YOU_MODEL" + dimensions: "YOUR_MODEL_DIMENSIONS" + """ + + api_type: Optional[EmbeddingType] = None + api_key: Optional[str] = None + base_url: Optional[str] = None + api_version: Optional[str] = None + + model: Optional[str] = None + embed_batch_size: Optional[int] = None + dimensions: Optional[int] = None # output dimension of embedding model + + @field_validator("api_type", mode="before") + @classmethod + def check_api_type(cls, v): + if v == "": + return None + return v diff --git a/metagpt/configs/file_parser_config.py b/metagpt/configs/file_parser_config.py new file mode 100644 index 000000000..39742c8a4 --- /dev/null +++ b/metagpt/configs/file_parser_config.py @@ -0,0 +1,6 @@ +from metagpt.utils.yaml_model import YamlModel + + +class OmniParseConfig(YamlModel): + api_key: str = "" + base_url: str = "" diff --git a/metagpt/configs/llm_config.py b/metagpt/configs/llm_config.py index af8f56372..67fb6afdb 100644 --- a/metagpt/configs/llm_config.py +++ b/metagpt/configs/llm_config.py @@ -10,7 +10,7 @@ from typing import Optional from pydantic import field_validator -from metagpt.const import LLM_API_TIMEOUT +from metagpt.const import CONFIG_ROOT, LLM_API_TIMEOUT, METAGPT_ROOT from metagpt.utils.yaml_model import YamlModel @@ -31,6 +31,9 @@ class LLMType(Enum): MOONSHOT = "moonshot" MISTRAL = "mistral" YI = "yi" # lingyiwanwu + OPENROUTER = "openrouter" + BEDROCK = "bedrock" + ARK = "ark" def __missing__(self, key): return self.OPENAI @@ -72,11 +75,15 @@ class LLMConfig(YamlModel): frequency_penalty: float = 0.0 best_of: Optional[int] = None n: Optional[int] = None - stream: bool = False - logprobs: Optional[bool] = None # https://cookbook.openai.com/examples/using_logprobs + stream: bool = True + # https://cookbook.openai.com/examples/using_logprobs + logprobs: Optional[bool] = None top_logprobs: Optional[int] = None timeout: int = 600 + # For Amazon Bedrock + region_name: str = None + # For Network proxy: Optional[str] = None @@ -87,7 +94,16 @@ class LLMConfig(YamlModel): @classmethod def check_llm_key(cls, v): if v in ["", None, "YOUR_API_KEY"]: - raise ValueError("Please set your API key in config2.yaml") + repo_config_path = METAGPT_ROOT / "config/config2.yaml" + root_config_path = CONFIG_ROOT / "config2.yaml" + if root_config_path.exists(): + raise ValueError( + f"Please set your API key in {root_config_path}. If you also set your config in {repo_config_path}, \nthe former will overwrite the latter. This may cause unexpected result.\n" + ) + elif repo_config_path.exists(): + raise ValueError(f"Please set your API key in {repo_config_path}") + else: + raise ValueError("Please set your API key in config2.yaml") return v @field_validator("timeout") diff --git a/metagpt/configs/mermaid_config.py b/metagpt/configs/mermaid_config.py index 50c8a1847..47f14f4cd 100644 --- a/metagpt/configs/mermaid_config.py +++ b/metagpt/configs/mermaid_config.py @@ -13,7 +13,7 @@ from metagpt.utils.yaml_model import YamlModel class MermaidConfig(YamlModel): """Config for Mermaid""" - engine: Literal["nodejs", "ink", "playwright", "pyppeteer"] = "nodejs" + engine: Literal["nodejs", "ink", "playwright", "pyppeteer", "none"] = "nodejs" path: str = "mmdc" # mmdc puppeteer_config: str = "" pyppeteer_path: str = "/usr/bin/google-chrome-stable" diff --git a/metagpt/configs/models_config.py b/metagpt/configs/models_config.py new file mode 100644 index 000000000..bc4897fec --- /dev/null +++ b/metagpt/configs/models_config.py @@ -0,0 +1,112 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +models_config.py + +This module defines the ModelsConfig class for handling configuration of LLM models. + +Attributes: + CONFIG_ROOT (Path): Root path for configuration files. + METAGPT_ROOT (Path): Root path for MetaGPT files. + +Classes: + ModelsConfig (YamlModel): Configuration class for LLM models. +""" +from pathlib import Path +from typing import Dict, List, Optional + +from pydantic import Field, field_validator + +from metagpt.config2 import merge_dict +from metagpt.configs.llm_config import LLMConfig +from metagpt.const import CONFIG_ROOT, METAGPT_ROOT +from metagpt.utils.yaml_model import YamlModel + + +class ModelsConfig(YamlModel): + """ + Configuration class for `models` in `config2.yaml`. + + Attributes: + models (Dict[str, LLMConfig]): Dictionary mapping model names or types to LLMConfig objects. + + Methods: + update_llm_model(cls, value): Validates and updates LLM model configurations. + from_home(cls, path): Loads configuration from ~/.metagpt/config2.yaml. + default(cls): Loads default configuration from predefined paths. + get(self, name_or_type: str) -> Optional[LLMConfig]: Retrieves LLMConfig by name or API type. + """ + + models: Dict[str, LLMConfig] = Field(default_factory=dict) + + @field_validator("models", mode="before") + @classmethod + def update_llm_model(cls, value): + """ + Validates and updates LLM model configurations. + + Args: + value (Dict[str, Union[LLMConfig, dict]]): Dictionary of LLM configurations. + + Returns: + Dict[str, Union[LLMConfig, dict]]: Updated dictionary of LLM configurations. + """ + for key, config in value.items(): + if isinstance(config, LLMConfig): + config.model = config.model or key + elif isinstance(config, dict): + config["model"] = config.get("model") or key + return value + + @classmethod + def from_home(cls, path): + """ + Loads configuration from ~/.metagpt/config2.yaml. + + Args: + path (str): Relative path to configuration file. + + Returns: + Optional[ModelsConfig]: Loaded ModelsConfig object or None if file doesn't exist. + """ + pathname = CONFIG_ROOT / path + if not pathname.exists(): + return None + return ModelsConfig.from_yaml_file(pathname) + + @classmethod + def default(cls): + """ + Loads default configuration from predefined paths. + + Returns: + ModelsConfig: Default ModelsConfig object. + """ + default_config_paths: List[Path] = [ + METAGPT_ROOT / "config/config2.yaml", + CONFIG_ROOT / "config2.yaml", + ] + + dicts = [ModelsConfig.read_yaml(path) for path in default_config_paths] + final = merge_dict(dicts) + return ModelsConfig(**final) + + def get(self, name_or_type: str) -> Optional[LLMConfig]: + """ + Retrieves LLMConfig object by name or API type. + + Args: + name_or_type (str): Name or API type of the LLM model. + + Returns: + Optional[LLMConfig]: LLMConfig object if found, otherwise None. + """ + if not name_or_type: + return None + model = self.models.get(name_or_type) + if model: + return model + for m in self.models.values(): + if m.api_type == name_or_type: + return m + return None diff --git a/metagpt/const.py b/metagpt/const.py index e4cebfd96..f33b46b68 100644 --- a/metagpt/const.py +++ b/metagpt/const.py @@ -1,14 +1,6 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -""" -@Time : 2023/5/1 11:59 -@Author : alexanderwu -@File : const.py -@Modified By: mashenquan, 2023-11-1. According to Section 2.2.1 and 2.2.2 of RFC 116, added key definitions for - common properties in the Message. -@Modified By: mashenquan, 2023-11-27. Defines file repository paths according to Section 2.2.3.4 of RFC 135. -@Modified By: mashenquan, 2023/12/5. Add directories for code summarization.. -""" + import os from pathlib import Path @@ -51,6 +43,7 @@ DEFAULT_WORKSPACE_ROOT = METAGPT_ROOT / "workspace" EXAMPLE_PATH = METAGPT_ROOT / "examples" EXAMPLE_DATA_PATH = EXAMPLE_PATH / "data" DATA_PATH = METAGPT_ROOT / "data" +EXAMPLE_BENCHMARK_PATH = EXAMPLE_PATH / "data/rag_bm" TEST_DATA_PATH = METAGPT_ROOT / "tests/data" RESEARCH_PATH = DATA_PATH / "research" TUTORIAL_PATH = DATA_PATH / "tutorial_docx" diff --git a/metagpt/context.py b/metagpt/context.py index 0add4c71a..2bd541202 100644 --- a/metagpt/context.py +++ b/metagpt/context.py @@ -7,7 +7,7 @@ """ import os from pathlib import Path -from typing import Any, Optional +from typing import Any, Dict, Optional from pydantic import BaseModel, ConfigDict @@ -78,12 +78,6 @@ class Context(BaseModel): # env.update({k: v for k, v in i.items() if isinstance(v, str)}) return env - # def use_llm(self, name: Optional[str] = None, provider: LLMType = LLMType.OPENAI) -> BaseLLM: - # """Use a LLM instance""" - # self._llm_config = self.config.get_llm_config(name, provider) - # self._llm = None - # return self._llm - def _select_costmanager(self, llm_config: LLMConfig) -> CostManager: """Return a CostManager instance""" if llm_config.api_type == LLMType.FIREWORKS: @@ -108,3 +102,38 @@ class Context(BaseModel): if llm.cost_manager is None: llm.cost_manager = self._select_costmanager(llm_config) return llm + + def serialize(self) -> Dict[str, Any]: + """Serialize the object's attributes into a dictionary. + + Returns: + Dict[str, Any]: A dictionary containing serialized data. + """ + return { + "workdir": str(self.repo.workdir) if self.repo else "", + "kwargs": {k: v for k, v in self.kwargs.__dict__.items()}, + "cost_manager": self.cost_manager.model_dump_json(), + } + + def deserialize(self, serialized_data: Dict[str, Any]): + """Deserialize the given serialized data and update the object's attributes accordingly. + + Args: + serialized_data (Dict[str, Any]): A dictionary containing serialized data. + """ + if not serialized_data: + return + workdir = serialized_data.get("workdir") + if workdir: + self.git_repo = GitRepository(local_path=workdir, auto_init=True) + self.repo = ProjectRepo(self.git_repo) + src_workspace = self.git_repo.workdir / self.git_repo.workdir.name + if src_workspace.exists(): + self.src_workspace = src_workspace + kwargs = serialized_data.get("kwargs") + if kwargs: + for k, v in kwargs.items(): + self.kwargs.set(k, v) + cost_manager = serialized_data.get("cost_manager") + if cost_manager: + self.cost_manager.model_validate_json(cost_manager) diff --git a/metagpt/environment/README.md b/metagpt/environment/README.md index ff56b73f1..bb7d50d50 100644 --- a/metagpt/environment/README.md +++ b/metagpt/environment/README.md @@ -21,7 +21,7 @@ ## Usage from metagpt.environment.api.env_api import EnvAPIAbstract # get screenshot from ExtEnv -screenshot_path: Path = env.observe( +screenshot_path: Path = await env.observe( EnvAPIAbstract( api_name="get_screenshot", kwargs={"ss_name": f"{round_count}_before", "local_save_dir": task_dir} ) diff --git a/metagpt/environment/__init__.py b/metagpt/environment/__init__.py index 28981f2f8..b1d77b3a8 100644 --- a/metagpt/environment/__init__.py +++ b/metagpt/environment/__init__.py @@ -3,10 +3,11 @@ # @Desc : from metagpt.environment.base_env import Environment -from metagpt.environment.android_env.android_env import AndroidEnv -from metagpt.environment.werewolf_env.werewolf_env import WerewolfEnv -from metagpt.environment.stanford_town_env.stanford_town_env import StanfordTownEnv -from metagpt.environment.software_env.software_env import SoftwareEnv + +# from metagpt.environment.android.android_env import AndroidEnv +from metagpt.environment.werewolf.werewolf_env import WerewolfEnv +from metagpt.environment.stanford_town.stanford_town_env import StanfordTownEnv +from metagpt.environment.software.software_env import SoftwareEnv __all__ = ["AndroidEnv", "WerewolfEnv", "StanfordTownEnv", "SoftwareEnv", "Environment"] diff --git a/metagpt/environment/minecraft_env/__init__.py b/metagpt/environment/android/__init__.py similarity index 100% rename from metagpt/environment/minecraft_env/__init__.py rename to metagpt/environment/android/__init__.py diff --git a/metagpt/environment/android_env/android_env.py b/metagpt/environment/android/android_env.py similarity index 59% rename from metagpt/environment/android_env/android_env.py rename to metagpt/environment/android/android_env.py index c27e20541..66672d219 100644 --- a/metagpt/environment/android_env/android_env.py +++ b/metagpt/environment/android/android_env.py @@ -4,10 +4,12 @@ from pydantic import Field -from metagpt.environment.android_env.android_ext_env import AndroidExtEnv +from metagpt.environment.android.android_ext_env import AndroidExtEnv from metagpt.environment.base_env import Environment -class AndroidEnv(Environment, AndroidExtEnv): +class AndroidEnv(AndroidExtEnv, Environment): + """in order to use actual `reset`&`observe`, inherited order: AndroidExtEnv, Environment""" + rows: int = Field(default=0, description="rows of a grid on the screenshot") cols: int = Field(default=0, description="cols of a grid on the screenshot") diff --git a/metagpt/environment/android/android_ext_env.py b/metagpt/environment/android/android_ext_env.py new file mode 100644 index 000000000..63a421fa2 --- /dev/null +++ b/metagpt/environment/android/android_ext_env.py @@ -0,0 +1,375 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : The Android external environment to integrate with Android apps +import subprocess +import time +from pathlib import Path +from typing import Any, Optional + +import clip +from modelscope.pipelines import pipeline +from modelscope.utils.constant import Tasks +from PIL import Image +from pydantic import Field + +from metagpt.const import DEFAULT_WORKSPACE_ROOT +from metagpt.environment.android.const import ADB_EXEC_FAIL +from metagpt.environment.android.env_space import ( + EnvAction, + EnvActionType, + EnvObsParams, + EnvObsType, + EnvObsValType, +) +from metagpt.environment.android.text_icon_localization import ( + clip_for_icon, + crop_for_clip, + det, + load_model, + ocr, +) +from metagpt.environment.base_env import ExtEnv, mark_as_readable, mark_as_writeable +from metagpt.logs import logger +from metagpt.utils.common import download_model + + +def load_cv_model(device: str = "cpu") -> any: + ocr_detection = pipeline(Tasks.ocr_detection, model="damo/cv_resnet18_ocr-detection-line-level_damo") + ocr_recognition = pipeline(Tasks.ocr_recognition, model="damo/cv_convnextTiny_ocr-recognition-document_damo") + file_url = "https://huggingface.co/ShilongLiu/GroundingDINO/blob/main/groundingdino_swint_ogc.pth" + target_folder = Path(f"{DEFAULT_WORKSPACE_ROOT}/weights") + file_path = download_model(file_url, target_folder) + groundingdino_model = load_model(file_path, device=device).eval() + return ocr_detection, ocr_recognition, groundingdino_model + + +class AndroidExtEnv(ExtEnv): + device_id: Optional[str] = Field(default=None) + screenshot_dir: Optional[Path] = Field(default=None) + xml_dir: Optional[Path] = Field(default=None) + width: int = Field(default=720, description="device screen width") + height: int = Field(default=1080, description="device screen height") + ocr_detection: any = Field(default=None, description="ocr detection model") + ocr_recognition: any = Field(default=None, description="ocr recognition model") + groundingdino_model: any = Field(default=None, description="clip groundingdino model") + + def __init__(self, **data: Any): + super().__init__(**data) + device_id = data.get("device_id") + self.ocr_detection, self.ocr_recognition, self.groundingdino_model = load_cv_model() + if device_id: + devices = self.list_devices() + if device_id not in devices: + raise RuntimeError(f"device-id: {device_id} not found") + (width, height) = self.device_shape + self.width = data.get("width", width) + self.height = data.get("height", height) + self.create_device_path(self.screenshot_dir) + self.create_device_path(self.xml_dir) + + def reset( + self, + *, + seed: Optional[int] = None, + options: Optional[dict[str, Any]] = None, + ) -> tuple[dict[str, Any], dict[str, Any]]: + super().reset(seed=seed, options=options) + + obs = self._get_obs() + + return obs, {} + + def _get_obs(self) -> dict[str, EnvObsValType]: + pass + + def observe(self, obs_params: Optional[EnvObsParams] = None) -> Any: + obs_type = obs_params.obs_type if obs_params else EnvObsType.NONE + if obs_type == EnvObsType.NONE: + pass + elif obs_type == EnvObsType.GET_SCREENSHOT: + obs = self.get_screenshot(ss_name=obs_params.ss_name, local_save_dir=obs_params.local_save_dir) + elif obs_type == EnvObsType.GET_XML: + obs = self.get_xml(xml_name=obs_params.xml_name, local_save_dir=obs_params.local_save_dir) + return obs + + def step(self, action: EnvAction) -> tuple[dict[str, Any], float, bool, bool, dict[str, Any]]: + res = self._execute_env_action(action) + + obs = {} + + ret = (obs, 1.0, False, False, {"res": res}) + return ret + + def _execute_env_action(self, action: EnvAction): + action_type = action.action_type + res = None + if action_type == EnvActionType.NONE: + pass + elif action_type == EnvActionType.SYSTEM_BACK: + res = self.system_back() + elif action_type == EnvActionType.SYSTEM_TAP: + res = self.system_tap(x=action.coord[0], y=action.coord[1]) + elif action_type == EnvActionType.USER_INPUT: + res = self.user_input(input_txt=action.input_txt) + elif action_type == EnvActionType.USER_LONGPRESS: + res = self.user_longpress(x=action.coord[0], y=action.coord[1]) + elif action_type == EnvActionType.USER_SWIPE: + res = self.user_swipe(x=action.coord[0], y=action.coord[1], orient=action.orient, dist=action.dist) + elif action_type == EnvActionType.USER_SWIPE_TO: + res = self.user_swipe_to(start=action.coord, end=action.tgt_coord) + return res + + @property + def adb_prefix_si(self): + """adb cmd prefix with `device_id` and `shell input`""" + return f"adb -s {self.device_id} shell input " + + @property + def adb_prefix_shell(self): + """adb cmd prefix with `device_id` and `shell`""" + return f"adb -s {self.device_id} shell " + + @property + def adb_prefix(self): + """adb cmd prefix with `device_id`""" + return f"adb -s {self.device_id} " + + def execute_adb_with_cmd(self, adb_cmd: str) -> str: + adb_cmd = adb_cmd.replace("\\", "/") + res = subprocess.run(adb_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) + exec_res = ADB_EXEC_FAIL + if not res.returncode: + exec_res = res.stdout.strip() + return exec_res + + def create_device_path(self, folder_path: Path): + adb_cmd = f"{self.adb_prefix_shell} mkdir {folder_path} -p" + res = self.execute_adb_with_cmd(adb_cmd) + if res == ADB_EXEC_FAIL: + raise RuntimeError(f"create device path: {folder_path} failed") + + @property + def device_shape(self) -> tuple[int, int]: + adb_cmd = f"{self.adb_prefix_shell} wm size" + shape = (0, 0) + shape_res = self.execute_adb_with_cmd(adb_cmd) + if shape_res != ADB_EXEC_FAIL: + shape = tuple(map(int, shape_res.split(": ")[1].split("x"))) + return shape + + def list_devices(self): + adb_cmd = "adb devices" + res = self.execute_adb_with_cmd(adb_cmd) + devices = [] + if res != ADB_EXEC_FAIL: + devices = res.split("\n")[1:] + devices = [device.split()[0] for device in devices] + return devices + + @mark_as_readable + def get_screenshot(self, ss_name: str, local_save_dir: Path) -> Path: + """ + ss_name: screenshot file name + local_save_dir: local dir to store image from virtual machine + """ + assert self.screenshot_dir + ss_remote_path = Path(self.screenshot_dir).joinpath(f"{ss_name}.png") + ss_cmd = f"{self.adb_prefix_shell} screencap -p {ss_remote_path}" + ss_res = self.execute_adb_with_cmd(ss_cmd) + time.sleep(0.1) + res = ADB_EXEC_FAIL + if ss_res != ADB_EXEC_FAIL: + ss_local_path = Path(local_save_dir).joinpath(f"{ss_name}.png") + pull_cmd = f"{self.adb_prefix} pull {ss_remote_path} {ss_local_path}" + pull_res = self.execute_adb_with_cmd(pull_cmd) + time.sleep(0.1) + if pull_res != ADB_EXEC_FAIL: + res = ss_local_path + else: + ss_cmd = f"{self.adb_prefix_shell} rm /sdcard/{ss_name}.png" + ss_res = self.execute_adb_with_cmd(ss_cmd) + time.sleep(0.1) + ss_cmd = f"{self.adb_prefix_shell} screencap -p /sdcard/{ss_name}.png" + ss_res = self.execute_adb_with_cmd(ss_cmd) + time.sleep(0.1) + ss_cmd = f"{self.adb_prefix} pull /sdcard/{ss_name}.png {self.screenshot_dir}" + ss_res = self.execute_adb_with_cmd(ss_cmd) + image_path = Path(f"{self.screenshot_dir}/{ss_name}.png") + res = image_path + return Path(res) + + @mark_as_readable + def get_xml(self, xml_name: str, local_save_dir: Path) -> Path: + xml_remote_path = Path(self.xml_dir).joinpath(f"{xml_name}.xml") + dump_cmd = f"{self.adb_prefix_shell} uiautomator dump {xml_remote_path}" + xml_res = self.execute_adb_with_cmd(dump_cmd) + + res = ADB_EXEC_FAIL + if xml_res != ADB_EXEC_FAIL: + xml_local_path = Path(local_save_dir).joinpath(f"{xml_name}.xml") + pull_cmd = f"{self.adb_prefix} pull {xml_remote_path} {xml_local_path}" + pull_res = self.execute_adb_with_cmd(pull_cmd) + if pull_res != ADB_EXEC_FAIL: + res = xml_local_path + return Path(res) + + @mark_as_writeable + def system_back(self) -> str: + adb_cmd = f"{self.adb_prefix_si} keyevent KEYCODE_BACK" + back_res = self.execute_adb_with_cmd(adb_cmd) + return back_res + + @mark_as_writeable + def system_tap(self, x: int, y: int) -> str: + adb_cmd = f"{self.adb_prefix_si} tap {x} {y}" + tap_res = self.execute_adb_with_cmd(adb_cmd) + return tap_res + + @mark_as_writeable + def user_input(self, input_txt: str) -> str: + input_txt = input_txt.replace(" ", "%s").replace("'", "") + adb_cmd = f"{self.adb_prefix_si} text {input_txt}" + input_res = self.execute_adb_with_cmd(adb_cmd) + return input_res + + @mark_as_writeable + def user_longpress(self, x: int, y: int, duration: int = 500) -> str: + adb_cmd = f"{self.adb_prefix_si} swipe {x} {y} {x} {y} {duration}" + press_res = self.execute_adb_with_cmd(adb_cmd) + return press_res + + @mark_as_writeable + def user_swipe(self, x: int, y: int, orient: str = "up", dist: str = "medium", if_quick: bool = False) -> str: + dist_unit = int(self.width / 10) + if dist == "long": + dist_unit *= 3 + elif dist == "medium": + dist_unit *= 2 + + if orient == "up": + offset = 0, -2 * dist_unit + elif orient == "down": + offset = 0, 2 * dist_unit + elif orient == "left": + offset = -1 * dist_unit, 0 + elif orient == "right": + offset = dist_unit, 0 + else: + return ADB_EXEC_FAIL + + duration = 100 if if_quick else 400 + adb_cmd = f"{self.adb_prefix_si} swipe {x} {y} {x + offset[0]} {y + offset[1]} {duration}" + swipe_res = self.execute_adb_with_cmd(adb_cmd) + return swipe_res + + @mark_as_writeable + def user_swipe_to(self, start: tuple[int, int], end: tuple[int, int], duration: int = 400) -> str: + adb_cmd = f"{self.adb_prefix_si} swipe {start[0]} {start[1]} {end[0]} {end[1]} {duration}" + swipe_res = self.execute_adb_with_cmd(adb_cmd) + return swipe_res + + @mark_as_writeable + def user_exit(self) -> str: + adb_cmd = f"{self.adb_prefix_shell} am start -a android.intent.action.MAIN -c android.intent.category.HOME" + exit_res = self.execute_adb_with_cmd(adb_cmd) + return exit_res + + def _ocr_text(self, text: str) -> list: + image = self.get_screenshot("screenshot", self.screenshot_dir) + iw, ih = Image.open(image).size + x, y = self.device_shape + if iw > ih: + x, y = y, x + iw, ih = ih, iw + in_coordinate, out_coordinate = ocr(image, text, self.ocr_detection, self.ocr_recognition, iw, ih) + output_list = [in_coordinate, out_coordinate, x, y, iw, ih, image] + return output_list + + @mark_as_writeable + def user_open_app(self, app_name: str) -> str: + ocr_result = self._ocr_text(app_name) + in_coordinate, _, x, y, iw, ih = ( + ocr_result[0], + ocr_result[1], + ocr_result[2], + ocr_result[3], + ocr_result[4], + ocr_result[5], + ) + if len(in_coordinate) == 0: + logger.info(f"No App named {app_name}.") + return "no app here" + else: + tap_coordinate = [ + (in_coordinate[0][0] + in_coordinate[0][2]) / 2, + (in_coordinate[0][1] + in_coordinate[0][3]) / 2, + ] + tap_coordinate = [round(tap_coordinate[0] / iw, 2), round(tap_coordinate[1] / ih, 2)] + return self.system_tap(tap_coordinate[0] * x, (tap_coordinate[1] - round(50 / y, 2)) * y) + + @mark_as_writeable + def user_click_text(self, text: str) -> str: + ocr_result = self._ocr_text(text) + in_coordinate, out_coordinate, x, y, iw, ih, _ = ( + ocr_result[0], + ocr_result[1], + ocr_result[2], + ocr_result[3], + ocr_result[4], + ocr_result[5], + ocr_result[6], + ) + if len(out_coordinate) == 0: + logger.info( + f'Failed to execute action click text ({text}). The text "{text}" is not detected in the screenshot.' + ) + elif len(out_coordinate) == 1: + tap_coordinate = [ + (in_coordinate[0][0] + in_coordinate[0][2]) / 2, + (in_coordinate[0][1] + in_coordinate[0][3]) / 2, + ] + tap_coordinate = [round(tap_coordinate[0] / iw, 2), round(tap_coordinate[1] / ih, 2)] + return self.system_tap(tap_coordinate[0] * x, tap_coordinate[1] * y) + else: + logger.info( + f'Failed to execute action click text ({text}). There are too many text "{text}" in the screenshot.' + ) + + @mark_as_writeable + def user_stop(self): + logger.info("Successful execution of tasks") + + @mark_as_writeable + def user_click_icon(self, icon_shape_color: str) -> str: + screenshot_path = self.get_screenshot("screenshot", self.screenshot_dir) + image = screenshot_path + iw, ih = Image.open(image).size + x, y = self.device_shape + if iw > ih: + x, y = y, x + iw, ih = ih, iw + in_coordinate, out_coordinate = det(image, "icon", self.groundingdino_model) # 检测icon + if len(out_coordinate) == 1: # only one icon + tap_coordinate = [ + (in_coordinate[0][0] + in_coordinate[0][2]) / 2, + (in_coordinate[0][1] + in_coordinate[0][3]) / 2, + ] + tap_coordinate = [round(tap_coordinate[0] / iw, 2), round(tap_coordinate[1] / ih, 2)] + return self.system_tap(tap_coordinate[0] * x, tap_coordinate[1] * y) + + else: + temp_file = Path(f"{DEFAULT_WORKSPACE_ROOT}/temp") + temp_file.mkdir(parents=True, exist_ok=True) + hash_table, clip_filter = [], [] + for i, (td, box) in enumerate(zip(in_coordinate, out_coordinate)): + if crop_for_clip(image, td, i, temp_file): + hash_table.append(td) + crop_image = f"{i}.png" + clip_filter.append(temp_file.joinpath(crop_image)) + clip_model, clip_preprocess = clip.load("ViT-B/32") # FIXME: device=device + clip_filter = clip_for_icon(clip_model, clip_preprocess, clip_filter, icon_shape_color) + final_box = hash_table[clip_filter] + tap_coordinate = [(final_box[0] + final_box[2]) / 2, (final_box[1] + final_box[3]) / 2] + tap_coordinate = [round(tap_coordinate[0] / iw, 2), round(tap_coordinate[1] / ih, 2)] + print(tap_coordinate[0] * x, tap_coordinate[1] * y) + return self.system_tap(tap_coordinate[0] * x, tap_coordinate[1] * y) diff --git a/metagpt/environment/android_env/const.py b/metagpt/environment/android/const.py similarity index 100% rename from metagpt/environment/android_env/const.py rename to metagpt/environment/android/const.py diff --git a/metagpt/environment/android/env_space.py b/metagpt/environment/android/env_space.py new file mode 100644 index 000000000..9580e3a7d --- /dev/null +++ b/metagpt/environment/android/env_space.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : + +from pathlib import Path +from typing import Union + +import numpy as np +import numpy.typing as npt +from gymnasium import spaces +from pydantic import ConfigDict, Field, field_validator + +from metagpt.environment.base_env_space import ( + BaseEnvAction, + BaseEnvActionType, + BaseEnvObsParams, + BaseEnvObsType, +) + + +class EnvActionType(BaseEnvActionType): + NONE = 0 # no action to run, just get observation + + SYSTEM_BACK = 1 + SYSTEM_TAP = 2 + USER_INPUT = 3 + USER_LONGPRESS = 4 + USER_SWIPE = 5 + USER_SWIPE_TO = 6 + + +class EnvAction(BaseEnvAction): + model_config = ConfigDict(arbitrary_types_allowed=True) + + action_type: int = Field(default=EnvActionType.NONE, description="action type") + coord: npt.NDArray[np.int64] = Field( + default_factory=lambda: np.zeros(2, dtype=np.int64), description="operation coordinate" + ) + tgt_coord: npt.NDArray[np.int64] = Field( + default_factory=lambda: np.zeros(2, dtype=np.int64), description="target operation coordinate" + ) + input_txt: str = Field(default="", description="user input text") + orient: str = Field(default="up", description="swipe orient") + dist: str = Field(default="medium", description="swipe dist") + + @field_validator("coord", "tgt_coord", mode="before") + @classmethod + def check_coord(cls, coord) -> npt.NDArray[np.int64]: + if not isinstance(coord, np.ndarray): + return np.array(coord) + + +class EnvObsType(BaseEnvObsType): + NONE = 0 # get whole observation from env + + GET_SCREENSHOT = 1 + GET_XML = 2 + + +class EnvObsParams(BaseEnvObsParams): + model_config = ConfigDict(arbitrary_types_allowed=True) + + obs_type: int = Field(default=EnvObsType.NONE, description="observation type") + ss_name: str = Field(default="", description="screenshot file name") + xml_name: str = Field(default="", description="xml file name") + local_save_dir: Union[str, Path] = Field(default="", description="local dir to save file") + + +EnvObsValType = str + + +def get_observation_space() -> spaces.Dict: + space = spaces.Dict({"screenshot": spaces.Text(256), "xml": spaces.Text(256)}) + return space + + +def get_action_space(device_shape: tuple[int, int]) -> spaces.Dict: + space = spaces.Dict( + { + "action_type": spaces.Discrete(len(EnvActionType)), + "coord": spaces.Box( + np.array([0, 0], dtype=np.int64), np.array([device_shape[0], device_shape[1]], dtype=np.int64) + ), + "tgt_coord": spaces.Box( + np.array([0, 0], dtype=np.int64), np.array([device_shape[0], device_shape[1]], dtype=np.int64) + ), + "input_txt": spaces.Text(256), + "orient": spaces.Text(16), + "dist": spaces.Text(16), + } + ) + return space diff --git a/metagpt/environment/android/grounding_dino_config.py b/metagpt/environment/android/grounding_dino_config.py new file mode 100644 index 000000000..9158d5f62 --- /dev/null +++ b/metagpt/environment/android/grounding_dino_config.py @@ -0,0 +1,43 @@ +batch_size = 1 +modelname = "groundingdino" +backbone = "swin_T_224_1k" +position_embedding = "sine" +pe_temperatureH = 20 +pe_temperatureW = 20 +return_interm_indices = [1, 2, 3] +backbone_freeze_keywords = None +enc_layers = 6 +dec_layers = 6 +pre_norm = False +dim_feedforward = 2048 +hidden_dim = 256 +dropout = 0.0 +nheads = 8 +num_queries = 900 +query_dim = 4 +num_patterns = 0 +num_feature_levels = 4 +enc_n_points = 4 +dec_n_points = 4 +two_stage_type = "standard" +two_stage_bbox_embed_share = False +two_stage_class_embed_share = False +transformer_activation = "relu" +dec_pred_bbox_embed_share = True +dn_box_noise_scale = 1.0 +dn_label_noise_ratio = 0.5 +dn_label_coef = 1.0 +dn_bbox_coef = 1.0 +embed_init_tgt = True +dn_labelbook_size = 2000 +max_text_len = 256 +text_encoder_type = "bert-base-uncased" +use_text_enhancer = True +use_fusion_layer = True +use_checkpoint = True +use_transformer_ckpt = True +use_text_cross_attention = True +text_dropout = 0.0 +fusion_dropout = 0.0 +fusion_droppath = 0.1 +sub_sentence_present = True diff --git a/metagpt/environment/android/text_icon_localization.py b/metagpt/environment/android/text_icon_localization.py new file mode 100644 index 000000000..e8886b540 --- /dev/null +++ b/metagpt/environment/android/text_icon_localization.py @@ -0,0 +1,368 @@ +# The code in this file was modified by MobileAgent +# https://github.com/X-PLUG/MobileAgent.git + +import math +from pathlib import Path + +import clip +import cv2 +import groundingdino.datasets.transforms as T +import numpy as np +import torch +from groundingdino.models import build_model +from groundingdino.util.slconfig import SLConfig +from groundingdino.util.utils import clean_state_dict, get_phrases_from_posmap +from PIL import Image + +################################## text_localization using ocr ####################### + + +def crop_image(img: any, position: any) -> any: + def distance(x1, y1, x2, y2): + return math.sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2)) + + position = position.tolist() + for i in range(4): + for j in range(i + 1, 4): + if position[i][0] > position[j][0]: + tmp = position[j] + position[j] = position[i] + position[i] = tmp + if position[0][1] > position[1][1]: + tmp = position[0] + position[0] = position[1] + position[1] = tmp + + if position[2][1] > position[3][1]: + tmp = position[2] + position[2] = position[3] + position[3] = tmp + + x1, y1 = position[0][0], position[0][1] + x2, y2 = position[2][0], position[2][1] + x3, y3 = position[3][0], position[3][1] + x4, y4 = position[1][0], position[1][1] + + corners = np.zeros((4, 2), np.float32) + corners[0] = [x1, y1] + corners[1] = [x2, y2] + corners[2] = [x4, y4] + corners[3] = [x3, y3] + + img_width = distance((x1 + x4) / 2, (y1 + y4) / 2, (x2 + x3) / 2, (y2 + y3) / 2) + img_height = distance((x1 + x2) / 2, (y1 + y2) / 2, (x4 + x3) / 2, (y4 + y3) / 2) + + corners_trans = np.zeros((4, 2), np.float32) + corners_trans[0] = [0, 0] + corners_trans[1] = [img_width - 1, 0] + corners_trans[2] = [0, img_height - 1] + corners_trans[3] = [img_width - 1, img_height - 1] + + transform = cv2.getPerspectiveTransform(corners, corners_trans) + dst = cv2.warpPerspective(img, transform, (int(img_width), int(img_height))) + return dst + + +def calculate_size(box: any) -> any: + return (box[2] - box[0]) * (box[3] - box[1]) + + +def order_point(cooperation: any) -> any: + arr = np.array(cooperation).reshape([4, 2]) + sum_ = np.sum(arr, 0) + centroid = sum_ / arr.shape[0] + theta = np.arctan2(arr[:, 1] - centroid[1], arr[:, 0] - centroid[0]) + sort_points = arr[np.argsort(theta)] + sort_points = sort_points.reshape([4, -1]) + if sort_points[0][0] > centroid[0]: + sort_points = np.concatenate([sort_points[3:], sort_points[:3]]) + sort_points = sort_points.reshape([4, 2]).astype("float32") + return sort_points + + +def longest_common_substring_length(str1: str, str2: str) -> int: + m = len(str1) + n = len(str2) + dp = [[0] * (n + 1) for _ in range(m + 1)] + for i in range(1, m + 1): + for j in range(1, n + 1): + if str1[i - 1] == str2[j - 1]: + dp[i][j] = dp[i - 1][j - 1] + 1 + else: + dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + + return dp[m][n] + + +def ocr(image_path: Path, prompt: str, ocr_detection: any, ocr_recognition: any, x: int, y: int) -> any: + text_data = [] + coordinate = [] + image = Image.open(image_path) + iw, ih = image.size + + image_full = cv2.imread(str(image_path)) + det_result = ocr_detection(image_full) + det_result = det_result["polygons"] + for i in range(det_result.shape[0]): + pts = order_point(det_result[i]) + image_crop = crop_image(image_full, pts) + result = ocr_recognition(image_crop)["text"][0] + + if result == prompt: + box = [int(e) for e in list(pts.reshape(-1))] + box = [box[0], box[1], box[4], box[5]] + + if calculate_size(box) > 0.05 * iw * ih: + continue + + text_data.append( + [ + int(max(0, box[0] - 10) * x / iw), + int(max(0, box[1] - 10) * y / ih), + int(min(box[2] + 10, iw) * x / iw), + int(min(box[3] + 10, ih) * y / ih), + ] + ) + coordinate.append( + [ + int(max(0, box[0] - 300) * x / iw), + int(max(0, box[1] - 400) * y / ih), + int(min(box[2] + 300, iw) * x / iw), + int(min(box[3] + 400, ih) * y / ih), + ] + ) + + max_length = 0 + if len(text_data) == 0: + for i in range(det_result.shape[0]): + pts = order_point(det_result[i]) + image_crop = crop_image(image_full, pts) + result = ocr_recognition(image_crop)["text"][0] + + if len(result) < 0.3 * len(prompt): + continue + + if result in prompt: + now_length = len(result) + else: + now_length = longest_common_substring_length(result, prompt) + + if now_length > max_length: + max_length = now_length + box = [int(e) for e in list(pts.reshape(-1))] + box = [box[0], box[1], box[4], box[5]] + + text_data = [ + [ + int(max(0, box[0] - 10) * x / iw), + int(max(0, box[1] - 10) * y / ih), + int(min(box[2] + 10, iw) * x / iw), + int(min(box[3] + 10, ih) * y / ih), + ] + ] + coordinate = [ + [ + int(max(0, box[0] - 300) * x / iw), + int(max(0, box[1] - 400) * y / ih), + int(min(box[2] + 300, iw) * x / iw), + int(min(box[3] + 400, ih) * y / ih), + ] + ] + + if len(prompt) <= 10: + if max_length >= 0.8 * len(prompt): + return text_data, coordinate + else: + return [], [] + elif (len(prompt) > 10) and (len(prompt) <= 20): + if max_length >= 0.5 * len(prompt): + return text_data, coordinate + else: + return [], [] + else: + if max_length >= 0.4 * len(prompt): + return text_data, coordinate + else: + return [], [] + + else: + return text_data, coordinate + + +################################## icon_localization using clip ####################### + + +def calculate_iou(box1: list, box2: list) -> float: + x_a = max(box1[0], box2[0]) + y_a = max(box1[1], box2[1]) + x_b = min(box1[2], box2[2]) + y_b = min(box1[3], box2[3]) + + inter_area = max(0, x_b - x_a) * max(0, y_b - y_a) + box1_area = (box1[2] - box1[0]) * (box1[3] - box1[1]) + box2_area = (box2[2] - box2[0]) * (box2[3] - box2[1]) + union_area = box1_area + box2_area - inter_area + iou = inter_area / union_area + + return iou + + +def in_box(box: list, target: list) -> bool: + if (box[0] > target[0]) and (box[1] > target[1]) and (box[2] < target[2]) and (box[3] < target[3]): + return True + else: + return False + + +def crop_for_clip(image: any, box: any, i: int, temp_file: Path) -> bool: + image = Image.open(image) + w, h = image.size + bound = [0, 0, w, h] + if in_box(box, bound): + cropped_image = image.crop(box) + cropped_image.save(temp_file.joinpath(f"{i}.png")) + return True + else: + return False + + +def clip_for_icon(clip_model: any, clip_preprocess: any, images: any, prompt: str) -> any: + image_features = [] + for image_file in images: + image = clip_preprocess(Image.open(image_file)).unsqueeze(0).to(next(clip_model.parameters()).device) + image_feature = clip_model.encode_image(image) + image_features.append(image_feature) + image_features = torch.cat(image_features) + + text = clip.tokenize([prompt]).to(next(clip_model.parameters()).device) + text_features = clip_model.encode_text(text) + + image_features /= image_features.norm(dim=-1, keepdim=True) + text_features /= text_features.norm(dim=-1, keepdim=True) + similarity = (100.0 * image_features @ text_features.T).softmax(dim=0).squeeze(0) + _, max_pos = torch.max(similarity, dim=0) + pos = max_pos.item() + + return pos + + +def transform_image(image_pil: any) -> any: + transform = T.Compose( + [ + T.RandomResize([800], max_size=1333), + T.ToTensor(), + T.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]), + ] + ) + image, _ = transform(image_pil, None) # 3, h, w + return image + + +def load_model(model_checkpoint_path: Path, device: str) -> any: + model_config_path = "grounding_dino_config.py" + args = SLConfig.fromfile(model_config_path) + args.device = device + model = build_model(args) + checkpoint = torch.load(model_checkpoint_path, map_location="cpu") + load_res = model.load_state_dict(clean_state_dict(checkpoint["model"]), strict=False) + print(load_res) + _ = model.eval() + return model + + +def get_grounding_output( + model: any, image: any, caption: str, box_threshold: any, text_threshold: any, with_logits: bool = True +) -> any: + caption = caption.lower() + caption = caption.strip() + if not caption.endswith("."): + caption = caption + "." + + with torch.no_grad(): + outputs = model(image[None], captions=[caption]) + logits = outputs["pred_logits"].cpu().sigmoid()[0] # (nq, 256) + boxes = outputs["pred_boxes"].cpu()[0] # (nq, 4) + logits.shape[0] + + logits_filt = logits.clone() + boxes_filt = boxes.clone() + filt_mask = logits_filt.max(dim=1)[0] > box_threshold + logits_filt = logits_filt[filt_mask] # num_filt, 256 + boxes_filt = boxes_filt[filt_mask] # num_filt, 4 + logits_filt.shape[0] + + tokenlizer = model.tokenizer + tokenized = tokenlizer(caption) + + pred_phrases = [] + scores = [] + for logit, box in zip(logits_filt, boxes_filt): + pred_phrase = get_phrases_from_posmap(logit > text_threshold, tokenized, tokenlizer) + if with_logits: + pred_phrases.append(pred_phrase + f"({str(logit.max().item())[:4]})") + else: + pred_phrases.append(pred_phrase) + scores.append(logit.max().item()) + + return boxes_filt, torch.Tensor(scores), pred_phrases + + +def remove_boxes(boxes_filt: any, size: any, iou_threshold: float = 0.5) -> any: + boxes_to_remove = set() + + for i in range(len(boxes_filt)): + if calculate_size(boxes_filt[i]) > 0.05 * size[0] * size[1]: + boxes_to_remove.add(i) + for j in range(len(boxes_filt)): + if calculate_size(boxes_filt[j]) > 0.05 * size[0] * size[1]: + boxes_to_remove.add(j) + if i == j: + continue + if i in boxes_to_remove or j in boxes_to_remove: + continue + iou = calculate_iou(boxes_filt[i], boxes_filt[j]) + if iou >= iou_threshold: + boxes_to_remove.add(j) + + boxes_filt = [box for idx, box in enumerate(boxes_filt) if idx not in boxes_to_remove] + + return boxes_filt + + +def det( + input_image: any, + text_prompt: str, + groundingdino_model: any, + box_threshold: float = 0.05, + text_threshold: float = 0.5, +) -> any: + image = Image.open(input_image) + size = image.size + + image_pil = image.convert("RGB") + image = np.array(image_pil) + + transformed_image = transform_image(image_pil) + boxes_filt, scores, pred_phrases = get_grounding_output( + groundingdino_model, transformed_image, text_prompt, box_threshold, text_threshold + ) + + H, W = size[1], size[0] + for i in range(boxes_filt.size(0)): + boxes_filt[i] = boxes_filt[i] * torch.Tensor([W, H, W, H]) + boxes_filt[i][:2] -= boxes_filt[i][2:] / 2 + boxes_filt[i][2:] += boxes_filt[i][:2] + + boxes_filt = boxes_filt.cpu().int().tolist() + filtered_boxes = remove_boxes(boxes_filt, size) # [:9] + coordinate = [] + image_data = [] + for box in filtered_boxes: + image_data.append( + [max(0, box[0] - 10), max(0, box[1] - 10), min(box[2] + 10, size[0]), min(box[3] + 10, size[1])] + ) + coordinate.append( + [max(0, box[0] - 25), max(0, box[1] - 25), min(box[2] + 25, size[0]), min(box[3] + 25, size[1])] + ) + + return image_data, coordinate diff --git a/metagpt/environment/android_env/android_ext_env.py b/metagpt/environment/android_env/android_ext_env.py deleted file mode 100644 index b81b2cd26..000000000 --- a/metagpt/environment/android_env/android_ext_env.py +++ /dev/null @@ -1,157 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# @Desc : The Android external environment to integrate with Android apps - -import subprocess -from pathlib import Path -from typing import Any, Optional - -from pydantic import Field - -from metagpt.environment.android_env.const import ADB_EXEC_FAIL -from metagpt.environment.base_env import ExtEnv, mark_as_readable, mark_as_writeable - - -class AndroidExtEnv(ExtEnv): - device_id: Optional[str] = Field(default=None) - screenshot_dir: Optional[Path] = Field(default=None) - xml_dir: Optional[Path] = Field(default=None) - width: int = Field(default=720, description="device screen width") - height: int = Field(default=1080, description="device screen height") - - def __init__(self, **data: Any): - super().__init__(**data) - if data.get("device_id"): - (width, height) = self.device_shape - self.width = data.get("width", width) - self.height = data.get("height", height) - - @property - def adb_prefix_si(self): - """adb cmd prefix with `device_id` and `shell input`""" - return f"adb -s {self.device_id} shell input " - - @property - def adb_prefix_shell(self): - """adb cmd prefix with `device_id` and `shell`""" - return f"adb -s {self.device_id} shell " - - @property - def adb_prefix(self): - """adb cmd prefix with `device_id`""" - return f"adb -s {self.device_id} " - - def execute_adb_with_cmd(self, adb_cmd: str) -> str: - res = subprocess.run(adb_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) - exec_res = ADB_EXEC_FAIL - if not res.returncode: - exec_res = res.stdout.strip() - return exec_res - - @property - def device_shape(self) -> tuple[int, int]: - adb_cmd = f"{self.adb_prefix_shell} wm size" - shape = (0, 0) - shape_res = self.execute_adb_with_cmd(adb_cmd) - if shape_res != ADB_EXEC_FAIL: - shape = tuple(map(int, shape_res.split(": ")[1].split("x"))) - return shape - - def list_devices(self): - adb_cmd = "adb devices" - res = self.execute_adb_with_cmd(adb_cmd) - devices = [] - if res != ADB_EXEC_FAIL: - devices = res.split("\n")[1:] - devices = [device.split()[0] for device in devices] - return devices - - @mark_as_readable - def get_screenshot(self, ss_name: str, local_save_dir: Path) -> Path: - """ - ss_name: screenshot file name - local_save_dir: local dir to store image from virtual machine - """ - assert self.screenshot_dir - ss_remote_path = Path(self.screenshot_dir).joinpath(f"{ss_name}.png") - ss_cmd = f"{self.adb_prefix_shell} screencap -p {ss_remote_path}" - ss_res = self.execute_adb_with_cmd(ss_cmd) - - res = ADB_EXEC_FAIL - if ss_res != ADB_EXEC_FAIL: - ss_local_path = Path(local_save_dir).joinpath(f"{ss_name}.png") - pull_cmd = f"{self.adb_prefix} pull {ss_remote_path} {ss_local_path}" - pull_res = self.execute_adb_with_cmd(pull_cmd) - if pull_res != ADB_EXEC_FAIL: - res = ss_local_path - return Path(res) - - @mark_as_readable - def get_xml(self, xml_name: str, local_save_dir: Path) -> Path: - xml_remote_path = Path(self.xml_dir).joinpath(f"{xml_name}.xml") - dump_cmd = f"{self.adb_prefix_shell} uiautomator dump {xml_remote_path}" - xml_res = self.execute_adb_with_cmd(dump_cmd) - - res = ADB_EXEC_FAIL - if xml_res != ADB_EXEC_FAIL: - xml_local_path = Path(local_save_dir).joinpath(f"{xml_name}.xml") - pull_cmd = f"{self.adb_prefix} pull {xml_remote_path} {xml_local_path}" - pull_res = self.execute_adb_with_cmd(pull_cmd) - if pull_res != ADB_EXEC_FAIL: - res = xml_local_path - return Path(res) - - @mark_as_writeable - def system_back(self) -> str: - adb_cmd = f"{self.adb_prefix_si} keyevent KEYCODE_BACK" - back_res = self.execute_adb_with_cmd(adb_cmd) - return back_res - - @mark_as_writeable - def system_tap(self, x: int, y: int) -> str: - adb_cmd = f"{self.adb_prefix_si} tap {x} {y}" - tap_res = self.execute_adb_with_cmd(adb_cmd) - return tap_res - - @mark_as_writeable - def user_input(self, input_txt: str) -> str: - input_txt = input_txt.replace(" ", "%s").replace("'", "") - adb_cmd = f"{self.adb_prefix_si} text {input_txt}" - input_res = self.execute_adb_with_cmd(adb_cmd) - return input_res - - @mark_as_writeable - def user_longpress(self, x: int, y: int, duration: int = 500) -> str: - adb_cmd = f"{self.adb_prefix_si} swipe {x} {y} {x} {y} {duration}" - press_res = self.execute_adb_with_cmd(adb_cmd) - return press_res - - @mark_as_writeable - def user_swipe(self, x: int, y: int, orient: str = "up", dist: str = "medium", if_quick: bool = False) -> str: - dist_unit = int(self.width / 10) - if dist == "long": - dist_unit *= 3 - elif dist == "medium": - dist_unit *= 2 - - if orient == "up": - offset = 0, -2 * dist_unit - elif orient == "down": - offset = 0, 2 * dist_unit - elif orient == "left": - offset = -1 * dist_unit, 0 - elif orient == "right": - offset = dist_unit, 0 - else: - return ADB_EXEC_FAIL - - duration = 100 if if_quick else 400 - adb_cmd = f"{self.adb_prefix_si} swipe {x} {y} {x + offset[0]} {y + offset[1]} {duration}" - swipe_res = self.execute_adb_with_cmd(adb_cmd) - return swipe_res - - @mark_as_writeable - def user_swipe_to(self, start: tuple[int, int], end: tuple[int, int], duration: int = 400): - adb_cmd = f"{self.adb_prefix_si} swipe {start[0]} {start[1]} {end[0]} {end[1]} {duration}" - swipe_res = self.execute_adb_with_cmd(adb_cmd) - return swipe_res diff --git a/metagpt/environment/api/env_api.py b/metagpt/environment/api/env_api.py index 1e6df544d..924f6b104 100644 --- a/metagpt/environment/api/env_api.py +++ b/metagpt/environment/api/env_api.py @@ -18,11 +18,11 @@ class EnvAPIAbstract(BaseModel): class EnvAPIRegistry(BaseModel): """the registry to store environment w&r api/interface""" - registry: dict[str, dict[str, Union[dict, Any, str]]] = Field(default=dict(), exclude=True) + registry: dict[str, Callable] = Field(default=dict(), exclude=True) def get(self, api_name: str): if api_name not in self.registry: - raise ValueError + raise KeyError(f"api_name: {api_name} not found") return self.registry.get(api_name) def __getitem__(self, api_name: str) -> Callable: diff --git a/metagpt/environment/base_env.py b/metagpt/environment/base_env.py index 942bf2409..024c46877 100644 --- a/metagpt/environment/base_env.py +++ b/metagpt/environment/base_env.py @@ -3,9 +3,12 @@ # @Desc : base env of executing environment import asyncio +from abc import abstractmethod from enum import Enum from typing import TYPE_CHECKING, Any, Dict, Iterable, Optional, Set, Union +from gymnasium import spaces +from gymnasium.core import ActType, ObsType from pydantic import BaseModel, ConfigDict, Field, SerializeAsAny, model_validator from metagpt.context import Context @@ -14,6 +17,7 @@ from metagpt.environment.api.env_api import ( ReadAPIRegistry, WriteAPIRegistry, ) +from metagpt.environment.base_env_space import BaseEnvAction, BaseEnvObsParams from metagpt.logs import logger from metagpt.schema import Message from metagpt.utils.common import get_function_schema, is_coroutine_func, is_send_to @@ -49,6 +53,11 @@ def mark_as_writeable(func): class ExtEnv(BaseModel): """External Env to integrate actual game environment""" + model_config = ConfigDict(arbitrary_types_allowed=True) + + action_space: spaces.Space[ActType] = Field(default_factory=spaces.Space, exclude=True) + observation_space: spaces.Space[ObsType] = Field(default_factory=spaces.Space, exclude=True) + def _check_api_exist(self, rw_api: Optional[str] = None): if not rw_api: raise ValueError(f"{rw_api} not exists") @@ -61,39 +70,56 @@ class ExtEnv(BaseModel): else: return env_write_api_registry.get_apis() - async def observe(self, env_action: Union[str, EnvAPIAbstract]): + async def read_from_api(self, env_action: Union[str, EnvAPIAbstract]): """get observation from particular api of ExtEnv""" if isinstance(env_action, str): - read_api = env_read_api_registry.get(api_name=env_action)["func"] - self._check_api_exist(read_api) - if is_coroutine_func(read_api): - res = await read_api(self) + env_read_api = env_read_api_registry.get(api_name=env_action)["func"] + self._check_api_exist(env_read_api) + if is_coroutine_func(env_read_api): + res = await env_read_api(self) else: - res = read_api(self) + res = env_read_api(self) elif isinstance(env_action, EnvAPIAbstract): - read_api = env_read_api_registry.get(api_name=env_action.api_name)["func"] - self._check_api_exist(read_api) - if is_coroutine_func(read_api): - res = await read_api(self, *env_action.args, **env_action.kwargs) + env_read_api = env_read_api_registry.get(api_name=env_action.api_name)["func"] + self._check_api_exist(env_read_api) + if is_coroutine_func(env_read_api): + res = await env_read_api(self, *env_action.args, **env_action.kwargs) else: - res = read_api(self, *env_action.args, **env_action.kwargs) + res = env_read_api(self, *env_action.args, **env_action.kwargs) return res - async def step(self, env_action: Union[str, Message, EnvAPIAbstract, list[EnvAPIAbstract]]): + async def write_thru_api(self, env_action: Union[str, Message, EnvAPIAbstract, list[EnvAPIAbstract]]): """execute through particular api of ExtEnv""" res = None if isinstance(env_action, Message): self.publish_message(env_action) elif isinstance(env_action, EnvAPIAbstract): - write_api = env_write_api_registry.get(env_action.api_name)["func"] - self._check_api_exist(write_api) - if is_coroutine_func(write_api): - res = await write_api(self, *env_action.args, **env_action.kwargs) + env_write_api = env_write_api_registry.get(env_action.api_name)["func"] + self._check_api_exist(env_write_api) + if is_coroutine_func(env_write_api): + res = await env_write_api(self, *env_action.args, **env_action.kwargs) else: - res = write_api(self, *env_action.args, **env_action.kwargs) + res = env_write_api(self, *env_action.args, **env_action.kwargs) return res + @abstractmethod + def reset( + self, + *, + seed: Optional[int] = None, + options: Optional[dict[str, Any]] = None, + ) -> tuple[dict[str, Any], dict[str, Any]]: + """Implement this to get init observation""" + + @abstractmethod + def observe(self, obs_params: Optional[BaseEnvObsParams] = None) -> Any: + """Implement this if you want to get partial observation from the env""" + + @abstractmethod + def step(self, action: BaseEnvAction) -> tuple[dict[str, Any], float, bool, bool, dict[str, Any]]: + """Implement this to feed a action and then get new observation from the env""" + class Environment(ExtEnv): """环境,承载一批角色,角色可以向环境发布消息,可以被其他角色观察到 @@ -108,6 +134,20 @@ class Environment(ExtEnv): history: str = "" # For debug context: Context = Field(default_factory=Context, exclude=True) + def reset( + self, + *, + seed: Optional[int] = None, + options: Optional[dict[str, Any]] = None, + ) -> tuple[dict[str, Any], dict[str, Any]]: + pass + + def observe(self, obs_params: Optional[BaseEnvObsParams] = None) -> Any: + pass + + def step(self, action: BaseEnvAction) -> tuple[dict[str, Any], float, bool, bool, dict[str, Any]]: + pass + @model_validator(mode="after") def init_roles(self): self.add_roles(self.roles.values()) diff --git a/metagpt/environment/base_env_space.py b/metagpt/environment/base_env_space.py new file mode 100644 index 000000000..fd0cfa399 --- /dev/null +++ b/metagpt/environment/base_env_space.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : + +from enum import IntEnum + +from pydantic import BaseModel, ConfigDict, Field + + +class BaseEnvActionType(IntEnum): + # # NONE = 0 # no action to run, just get observation + pass + + +class BaseEnvAction(BaseModel): + """env action type and its related params of action functions/apis""" + + model_config = ConfigDict(arbitrary_types_allowed=True) + + action_type: int = Field(default=0, description="action type") + + +class BaseEnvObsType(IntEnum): + # # NONE = 0 # get whole observation from env + pass + + +class BaseEnvObsParams(BaseModel): + """observation params for different EnvObsType to get its observe result""" + + model_config = ConfigDict(arbitrary_types_allowed=True) + + obs_type: int = Field(default=0, description="observation type") diff --git a/metagpt/environment/software_env/__init__.py b/metagpt/environment/minecraft/__init__.py similarity index 100% rename from metagpt/environment/software_env/__init__.py rename to metagpt/environment/minecraft/__init__.py diff --git a/metagpt/environment/minecraft_env/const.py b/metagpt/environment/minecraft/const.py similarity index 100% rename from metagpt/environment/minecraft_env/const.py rename to metagpt/environment/minecraft/const.py diff --git a/metagpt/environment/minecraft_env/minecraft_env.py b/metagpt/environment/minecraft/minecraft_env.py similarity index 97% rename from metagpt/environment/minecraft_env/minecraft_env.py rename to metagpt/environment/minecraft/minecraft_env.py index 6e1800b32..31a48964b 100644 --- a/metagpt/environment/minecraft_env/minecraft_env.py +++ b/metagpt/environment/minecraft/minecraft_env.py @@ -13,13 +13,13 @@ from pydantic import ConfigDict, Field from metagpt.config2 import config as CONFIG from metagpt.environment.base_env import Environment -from metagpt.environment.minecraft_env.const import MC_CKPT_DIR -from metagpt.environment.minecraft_env.minecraft_ext_env import MinecraftExtEnv +from metagpt.environment.minecraft.const import MC_CKPT_DIR +from metagpt.environment.minecraft.minecraft_ext_env import MinecraftExtEnv from metagpt.logs import logger from metagpt.utils.common import load_mc_skills_code, read_json_file, write_json_file -class MinecraftEnv(Environment, MinecraftExtEnv): +class MinecraftEnv(MinecraftExtEnv, Environment): """MinecraftEnv, including shared memory of cache and information between roles""" model_config = ConfigDict(arbitrary_types_allowed=True) @@ -282,7 +282,7 @@ class MinecraftEnv(Environment, MinecraftExtEnv): position = event["status"]["position"] blocks.append(block) positions.append(position) - new_events = self.step( + new_events = self._step( f"await givePlacedItemBack(bot, {json.dumps(blocks)}, {json.dumps(positions)})", programs=self.programs, ) @@ -323,7 +323,7 @@ class MinecraftEnv(Environment, MinecraftExtEnv): Exception: If there is an issue retrieving events. """ try: - self.reset( + self._reset( options={ "mode": "soft", "wait_ticks": 20, @@ -332,13 +332,13 @@ class MinecraftEnv(Environment, MinecraftExtEnv): # difficulty = "easy" if len(self.completed_tasks) > 15 else "peaceful" difficulty = "peaceful" - events = self.step("bot.chat(`/time set ${getNextTime()}`);\n" + f"bot.chat('/difficulty {difficulty}');") + events = self._step("bot.chat(`/time set ${getNextTime()}`);\n" + f"bot.chat('/difficulty {difficulty}');") self.update_event(events) return events except Exception as e: time.sleep(3) # wait for mineflayer to exit # reset bot status here - events = self.reset( + events = self._reset( options={ "mode": "hard", "wait_ticks": 20, @@ -365,7 +365,7 @@ class MinecraftEnv(Environment, MinecraftExtEnv): Exception: If there is an issue retrieving events. """ try: - events = self.step( + events = self._step( code=self.code, programs=self.programs, ) @@ -374,7 +374,7 @@ class MinecraftEnv(Environment, MinecraftExtEnv): except Exception as e: time.sleep(3) # wait for mineflayer to exit # reset bot status here - events = self.reset( + events = self._reset( options={ "mode": "hard", "wait_ticks": 20, diff --git a/metagpt/environment/minecraft_env/minecraft_ext_env.py b/metagpt/environment/minecraft/minecraft_ext_env.py similarity index 88% rename from metagpt/environment/minecraft_env/minecraft_ext_env.py rename to metagpt/environment/minecraft/minecraft_ext_env.py index 3b793079f..0436bc3aa 100644 --- a/metagpt/environment/minecraft_env/minecraft_ext_env.py +++ b/metagpt/environment/minecraft/minecraft_ext_env.py @@ -5,20 +5,21 @@ import json import time -from typing import Optional +from typing import Any, Optional import requests from pydantic import ConfigDict, Field, model_validator from metagpt.environment.base_env import ExtEnv, mark_as_writeable -from metagpt.environment.minecraft_env.const import ( +from metagpt.environment.base_env_space import BaseEnvAction, BaseEnvObsParams +from metagpt.environment.minecraft.const import ( MC_CKPT_DIR, MC_CORE_INVENTORY_ITEMS, MC_CURRICULUM_OB, MC_DEFAULT_WARMUP, METAGPT_ROOT, ) -from metagpt.environment.minecraft_env.process_monitor import SubprocessMonitor +from metagpt.environment.minecraft.process_monitor import SubprocessMonitor from metagpt.logs import logger @@ -38,6 +39,20 @@ class MinecraftExtEnv(ExtEnv): server_paused: bool = Field(default=False) warm_up: dict = Field(default=dict()) + def reset( + self, + *, + seed: Optional[int] = None, + options: Optional[dict[str, Any]] = None, + ) -> tuple[dict[str, Any], dict[str, Any]]: + pass + + def observe(self, obs_params: Optional[BaseEnvObsParams] = None) -> Any: + pass + + def step(self, action: BaseEnvAction) -> tuple[dict[str, Any], float, bool, bool, dict[str, Any]]: + pass + @property def server(self) -> str: return f"{self.server_host}:{self.server_port}" @@ -48,7 +63,7 @@ class MinecraftExtEnv(ExtEnv): self.mineflayer = SubprocessMonitor( commands=[ "node", - METAGPT_ROOT.joinpath("metagpt", "environment", "minecraft_env", "mineflayer", "index.js"), + METAGPT_ROOT.joinpath("metagpt", "environment", "minecraft", "mineflayer", "index.js"), str(self.server_port), ], name="mineflayer", @@ -115,7 +130,7 @@ class MinecraftExtEnv(ExtEnv): return res.json() @mark_as_writeable - def reset(self, *, seed=None, options=None) -> dict: + def _reset(self, *, seed=None, options=None) -> dict: if options is None: options = {} if options.get("inventory", {}) and options.get("mode", "hard") != "hard": @@ -145,7 +160,7 @@ class MinecraftExtEnv(ExtEnv): return json.loads(returned_data) @mark_as_writeable - def step(self, code: str, programs: str = "") -> dict: + def _step(self, code: str, programs: str = "") -> dict: if not self.has_reset: raise RuntimeError("Environment has not been reset yet") self.check_process() diff --git a/metagpt/environment/minecraft_env/mineflayer/.gitignore b/metagpt/environment/minecraft/mineflayer/.gitignore similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/.gitignore rename to metagpt/environment/minecraft/mineflayer/.gitignore diff --git a/metagpt/environment/minecraft_env/mineflayer/.prettierignore b/metagpt/environment/minecraft/mineflayer/.prettierignore similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/.prettierignore rename to metagpt/environment/minecraft/mineflayer/.prettierignore diff --git a/metagpt/environment/minecraft_env/mineflayer/.prettierrc.json b/metagpt/environment/minecraft/mineflayer/.prettierrc.json similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/.prettierrc.json rename to metagpt/environment/minecraft/mineflayer/.prettierrc.json diff --git a/metagpt/environment/minecraft_env/mineflayer/index.js b/metagpt/environment/minecraft/mineflayer/index.js similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/index.js rename to metagpt/environment/minecraft/mineflayer/index.js diff --git a/metagpt/environment/minecraft_env/mineflayer/lib/observation/base.js b/metagpt/environment/minecraft/mineflayer/lib/observation/base.js similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/lib/observation/base.js rename to metagpt/environment/minecraft/mineflayer/lib/observation/base.js diff --git a/metagpt/environment/minecraft_env/mineflayer/lib/observation/chests.js b/metagpt/environment/minecraft/mineflayer/lib/observation/chests.js similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/lib/observation/chests.js rename to metagpt/environment/minecraft/mineflayer/lib/observation/chests.js diff --git a/metagpt/environment/minecraft_env/mineflayer/lib/observation/inventory.js b/metagpt/environment/minecraft/mineflayer/lib/observation/inventory.js similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/lib/observation/inventory.js rename to metagpt/environment/minecraft/mineflayer/lib/observation/inventory.js diff --git a/metagpt/environment/minecraft_env/mineflayer/lib/observation/onChat.js b/metagpt/environment/minecraft/mineflayer/lib/observation/onChat.js similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/lib/observation/onChat.js rename to metagpt/environment/minecraft/mineflayer/lib/observation/onChat.js diff --git a/metagpt/environment/minecraft_env/mineflayer/lib/observation/onError.js b/metagpt/environment/minecraft/mineflayer/lib/observation/onError.js similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/lib/observation/onError.js rename to metagpt/environment/minecraft/mineflayer/lib/observation/onError.js diff --git a/metagpt/environment/minecraft_env/mineflayer/lib/observation/onSave.js b/metagpt/environment/minecraft/mineflayer/lib/observation/onSave.js similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/lib/observation/onSave.js rename to metagpt/environment/minecraft/mineflayer/lib/observation/onSave.js diff --git a/metagpt/environment/minecraft_env/mineflayer/lib/observation/status.js b/metagpt/environment/minecraft/mineflayer/lib/observation/status.js similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/lib/observation/status.js rename to metagpt/environment/minecraft/mineflayer/lib/observation/status.js diff --git a/metagpt/environment/minecraft_env/mineflayer/lib/observation/voxels.js b/metagpt/environment/minecraft/mineflayer/lib/observation/voxels.js similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/lib/observation/voxels.js rename to metagpt/environment/minecraft/mineflayer/lib/observation/voxels.js diff --git a/metagpt/environment/minecraft_env/mineflayer/lib/skillLoader.js b/metagpt/environment/minecraft/mineflayer/lib/skillLoader.js similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/lib/skillLoader.js rename to metagpt/environment/minecraft/mineflayer/lib/skillLoader.js diff --git a/metagpt/environment/minecraft_env/mineflayer/lib/utils.js b/metagpt/environment/minecraft/mineflayer/lib/utils.js similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/lib/utils.js rename to metagpt/environment/minecraft/mineflayer/lib/utils.js diff --git a/metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/.gitignore b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/.gitignore similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/.gitignore rename to metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/.gitignore diff --git a/metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/LICENSE b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/LICENSE similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/LICENSE rename to metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/LICENSE diff --git a/metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/README.md b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/README.md similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/README.md rename to metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/README.md diff --git a/metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/_config.yml b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/_config.yml similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/_config.yml rename to metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/_config.yml diff --git a/metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/docs/api.md b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/docs/api.md similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/docs/api.md rename to metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/docs/api.md diff --git a/metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/examples/collector.js b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/examples/collector.js similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/examples/collector.js rename to metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/examples/collector.js diff --git a/metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/examples/oreMiner.js b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/examples/oreMiner.js similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/examples/oreMiner.js rename to metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/examples/oreMiner.js diff --git a/metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/examples/storageBot.js b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/examples/storageBot.js similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/examples/storageBot.js rename to metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/examples/storageBot.js diff --git a/metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/package.json b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/package.json similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/package.json rename to metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/package.json diff --git a/metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/src/BlockVeins.ts b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/BlockVeins.ts similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/src/BlockVeins.ts rename to metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/BlockVeins.ts diff --git a/metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/src/CollectBlock.ts b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/CollectBlock.ts similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/src/CollectBlock.ts rename to metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/CollectBlock.ts diff --git a/metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/src/Inventory.ts b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/Inventory.ts similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/src/Inventory.ts rename to metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/Inventory.ts diff --git a/metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/src/Targets.ts b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/Targets.ts similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/src/Targets.ts rename to metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/Targets.ts diff --git a/metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/src/TaskQueue.ts b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/TaskQueue.ts similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/src/TaskQueue.ts rename to metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/TaskQueue.ts diff --git a/metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/src/TemporarySubscriber.ts b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/TemporarySubscriber.ts similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/src/TemporarySubscriber.ts rename to metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/TemporarySubscriber.ts diff --git a/metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/src/Util.ts b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/Util.ts similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/src/Util.ts rename to metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/Util.ts diff --git a/metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/src/index.ts b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/index.ts similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/src/index.ts rename to metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/index.ts diff --git a/metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/tsconfig.json b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/tsconfig.json similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/mineflayer-collectblock/tsconfig.json rename to metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/tsconfig.json diff --git a/metagpt/environment/minecraft_env/mineflayer/package.json b/metagpt/environment/minecraft/mineflayer/package.json similarity index 100% rename from metagpt/environment/minecraft_env/mineflayer/package.json rename to metagpt/environment/minecraft/mineflayer/package.json diff --git a/metagpt/environment/minecraft_env/process_monitor.py b/metagpt/environment/minecraft/process_monitor.py similarity index 100% rename from metagpt/environment/minecraft_env/process_monitor.py rename to metagpt/environment/minecraft/process_monitor.py diff --git a/metagpt/environment/stanford_town_env/__init__.py b/metagpt/environment/software/__init__.py similarity index 100% rename from metagpt/environment/stanford_town_env/__init__.py rename to metagpt/environment/software/__init__.py diff --git a/metagpt/environment/software_env/software_env.py b/metagpt/environment/software/software_env.py similarity index 100% rename from metagpt/environment/software_env/software_env.py rename to metagpt/environment/software/software_env.py diff --git a/metagpt/environment/werewolf_env/__init__.py b/metagpt/environment/stanford_town/__init__.py similarity index 100% rename from metagpt/environment/werewolf_env/__init__.py rename to metagpt/environment/stanford_town/__init__.py diff --git a/metagpt/environment/stanford_town/env_space.py b/metagpt/environment/stanford_town/env_space.py new file mode 100644 index 000000000..e100a2952 --- /dev/null +++ b/metagpt/environment/stanford_town/env_space.py @@ -0,0 +1,105 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : + +from typing import Any, Optional, Union + +import numpy as np +import numpy.typing as npt +from gymnasium import spaces +from pydantic import ConfigDict, Field, field_validator + +from metagpt.environment.base_env_space import ( + BaseEnvAction, + BaseEnvActionType, + BaseEnvObsParams, + BaseEnvObsType, +) + + +class EnvActionType(BaseEnvActionType): + NONE = 0 # no action to run, just get observation + + ADD_TILE_EVENT = 1 # Add an event triple to a tile + RM_TILE_EVENT = 2 # Remove an event triple from a tile + TURN_TILE_EVENT_IDLE = 3 # Turn an event triple from a tile into idle + RM_TITLE_SUB_EVENT = 4 # Remove an event triple that has the input subject from a tile + + +class EnvAction(BaseEnvAction): + """env action type and its related params of action functions/apis""" + + model_config = ConfigDict(arbitrary_types_allowed=True) + + action_type: int = Field(default=EnvActionType.NONE, description="action type") + coord: npt.NDArray[np.int64] = Field( + default_factory=lambda: np.zeros(2, dtype=np.int64), description="tile coordinate" + ) + subject: str = Field(default="", description="subject name of first element in event") + event: tuple[str, Optional[str], Optional[str], Optional[str]] = Field( + default=["", None, None, None], description="tile event" + ) + + @field_validator("coord", mode="before") + @classmethod + def check_coord(cls, coord) -> npt.NDArray[np.int64]: + if not isinstance(coord, np.ndarray): + return np.array(coord) + + +class EnvObsType(BaseEnvObsType): + """get part observation with specific params""" + + NONE = 0 # get whole observation from env + + GET_TITLE = 1 # get the tile detail dictionary with given tile coord + TILE_PATH = 2 # get the tile address with given tile coord + TILE_NBR = 3 # get the neighbors of given tile coord and its vision radius + + +class EnvObsParams(BaseEnvObsParams): + """observation params for different EnvObsType""" + + model_config = ConfigDict(arbitrary_types_allowed=True) + + obs_type: int = Field(default=EnvObsType.NONE, description="observation type") + coord: npt.NDArray[np.int64] = Field( + default_factory=lambda: np.zeros(2, dtype=np.int64), description="tile coordinate" + ) + level: str = Field(default="", description="different level of title") + vision_radius: int = Field(default=0, description="the vision radius of current tile") + + @field_validator("coord", mode="before") + @classmethod + def check_coord(cls, coord) -> npt.NDArray[np.int64]: + if not isinstance(coord, np.ndarray): + return np.array(coord) + + +EnvObsValType = Union[list[list[str]], dict[str, set[tuple[int, int]]], list[list[dict[str, Any]]]] + + +def get_observation_space() -> spaces.Dict: + # it's a + space = spaces.Dict( + {"collision_maze": spaces.Discrete(2), "tiles": spaces.Discrete(2), "address_tiles": spaces.Discrete(2)} + ) + + return space + + +def get_action_space(maze_shape: tuple[int, int]) -> spaces.Dict: + """The fields defined by the space correspond to the input parameters of the action except `action_type`""" + space = spaces.Dict( + { + "action_type": spaces.Discrete(len(EnvActionType)), + "coord": spaces.Box( + np.array([0, 0], dtype=np.int64), np.array([maze_shape[0], maze_shape[1]], dtype=np.int64) + ), # coord of the tile + "subject": spaces.Text(256), # the first element of an tile event + "event": spaces.Tuple( + (spaces.Text(256), spaces.Text(256), spaces.Text(256), spaces.Text(256)) + ), # event is a tuple of four str + } + ) + return space diff --git a/metagpt/environment/stanford_town/stanford_town_env.py b/metagpt/environment/stanford_town/stanford_town_env.py new file mode 100644 index 000000000..af8a882b2 --- /dev/null +++ b/metagpt/environment/stanford_town/stanford_town_env.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : MG StanfordTown Env + +from metagpt.environment.base_env import Environment +from metagpt.environment.stanford_town.stanford_town_ext_env import StanfordTownExtEnv + + +class StanfordTownEnv(StanfordTownExtEnv, Environment): + pass diff --git a/metagpt/environment/stanford_town_env/stanford_town_ext_env.py b/metagpt/environment/stanford_town/stanford_town_ext_env.py similarity index 83% rename from metagpt/environment/stanford_town_env/stanford_town_ext_env.py rename to metagpt/environment/stanford_town/stanford_town_ext_env.py index 8a9a65965..30a02d4db 100644 --- a/metagpt/environment/stanford_town_env/stanford_town_ext_env.py +++ b/metagpt/environment/stanford_town/stanford_town_ext_env.py @@ -5,11 +5,20 @@ import math from pathlib import Path -from typing import Optional, Tuple +from typing import Any, Optional from pydantic import ConfigDict, Field, model_validator from metagpt.environment.base_env import ExtEnv, mark_as_readable, mark_as_writeable +from metagpt.environment.stanford_town.env_space import ( + EnvAction, + EnvActionType, + EnvObsParams, + EnvObsType, + EnvObsValType, + get_action_space, + get_observation_space, +) from metagpt.utils.common import read_csv_to_list, read_json_file @@ -197,15 +206,82 @@ class StanfordTownExtEnv(ExtEnv): else: address_tiles[add] = set([(j, i)]) values["address_tiles"] = address_tiles + + values["action_space"] = get_action_space((maze_width, maze_height)) + values["observation_space"] = get_observation_space() return values + def reset( + self, + *, + seed: Optional[int] = None, + options: Optional[dict[str, Any]] = None, + ) -> tuple[dict[str, EnvObsValType], dict[str, Any]]: + """reset env and get the init observation + Return results corresponding to `observation, info` + """ + super().reset(seed=seed, options=options) + + obs = self._get_obs() + + return obs, {} + + def _get_obs(self) -> dict[str, EnvObsValType]: + """Get observation""" + return { + "collision_maze": self.get_collision_maze(), + "tiles": self.tiles, + "address_tiles": self.get_address_tiles(), + } + + def observe(self, obs_params: Optional[EnvObsParams] = None) -> Any: + """Get partial or full observation from the env""" + obs_type = obs_params.obs_type if obs_params else EnvObsType.NONE + if obs_type == EnvObsType.NONE: + obs = self._get_obs() + elif obs_type == EnvObsType.GET_TITLE: + obs = self.access_tile(tile=obs_params.coord) + elif obs_type == EnvObsType.TILE_PATH: + obs = self.get_tile_path(tile=obs_params.coord, level=obs_params.level) + elif obs_type == EnvObsType.TILE_NBR: + obs = self.get_nearby_tiles(tile=obs_params.coord, vision_r=obs_params.vision_radius) + return obs + + def step(self, action: EnvAction) -> tuple[dict[str, EnvObsValType], float, bool, bool, dict[str, Any]]: + """Execute action and then return observation + Return results corresponding to `observation, reward, terminated, truncated, info` + """ + terminated = False + try: + self._execute_env_action(action) + except Exception: + terminated = True + + obs = self._get_obs() + + ret = (obs, 1.0, terminated, False, {}) + return ret + + def _execute_env_action(self, action: EnvAction): + action_type = action.action_type + if action_type == EnvActionType.NONE: + pass + elif action_type == EnvActionType.ADD_TILE_EVENT: + self.add_event_from_tile(curr_event=action.event, tile=action.coord) + elif action_type == EnvActionType.RM_TILE_EVENT: + self.remove_event_from_tile(curr_event=action.event, tile=action.coord) + elif action_type == EnvActionType.TURN_TILE_EVENT_IDLE: + self.turn_event_from_tile_idle(curr_event=action.event, tile=action.coord) + elif action_type == EnvActionType.RM_TITLE_SUB_EVENT: + self.remove_subject_events_from_tile(subject=action.subject, tile=action.coord) + def turn_coordinate_to_tile(self, px_coordinate: tuple[int, int]) -> tuple[int, int]: """ Turns a pixel coordinate to a tile coordinate. """ x = math.ceil(px_coordinate[0] / self.sq_tile_size) y = math.ceil(px_coordinate[1] / self.sq_tile_size) - return (x, y) + return x, y @mark_as_readable def get_collision_maze(self) -> list: @@ -316,10 +392,6 @@ class StanfordTownExtEnv(ExtEnv): nearby_tiles += [(i, j)] return nearby_tiles - @mark_as_writeable - def add_tiles_event(self, pt_y: int, pt_x: int, event: Tuple[str, str, str, str]): - self.tiles[pt_y][pt_x]["events"].add(event) - @mark_as_writeable def add_event_from_tile(self, curr_event: tuple[str], tile: tuple[int, int]) -> None: """ diff --git a/metagpt/environment/stanford_town_env/stanford_town_env.py b/metagpt/environment/stanford_town_env/stanford_town_env.py deleted file mode 100644 index 8721d6cd1..000000000 --- a/metagpt/environment/stanford_town_env/stanford_town_env.py +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# @Desc : MG StanfordTown Env - -from metagpt.environment.base_env import Environment -from metagpt.environment.stanford_town_env.stanford_town_ext_env import ( - StanfordTownExtEnv, -) - - -class StanfordTownEnv(Environment, StanfordTownExtEnv): - pass diff --git a/metagpt/environment/werewolf/__init__.py b/metagpt/environment/werewolf/__init__.py new file mode 100644 index 000000000..2bcf8efd0 --- /dev/null +++ b/metagpt/environment/werewolf/__init__.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : diff --git a/metagpt/environment/werewolf/const.py b/metagpt/environment/werewolf/const.py new file mode 100644 index 000000000..7f810389d --- /dev/null +++ b/metagpt/environment/werewolf/const.py @@ -0,0 +1,121 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : + +from enum import Enum + +from metagpt.const import MESSAGE_ROUTE_TO_ALL + + +class RoleType(Enum): + VILLAGER = "Villager" + WEREWOLF = "Werewolf" + GUARD = "Guard" + SEER = "Seer" + WITCH = "Witch" + MODERATOR = "Moderator" + + +class RoleState(Enum): + ALIVE = "alive" # the role is alive + DEAD = "dead" # killed or poisoned + KILLED = "killed" # killed by werewolf or voting + POISONED = "poisoned" # killed by poison + SAVED = "saved" # saved by antidote + PROTECTED = "projected" # projected by guard + + +class RoleActionRes(Enum): + SAVE = "save" + PASS = "pass" # ignore current action output + + +empty_set = set() + +# the ordered rules by the moderator to announce to everyone each step +STEP_INSTRUCTIONS = { + 0: { + "content": "It’s dark, everyone close your eyes. I will talk with you/your team secretly at night.", + "send_to": {RoleType.MODERATOR.value}, # for moderator to continue speaking + "restricted_to": empty_set, + }, + 1: { + "content": "Guard, please open your eyes!", + "send_to": {RoleType.MODERATOR.value}, # for moderator to continue speaking + "restricted_to": empty_set, + }, + 2: { + "content": """Guard, now tell me who you protect tonight? +You only choose one from the following living options please: {living_players}. +Or you can pass. For example: Protect ...""", + "send_to": {RoleType.GUARD.value}, + "restricted_to": {RoleType.MODERATOR.value, RoleType.GUARD.value}, + }, + 3: {"content": "Guard, close your eyes", "send_to": {RoleType.MODERATOR.value}, "restricted_to": empty_set}, + 4: { + "content": "Werewolves, please open your eyes!", + "send_to": {RoleType.MODERATOR.value}, + "restricted_to": empty_set, + }, + 5: { + "content": """Werewolves, I secretly tell you that {werewolf_players} are +all of the {werewolf_num} werewolves! Keep in mind you are teammates. The rest players are not werewolves. +choose one from the following living options please: +{living_players}. For example: Kill ...""", + "send_to": {RoleType.WEREWOLF.value}, + "restricted_to": {RoleType.MODERATOR.value, RoleType.WEREWOLF.value}, + }, + 6: {"content": "Werewolves, close your eyes", "send_to": {RoleType.MODERATOR.value}, "restricted_to": empty_set}, + 7: {"content": "Witch, please open your eyes!", "send_to": {RoleType.MODERATOR.value}, "restricted_to": empty_set}, + 8: { + "content": """Witch, tonight {player_hunted} has been killed by the werewolves. +You have a bottle of antidote, would you like to save him/her? If so, say "Save", else, say "Pass".""", + "send_to": {RoleType.WITCH.value}, + "restricted_to": {RoleType.MODERATOR.value, RoleType.WITCH.value}, + }, # 要先判断女巫是否有解药,再去询问女巫是否使用解药救人 + 9: { + "content": """Witch, you also have a bottle of poison, would you like to use it to kill one of the living players? +Choose one from the following living options: {living_players}. +If so, say ONLY "Poison PlayerX", replace PlayerX with the actual player name, else, say "Pass".""", + "send_to": {RoleType.WITCH.value}, + "restricted_to": {RoleType.MODERATOR.value, RoleType.WITCH.value}, + }, # + 10: {"content": "Witch, close your eyes", "send_to": {RoleType.MODERATOR.value}, "restricted_to": empty_set}, + 11: {"content": "Seer, please open your eyes!", "send_to": {RoleType.MODERATOR.value}, "restricted_to": empty_set}, + 12: { + "content": """Seer, you can check one player's identity. Who are you going to verify its identity tonight? +Choose only one from the following living options:{living_players}.""", + "send_to": {RoleType.SEER.value}, + "restricted_to": {RoleType.MODERATOR.value, RoleType.SEER.value}, + }, + 13: {"content": "Seer, close your eyes", "send_to": {RoleType.MODERATOR.value}, "restricted_to": empty_set}, + # The 1-st daytime + 14: { + "content": """It's daytime. Everyone woke up except those who had been killed.""", + "send_to": {RoleType.MODERATOR.value}, + "restricted_to": empty_set, + }, + 15: { + "content": "{player_current_dead} was killed last night!", + "send_to": {RoleType.MODERATOR.value}, + "restricted_to": empty_set, + }, + 16: { + "content": """Living players: {living_players}, now freely talk about the current situation based on your observation and +reflection with a few sentences. Decide whether to reveal your identity based on your reflection.""", + "send_to": {MESSAGE_ROUTE_TO_ALL}, # send to all to speak in daytime + "restricted_to": empty_set, + }, + 17: { + "content": """Now vote and tell me who you think is the werewolf. Don’t mention your role. +You only choose one from the following living options please: +{living_players}. Say ONLY: I vote to eliminate ...""", + "send_to": {MESSAGE_ROUTE_TO_ALL}, + "restricted_to": empty_set, + }, + 18: { + "content": """{player_current_dead} was eliminated.""", + "send_to": {RoleType.MODERATOR.value}, + "restricted_to": empty_set, + }, +} diff --git a/metagpt/environment/werewolf/env_space.py b/metagpt/environment/werewolf/env_space.py new file mode 100644 index 000000000..e6243b10f --- /dev/null +++ b/metagpt/environment/werewolf/env_space.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : werewolf observation/action space and its action definition + +from gymnasium import spaces +from pydantic import ConfigDict, Field + +from metagpt.environment.base_env_space import BaseEnvAction, BaseEnvActionType +from metagpt.environment.werewolf.const import STEP_INSTRUCTIONS + + +class EnvActionType(BaseEnvActionType): + NONE = 0 # no action to run, just get observation + WOLF_KILL = 1 # wolf kill someone + VOTE_KILL = 2 # vote kill someone + WITCH_POISON = 3 # witch poison someone + WITCH_SAVE = 4 # witch save someone + GUARD_PROTECT = 5 # guard protect someone + PROGRESS_STEP = 6 # step increment + + +class EnvAction(BaseEnvAction): + model_config = ConfigDict(arbitrary_types_allowed=True) + + action_type: int = Field(default=EnvActionType.NONE, description="action type") + player_name: str = Field(default="", description="the name of the player to do the action") + target_player_name: str = Field(default="", description="the name of the player who take the action") + + +def get_observation_space() -> spaces.Dict: + space = spaces.Dict( + { + "game_setup": spaces.Text(256), + "step_idx": spaces.Discrete(len(STEP_INSTRUCTIONS)), + "living_players": spaces.Tuple( + (spaces.Text(16), spaces.Text(16)) + ), # TODO should be tuple of variable length + "werewolf_players": spaces.Tuple( + (spaces.Text(16), spaces.Text(16)) + ), # TODO should be tuple of variable length + "player_hunted": spaces.Text(16), + "player_current_dead": spaces.Tuple( + (spaces.Text(16), spaces.Text(16)) + ), # TODO should be tuple of variable length + "witch_poison_left": spaces.Discrete(2), + "witch_antidote_left": spaces.Discrete(2), + "winner": spaces.Text(16), + "win_reason": spaces.Text(64), + } + ) + return space + + +def get_action_space() -> spaces.Dict: + space = spaces.Dict( + { + "action_type": spaces.Discrete(len(EnvActionType)), + "player_name": spaces.Text(16), # the player to do the action + "target_player_name": spaces.Text(16), # the target player who take the action + } + ) + return space diff --git a/metagpt/environment/werewolf/werewolf_env.py b/metagpt/environment/werewolf/werewolf_env.py new file mode 100644 index 000000000..999ff63a1 --- /dev/null +++ b/metagpt/environment/werewolf/werewolf_env.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : MG Werewolf Env + +from typing import Iterable + +from pydantic import Field + +from metagpt.environment.base_env import Environment +from metagpt.environment.werewolf.werewolf_ext_env import WerewolfExtEnv +from metagpt.schema import Message + + +class WerewolfEnv(WerewolfExtEnv, Environment): + round_cnt: int = Field(default=0) + + def add_roles(self, roles: Iterable["Role"]): + """增加一批在当前环境的角色 + Add a batch of characters in the current environment + """ + for role in roles: + self.roles[role.name] = role # use name as key here, due to multi-player can have same profile + + for role in roles: # setup system message with roles + role.context = self.context + role.set_env(self) + + def publish_message(self, message: Message, add_timestamp: bool = True): + """Post information to the current environment""" + if add_timestamp: + # Because the content of the message may be repeated, for example, killing the same person in two nights + # Therefore, a unique round_cnt prefix needs to be added so that the same message will not be automatically deduplicated when added to the memory. + message.content = f"{self.round_cnt} | " + message.content + super().publish_message(message) + + async def run(self, k=1): + """Process all Role runs by order""" + for _ in range(k): + for role in self.roles.values(): + await role.run() + self.round_cnt += 1 diff --git a/metagpt/environment/werewolf_env/werewolf_ext_env.py b/metagpt/environment/werewolf/werewolf_ext_env.py similarity index 54% rename from metagpt/environment/werewolf_env/werewolf_ext_env.py rename to metagpt/environment/werewolf/werewolf_ext_env.py index 7c4b4c475..a8636536b 100644 --- a/metagpt/environment/werewolf_env/werewolf_ext_env.py +++ b/metagpt/environment/werewolf/werewolf_ext_env.py @@ -4,109 +4,27 @@ import random from collections import Counter -from enum import Enum -from typing import Callable, Optional +from typing import Any, Callable, Optional from pydantic import ConfigDict, Field from metagpt.environment.base_env import ExtEnv, mark_as_readable, mark_as_writeable +from metagpt.environment.base_env_space import BaseEnvObsParams +from metagpt.environment.werewolf.const import STEP_INSTRUCTIONS, RoleState, RoleType +from metagpt.environment.werewolf.env_space import EnvAction, EnvActionType from metagpt.logs import logger -class RoleState(Enum): - ALIVE = "alive" # the role is alive - KILLED = "killed" # the role is killed by werewolf or voting - POISONED = "poisoned" # the role is killed by posion - SAVED = "saved" # the role is saved by antidote - - -# the ordered rules by the moderator to announce to everyone each step -STEP_INSTRUCTIONS = { - 0: { - "content": "It’s dark, everyone close your eyes. I will talk with you/your team secretly at night.", - "send_to": "Moderator", # for moderator to continuen speaking - "restricted_to": "", - }, - 1: { - "content": "Guard, please open your eyes!", - "send_to": "Moderator", # for moderator to continuen speaking - "restricted_to": "", - }, - 2: { - "content": """Guard, now tell me who you protect tonight? - You only choose one from the following living options please: {living_players}. - Or you can pass. For example: Protect ...""", - "send_to": "Guard", - "restricted_to": "Moderator,Guard", - }, - 3: {"content": "Guard, close your eyes", "send_to": "Moderator", "restricted_to": ""}, - 4: {"content": "Werewolves, please open your eyes!", "send_to": "Moderator", "restricted_to": ""}, - 5: { - "content": """Werewolves, I secretly tell you that {werewolf_players} are - all of the 2 werewolves! Keep in mind you are teammates. The rest players are not werewolves. - choose one from the following living options please: - {living_players}. For example: Kill ...""", - "send_to": "Werewolf", - "restricted_to": "Moderator,Werewolf", - }, - 6: {"content": "Werewolves, close your eyes", "send_to": "Moderator", "restricted_to": ""}, - 7: {"content": "Witch, please open your eyes!", "send_to": "Moderator", "restricted_to": ""}, - 8: { - "content": """Witch, tonight {player_hunted} has been killed by the werewolves. - You have a bottle of antidote, would you like to save him/her? If so, say "Save", else, say "Pass".""", - "send_to": "Witch", - "restricted_to": "Moderator,Witch", - }, # 要先判断女巫是否有解药,再去询问女巫是否使用解药救人 - 9: { - "content": """Witch, you also have a bottle of poison, would you like to use it to kill one of the living players? - Choose one from the following living options: {living_players}. - If so, say ONLY "Poison PlayerX", replace PlayerX with the actual player name, else, say "Pass".""", - "send_to": "Witch", - "restricted_to": "Moderator,Witch", - }, # - 10: {"content": "Witch, close your eyes", "send_to": "Moderator", "restricted_to": ""}, - 11: {"content": "Seer, please open your eyes!", "send_to": "Moderator", "restricted_to": ""}, - 12: { - "content": """Seer, you can check one player's identity. Who are you going to verify its identity tonight? - Choose only one from the following living options:{living_players}.""", - "send_to": "Seer", - "restricted_to": "Moderator,Seer", - }, - 13: {"content": "Seer, close your eyes", "send_to": "Moderator", "restricted_to": ""}, - # The 1-st daytime - 14: { - "content": """It's daytime. Everyone woke up except those who had been killed.""", - "send_to": "Moderator", - "restricted_to": "", - }, - 15: {"content": "{player_current_dead} was killed last night!", "send_to": "Moderator", "restricted_to": ""}, - 16: { - "content": """Living players: {living_players}, now freely talk about the current situation based on your observation and - reflection with a few sentences. Decide whether to reveal your identity based on your reflection.""", - "send_to": "", # send to all to speak in daytime - "restricted_to": "", - }, - 17: { - "content": """Now vote and tell me who you think is the werewolf. Don’t mention your role. - You only choose one from the following living options please: - {living_players}. Say ONLY: I vote to eliminate ...""", - "send_to": "", - "restricted_to": "", - }, - 18: {"content": """{player_current_dead} was eliminated.""", "send_to": "Moderator", "restricted_to": ""}, -} - - class WerewolfExtEnv(ExtEnv): model_config = ConfigDict(arbitrary_types_allowed=True) players_state: dict[str, tuple[str, RoleState]] = Field( - default=dict(), description="the player's role type and state by player_name" + default_factory=dict, description="the player's role type and state by player_name" ) round_idx: int = Field(default=0) # the current round step_idx: int = Field(default=0) # the current step of current round - eval_step_idx: int = Field(default=0) + eval_step_idx: list[int] = Field(default=[]) per_round_steps: int = Field(default=len(STEP_INSTRUCTIONS)) # game global states @@ -114,13 +32,13 @@ class WerewolfExtEnv(ExtEnv): special_role_players: list[str] = Field(default=[]) winner: Optional[str] = Field(default=None) win_reason: Optional[str] = Field(default=None) - witch_poison_left: int = Field(default=1) - witch_antidote_left: int = Field(default=1) + witch_poison_left: int = Field(default=1, description="should be 1 or 0") + witch_antidote_left: int = Field(default=1, description="should be 1 or 0") # game current round states, a round is from closing your eyes to the next time you close your eyes - round_hunts: dict[str, str] = Field(default=dict(), description="nighttime wolf hunt result") + round_hunts: dict[str, str] = Field(default_factory=dict, description="nighttime wolf hunt result") round_votes: dict[str, str] = Field( - default=dict(), description="daytime all players vote result, key=voteer, value=voted one" + default_factory=dict, description="daytime all players vote result, key=voter, value=voted one" ) player_hunted: Optional[str] = Field(default=None) player_protected: Optional[str] = Field(default=None) @@ -128,6 +46,76 @@ class WerewolfExtEnv(ExtEnv): player_poisoned: Optional[str] = Field(default=None) player_current_dead: list[str] = Field(default=[]) + def reset( + self, + *, + seed: Optional[int] = None, + options: Optional[dict[str, Any]] = None, + ) -> tuple[dict[str, Any], dict[str, Any]]: + """currently unused""" + pass + + def observe(self, obs_params: Optional[BaseEnvObsParams] = None) -> Any: + """currently unused""" + pass + + def _get_obs(self): + return { + "game_setup": self.game_setup, + "step_idx": self.step_idx, + "living_players": self.living_players, + "werewolf_players": self.werewolf_players, # currently, lack observation isolation + "player_hunted": self.player_hunted, + "player_current_dead": self.player_current_dead, + "witch_poison_left": self.witch_poison_left, + "witch_antidote_left": self.witch_antidote_left, + "winner": self.winner, + "win_reason": self.win_reason, + } + + def step(self, action: EnvAction) -> tuple[dict[str, Any], float, bool, bool, dict[str, Any]]: + action_type = action.action_type + player_name = action.player_name + target_player_name = action.target_player_name + if action_type == EnvActionType.WOLF_KILL: + self.wolf_kill_someone(wolf_name=player_name, player_name=target_player_name) + elif action_type == EnvActionType.VOTE_KILL: + self.vote_kill_someone(voter_name=player_name, player_name=target_player_name) + elif action_type == EnvActionType.WITCH_POISON: + self.witch_poison_someone(witch_name=player_name, player_name=target_player_name) + elif action_type == EnvActionType.WITCH_SAVE: + self.witch_save_someone(witch_name=player_name, player_name=target_player_name) + elif action_type == EnvActionType.GUARD_PROTECT: + self.guard_protect_someone(guard_name=player_name, player_name=target_player_name) + elif action_type == EnvActionType.PROGRESS_STEP: + self.progress_step() + elif action_type == EnvActionType.NONE: + pass + else: + raise ValueError(f"not supported action_type: {action_type}") + + self.update_game_states() + terminated = self._check_game_finish() + obs = self._get_obs() + return obs, 1.0, terminated, False, {} + + def _check_game_finish(self) -> bool: + """return True if game finished else False""" + # game's termination condition + terminated = False + living_werewolf = [p for p in self.werewolf_players if p in self.living_players] + living_villagers = [p for p in self.villager_players if p in self.living_players] + living_special_roles = [p for p in self.special_role_players if p in self.living_players] + if not living_werewolf: + self.winner = "good guys" + self.win_reason = "werewolves all dead" + terminated = True + elif not living_villagers or not living_special_roles: + self.winner = "werewolf" + self.win_reason = "villagers all dead" if not living_villagers else "special roles all dead" + terminated = True + return terminated + @property def living_players(self) -> list[str]: player_names = [] @@ -146,12 +134,12 @@ class WerewolfExtEnv(ExtEnv): @property def werewolf_players(self) -> list[str]: - player_names = self._role_type_players(role_type="Werewolf") + player_names = self._role_type_players(role_type=RoleType.WEREWOLF.value) return player_names @property def villager_players(self) -> list[str]: - player_names = self._role_type_players(role_type="Villager") + player_names = self._role_type_players(role_type=RoleType.VILLAGER.value) return player_names def _init_players_state(self, players: list["Role"]): @@ -178,14 +166,14 @@ class WerewolfExtEnv(ExtEnv): """init players using different roles' num""" role_objs = [] for role_obj in role_uniq_objs: - if str(role_obj) == "Villager": + if RoleType.VILLAGER.value in str(role_obj): role_objs.extend([role_obj] * num_villager) - elif str(role_obj) == "Werewolf": + elif RoleType.WEREWOLF.value in str(role_obj): role_objs.extend([role_obj] * num_werewolf) else: role_objs.append(role_obj) if shuffle: - random.shuffle(len(role_objs)) + random.shuffle(role_objs) if add_human: assigned_role_idx = random.randint(0, len(role_objs) - 1) assigned_role = role_objs[assigned_role_idx] @@ -218,10 +206,12 @@ class WerewolfExtEnv(ExtEnv): roletype_state = self.players_state[player_name] self.players_state[player_name] = (roletype_state[0], state) - def _check_valid_role(self, player: "Role", role_type: str) -> bool: - return True if role_type in str(player) else False + def _check_valid_role(self, player_name: str, role_type: str) -> bool: + roletype_state = self.players_state.get(player_name) + return True if roletype_state and role_type in roletype_state[0] else False def _check_player_continue(self, player_name: str, particular_step: int = -1) -> bool: + """to check if can do the operation to the player""" step_idx = self.step_idx % self.per_round_steps if particular_step > 0 and step_idx != particular_step: # step no # particular_step = 18, not daytime vote time, ignore @@ -238,6 +228,10 @@ class WerewolfExtEnv(ExtEnv): self.step_idx += 1 return instruction + @mark_as_writeable + def progress_step(self): + self.step_idx += 1 + @mark_as_readable def get_players_state(self, player_names: list[str]) -> dict[str, RoleState]: players_state = { @@ -248,57 +242,72 @@ class WerewolfExtEnv(ExtEnv): return players_state @mark_as_writeable - def vote_kill_someone(self, voteer: "Role", player_name: str = None): + def vote_kill_someone(self, voter_name: str, player_name: str = None): """player vote result at daytime player_name: if it's None, regard as abstaining from voting """ - if not self._check_player_continue(voteer.name, particular_step=18): # 18=step no + if not self._check_player_continue(voter_name, particular_step=18): # 18=step no return - self.round_votes[voteer.name] = player_name + self.round_votes[voter_name] = player_name # check if all living players finish voting, then get the dead one if list(self.round_votes.keys()) == self.living_players: voted_all = list(self.round_votes.values()) # TODO in case of tie vote, check who was voted first voted_all = [item for item in voted_all if item] - self.player_current_dead = Counter(voted_all).most_common()[0][0] - self._update_players_state([self.player_current_dead]) + self.player_current_dead = [Counter(voted_all).most_common()[0][0]] + self._update_players_state(self.player_current_dead) @mark_as_writeable - def wolf_kill_someone(self, wolf: "Role", player_name: str): - if not self._check_valid_role(wolf, "Werewolf"): + def wolf_kill_someone(self, wolf_name: str, player_name: str): + if not self._check_valid_role(wolf_name, RoleType.WEREWOLF.value): return - if not self._check_player_continue(wolf.name, particular_step=5): # 5=step no + if not self._check_player_continue(wolf_name, particular_step=6): # 5=step no return - self.round_hunts[wolf.name] = player_name - living_werewolf = [p for p in self.werewolf_players if p in self.living_players] + self.round_hunts[wolf_name] = player_name + # living_werewolf = [p for p in self.werewolf_players if p in self.living_players] # check if all living wolfs finish hunting, then get the hunted one - if list(self.round_hunts.keys()) == living_werewolf: - hunted_all = list(self.round_hunts.values()) - self.player_hunted = Counter(hunted_all).most_common()[0][0] + # if list(self.round_hunts.keys()) == living_werewolf: + # hunted_all = list(self.round_hunts.values()) + # self.player_hunted = Counter(hunted_all).most_common()[0][0] + self.player_hunted = player_name - @mark_as_writeable - def witch_poison_someone(self, witch: "Role", player_name: str = None): - if not self._check_valid_role(witch, "Witch"): + def _witch_poison_or_save_someone( + self, witch_name: str, player_name: str = None, state: RoleState = RoleState.POISONED + ): + if not self._check_valid_role(witch_name, RoleType.WITCH.value): return if not self._check_player_continue(player_name): return - self._update_players_state([player_name], RoleState.POISONED) - self.player_poisoned = player_name + assert state in [RoleState.POISONED, RoleState.SAVED] + self._update_players_state([player_name], state) + if state == RoleState.POISONED: + self.player_poisoned = player_name + self.witch_poison_left -= 1 + else: + # self.player_protected = player_name + self.is_hunted_player_saved = True + self.witch_antidote_left -= 1 @mark_as_writeable - def witch_save_someone(self, witch: "Role", player_name: str = None): - if not self._check_valid_role(witch, "Witch"): + def witch_poison_someone(self, witch_name: str, player_name: str = None): + self._witch_poison_or_save_someone(witch_name, player_name, RoleState.POISONED) + + @mark_as_writeable + def witch_save_someone(self, witch_name: str, player_name: str = None): + self._witch_poison_or_save_someone(witch_name, player_name, RoleState.SAVED) + + @mark_as_writeable + def guard_protect_someone(self, guard_name: str, player_name: str = None): + if not self._check_valid_role(guard_name, RoleType.GUARD.value): return if not self._check_player_continue(player_name): return - - self._update_players_state([player_name], RoleState.SAVED) self.player_protected = player_name @mark_as_writeable - def update_game_states(self, memories: list): + def update_game_states(self): step_idx = self.step_idx % self.per_round_steps if step_idx not in [15, 18] or self.step_idx in self.eval_step_idx: return @@ -314,22 +323,12 @@ class WerewolfExtEnv(ExtEnv): if self.player_poisoned: self.player_current_dead.append(self.player_poisoned) - self._update_players_state([self.player_current_dead]) + self._update_players_state(self.player_current_dead) # reset self.player_hunted = None self.player_protected = None self.is_hunted_player_saved = False self.player_poisoned = None - - # game's termination condition - living_werewolf = [p for p in self.werewolf_players if p in self.living_players] - living_villagers = [p for p in self.villager_players if p in self.living_players] - living_special_roles = [p for p in self.special_role_players if p in self.living_players] - if not living_werewolf: - self.winner = "good guys" - self.win_reason = "werewolves all dead" - elif not living_villagers or not living_special_roles: - self.winner = "werewolf" - self.win_reason = "villagers all dead" if not living_villagers else "special roles all dead" - if self.winner is not None: - self._record_all_experiences() # TODO + elif step_idx == 18: + # updated use vote_kill_someone + pass diff --git a/metagpt/environment/werewolf_env/werewolf_env.py b/metagpt/environment/werewolf_env/werewolf_env.py deleted file mode 100644 index d174f322c..000000000 --- a/metagpt/environment/werewolf_env/werewolf_env.py +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# @Desc : MG Werewolf Env - -from pydantic import Field - -from metagpt.environment.base_env import Environment -from metagpt.environment.werewolf_env.werewolf_ext_env import WerewolfExtEnv -from metagpt.logs import logger -from metagpt.schema import Message - - -class WerewolfEnv(Environment, WerewolfExtEnv): - timestamp: int = Field(default=0) - - def publish_message(self, message: Message, add_timestamp: bool = True): - """Post information to the current environment""" - logger.debug(f"publish_message: {message.dump()}") - if add_timestamp: - # Because the content of the message may be repeated, for example, killing the same person in two nights - # Therefore, a unique timestamp prefix needs to be added so that the same message will not be automatically deduplicated when added to the memory. - message.content = f"{self.timestamp} | " + message.content - self.memory.add(message) - self.history += f"\n{message}" - - async def run(self, k=1): - """Process all Role runs by order""" - for _ in range(k): - for role in self.roles.values(): - await role.run() - self.timestamp += 1 diff --git a/metagpt/ext/__init__.py b/metagpt/ext/__init__.py new file mode 100644 index 000000000..2bcf8efd0 --- /dev/null +++ b/metagpt/ext/__init__.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : diff --git a/metagpt/ext/android_assistant/README.md b/metagpt/ext/android_assistant/README.md new file mode 100644 index 000000000..fe8b4b3e3 --- /dev/null +++ b/metagpt/ext/android_assistant/README.md @@ -0,0 +1,118 @@ +# MetaGPT Android Assistant + +The MetaGPT Android Assistant is an intelligent assistance tool driven by a multi-modal large language model based on the advanced MetaGPT framework. It has the ability to self-learn, mastering users' daily usage patterns through learning, and can automatically complete various application operations according to user instructions, achieving comprehensive liberation of users' hands. +Next, we will introduce the functions of the MetaGPT Android Assistant and how to use it. + +## Features + +The operation of the MetaGPT Android Assistant mainly includes two stages: learning and automatic execution. Below, we introduce the specific features of the MetaGPT Android Assistant from these two stages. + +### Learning Stage + +By learning from human demonstrations or exploring apps based on human instructions, the MetaGPT Android Assistant can learn the functionality of apps, generate corresponding operation documents for use in the subsequent "automatic execution" stage. Approximately 20 rounds of exploration for any given task objective can significantly improve performance. + +By setting the `stage` to `learn`, you can ask the Android Assistant to enter the learning stage. By setting the `mode` to `auto`, you can instruct the Android Assistant to learn through automatic exploration; by setting the mode to manual, you can instruct the Android Assistant to learn through human manual demonstration. In the usage section, we provide detailed explanations of the script parameters. You can try experimenting with automatic exploration and manual demonstration modes on the "Messenger" app with the following commands: + +```bash +cd examples/android_assistant +python run_assistant.py "Send 'When will we release this feature?' to +86 8888888" --stage "learn" --mode "auto or manual" --app-name "Messenger" +``` + +#### Learning Based on Human Demonstration +When asking the Android Assistant to perform self-exploration during the learning stage, you can free your hands. However, when instructing it to learn according to your commands, you need to follow the instructions in the terminal for the Android Assistant to accurately learn your operation methods. +A possible example is as follows: + +```bash +cd examples/android_assistant +python run_assistant.py "Send 'When will we release this feature?' to +86 8888888" --stage "learn" --mode "manual" --app-name "Messenger" +``` + +After running this command, you will first see a screenshot of an Android screen that has been marked at various interactive locations, as shown in the figure below: + + + +After remembering the location where you want to operate, a request similar to the one below will be output in the terminal. Reply to it and thereby direct the Android assistant to learn your demonstration action: + +```bash +| INFO | examples.android_assistant.actions.manual_record:run:96 - Which element do you want to tap? Choose a numeric tag from 1 to 11: +user_input: 8 +| INFO | examples.android_assistant.actions.manual_record:run:81 - Choose one of the following actions you want to perform on the current screen: +tap, text, long_press, swipe, stop +user_input: tap +``` + +### Automatic Execution Stage +After the Android Assistant completes the learning stage, you can command it to complete tasks on the phone through text descriptions. By configuring the operation documents from the self-learning stage, the Android Assistant has richer prior knowledge, and its execution capabilities are further enhanced. +You can instruct the Android Assistant to send messages in the "Messenger" app with the following command: +```bash +python run_assistant.py "Send 'When will we release this feature?' to +86 8888888" --stage "act" --mode "auto or manual" --app-name "Messenger" +``` +Specifically, by selecting `auto` for `mode`, the Android assistant will employ the operational records compiled through self-exploration. Alternatively, if `manual` is chosen as the `mode`, the Android assistant will leverage the operation manuals accrued from learning via human demonstration. + +## Installation +To use the Android Assistant, you first need to meet the following conditions: +1. Complete the installation of the MetaGPT environment. +2. Install [Android Debug Bridge (ADB)](https://developer.android.com/tools/adb?hl=zh-cn) on your PC, which enables interaction between your PC and Android devices. +3. Install Android Studio and within it, install the Android emulator to provide an environment for the Android Assistant to learn and execute. For information on how to install the Android emulator, refer to [Quick Installation of Android Studio & Emulator](https://docs.expo.dev/workflow/android-studio-emulator/). +4. (Optional) Connect your Android device to the USB port of your PC, which can also provide an environment for the Android Assistant to learn and execute. + +Note ⚠️: When operating with the Android emulator, the emulator model we use is Medium Phone, which is recommended for first-time users to complete the operation. + +After completing these operations, you can enter the following command to check if ADB is installed successfully and if the Android device is connected: +```bash +adb devices +``` + +## Usage +The MetaGPT Android Assistant is designed within the MetaGPT framework as a collection of Roles and multiple Actions. You can run it by executing the `run_assistant.py` script. The specific parameter description of this script is as follows: +```text +Usage: run_assistant.py [OPTIONS] TASK_DESC + + Run a Android Assistant + +Arguments: + TASK_DESC the task description you want the android assistant to learn or + act [required] + +Options: + --n-round INTEGER The max round to do an app operation task. + [default: 20] + --stage TEXT stage: learn / act [default: learn] + --mode TEXT mode: auto / manual , when state=learn + [default: auto] + --app-name TEXT the name of app you want to run [default: + demo] + --investment FLOAT Dollar amount to invest in the AI company. + [default: 5.0] + --refine-doc / --no-refine-doc Refine existing operation docs based on the + latest observation if True. [default: no- + refine-doc] + --min-dist INTEGER The minimum distance between elements to + prevent overlapping during the labeling + process. [default: 30] + --android-screenshot-dir TEXT The path to store screenshots on android + device. Make sure it exists. [default: + /sdcard/Pictures/Screenshots] + --android-xml-dir TEXT The path to store xml files for determining + UI elements localtion. Make sure it exists. + [default: /sdcard] + --device-id TEXT The Android device_id [default: + emulator-5554] + --help Show this message and exit. +``` + +## Acknowledgements +The MetaGPT Android Assistant has referenced some ideas and code from the [AppAgent](https://github.com/mnotgod96/AppAgent) project. We thank the developers of the Appagent project. + +### Citation + +```bib +@misc{yang2023appagent, + title={AppAgent: Multimodal Agents as Smartphone Users}, + author={Chi Zhang and Zhao Yang and Jiaxuan Liu and Yucheng Han and Xin Chen and Zebiao Huang and Bin Fu and Gang Yu}, + year={2023}, + eprint={2312.13771}, + archivePrefix={arXiv}, + primaryClass={cs.CV} +} +``` \ No newline at end of file diff --git a/metagpt/ext/android_assistant/README_CN.md b/metagpt/ext/android_assistant/README_CN.md new file mode 100644 index 000000000..a1abbe3b0 --- /dev/null +++ b/metagpt/ext/android_assistant/README_CN.md @@ -0,0 +1,113 @@ +# MetaGPT 安卓助理 + +MetaGPT安卓助理是一款依托于先进的MetaGPT框架构建的多模态大语言模型驱动的智能辅助工具。 +它具备自我学习的能力,能够通过学习掌握用户的日常使用方式,同时能够根据用户的指令自动完成各类应用程序的操作任务,实现了用户双手的全面解放。 +接下来,我们将介绍MetaGPT安卓助理的功能以及如何使用它。 + +## 功能 + +MetaGPT 安卓助理的执行主要包含两个阶段,分别为自我学习与自动执行。下面,我们将从这两个阶段介绍MetaGPT 安卓助理的具体功能。 + +### 自我学习阶段 + +通过学习人类演示或基于人类指令对app进行探索,MetaGPT安卓助理可以对app的功能进行学习,生成相应的操作文档,为后续的“自动执行”阶段使用。对于任何给定的任务目标,进行约20轮的探索可以显著提高性能。 + +通过设定`stage`为`learn`可要求安卓助理进入自我学习阶段。通过设定`mode`为`auto`,可要求安卓助理通过自动探索学习,通过设定`mode`为`manual`,可要求安卓助理通过人类手动演示学习。在使用章节,我们对脚本的参数进行了详细的说明。 +您可以尝试对“Messenger”应用程序进行自动探索和手动演示模式的实验,具体命令如下: + +```bash +cd examples/android_assistant +python run_assistant.py "Send 'When will we release this feature? to +86 8888888'" --stage "learn" --mode "auto or manual" --app-name "Messenger" +``` + +#### 基于人类演示的学习 +在要求安卓助理在自我学习阶段执行自我探索时,您可以解放您的双手,但在要求他根据您的指令进行学习时,你需要根据终端中的指令进行输入,以便安卓助理能够准确地学习您的操作方式。 +一个可能的例子如下: + +```bash +cd examples/android_assistant +python run_assistant.py "Send 'When will we release this feature? to +86 8888888'" --stage "learn" --mode "manual" --app-name "Messenger" +``` + +在运行这一指令后,你将首先看到一个在各个可交互的位置进行了标记的安卓屏幕的截图,如下图: + + + +在记住你要操作的位置之后,终端中将会输出与下面类似的要求,回复它,进而指挥安卓助理学习你的演示行为: + +```bash +| INFO | examples.android_assistant.actions.manual_record:run:96 - Which element do you want to tap? Choose a numeric tag from 1 to 11: +user_input: 8 +| INFO | examples.android_assistant.actions.manual_record:run:81 - Choose one of the following actions you want to perform on the current screen: +tap, text, long_press, swipe, stop +user_input: tap +``` +### 自动执行阶段 +在安卓助理完成了自我学习阶段之后,您可以通过文本描述的方式,指挥安卓助理在手机中完成任务。通过为其配置自我学习阶段的操作文档,安卓助理具备了更丰富的前置知识,执行能力进一步得到提升。 +你可以通过以下指令,指挥安卓助理在“Messenger”应用中发送信息: +```bash +python run_assistant.py "Send 'When will we release this feature? to +86 8888888'" --stage "act" --mode "auto or manual" --app-name "Messenger" +``` +其中,`mode`选择`auto`,安卓助理将使用自我探索中积累的操作文档;`mode`选择`manual`,安卓助理将使用人类演示学习中积累的操作文档。 + +## 安装 +为了使用安卓助理,你首先需要满足以下条件: +1. 完成MetaGPT环境的安装 +2. 在你的PC上安装[Android Debug Bridge(ADB)](https://developer.android.com/tools/adb?hl=zh-cn),ADB可以使你的PC与安卓设备进行交互。 +3. 安装Android Studio,在其中安装Android模拟器,以为安卓助手提供学习与执行的环境。关于如何安装Android模拟器,可以参考[快速安装Android Studio & Emulator](https://dev.weixin.qq.com/docs/framework/dev/framework/env/android-simulator.html)。 +4. (Optional) 将你的安卓设备连接到PC的USB端口上,这同样可以为安卓助手提供学习与执行的环境。 + +注意 ⚠️:在使用Android模拟器进行操作时,我们使用的模拟器型号为Medium Phone,建议第一次尝试此类应用的用户使用这一型号完成操作。 + +在完成这一系列操作之后,你可以输入以下命令检查ADB是否安装成功,以及安卓设备是否连接 +```bash +adb devices +``` +## 使用 +MetaGPT 安卓助理在MetaGPT框架中被设计为一个`Role`与多个`Action`的集合,你可以通过运行`run_assistant.py`脚本来运行它。这一脚本具体的参数说明如下: +```text +用法:run_assistant.py [选项] 任务描述 + + 运行一个安卓助手 + +参数: + TASK_DESC 你希望安卓助手学习或执行的任务描述 + [必需] + +选项: + --n-round 整数 执行应用程序操作任务的最大轮数。 + [默认值:20] + --stage 文本 阶段:learn/act [默认值:learn] + --mode 文本 模式:auto/manual,当状态=learn时 [默认值:auto] + --app-name 文本 你想要运行的应用程序名称 [默认值: + 演示] + --investment 浮点数 投资于人工智能公司的美元金额。 + [默认值:5.0] + --refine-doc / --no-refine-doc 如果为真,则根据最新的观察结果优化现有操作文档。 + [默认值:--no-refine-doc] + --min-dist 整数 在标记过程中防止元素重叠的最小元素间距。 + [默认值:30] + --android-screenshot-dir 文本 在安卓设备上存储截图的路径。确保其存在。 + [默认值:/sdcard/Pictures/Screenshots] + --android-xml-dir 文本 存储用于确定UI元素位置的XML文件的路径。 + 确保其存在。[默认值:/sdcard] + --device-id 文本 安卓device_id [默认值: + 模拟器-5554] + --help 显示此信息并退出。 +``` + +## 致谢 +MetaGPT 安卓助理参考了 [AppAgent](https://github.com/mnotgod96/AppAgent) 项目的部分思路与代码,感谢 Appagent 项目的开发者们。 + +### 引用 + +```bib +@misc{yang2023appagent, + title={AppAgent: Multimodal Agents as Smartphone Users}, + author={Chi Zhang and Zhao Yang and Jiaxuan Liu and Yucheng Han and Xin Chen and Zebiao Huang and Bin Fu and Gang Yu}, + year={2023}, + eprint={2312.13771}, + archivePrefix={arXiv}, + primaryClass={cs.CV} +} +``` \ No newline at end of file diff --git a/metagpt/ext/android_assistant/__init__.py b/metagpt/ext/android_assistant/__init__.py new file mode 100644 index 000000000..2bcf8efd0 --- /dev/null +++ b/metagpt/ext/android_assistant/__init__.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : diff --git a/metagpt/ext/android_assistant/actions/__init__.py b/metagpt/ext/android_assistant/actions/__init__.py new file mode 100644 index 000000000..2bcf8efd0 --- /dev/null +++ b/metagpt/ext/android_assistant/actions/__init__.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : diff --git a/metagpt/ext/android_assistant/actions/manual_record.py b/metagpt/ext/android_assistant/actions/manual_record.py new file mode 100644 index 000000000..bcfb2ed89 --- /dev/null +++ b/metagpt/ext/android_assistant/actions/manual_record.py @@ -0,0 +1,168 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : manual record user interaction in stage=learn & mode=manual, LIKE scripts/step_recorder.py +import time +from pathlib import Path + +import cv2 + +from metagpt.actions.action import Action +from metagpt.config2 import config +from metagpt.environment.android.android_env import AndroidEnv +from metagpt.environment.android.const import ADB_EXEC_FAIL +from metagpt.environment.android.env_space import ( + EnvAction, + EnvActionType, + EnvObsParams, + EnvObsType, +) +from metagpt.ext.android_assistant.utils.schema import ( + ActionOp, + AndroidActionOutput, + RunState, + SwipeOp, +) +from metagpt.ext.android_assistant.utils.utils import ( + draw_bbox_multi, + elem_list_from_xml_tree, +) +from metagpt.logs import logger + + +class ManualRecord(Action): + """do a human operation on the screen with human input""" + + name: str = "ManualRecord" + + useless_list: list[str] = [] # store useless elements uid + record_path: Path = "" + task_desc_path: Path = "" + screenshot_before_path: Path = "" + screenshot_after_path: Path = "" + xml_path: Path = "" + + async def run(self, task_desc: str, task_dir: Path, env: AndroidEnv): + self.record_path = Path(task_dir) / "record.txt" + self.task_desc_path = Path(task_dir) / "task_desc.txt" + self.screenshot_before_path = Path(task_dir) / "raw_screenshots" + self.screenshot_after_path = Path(task_dir) / "labeled_screenshots" + self.xml_path = Path(task_dir) / "xml" + for path in [self.screenshot_before_path, self.screenshot_after_path, self.xml_path]: + path.mkdir(parents=True, exist_ok=True) + + self.record_path.write_text("") + record_file = open(self.record_path, "w") + self.task_desc_path.write_text(task_desc) + + step = 0 + extra_config = config.extra + while True: + step += 1 + screenshot_path: Path = env.observe( + EnvObsParams( + obs_type=EnvObsType.GET_SCREENSHOT, ss_name=f"{step}", local_save_dir=self.screenshot_before_path + ) + ) + xml_path: Path = env.observe( + EnvObsParams(obs_type=EnvObsType.GET_XML, xml_name=f"{step}", local_save_dir=self.xml_path) + ) + if not screenshot_path.exists() or not xml_path.exists(): + return AndroidActionOutput(action_state=RunState.FAIL) + + elem_list = elem_list_from_xml_tree(xml_path, self.useless_list, extra_config.get("min_dist", 30)) + + screenshot_labeled_path = Path(self.screenshot_after_path).joinpath(f"{step}_labeled.png") + labeled_img = draw_bbox_multi(screenshot_path, screenshot_labeled_path, elem_list) + + cv2.namedWindow("image", cv2.WINDOW_NORMAL) + cv2.imshow("image", labeled_img) + cv2.waitKey(0) + cv2.destroyAllWindows() + + user_input = "xxx" + logger.info( + "Choose one of the following actions you want to perform on the current screen:\n" + "tap, text, long_press, swipe, stop" + ) + + while ( + user_input.lower() != ActionOp.TAP.value + and user_input.lower() != ActionOp.TEXT.value + and user_input.lower() != ActionOp.LONG_PRESS.value + and user_input.lower() != ActionOp.SWIPE.value + and user_input.lower() != ActionOp.STOP.value + ): + user_input = input("user_input: ") + + if user_input.lower() == ActionOp.TAP.value: + logger.info(f"Which element do you want to tap? Choose a numeric tag from 1 to {len(elem_list)}:") + user_input = "xxx" + while not user_input.isnumeric() or int(user_input) > len(elem_list) or int(user_input) < 1: + user_input = input("user_input: ") + tl, br = elem_list[int(user_input) - 1].bbox + x, y = (tl[0] + br[0]) // 2, (tl[1] + br[1]) // 2 + action = EnvAction(action_type=EnvActionType.SYSTEM_TAP, coord=(x, y)) + log_str = f"tap({int(user_input)}):::{elem_list[int(user_input) - 1].uid}\n" + elif user_input.lower() == ActionOp.TEXT.value: + logger.info( + f"Which element do you want to input the text string? Choose a numeric tag from 1 to " + f"{len(elem_list)}:" + ) + input_area = "xxx" + while not input_area.isnumeric() or int(input_area) > len(elem_list) or int(input_area) < 1: + input_area = input("user_input: ") + logger.info("Enter your input text below:") + user_input = "" + while not user_input: + user_input = input("user_input: ") + action = EnvAction(action_type=EnvActionType.USER_INPUT, input_txt=user_input) + log_str = f"text({input_area}:sep:'{user_input}'):::{elem_list[int(input_area) - 1].uid}\n" + elif user_input.lower() == ActionOp.LONG_PRESS.value: + logger.info( + f"Which element do you want to long press? Choose a numeric tag from 1 to {len(elem_list)}:" + ) + user_input = "xxx" + while not user_input.isnumeric() or int(user_input) > len(elem_list) or int(user_input) < 1: + user_input = input("user_input: ") + tl, br = elem_list[int(user_input) - 1].bbox + x, y = (tl[0] + br[0]) // 2, (tl[1] + br[1]) // 2 + action = EnvAction(action_type=EnvActionType.USER_LONGPRESS, coord=(x, y)) + log_str = f"long_press({int(user_input)}):::{elem_list[int(user_input) - 1].uid}\n" + elif user_input.lower() == ActionOp.SWIPE.value: + logger.info( + "What is the direction of your swipe? Choose one from the following options:\n" + "up, down, left, right" + ) + user_input = "" + while ( + user_input != SwipeOp.UP.value + and user_input != SwipeOp.DOWN.value + and user_input != SwipeOp.LEFT.value + and user_input != SwipeOp.RIGHT.value + ): + user_input = input("user_input: ") + swipe_dir = user_input + logger.info(f"Which element do you want to swipe? Choose a numeric tag from 1 to {len(elem_list)}:") + while not user_input.isnumeric() or int(user_input) > len(elem_list) or int(user_input) < 1: + user_input = input("user_input: ") + tl, br = elem_list[int(user_input) - 1].bbox + x, y = (tl[0] + br[0]) // 2, (tl[1] + br[1]) // 2 + + action = EnvAction(action_type=EnvActionType.USER_SWIPE, coord=(x, y), orient=swipe_dir) + log_str = f"swipe({int(user_input)}:sep:{swipe_dir}):::{elem_list[int(user_input) - 1].uid}\n" + elif user_input.lower() == ActionOp.STOP.value: + record_file.write("stop\n") + record_file.close() + break + else: + break + + obs, _, _, _, info = env.step(action) + action_res = info["res"] + if action_res == ADB_EXEC_FAIL: + return AndroidActionOutput(action_state=RunState.FAIL) + record_file.write(log_str) + + time.sleep(1) + + return AndroidActionOutput(action_state=RunState.SUCCESS) diff --git a/metagpt/ext/android_assistant/actions/parse_record.py b/metagpt/ext/android_assistant/actions/parse_record.py new file mode 100644 index 000000000..304daf655 --- /dev/null +++ b/metagpt/ext/android_assistant/actions/parse_record.py @@ -0,0 +1,137 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : parse record to generate learned standard operations in stage=learn & mode=manual, +# LIKE scripts/document_generation.py + +import ast +import re +from pathlib import Path + +from metagpt.actions.action import Action +from metagpt.config2 import config +from metagpt.ext.android_assistant.actions.parse_record_an import RECORD_PARSE_NODE +from metagpt.ext.android_assistant.prompts.operation_prompt import ( + long_press_doc_template, + refine_doc_suffix, + swipe_doc_template, + tap_doc_template, + text_doc_template, +) +from metagpt.ext.android_assistant.utils.schema import ( + ActionOp, + AndroidActionOutput, + RecordLogItem, + RunState, + SwipeOp, +) +from metagpt.logs import logger +from metagpt.utils.common import encode_image + + +class ParseRecord(Action): + name: str = "ParseRecord" + record_path: Path = "" + task_desc_path: Path = "" + screenshot_before_path: Path = "" + screenshot_after_path: Path = "" + + async def run(self, task_dir: Path, docs_dir: Path): + doc_count = 0 + self.record_path = Path(task_dir) / "record.txt" + self.task_desc_path = Path(task_dir) / "task_desc.txt" + self.screenshot_before_path = Path(task_dir) / "raw_screenshots" + self.screenshot_after_path = Path(task_dir) / "labeled_screenshots" + for path in [self.screenshot_before_path, self.screenshot_after_path]: + path.mkdir(parents=True, exist_ok=True) + + task_desc = self.task_desc_path.read_text() + extra_config = config.extra + + with open(self.record_path, "r") as record_file: + record_step_count = len(record_file.readlines()) - 1 + record_file.seek(0) + for step in range(1, record_step_count + 1): + img_before_base64 = encode_image(self.screenshot_after_path.joinpath(f"{step}_labeled.png")) + img_after_base64 = encode_image(self.screenshot_after_path.joinpath(f"{step + 1}_labeled.png")) + rec = record_file.readline().strip() + action, resource_id = rec.split(":::") + action_type = action.split("(")[0] + # 构建Prompt + action_param = re.findall(r"\((.*?)\)", action)[0] + if action_type == ActionOp.TAP.value: + prompt_template = tap_doc_template + context = prompt_template.format(ui_element=action_param) + elif action_type == ActionOp.TEXT.value: + input_area, input_text = action_param.split(":sep:") + prompt_template = text_doc_template + context = prompt_template.format(ui_element=input_area) + elif action_type == ActionOp.LONG_PRESS.value: + prompt_template = long_press_doc_template + context = prompt_template.format(ui_element=action_param) + elif action_type == ActionOp.SWIPE.value: + swipe_area, swipe_dir = action_param.split(":sep:") + if swipe_dir == SwipeOp.UP.value or swipe_dir == SwipeOp.DOWN.value: + action_type = ActionOp.VERTICAL_SWIPE.value + elif swipe_dir == SwipeOp.LEFT.value or swipe_dir == SwipeOp.RIGHT.value: + action_type = ActionOp.HORIZONTAL_SWIPE.value + prompt_template = swipe_doc_template + context = prompt_template.format(swipe_dir=swipe_dir, ui_element=swipe_area) + else: + break + context = context.format(task_desc=task_desc) + + doc_name = resource_id + ".txt" + doc_path = docs_dir.joinpath(doc_name) + + if doc_path.exists(): + try: + doc_content = ast.literal_eval(doc_path.read_text()) + except Exception as exp: + logger.error(f"ast parse doc: {doc_path} failed, exp: {exp}") + continue + + if doc_content[action_type]: + if extra_config.get("doc_refine", False): + refine_context = refine_doc_suffix.format(old_doc=doc_content[action_type]) + context += refine_context + logger.info( + f"Documentation for the element {resource_id} already exists. The doc will be " + f"refined based on the latest demo." + ) + else: + logger.info( + f"Documentation for the element {resource_id} already exists. Turn on DOC_REFINE " + f"in the config file if needed." + ) + continue + else: + doc_content = {"tap": "", "text": "", "v_swipe": "", "h_swipe": "", "long_press": ""} + + logger.info(f"Waiting for GPT-4V to generate documentation for the element {resource_id}") + node = await RECORD_PARSE_NODE.fill( + context=context, llm=self.llm, images=[img_before_base64, img_after_base64] + ) + if "error" in node.content: + return AndroidActionOutput(action_state=RunState.FAIL) + log_path = task_dir.joinpath("log_parse_record.txt") + prompt = node.compile(context=context, schema="json", mode="auto") + msg = node.content + doc_content[action_type] = msg + + with open(log_path, "a") as logfile: + log_item = RecordLogItem( + step=step, + prompt=prompt, + image_before=img_before_base64, + image_after=img_after_base64, + response=node.content, + ) + logfile.write(log_item.model_dump_json() + "\n") + with open(doc_path, "w") as outfile: + outfile.write(str(doc_content)) + doc_count += 1 + logger.info(f"Documentation generated and saved to {doc_path}") + + logger.info(f"Documentation generation phase completed. {doc_count} docs generated.") + + return AndroidActionOutput(action_state=RunState.FINISH) diff --git a/metagpt/ext/android_assistant/actions/parse_record_an.py b/metagpt/ext/android_assistant/actions/parse_record_an.py new file mode 100644 index 000000000..210c93e23 --- /dev/null +++ b/metagpt/ext/android_assistant/actions/parse_record_an.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : the ActionNode to parse record + +from metagpt.actions.action_node import ActionNode + +OBSERVATION = ActionNode( + key="Observation", + expected_type=str, + instruction="Provide a description of your observations of the two images. " + "Subsequently, delineate the distinctions between the first image and the second one.", + example="", +) + +THOUGHT = ActionNode( + key="Thought", + expected_type=str, + instruction="Consider the impact of Action acting on UI elements.", + example="", +) + +DESCRIPTION = ActionNode( + key="Description", + expected_type=str, + instruction="Describe the functionality of the UI element concisely in one or two sentences Do not include " + "the numeric tag in your description", + example="", +) + +NODES = [OBSERVATION, THOUGHT, DESCRIPTION] + +RECORD_PARSE_NODE = ActionNode.from_children("RecordParse", NODES) diff --git a/metagpt/ext/android_assistant/actions/screenshot_parse.py b/metagpt/ext/android_assistant/actions/screenshot_parse.py new file mode 100644 index 000000000..4d8bb0e1e --- /dev/null +++ b/metagpt/ext/android_assistant/actions/screenshot_parse.py @@ -0,0 +1,204 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : LIKE scripts/task_executor.py in stage=act + +import ast +from pathlib import Path + +from metagpt.actions.action import Action +from metagpt.config2 import config +from metagpt.environment.android.android_env import AndroidEnv +from metagpt.environment.android.const import ADB_EXEC_FAIL +from metagpt.environment.android.env_space import ( + EnvAction, + EnvActionType, + EnvObsParams, + EnvObsType, +) +from metagpt.ext.android_assistant.actions.screenshot_parse_an import ( + SCREENSHOT_PARSE_NODE, +) +from metagpt.ext.android_assistant.prompts.assistant_prompt import ( + screenshot_parse_template, + screenshot_parse_with_grid_template, +) +from metagpt.ext.android_assistant.utils.schema import ( + AndroidActionOutput, + AndroidElement, + GridOpParam, + LongPressGridOpParam, + LongPressOpParam, + OpLogItem, + RunState, + SwipeGridOpParam, + SwipeOpParam, + TapGridOpParam, + TapOpParam, + TextOpParam, +) +from metagpt.ext.android_assistant.utils.utils import ( + area_to_xy, + draw_bbox_multi, + draw_grid, + elem_bbox_to_xy, + screenshot_parse_extract, + traverse_xml_tree, +) +from metagpt.logs import logger +from metagpt.utils.common import encode_image + + +class ScreenshotParse(Action): + name: str = "ScreenshotParse" + + def _makeup_ui_document(self, elem_list: list[AndroidElement], docs_idr: Path, use_exist_doc: bool = True) -> str: + if not use_exist_doc: + return "" + + ui_doc = """ +You also have access to the following documentations that describes the functionalities of UI +elements you can interact on the screen. These docs are crucial for you to determine the target of your +next action. You should always prioritize these documented elements for interaction: """ + for i, elem in enumerate(elem_list): + doc_path = docs_idr.joinpath(f"{elem.uid}.txt") + if not doc_path.exists(): + continue + try: + doc_content = ast.literal_eval(doc_path.read_text()) + except Exception as exp: + logger.error(f"ast parse doc: {doc_path} failed, exp: {exp}") + continue + + ui_doc += f"Documentation of UI element labeled with the numeric tag '{i + 1}':\n" + if doc_content["tap"]: + ui_doc += f"This UI element is clickable. {doc_content['tap']}\n\n" + if doc_content["text"]: + ui_doc += ( + f"This UI element can receive text input. The text input is used for the following " + f"purposes: {doc_content['text']}\n\n" + ) + if doc_content["long_press"]: + ui_doc += f"This UI element is long clickable. {doc_content['long_press']}\n\n" + if doc_content["v_swipe"]: + ui_doc += ( + f"This element can be swiped directly without tapping. You can swipe vertically on " + f"this UI element. {doc_content['v_swipe']}\n\n" + ) + if doc_content["h_swipe"]: + ui_doc += ( + f"This element can be swiped directly without tapping. You can swipe horizontally on " + f"this UI element. {doc_content['h_swipe']}\n\n" + ) + return ui_doc + + async def run( + self, + round_count: int, + task_desc: str, + last_act: str, + task_dir: Path, + docs_dir: Path, + grid_on: bool, + env: AndroidEnv, + ): + extra_config = config.extra + for path in [task_dir, docs_dir]: + path.mkdir(parents=True, exist_ok=True) + screenshot_path: Path = env.observe( + EnvObsParams(obs_type=EnvObsType.GET_SCREENSHOT, ss_name=f"{round_count}_before", local_save_dir=task_dir) + ) + xml_path: Path = env.observe( + EnvObsParams(obs_type=EnvObsType.GET_XML, xml_name=f"{round_count}", local_save_dir=task_dir) + ) + if not screenshot_path.exists() or not xml_path.exists(): + return AndroidActionOutput(action_state=RunState.FAIL) + + clickable_list = [] + focusable_list = [] + traverse_xml_tree(xml_path, clickable_list, "clickable", True) + traverse_xml_tree(xml_path, focusable_list, "focusable", True) + elem_list: list[AndroidElement] = clickable_list.copy() + for elem in focusable_list: + bbox = elem.bbox + center = (bbox[0][0] + bbox[1][0]) // 2, (bbox[0][1] + bbox[1][1]) // 2 + close = False + for e in clickable_list: + bbox = e.bbox + center_ = (bbox[0][0] + bbox[1][0]) // 2, (bbox[0][1] + bbox[1][1]) // 2 + dist = (abs(center[0] - center_[0]) ** 2 + abs(center[1] - center_[1]) ** 2) ** 0.5 + if dist <= extra_config.get("min_dist", 30): + close = True + break + if not close: + elem_list.append(elem) + + screenshot_labeled_path = task_dir.joinpath(f"{round_count}_labeled.png") + draw_bbox_multi(screenshot_path, screenshot_labeled_path, elem_list) + img_base64 = encode_image(screenshot_labeled_path) + + parse_template = screenshot_parse_with_grid_template if grid_on else screenshot_parse_template + + if grid_on: + env.rows, env.cols = draw_grid(screenshot_path, task_dir / f"{round_count}_grid.png") + + ui_doc = self._makeup_ui_document(elem_list, docs_dir) + context = parse_template.format(ui_document=ui_doc, task_description=task_desc, last_act=last_act) + node = await SCREENSHOT_PARSE_NODE.fill(context=context, llm=self.llm, images=[img_base64]) + + if "error" in node.content: + return AndroidActionOutput(action_state=RunState.FAIL) + + prompt = node.compile(context=context, schema="json", mode="auto") + OpLogItem(step=round_count, prompt=prompt, image=str(screenshot_labeled_path), response=node.content) + + op_param = screenshot_parse_extract(node.instruct_content.model_dump(), grid_on) + if op_param.param_state == RunState.FINISH: + logger.info(f"op_param: {op_param}") + return AndroidActionOutput(action_state=RunState.FINISH) + if op_param.param_state == RunState.FAIL: + return AndroidActionOutput(action_state=RunState.FAIL) + + last_act = op_param.last_act + if isinstance(op_param, TapOpParam): + x, y = elem_bbox_to_xy(elem_list[op_param.area - 1].bbox) + action = EnvAction(action_type=EnvActionType.SYSTEM_TAP, coord=(x, y)) + elif isinstance(op_param, TextOpParam): + action = EnvAction(action_type=EnvActionType.USER_INPUT, input_txt=op_param.input_str) + elif isinstance(op_param, LongPressOpParam): + x, y = elem_bbox_to_xy(elem_list[op_param.area - 1].bbox) + action = EnvAction(action_type=EnvActionType.USER_LONGPRESS, coord=(x, y)) + elif isinstance(op_param, SwipeOpParam): + x, y = elem_bbox_to_xy(elem_list[op_param.area - 1].bbox) + action = EnvAction( + action_type=EnvActionType.USER_SWIPE, coord=(x, y), orient=op_param.swipe_orient, dist=op_param.dist + ) + elif isinstance(op_param, GridOpParam): + grid_on = True + elif isinstance(op_param, TapGridOpParam) or isinstance(op_param, LongPressGridOpParam): + x, y = area_to_xy(op_param.area, op_param.subarea, env.width, env.height, env.rows, env.cols) + if isinstance(op_param, TapGridOpParam): + action = EnvAction(action_type=EnvActionType.SYSTEM_TAP, coord=(x, y)) + else: + # LongPressGridOpParam + action = EnvAction(action_type=EnvActionType.USER_LONGPRESS, coord=(x, y)) + elif isinstance(op_param, SwipeGridOpParam): + start_x, start_y = area_to_xy( + op_param.start_area, op_param.start_subarea, env.width, env.height, env.rows, env.cols + ) + end_x, end_y = area_to_xy( + op_param.end_area, op_param.end_subarea, env.width, env.height, env.rows, env.cols + ) + action = EnvAction( + action_type=EnvActionType.USER_SWIPE_TO, coord=(start_x, start_y), tgt_coord=(end_x, end_y) + ) + + if not grid_on: + obs, _, _, _, info = env.step(action) + action_res = info["res"] + if action_res == ADB_EXEC_FAIL: + return AndroidActionOutput(action_state=RunState.FAIL) + + if op_param.act_name != "grid": + grid_on = False + + return AndroidActionOutput(data={"grid_on": grid_on, "last_act": last_act}) diff --git a/metagpt/ext/android_assistant/actions/screenshot_parse_an.py b/metagpt/ext/android_assistant/actions/screenshot_parse_an.py new file mode 100644 index 000000000..eb23ba934 --- /dev/null +++ b/metagpt/ext/android_assistant/actions/screenshot_parse_an.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : the ActionNode to parse screenshot + +from metagpt.actions.action_node import ActionNode + +OBSERVATION = ActionNode( + key="Observation", expected_type=str, instruction="Describe what you observe in the image", example="" +) + +THOUGHT = ActionNode( + key="Thought", + expected_type=str, + instruction="To complete the given task, what is the next step I should do", + example="", +) + +ACTION = ActionNode( + key="Action", + expected_type=str, + instruction="The function call with the correct parameters to proceed with the task. If you believe the task is " + "completed or there is nothing to be done, you should output FINISH. You cannot output anything else " + "except a function call or FINISH in this field.", + example="", +) + +SUMMARY = ActionNode( + key="Summary", + expected_type=str, + instruction="Summarize your past actions along with your latest action in one or two sentences. Do not include " + "the numeric tag in your summary", + example="", +) + +SUMMARY_GRID = ActionNode( + key="Summary", + expected_type=str, + instruction="Summarize your past actions along with your latest action in one or two sentences. Do not include " + "the grid area number in your summary", + example="", +) + +NODES = [OBSERVATION, THOUGHT, ACTION, SUMMARY] + +NODES_GRID = [OBSERVATION, THOUGHT, ACTION, SUMMARY_GRID] + +SCREENSHOT_PARSE_NODE = ActionNode.from_children("ScreenshotParse", NODES) +SCREENSHOT_PARSE_GRID_NODE = ActionNode.from_children("ScreenshotParseGrid", NODES_GRID) diff --git a/metagpt/ext/android_assistant/actions/self_learn_and_reflect.py b/metagpt/ext/android_assistant/actions/self_learn_and_reflect.py new file mode 100644 index 000000000..5e9cfbb45 --- /dev/null +++ b/metagpt/ext/android_assistant/actions/self_learn_and_reflect.py @@ -0,0 +1,231 @@ +# !/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : LIKE scripts/self_explorer.py in stage=learn & mode=auto self_explore_task stage + +import ast +from pathlib import Path + +from metagpt.actions.action import Action +from metagpt.config2 import config +from metagpt.environment.android.android_env import AndroidEnv +from metagpt.environment.android.const import ADB_EXEC_FAIL +from metagpt.environment.android.env_space import ( + EnvAction, + EnvActionType, + EnvObsParams, + EnvObsType, +) +from metagpt.ext.android_assistant.actions.screenshot_parse_an import ( + SCREENSHOT_PARSE_NODE, +) +from metagpt.ext.android_assistant.actions.self_learn_reflect_an import ( + SELF_LEARN_REFLECT_NODE, +) +from metagpt.ext.android_assistant.prompts.assistant_prompt import ( + screenshot_parse_self_explore_reflect_template as reflect_template, +) +from metagpt.ext.android_assistant.prompts.assistant_prompt import ( + screenshot_parse_self_explore_template, +) +from metagpt.ext.android_assistant.utils.schema import ( + ActionOp, + AndroidActionOutput, + AndroidElement, + Decision, + DocContent, + LongPressOpParam, + OpLogItem, + ReflectLogItem, + RunState, + SwipeOp, + SwipeOpParam, + TapOpParam, + TextOpParam, +) +from metagpt.ext.android_assistant.utils.utils import ( + draw_bbox_multi, + elem_bbox_to_xy, + elem_list_from_xml_tree, + reflect_parse_extarct, + screenshot_parse_extract, +) +from metagpt.logs import logger +from metagpt.utils.common import encode_image + + +class SelfLearnAndReflect(Action): + name: str = "SelfLearnAndReflect" + + useless_list: list[str] = [] # store useless elements uid + + screenshot_before_path: str = "" + screenshot_before_base64: str = "" + elem_list: list[AndroidElement] = [] + swipe_orient: str = "up" + act_name: str = "" + ui_area: int = -1 + + async def run( + self, round_count: int, task_desc: str, last_act: str, task_dir: Path, docs_dir: Path, env: AndroidEnv + ) -> AndroidActionOutput: + for path in [task_dir, docs_dir]: + path.mkdir(parents=True, exist_ok=True) + resp = await self.run_self_learn(round_count, task_desc, last_act, task_dir, env) + if resp.action_state != RunState.SUCCESS: + return resp + + resp = await self.run_reflect(round_count, task_desc, last_act, task_dir, docs_dir, env) + return resp + + async def run_self_learn( + self, round_count: int, task_desc: str, last_act: str, task_dir: Path, env: AndroidEnv + ) -> AndroidActionOutput: + extra_config = config.extra + screenshot_path: Path = env.observe( + EnvObsParams(obs_type=EnvObsType.GET_SCREENSHOT, ss_name=f"{round_count}_before", local_save_dir=task_dir) + ) + xml_path: Path = env.observe( + EnvObsParams(obs_type=EnvObsType.GET_XML, xml_name=f"{round_count}", local_save_dir=task_dir) + ) + if not screenshot_path.exists() or not xml_path.exists(): + return AndroidActionOutput(action_state=RunState.FAIL) + + elem_list = elem_list_from_xml_tree(xml_path, self.useless_list, extra_config.get("min_dist", 30)) + + screenshot_before_labeled_path = task_dir.joinpath(f"{round_count}_before_labeled.png") + draw_bbox_multi(screenshot_path, screenshot_before_labeled_path, elem_list) + img_base64 = encode_image(screenshot_before_labeled_path) + self.screenshot_before_base64 = img_base64 + self.screenshot_before_path = screenshot_before_labeled_path + + self_explore_template = screenshot_parse_self_explore_template + context = self_explore_template.format(task_description=task_desc, last_act=last_act) + + node = await SCREENSHOT_PARSE_NODE.fill(context=context, llm=self.llm, images=[img_base64]) + logger.debug(f"fill result:{node}") + if "error" in node.content: + return AndroidActionOutput(action_state=RunState.FAIL) + prompt = node.compile(context=context, schema="json", mode="auto") + # Modify WindowsPath to Str + OpLogItem(step=round_count, prompt=prompt, image=str(screenshot_before_labeled_path), response=node.content) + op_param = screenshot_parse_extract(node.instruct_content.model_dump(), grid_on=False) + # TODO Modify Op_param. When op_param.action is FINISH, how to solve this ? + if op_param.param_state == RunState.FINISH: + return AndroidActionOutput(action_state=RunState.FINISH) + if op_param.param_state == RunState.FAIL: + return AndroidActionOutput(action_state=RunState.FAIL) + + if isinstance(op_param, TapOpParam): + self.ui_area = op_param.area + x, y = elem_bbox_to_xy(elem_list[op_param.area - 1].bbox) + action = EnvAction(action_type=EnvActionType.SYSTEM_TAP, coord=(x, y)) + elif isinstance(op_param, TextOpParam): + action = EnvAction(action_type=EnvActionType.USER_INPUT, input_txt=op_param.input_str) + elif isinstance(op_param, LongPressOpParam): + self.ui_area = op_param.area + x, y = elem_bbox_to_xy(elem_list[op_param.area - 1].bbox) + action = EnvAction(action_type=EnvActionType.USER_LONGPRESS, coord=(x, y)) + elif isinstance(op_param, SwipeOpParam): + self.ui_area = op_param.area + self.swipe_orient = op_param.swipe_orient + x, y = elem_bbox_to_xy(elem_list[op_param.area - 1].bbox) + action = EnvAction( + action_type=EnvActionType.USER_SWIPE, coord=(x, y), orient=op_param.swipe_orient, dist=op_param.dist + ) + + obs, _, _, _, info = env.step(action) + action_res = info["res"] + if action_res == ADB_EXEC_FAIL: + return AndroidActionOutput(action_state=RunState.FAIL) + + self.elem_list = elem_list + self.act_name = op_param.act_name + return AndroidActionOutput() + + async def run_reflect( + self, round_count: int, task_desc: str, last_act: str, task_dir: Path, docs_dir: Path, env: AndroidEnv + ) -> AndroidActionOutput: + screenshot_path: Path = env.observe( + EnvObsParams(obs_type=EnvObsType.GET_SCREENSHOT, ss_name=f"{round_count}_after", local_save_dir=task_dir) + ) + if not screenshot_path.exists(): + return AndroidActionOutput(action_state=RunState.FAIL) + + screenshot_after_labeled_path = task_dir.joinpath(f"{round_count}_after_labeled.png") + draw_bbox_multi(screenshot_path, screenshot_after_labeled_path, elem_list=self.elem_list) + img_base64 = encode_image(screenshot_after_labeled_path) + if self.act_name == ActionOp.TAP.value: + action = "tapping" + elif self.act_name == ActionOp.LONG_PRESS.value: + action = "long pressing" + elif self.act_name == ActionOp.SWIPE.value: + action = "swiping" + if self.swipe_orient == SwipeOp.UP.value or self.swipe_orient == SwipeOp.DOWN.value: + action = "v_swipe" + elif self.swipe_orient == SwipeOp.LEFT.value or self.swipe_orient == SwipeOp.RIGHT.value: + action = "h_swipe" + else: + # TODO Test for assignment, This error is eupiped with the next. + logger.warning(f"Current action name parse failed, it's `{self.act_name}`") + action = None + context = reflect_template.format( + action=action, ui_element=str(self.ui_area), task_desc=task_desc, last_act=last_act + ) + node = await SELF_LEARN_REFLECT_NODE.fill( + context=context, llm=self.llm, images=[self.screenshot_before_base64, img_base64] + ) + + if "error" in node.content: + return AndroidActionOutput(action_state=RunState.FAIL) + + prompt = node.compile(context=context, schema="json", mode="auto") + ReflectLogItem( + step=round_count, + prompt=prompt, + image_before=str(self.screenshot_before_path), + image_after=str(screenshot_after_labeled_path), + response=node.content, + ) + + op_param = reflect_parse_extarct(node.instruct_content.model_dump()) + if op_param.param_state == RunState.FINISH: + return AndroidActionOutput(action_state=RunState.FINISH) + if op_param.param_state == RunState.FAIL: + return AndroidActionOutput(action_state=RunState.FAIL) + + logger.info( + f"reflect_parse_extarct decision: {op_param.decision}, " + f"elem_list size: {len(self.elem_list)}, ui_area: {self.ui_area}" + ) + # TODO here will cause `IndexError: list index out of range`. + # Maybe you should clink back to the desktop in the simulator + resource_id = self.elem_list[int(self.ui_area) - 1].uid + if op_param.decision == Decision.INEFFECTIVE.value: + self.useless_list.append(resource_id) + last_act = "NONE" # TODO global + elif op_param.decision in [Decision.BACK.value, Decision.CONTINUE.value, Decision.SUCCESS.value]: + if op_param.decision in [Decision.BACK.value, Decision.CONTINUE.value]: + self.useless_list.append(resource_id) + last_act = "NONE" + if op_param.decision == Decision.BACK.value: + action = EnvAction(action_type=EnvActionType.SYSTEM_BACK) + obs, _, _, _, info = env.step(action) + if info["res"] == ADB_EXEC_FAIL: + return AndroidActionOutput(action_state=RunState.FAIL) + doc = op_param.documentation + doc_path = docs_dir.joinpath(f"{resource_id}.txt") + if doc_path.exists(): + try: + doc_content = ast.literal_eval(doc_path.read_text()) + except Exception as exp: + logger.error(f"ast parse doc: {doc_path} failed, exp: {exp}") + return AndroidActionOutput(action_state=RunState.FAIL) + + if doc_content[self.act_name]: + logger.info(f"Documentation for the element {resource_id} already exists.") + return AndroidActionOutput(action_state=RunState.FAIL) + else: + doc_content = DocContent() + setattr(doc_content, self.act_name, doc) + doc_path.write_text(str(doc_content)) + return AndroidActionOutput(data={"last_act": last_act}) diff --git a/metagpt/ext/android_assistant/actions/self_learn_reflect_an.py b/metagpt/ext/android_assistant/actions/self_learn_reflect_an.py new file mode 100644 index 000000000..305b7376a --- /dev/null +++ b/metagpt/ext/android_assistant/actions/self_learn_reflect_an.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : the ActionNode to parse Reflection + +from metagpt.actions.action_node import ActionNode + +DECISION = ActionNode( + key="Decision", expected_type=str, instruction="explain why you made this decision", example="BACK" +) + + +THOUGHT = ActionNode(key="Thought", expected_type=str, instruction="explain why you made this decision", example="") + + +DOCUMENTATION = ActionNode( + key="Documentation", expected_type=str, instruction="describe the function of the UI element", example="" +) + + +NODES = [DECISION, THOUGHT, DOCUMENTATION] +SELF_LEARN_REFLECT_NODE = ActionNode.from_children("SelfLearnReflect", NODES) diff --git a/metagpt/ext/android_assistant/prompts/__init__.py b/metagpt/ext/android_assistant/prompts/__init__.py new file mode 100644 index 000000000..2bcf8efd0 --- /dev/null +++ b/metagpt/ext/android_assistant/prompts/__init__.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : diff --git a/metagpt/ext/android_assistant/prompts/assistant_prompt.py b/metagpt/ext/android_assistant/prompts/assistant_prompt.py new file mode 100644 index 000000000..34baf5841 --- /dev/null +++ b/metagpt/ext/android_assistant/prompts/assistant_prompt.py @@ -0,0 +1,168 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : the prompt templates of assistant learning and acting + +screenshot_parse_template = """You are an agent that is trained to perform some basic tasks on a smartphone. You will be given a +smartphone screenshot. The interactive UI elements on the screenshot are labeled with numeric tags starting from 1. The +numeric tag of each interactive element is located in the center of the element. + +You can call the following functions to control the smartphone: + +1. tap(element: int) +This function is used to tap an UI element shown on the smartphone screen. +"element" is a numeric tag assigned to an UI element shown on the smartphone screen. +A simple use case can be tap(5), which taps the UI element labeled with the number 5. + +2. text(text_input: str) +This function is used to insert text input in an input field/box. text_input is the string you want to insert and must +be wrapped with double quotation marks. A simple use case can be text("Hello, world!"), which inserts the string +"Hello, world!" into the input area on the smartphone screen. This function is usually callable when you see a keyboard +showing in the lower half of the screen. + +3. long_press(element: int) +This function is used to long press an UI element shown on the smartphone screen. +"element" is a numeric tag assigned to an UI element shown on the smartphone screen. +A simple use case can be long_press(5), which long presses the UI element labeled with the number 5. + +4. swipe(element: int, direction: str, dist: str) +This function is used to swipe an UI element shown on the smartphone screen, usually a scroll view or a slide bar. +"element" is a numeric tag assigned to an UI element shown on the smartphone screen. "direction" is a string that +represents one of the four directions: up, down, left, right. "direction" must be wrapped with double quotation +marks. "dist" determines the distance of the swipe and can be one of the three options: short, medium, long. You should +choose the appropriate distance option according to your need. +A simple use case can be swipe(21, "up", "medium"), which swipes up the UI element labeled with the number 21 for a +medium distance. + +5. grid() +You should call this function when you find the element you want to interact with is not labeled with a numeric tag and +other elements with numeric tags cannot help with the task. The function will bring up a grid overlay to divide the +smartphone screen into small areas and this will give you more freedom to choose any part of the screen to tap, long +press, or swipe. +{ui_document} +The task you need to complete is to: {task_description}. Your past actions to proceed with this task are summarized as +follows: {last_act} +Now, given the documentation and the following labeled screenshot, you need to think and call the function needed to +proceed with the task. Your output should include three parts in the given format: + +You can only take one action at a time, so please directly call the function.""" + +screenshot_parse_with_grid_template = """You are an agent that is trained to perform some basic tasks on a smartphone. You will be given +a smartphone screenshot overlaid by a grid. The grid divides the screenshot into small square areas. Each area is +labeled with an integer in the top-left corner. + +You can call the following functions to control the smartphone: + +1. tap(area: int, subarea: str) +This function is used to tap a grid area shown on the smartphone screen. "area" is the integer label assigned to a grid +area shown on the smartphone screen. "subarea" is a string representing the exact location to tap within the grid area. +It can take one of the nine values: center, top-left, top, top-right, left, right, bottom-left, bottom, and +bottom-right. +A simple use case can be tap(5, "center"), which taps the exact center of the grid area labeled with the number 5. + +2. long_press(area: int, subarea: str) +This function is used to long press a grid area shown on the smartphone screen. "area" is the integer label assigned to +a grid area shown on the smartphone screen. "subarea" is a string representing the exact location to long press within +the grid area. It can take one of the nine values: center, top-left, top, top-right, left, right, bottom-left, bottom, +and bottom-right. +A simple use case can be long_press(7, "top-left"), which long presses the top left part of the grid area labeled with +the number 7. + +3. swipe(start_area: int, start_subarea: str, end_area: int, end_subarea: str) +This function is used to perform a swipe action on the smartphone screen, especially when you want to interact with a +scroll view or a slide bar. "start_area" is the integer label assigned to the grid area which marks the starting +location of the swipe. "start_subarea" is a string representing the exact location to begin the swipe within the grid +area. "end_area" is the integer label assigned to the grid area which marks the ending location of the swipe. +"end_subarea" is a string representing the exact location to end the swipe within the grid area. +The two subarea parameters can take one of the nine values: center, top-left, top, top-right, left, right, bottom-left, +bottom, and bottom-right. +A simple use case can be swipe(21, "center", 25, "right"), which performs a swipe starting from the center of grid area +21 to the right part of grid area 25. + +The task you need to complete is to: {task_description}. Your past actions to proceed with this task are summarized as +follows: {last_act} +Now, given the following labeled screenshot, you need to think and call the function needed to proceed with the task. +Your output should include three parts in the given format: + +You can only take one action at a time, so please directly call the function.""" + +screenshot_parse_self_explore_template = """You are an agent that is trained to complete certain tasks on a smartphone. You will be +given a screenshot of a smartphone app. The interactive UI elements on the screenshot are labeled with numeric tags +starting from 1. + +You can call the following functions to interact with those labeled elements to control the smartphone: + +1. tap(element: int) +This function is used to tap an UI element shown on the smartphone screen. +"element" is a numeric tag assigned to an UI element shown on the smartphone screen. +A simple use case can be tap(5), which taps the UI element labeled with the number 5. + +2. text(text_input: str) +This function is used to insert text input in an input field/box. text_input is the string you want to insert and must +be wrapped with double quotation marks. A simple use case can be text("Hello, world!"), which inserts the string +"Hello, world!" into the input area on the smartphone screen. This function is only callable when you see a keyboard +showing in the lower half of the screen. + +3. long_press(element: int) +This function is used to long press an UI element shown on the smartphone screen. +"element" is a numeric tag assigned to an UI element shown on the smartphone screen. +A simple use case can be long_press(5), which long presses the UI element labeled with the number 5. + +4. swipe(element: int, direction: str, dist: str) +This function is used to swipe an UI element shown on the smartphone screen, usually a scroll view or a slide bar. +"element" is a numeric tag assigned to an UI element shown on the smartphone screen. "direction" is a string that +represents one of the four directions: up, down, left, right. "direction" must be wrapped with double quotation +marks. "dist" determines the distance of the swipe and can be one of the three options: short, medium, long. You should +choose the appropriate distance option according to your need. +A simple use case can be swipe(21, "up", "medium"), which swipes up the UI element labeled with the number 21 for a +medium distance. + +The task you need to complete is to {task_description}. Your past actions to proceed with this task are summarized as +follows: {last_act} +Now, given the following labeled screenshot, you need to think and call the function needed to proceed with the task. +Your output should include three parts in the given format: + +You can only take one action at a time, so please directly call the function.""" + +screenshot_parse_self_explore_reflect_template = """I will give you screenshots of a mobile app before and after {action} the UI +element labeled with the number '{ui_element}' on the first screenshot. The numeric tag of each element is located at +the center of the element. The action of {action} this UI element was described as follows: +{last_act} +The action was also an attempt to proceed with a larger task, which is to {task_desc}. Your job is to carefully analyze +the difference between the two screenshots to determine if the action is in accord with the description above and at +the same time effectively moved the task forward. Your output should be determined based on the following situations: +1. BACK +If you think the action navigated you to a page where you cannot proceed with the given task, you should go back to the +previous interface. At the same time, describe the functionality of the UI element concisely in one or two sentences by +observing the difference between the two screenshots. Notice that your description of the UI element should focus on +the general function. Never include the numeric tag of the UI element in your description. You can use pronouns such as +"the UI element" to refer to the element. Your output should be in the following format: +Decision: BACK +Thought: +Documentation: +2. INEFFECTIVE +If you find the action changed nothing on the screen (screenshots before and after the action are identical), you +should continue to interact with other elements on the screen. Notice that if you find the location of the cursor +changed between the two screenshots, then they are not identical. Your output should be in the following format: +Decision: INEFFECTIVE +Thought: +Documentation: +3. CONTINUE +If you find the action changed something on the screen but does not reflect the action description above and did not +move the given task forward, you should continue to interact with other elements on the screen. At the same time, +describe the functionality of the UI element concisely in one or two sentences by observing the difference between the +two screenshots. Notice that your description of the UI element should focus on the general function. Never include the +numeric tag of the UI element in your description. You can use pronouns such as "the UI element" to refer to the +element. Your output should be in the following format: +Decision: CONTINUE +Thought: +Documentation: +4. SUCCESS +If you think the action successfully moved the task forward (even though it did not completed the task), you should +describe the functionality of the UI element concisely in one or two sentences. Notice that your description of the UI +element should focus on the general function. Never include the numeric tag of the UI element in your description. You +can use pronouns such as "the UI element" to refer to the element. Your output should be in the following format: +Decision: SUCCESS +Thought: +Documentation: +""" diff --git a/metagpt/ext/android_assistant/prompts/operation_prompt.py b/metagpt/ext/android_assistant/prompts/operation_prompt.py new file mode 100644 index 000000000..1bde53f04 --- /dev/null +++ b/metagpt/ext/android_assistant/prompts/operation_prompt.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : the prompt templates of phone operation + +tap_doc_template = """I will give you the screenshot of a mobile app before and after tapping the UI element labeled +with the number {ui_element} on the screen. The numeric tag of each element is located at the center of the element. +Tapping this UI element is a necessary part of proceeding with a larger task, which is to . Your task is to +describe the functionality of the UI element concisely in one or two sentences. Notice that your description of the UI +element should focus on the general function. For example, if the UI element is used to navigate to the chat window +with John, your description should not include the name of the specific person. Just say: "Tapping this area will +navigate the user to the chat window". Never include the numeric tag of the UI element in your description. You can use +pronouns such as "the UI element" to refer to the element.""" + +text_doc_template = """I will give you the screenshot of a mobile app before and after typing in the input area labeled +with the number {ui_element} on the screen. The numeric tag of each element is located at the center of the element. +Typing in this UI element is a necessary part of proceeding with a larger task, which is to . Your task is +to describe the functionality of the UI element concisely in one or two sentences. Notice that your description of the +UI element should focus on the general function. For example, if the change of the screenshot shows that the user typed +"How are you?" in the chat box, you do not need to mention the actual text. Just say: "This input area is used for the +user to type a message to send to the chat window.". Never include the numeric tag of the UI element in your +description. You can use pronouns such as "the UI element" to refer to the element.""" + +long_press_doc_template = """I will give you the screenshot of a mobile app before and after long pressing the UI +element labeled with the number {ui_element} on the screen. The numeric tag of each element is located at the center of +the element. Long pressing this UI element is a necessary part of proceeding with a larger task, which is to +. Your task is to describe the functionality of the UI element concisely in one or two sentences. Notice +that your description of the UI element should focus on the general function. For example, if long pressing the UI +element redirects the user to the chat window with John, your description should not include the name of the specific +person. Just say: "Long pressing this area will redirect the user to the chat window". Never include the numeric tag of +the UI element in your description. You can use pronouns such as "the UI element" to refer to the element.""" + +swipe_doc_template = """I will give you the screenshot of a mobile app before and after swiping the UI +element labeled with the number {ui_element} on the screen. The numeric tag of each element is located at the center of +the element. Swiping this UI element is a necessary part of proceeding with a larger task, which is to . +Your task is to describe the functionality of the UI element concisely in one or two sentences. Notice that your +description of the UI element should be as general as possible. For example, if swiping the UI element increases the +contrast ratio of an image of a building, your description should be just like this: "Swiping this area enables the +user to tune a specific parameter of the image". Never include the numeric tag of the UI element in your description. +You can use pronouns such as "the UI element" to refer to the element.""" + +refine_doc_suffix = """\nA documentation of this UI element generated from previous demos is shown below. Your +generated description should be based on this previous doc and optimize it. Notice that it is possible that your +understanding of the function of the UI element derived from the given screenshots conflicts with the previous doc, +because the function of a UI element can be flexible. In this case, your generated description should combine both. +Old documentation of this UI element: {old_doc}""" diff --git a/metagpt/ext/android_assistant/roles/__init__.py b/metagpt/ext/android_assistant/roles/__init__.py new file mode 100644 index 000000000..2bcf8efd0 --- /dev/null +++ b/metagpt/ext/android_assistant/roles/__init__.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : diff --git a/metagpt/ext/android_assistant/roles/android_assistant.py b/metagpt/ext/android_assistant/roles/android_assistant.py new file mode 100644 index 000000000..45636f519 --- /dev/null +++ b/metagpt/ext/android_assistant/roles/android_assistant.py @@ -0,0 +1,146 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : android assistant to learn from app operations and operate apps +import time +from datetime import datetime +from pathlib import Path +from typing import Optional + +from pydantic import Field + +from metagpt.actions.add_requirement import UserRequirement +from metagpt.config2 import config +from metagpt.const import EXAMPLE_PATH +from metagpt.ext.android_assistant.actions.manual_record import ManualRecord +from metagpt.ext.android_assistant.actions.parse_record import ParseRecord +from metagpt.ext.android_assistant.actions.screenshot_parse import ScreenshotParse +from metagpt.ext.android_assistant.actions.self_learn_and_reflect import ( + SelfLearnAndReflect, +) +from metagpt.ext.android_assistant.utils.schema import AndroidActionOutput, RunState +from metagpt.logs import logger +from metagpt.roles.role import Role, RoleReactMode +from metagpt.schema import Message + + +class AndroidAssistant(Role): + name: str = "Nick" + profile: str = "AndroidAssistant" + goal: str = "operate the mobile phone's apps with self-learn" + + task_desc: str = "" + round_count: int = 0 + last_act: str = "None" + output_root_dir: Optional[Path] = Field(default=None) + task_dir: Optional[Path] = Field(default=None) + docs_dir: Optional[Path] = Field(default=None) + grid_on: bool = Field(default=False) + + def __init__(self, **data): + super().__init__(**data) + + self._watch([UserRequirement, AndroidActionOutput]) + extra_config = config.extra + self.task_desc = extra_config.get("task_desc", "Just explore any app in this phone!") + app_name = extra_config.get("app_name", "demo") + data_dir = self.output_root_dir.absolute().joinpath("output") or EXAMPLE_PATH.joinpath( + "android_assistant/output" + ) + cur_datetime = datetime.fromtimestamp(int(time.time())).strftime("%Y-%m-%d_%H-%M-%S") + + """Firstly, we decide the state with user config, further, we can do it automatically, like if it's new app, + run the learn first and then do the act stage or learn it during the action. + """ + stage = extra_config.get("stage") + mode = extra_config.get("mode") + if stage == "learn" and mode == "manual": + # choose ManualRecord and then run ParseRecord + # Remember, only run each action only one time, no need to run n_round. + self.set_actions([ManualRecord, ParseRecord]) + self.task_dir = data_dir.joinpath(app_name, f"manual_learn_{cur_datetime}") + self.docs_dir = data_dir.joinpath(app_name, "manual_docs") + elif stage == "learn" and mode == "auto": + # choose SelfLearnAndReflect to run + self.set_actions([SelfLearnAndReflect]) + self.task_dir = data_dir.joinpath(app_name, f"auto_learn_{cur_datetime}") + self.docs_dir = data_dir.joinpath(app_name, "auto_docs") + elif stage == "act": + # choose ScreenshotParse to run + self.set_actions([ScreenshotParse]) + self.task_dir = data_dir.joinpath(app_name, f"act_{cur_datetime}") + if mode == "manual": + self.docs_dir = data_dir.joinpath(app_name, "manual_docs") + else: + self.docs_dir = data_dir.joinpath(app_name, "auto_docs") + else: + raise ValueError(f"invalid stage: {stage}, mode: {mode}") + + self._check_dir() + + self._set_react_mode(RoleReactMode.BY_ORDER) + + def _check_dir(self): + self.task_dir.mkdir(parents=True, exist_ok=True) + self.docs_dir.mkdir(parents=True, exist_ok=True) + + async def react(self) -> Message: + self.round_count += 1 + result = await super().react() + logger.debug(f"react result {result}") + return result + + async def _observe(self, ignore_memory=True) -> int: + """ignore old memory to make it run multi rounds inside a role""" + newest_msgs = self.rc.memory.get(k=1) + newest_msg = newest_msgs[0] if newest_msgs else None + if newest_msg and (RunState.SUCCESS.value.upper() not in newest_msg.content): + ignore_memory = False + state_val = newest_msg.content.split(".")[-1] # RoundCount: 1, action_state: RunState.SUCCESS + logger.warning(f"Latest action_state is {state_val}, will run in the remainder rounds without `react`") + return await super()._observe(ignore_memory) + + async def _act(self) -> Message: + logger.info(f"{self._setting}: to do {self.rc.todo}({self.rc.todo.name})") + todo = self.rc.todo + if isinstance(todo, ManualRecord): + resp = await todo.run(task_dir=self.task_dir, task_desc=self.task_desc, env=self.rc.env) + elif isinstance(todo, ParseRecord): + resp = await todo.run( + task_dir=self.task_dir, + docs_dir=self.docs_dir, + ) + elif isinstance(todo, SelfLearnAndReflect): + resp = await todo.run( + round_count=self.round_count, + task_desc=self.task_desc, + last_act=self.last_act, + task_dir=self.task_dir, + docs_dir=self.docs_dir, + env=self.rc.env, + ) + if resp.action_state == RunState.SUCCESS: + self.last_act = resp.data.get("last_act") + elif isinstance(todo, ScreenshotParse): + resp = await todo.run( + round_count=self.round_count, + task_desc=self.task_desc, + last_act=self.last_act, + task_dir=self.task_dir, + docs_dir=self.docs_dir, + grid_on=self.grid_on, + env=self.rc.env, + ) + if resp.action_state == RunState.SUCCESS: + logger.info(f"grid_on: {resp.data.get('grid_on')}") + self.grid_on = resp.data.get("grid_on", False) + self.last_act = resp.data.get("last_act", "None") + msg = Message( + content=f"RoundCount: {self.round_count}, action_state: {resp.action_state}", + role=self.profile, + cause_by=type(resp), + send_from=self.name, + send_to=self.name, + ) + + self.rc.memory.add(msg) + return msg diff --git a/metagpt/ext/android_assistant/utils/__init__.py b/metagpt/ext/android_assistant/utils/__init__.py new file mode 100644 index 000000000..2bcf8efd0 --- /dev/null +++ b/metagpt/ext/android_assistant/utils/__init__.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : diff --git a/metagpt/ext/android_assistant/utils/schema.py b/metagpt/ext/android_assistant/utils/schema.py new file mode 100644 index 000000000..c066f98b6 --- /dev/null +++ b/metagpt/ext/android_assistant/utils/schema.py @@ -0,0 +1,158 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : + +from enum import Enum + +from pydantic import BaseModel, Field, field_validator + + +class ActionOp(Enum): + TAP = "tap" + LONG_PRESS = "long_press" + TEXT = "text" + SWIPE = "swipe" + VERTICAL_SWIPE = "v_swipe" + HORIZONTAL_SWIPE = "h_swipe" + GRID = "grid" + STOP = "stop" + + +class SwipeOp(Enum): + UP = "up" + DOWN = "down" + LEFT = "left" + RIGHT = "right" + + +class Decision(Enum): + BACK = "BACK" + INEFFECTIVE = "INEFFECTIVE" + CONTINUE = "CONTINUE" + SUCCESS = "SUCCESS" + + @classmethod + def values(cls): + return [item.value for item in cls] + + +class AndroidElement(BaseModel): + """UI Element""" + + uid: str = Field(default="") + bbox: tuple[tuple[int, int], tuple[int, int]] = Field(default={}) + attrib: str = Field(default="") + + +class OpLogItem(BaseModel): + """log content for self-learn or task act""" + + step: int = Field(default=0) + prompt: str = Field(default="") + image: str = Field(default="") + response: str = Field(default="") + + +class ReflectLogItem(BaseModel): + """log content for self-learn-reflect""" + + step: int = Field(default=0) + prompt: str = Field(default="") + image_before: str = Field(default="") + image_after: str = Field(default="") + response: str = Field(default="") + + +class RecordLogItem(BaseModel): + """log content for record parse, same as ReflectLogItem""" + + step: int = Field(default=0) + prompt: str = Field(default="") + image_before: str = Field(default="") + image_after: str = Field(default="") + response: str = Field(default="") + + +class DocContent(BaseModel): + tap: str = Field(default="") + text: str = Field(default="") + v_swipe: str = Field(default="") + h_swipe: str = Field(default="") + long_press: str = Field(default="") + + +# start =================== define different Action Op and its params ============= +class RunState(Enum): + """run state""" + + SUCCESS = "success" + FINISH = "finish" + FAIL = "fail" + + +class BaseOpParam(BaseModel): + act_name: str = Field(default="", validate_default=True) + last_act: str = Field(default="None") + param_state: RunState = Field(default=RunState.SUCCESS, description="return state when extract params") + + +class TapOpParam(BaseOpParam): + area: int = Field(default=-1) + + +class TextOpParam(BaseOpParam): + input_str: str = Field(default="") + + +class LongPressOpParam(BaseOpParam): + area: int = Field(default=-1) + + +# Modify This SwipeOp to SwipeOpParam, Need better name +class SwipeOpParam(BaseOpParam): + area: int = Field(default=-1) + swipe_orient: str = Field(default="up") + dist: str = Field(default="") + + +class GridOpParam(BaseOpParam): + act_name: str = Field(default="") + + +class BaseGridOpParam(BaseOpParam): + @field_validator("act_name", mode="before") + @classmethod + def check_act_name(cls, act_name: str) -> str: + return f"{act_name}_grid" + + +class TapGridOpParam(BaseGridOpParam): + area: int = Field(default=-1) + subarea: str = Field(default="") + + +class LongPressGridOpParam(BaseGridOpParam): + area: int = Field(default=-1) + subarea: str = Field(default="") + + +class SwipeGridOpParam(BaseGridOpParam): + start_area: int = Field(default=-1) + start_subarea: str = Field(default="") + end_area: int = Field(default=-1) + end_subarea: str = Field(default="") + + +# end =================== define different Action Op and its params ============= + + +class ReflectOp(BaseModel): + decision: str = "" + thought: str = "" + documentation: str = "" + param_state: RunState = RunState.SUCCESS + + +class AndroidActionOutput(BaseModel): + data: dict = Field(default=dict()) + action_state: RunState = Field(default=RunState.SUCCESS) diff --git a/metagpt/ext/android_assistant/utils/utils.py b/metagpt/ext/android_assistant/utils/utils.py new file mode 100644 index 000000000..f1fa13869 --- /dev/null +++ b/metagpt/ext/android_assistant/utils/utils.py @@ -0,0 +1,329 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : + +import re +from pathlib import Path +from typing import Union +from xml.etree.ElementTree import Element, iterparse + +import cv2 +import pyshine as ps + +from metagpt.config2 import config +from metagpt.ext.android_assistant.utils.schema import ( + ActionOp, + AndroidElement, + BaseGridOpParam, + BaseOpParam, + Decision, + GridOpParam, + LongPressGridOpParam, + LongPressOpParam, + ReflectOp, + RunState, + SwipeGridOpParam, + SwipeOpParam, + TapGridOpParam, + TapOpParam, + TextOpParam, +) +from metagpt.logs import logger + + +def get_id_from_element(elem: Element) -> str: + bounds = elem.attrib["bounds"][1:-1].split("][") + x1, y1 = map(int, bounds[0].split(",")) + x2, y2 = map(int, bounds[1].split(",")) + elem_w, elem_h = x2 - x1, y2 - y1 + if "resource-id" in elem.attrib and elem.attrib["resource-id"]: + elem_id = elem.attrib["resource-id"].replace(":", ".").replace("/", "_") + else: + elem_id = f"{elem.attrib['class']}_{elem_w}_{elem_h}" + if "content-desc" in elem.attrib and elem.attrib["content-desc"] and len(elem.attrib["content-desc"]) < 20: + content_desc = elem.attrib["content-desc"].replace("/", "_").replace(" ", "").replace(":", "_") + elem_id += f"_{content_desc}" + return elem_id + + +def traverse_xml_tree(xml_path: Path, elem_list: list[AndroidElement], attrib: str, add_index=False): + path = [] + extra_config = config.extra + for event, elem in iterparse(str(xml_path), ["start", "end"]): + if event == "start": + path.append(elem) + if attrib in elem.attrib and elem.attrib[attrib] == "true": + parent_prefix = "" + if len(path) > 1: + parent_prefix = get_id_from_element(path[-2]) + bounds = elem.attrib["bounds"][1:-1].split("][") + x1, y1 = map(int, bounds[0].split(",")) + x2, y2 = map(int, bounds[1].split(",")) + center = (x1 + x2) // 2, (y1 + y2) // 2 + elem_id = get_id_from_element(elem) + if parent_prefix: + elem_id = parent_prefix + "_" + elem_id + if add_index: + elem_id += f"_{elem.attrib['index']}" + close = False + for e in elem_list: + bbox = e.bbox + center_ = (bbox[0][0] + bbox[1][0]) // 2, (bbox[0][1] + bbox[1][1]) // 2 + dist = (abs(center[0] - center_[0]) ** 2 + abs(center[1] - center_[1]) ** 2) ** 0.5 + if dist <= extra_config.get("min_dist", 30): + close = True + break + if not close: + elem_list.append(AndroidElement(uid=elem_id, bbox=((x1, y1), (x2, y2)), attrib=attrib)) + + if event == "end": + path.pop() + + +def elem_list_from_xml_tree(xml_path: Path, useless_list: list[str], min_dist: int) -> list[AndroidElement]: + clickable_list = [] + focusable_list = [] + traverse_xml_tree(xml_path, clickable_list, "clickable", True) + traverse_xml_tree(xml_path, focusable_list, "focusable", True) + elem_list = [] + for elem in clickable_list: + if elem.uid in useless_list: + continue + elem_list.append(elem) + for elem in focusable_list: + if elem.uid in useless_list: + continue + bbox = elem.bbox + center = (bbox[0][0] + bbox[1][0]) // 2, (bbox[0][1] + bbox[1][1]) // 2 + close = False + for e in clickable_list: + bbox = e.bbox + center_ = (bbox[0][0] + bbox[1][0]) // 2, (bbox[0][1] + bbox[1][1]) // 2 + dist = (abs(center[0] - center_[0]) ** 2 + abs(center[1] - center_[1]) ** 2) ** 0.5 + if dist <= min_dist: + close = True + break + if not close: + elem_list.append(elem) + return elem_list + + +def draw_bbox_multi( + img_path: Path, + output_path: Path, + elem_list: list[AndroidElement], + record_mode: bool = False, + dark_mode: bool = False, +): + imgcv = cv2.imread(str(img_path)) + count = 1 + for elem in elem_list: + try: + top_left = elem.bbox[0] + bottom_right = elem.bbox[1] + left, top = top_left[0], top_left[1] + right, bottom = bottom_right[0], bottom_right[1] + label = str(count) + if record_mode: + if elem.attrib == "clickable": + color = (250, 0, 0) + elif elem.attrib == "focusable": + color = (0, 0, 250) + else: + color = (0, 250, 0) + imgcv = ps.putBText( + imgcv, + label, + text_offset_x=(left + right) // 2 + 10, + text_offset_y=(top + bottom) // 2 + 10, + vspace=10, + hspace=10, + font_scale=1, + thickness=2, + background_RGB=color, + text_RGB=(255, 250, 250), + alpha=0.5, + ) + else: + text_color = (10, 10, 10) if dark_mode else (255, 250, 250) + bg_color = (255, 250, 250) if dark_mode else (10, 10, 10) + imgcv = ps.putBText( + imgcv, + label, + text_offset_x=(left + right) // 2 + 10, + text_offset_y=(top + bottom) // 2 + 10, + vspace=10, + hspace=10, + font_scale=1, + thickness=2, + background_RGB=bg_color, + text_RGB=text_color, + alpha=0.5, + ) + except Exception as e: + logger.error(f"ERROR: An exception occurs while labeling the image\n{e}") + count += 1 + cv2.imwrite(str(output_path), imgcv) + return imgcv + + +def draw_grid(img_path: Path, output_path: Path) -> tuple[int, int]: + def get_unit_len(n): + for i in range(1, n + 1): + if n % i == 0 and 120 <= i <= 180: + return i + return -1 + + image = cv2.imread(str(img_path)) + height, width, _ = image.shape + color = (255, 116, 113) + unit_height = get_unit_len(height) + if unit_height < 0: + unit_height = 120 + unit_width = get_unit_len(width) + if unit_width < 0: + unit_width = 120 + thick = int(unit_width // 50) + rows = height // unit_height + cols = width // unit_width + for i in range(rows): + for j in range(cols): + label = i * cols + j + 1 + left = int(j * unit_width) + top = int(i * unit_height) + right = int((j + 1) * unit_width) + bottom = int((i + 1) * unit_height) + cv2.rectangle(image, (left, top), (right, bottom), color, thick // 2) + cv2.putText( + image, + str(label), + (left + int(unit_width * 0.05) + 3, top + int(unit_height * 0.3) + 3), + 0, + int(0.01 * unit_width), + (0, 0, 0), + thick, + ) + cv2.putText( + image, + str(label), + (left + int(unit_width * 0.05), top + int(unit_height * 0.3)), + 0, + int(0.01 * unit_width), + color, + thick, + ) + cv2.imwrite(str(output_path), image) + return rows, cols + + +def area_to_xy(area: int, subarea: str, width: int, height: int, rows: int, cols: int) -> tuple[int, int]: + area -= 1 + row, col = area // cols, area % cols + x_0, y_0 = col * (width // cols), row * (height // rows) + if subarea == "top-left": + x, y = x_0 + (width // cols) // 4, y_0 + (height // rows) // 4 + elif subarea == "top": + x, y = x_0 + (width // cols) // 2, y_0 + (height // rows) // 4 + elif subarea == "top-right": + x, y = x_0 + (width // cols) * 3 // 4, y_0 + (height // rows) // 4 + elif subarea == "left": + x, y = x_0 + (width // cols) // 4, y_0 + (height // rows) // 2 + elif subarea == "right": + x, y = x_0 + (width // cols) * 3 // 4, y_0 + (height // rows) // 2 + elif subarea == "bottom-left": + x, y = x_0 + (width // cols) // 4, y_0 + (height // rows) * 3 // 4 + elif subarea == "bottom": + x, y = x_0 + (width // cols) // 2, y_0 + (height // rows) * 3 // 4 + elif subarea == "bottom-right": + x, y = x_0 + (width // cols) * 3 // 4, y_0 + (height // rows) * 3 // 4 + else: + x, y = x_0 + (width // cols) // 2, y_0 + (height // rows) // 2 + return x, y + + +def elem_bbox_to_xy(bbox: tuple[tuple[int, int], tuple[int, int]]) -> tuple[int, int]: + tl, br = bbox + x, y = (tl[0] + br[0]) // 2, (tl[1] + br[1]) // 2 + return x, y + + +def reflect_parse_extarct(parsed_json: dict) -> ReflectOp: + decision = parsed_json.get("Decision") + if decision not in Decision.values(): + op = ReflectOp(param_state=RunState.FAIL) + else: + op = ReflectOp( + decision=parsed_json.get("Decision"), + thought=parsed_json.get("Thought"), + documentation=parsed_json.get("Documentation"), + ) + return op + + +def screenshot_parse_extract( + parsed_json: dict, grid_on: bool = False +) -> Union[BaseOpParam, BaseGridOpParam, GridOpParam]: + act = parsed_json.get("Action") + last_act = parsed_json.get("Summary") + act_name = act.split("(")[0] + + if RunState.FINISH.value.upper() in act: + return BaseOpParam(param_state=RunState.FINISH) + + if grid_on: + return screenshot_parse_extract_with_grid(act_name, act, last_act) + else: + return screenshot_parse_extract_without_grid(act_name, act, last_act) + + +def op_params_clean(params: list[str]) -> list[Union[int, str]]: + param_values = [] + for param_value in params: + if '"' in param_value or "'" in param_value: # remove `"` + param_values.append(param_value.strip()[1:-1]) + else: + param_values.append(int(param_value)) + return param_values + + +def screenshot_parse_extract_without_grid(act_name: str, act: str, last_act: str) -> Union[BaseOpParam, GridOpParam]: + if act_name == ActionOp.TAP.value: + area = int(re.findall(r"tap\((.*?)\)", act)[0]) + op = TapOpParam(act_name=act_name, area=area, last_act=last_act) + elif act_name == ActionOp.TEXT.value: + input_str = re.findall(r"text\((.*?)\)", act)[0][1:-1] + op = TextOpParam(act_name=act_name, input_str=input_str, last_act=last_act) + elif act_name == ActionOp.LONG_PRESS.value: + area = int(re.findall(r"long_press\((.*?)\)", act)[0]) + op = LongPressOpParam(act_name=act_name, area=area, last_act=last_act) + elif act_name == ActionOp.SWIPE.value: + params = re.findall(r"swipe\((.*?)\)", act)[0].split(",") + params = op_params_clean(params) # area, swipe_orient, dist + op = SwipeOpParam(act_name=act_name, area=params[0], swipe_orient=params[1], dist=params[2], last_act=last_act) + elif act_name == ActionOp.GRID.value: + op = GridOpParam(act_name=act_name) + else: + op = BaseOpParam(param_state=RunState.FAIL) + return op + + +def screenshot_parse_extract_with_grid(act_name: str, act: str, last_act: str) -> Union[BaseGridOpParam, GridOpParam]: + if act_name == ActionOp.TAP.value: + params = re.findall(r"tap\((.*?)\)", act)[0].split(",") + params = op_params_clean(params) + op = TapGridOpParam(act_name=act_name, area=params[0], subarea=params[1], last_act=last_act) + elif act_name == ActionOp.LONG_PRESS.value: + params = re.findall(r"long_press\((.*?)\)", act)[0].split(",") + params = op_params_clean(params) + op = LongPressGridOpParam(act_name=act_name, area=params[0], subarea=params[1], last_act=last_act) + elif act_name == ActionOp.SWIPE.value: + params = re.findall(r"swipe\((.*?)\)", act)[0].split(",") + params = op_params_clean(params) + op = SwipeGridOpParam( + act_name=act_name, start_area=params[0], start_subarea=params[1], end_area=params[2], end_subarea=params[3] + ) + elif act_name == ActionOp.GRID.value: + op = GridOpParam(act_name=act_name) + else: + op = BaseGridOpParam(param_state=RunState.FAIL) + return op diff --git a/metagpt/ext/stanford_town/README.md b/metagpt/ext/stanford_town/README.md new file mode 100644 index 000000000..1bdcac145 --- /dev/null +++ b/metagpt/ext/stanford_town/README.md @@ -0,0 +1,51 @@ +## Stanford Town Game + +### Pre-Description +In order to facilitate GA( [generative_agents](https://github.com/joonspk-research/generative_agents) )'s frontend docking data (to avoid changing its code), you can set the value `temp_storage_path` to `temp_storage` of `generative_agents` when start `run_st_game.py`. like + +`python3 run_st_game.py --temp_storage_path path/to/ga/temp_storage xxx` + +Or change the path under `const.py` like beflow + +``` +STORAGE_PATH = EXAMPLE_PATH.joinpath("storage") +TEMP_STORAGE_PATH = EXAMPLE_PATH.joinpath("temp_storage") +# updated +STORAGE_PATH = Path("{path/to/ga/storage}") +TEMP_STORAGE_PATH = Path("{path/to/ga/temp_storage}") +``` + +This can be used to achieve docking of simulation data without changing the GA code. Otherwise, the GA code must be modified to adapt to the MG output path. + +If you don't want to start from 0, copy other simulation directories under `generative_agents/environment/frontend_server/storage/` to `examples/stanford_town/storage`, and select a directory named `fork_sim_code`. + +### Backend service startup +The execution entry is `python3 run_st_game.py "Host a open lunch party at 13:00 pm" "base_the_ville_isabella_maria_klaus" "test_sim" 10` +or +`python3 run_st_game.py "Host a open lunch party at 13:00 pm" "base_the_ville_isabella_maria_klaus" "test_sim" 10 --temp_storage_path path/to/ga/temp_storage` + +`idea` is the user's voice to the first Agent, and it is disseminated through this voice to see whether the final multi-agents achieve the goal of hosting or participating in the event. + +### Frontend service startup +Enter project folder `generative_agents` + +Enter `environment/frontend_server` and use `python3 manage.py runserver` to start the front-end service. +Visit `http://localhost:8000/simulator_home` to enter the current simulation interface. + +## Acknowledgements +The reproduction work has referred the [generative_agents](https://github.com/joonspk-research/generative_agents), let's make a general statement here. + +### Citation +```bib +@inproceedings{Park2023GenerativeAgents, +author = {Park, Joon Sung and O'Brien, Joseph C. and Cai, Carrie J. and Morris, Meredith Ringel and Liang, Percy and Bernstein, Michael S.}, +title = {Generative Agents: Interactive Simulacra of Human Behavior}, +year = {2023}, +publisher = {Association for Computing Machinery}, +address = {New York, NY, USA}, +booktitle = {In the 36th Annual ACM Symposium on User Interface Software and Technology (UIST '23)}, +keywords = {Human-AI interaction, agents, generative AI, large language models}, +location = {San Francisco, CA, USA}, +series = {UIST '23} +} +``` \ No newline at end of file diff --git a/metagpt/ext/stanford_town/README_CN.md b/metagpt/ext/stanford_town/README_CN.md new file mode 100644 index 000000000..3daf68d08 --- /dev/null +++ b/metagpt/ext/stanford_town/README_CN.md @@ -0,0 +1,50 @@ +## Stanford Town Game + +### 前置 +为了方便GA( [generative_agents](https://github.com/joonspk-research/generative_agents) )的前端对接数据(避免改动它那块的代码),可在启动`run_st_game.py`加上`temp_storage_path`指向`generative_agents`对应的`temp_storage`路径。比如 + +`python3 run_st_game.py --temp_storage_path path/to/ga/temp_storage xxx` + +或将`const.py`下的 + +``` +STORAGE_PATH = EXAMPLE_PATH.joinpath("storage") +TEMP_STORAGE_PATH = EXAMPLE_PATH.joinpath("temp_storage") +# 更新为 +STORAGE_PATH = Path("{path/to/ga/storage}") +TEMP_STORAGE_PATH = Path("{path/to/ga/temp_storage}") +``` +这样可用实现不改变GA代码情况下,实现仿真数据的对接。不然得修改GA的代码来适配MG的输出路径。 + +如果你不想从0开始启动,拷贝`generative_agents/environment/frontend_server/storage/`下的其他仿真目录到`examples/stanford_town/storage`,并选择一个目录名作为`fork_sim_code`。 + +### 后端服务启动 +执行入口为:`python3 run_st_game.py "Host a open lunch party at 13:00 pm" "base_the_ville_isabella_maria_klaus" "test_sim" 10` +或者 +`python3 run_st_game.py "Host a open lunch party at 13:00 pm" "base_the_ville_isabella_maria_klaus" "test_sim" 10 --temp_storage_path path/to/ga/temp_storage` + +`idea`为用户给第一个Agent的用户心声,并通过这个心声进行传播,看最后多智能体是否达到举办、参加活动的目标。 + +### 前端服务启动 +进入`generative_agents`项目目录 + +进入`environment/frontend_server`,使用`python3 manage.py runserver`启动前端服务。 +访问`http://localhost:8000/simulator_home` 进入当前的仿真界面。 + +## 致谢 +复现工作参考了 [generative_agents](https://github.com/joonspk-research/generative_agents), 感谢相关作者们。 + +### 引用 +```bib +@inproceedings{Park2023GenerativeAgents, +author = {Park, Joon Sung and O'Brien, Joseph C. and Cai, Carrie J. and Morris, Meredith Ringel and Liang, Percy and Bernstein, Michael S.}, +title = {Generative Agents: Interactive Simulacra of Human Behavior}, +year = {2023}, +publisher = {Association for Computing Machinery}, +address = {New York, NY, USA}, +booktitle = {In the 36th Annual ACM Symposium on User Interface Software and Technology (UIST '23)}, +keywords = {Human-AI interaction, agents, generative AI, large language models}, +location = {San Francisco, CA, USA}, +series = {UIST '23} +} +``` diff --git a/metagpt/ext/stanford_town/__init__.py b/metagpt/ext/stanford_town/__init__.py new file mode 100644 index 000000000..56ea35c9f --- /dev/null +++ b/metagpt/ext/stanford_town/__init__.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : stanford town implement diff --git a/metagpt/ext/stanford_town/actions/__init__.py b/metagpt/ext/stanford_town/actions/__init__.py new file mode 100644 index 000000000..2bcf8efd0 --- /dev/null +++ b/metagpt/ext/stanford_town/actions/__init__.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : diff --git a/metagpt/ext/stanford_town/actions/agent_chat_sum_rel.py b/metagpt/ext/stanford_town/actions/agent_chat_sum_rel.py new file mode 100644 index 000000000..98d370bb0 --- /dev/null +++ b/metagpt/ext/stanford_town/actions/agent_chat_sum_rel.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : summarize relationship in a agent chat + +from metagpt.ext.stanford_town.actions.st_action import STAction +from metagpt.logs import logger + + +class AgentChatSumRel(STAction): + name: str = "AgentChatSumRel" + + def _func_validate(self, llm_resp: str, prompt: str) -> bool: + resp = False + try: + _ = llm_resp.split('"')[0].strip() + resp = True + except Exception: + pass + return resp + + def _func_cleanup(self, llm_resp: str, prompt: str) -> str: + return llm_resp.split('"')[0].strip() + + def _func_fail_default_resp(self) -> str: + pass + + async def run(self, init_role: "STRole", target_role: "STRole", statements: str) -> str: + def create_prompt_input(init_role: "STRole", target_role: "STRole", statements: str) -> str: + prompt_input = [statements, init_role.name, target_role.name] + return prompt_input + + prompt_input = create_prompt_input(init_role, target_role, statements) + prompt = self.generate_prompt_with_tmpl_filename(prompt_input, "summarize_chat_relationship_v2.txt") + + example_output = "Jane Doe is working on a project" + special_instruction = "The output should be a string that responds to the question." + output = await self._run_gpt35(prompt, example_output, special_instruction) + logger.info(f"Role: {init_role.name} Action: {self.cls_name} output: {output}") + return output diff --git a/metagpt/ext/stanford_town/actions/decide_to_talk.py b/metagpt/ext/stanford_town/actions/decide_to_talk.py new file mode 100644 index 000000000..a393f31af --- /dev/null +++ b/metagpt/ext/stanford_town/actions/decide_to_talk.py @@ -0,0 +1,97 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : device to talk to another role, return yes or no + +from metagpt.ext.stanford_town.actions.st_action import STAction +from metagpt.logs import logger + + +class DecideToTalk(STAction): + name: str = "DecideToTalk" + + def _func_validate(self, llm_resp: str, prompt: str) -> bool: + resp = False + try: + if llm_resp.split("Answer in yes or no:")[-1].strip().lower() in ["yes", "no"]: + resp = True + except ValueError: + pass + return resp + + def _func_cleanup(self, llm_resp: str, prompt: str) -> str: + return llm_resp.split("Answer in yes or no:")[-1].strip().lower() + + def _func_fail_default_resp(self) -> str: + return "yes" + + async def run(self, init_role: "STRole", target_role: "STRole", retrieved: dict, *args, **kwargs) -> bool: + """Run action""" + + def create_prompt_input(init_role: "STRole", target_role: "STRole", retrieved: dict) -> str: + scratch = init_role.rc.scratch + target_scratch = target_role.rc.scratch + last_chat = init_role.rc.memory.get_last_chat(target_role.name) + last_chatted_time = "" + last_chat_about = "" + if last_chat: + last_chatted_time = last_chat.created.strftime("%B %d, %Y, %H:%M:%S") + last_chat_about = last_chat.description + + context = "" + for c_node in retrieved["events"]: + curr_desc = c_node.description.split(" ") + curr_desc[2:3] = ["was"] + curr_desc = " ".join(curr_desc) + context += f"{curr_desc}. " + context += "\n" + for c_node in retrieved["thoughts"]: + context += f"{c_node.description}. " + + curr_time = scratch.curr_time.strftime("%B %d, %Y, %H:%M:%S %p") + init_act_desc = scratch.act_description + if "(" in init_act_desc: + init_act_desc = init_act_desc.split("(")[-1][:-1] + + if len(scratch.planned_path) == 0 and "waiting" not in init_act_desc: + init_p_desc = f"{init_role.name} is already {init_act_desc}" + elif "waiting" in init_act_desc: + init_p_desc = f"{init_role.name} is {init_act_desc}" + else: + init_p_desc = f"{init_role.name} is on the way to {init_act_desc}" + + target_act_desc = scratch.act_description + if "(" in target_act_desc: + target_act_desc = target_act_desc.split("(")[-1][:-1] + + if len(target_scratch.planned_path) == 0 and "waiting" not in init_act_desc: + target_p_desc = f"{target_role.name} is already {target_act_desc}" + elif "waiting" in init_act_desc: + target_p_desc = f"{init_role.name} is {init_act_desc}" + else: + target_p_desc = f"{target_role.name} is on the way to {target_act_desc}" + + prompt_input = [] + prompt_input += [context] + + prompt_input += [curr_time] + + prompt_input += [init_role.name] + prompt_input += [target_role.name] + prompt_input += [last_chatted_time] + prompt_input += [last_chat_about] + + prompt_input += [init_p_desc] + prompt_input += [target_p_desc] + prompt_input += [init_role.name] + prompt_input += [target_role.name] + return prompt_input + + prompt_input = create_prompt_input(init_role, target_role, retrieved) + prompt = self.generate_prompt_with_tmpl_filename( + prompt_input=prompt_input, tmpl_filename="decide_to_talk_v2.txt" + ) + self.fail_default_resp = self._func_fail_default_resp() + output = await self._run_gpt35_max_tokens(prompt, max_tokens=20) # yes or no + result = True if output == "yes" else False + logger.info(f"Role: {init_role.name} Action: {self.cls_name} output: {result}") + return result diff --git a/metagpt/ext/stanford_town/actions/dummy_action.py b/metagpt/ext/stanford_town/actions/dummy_action.py new file mode 100644 index 000000000..a5004d5ef --- /dev/null +++ b/metagpt/ext/stanford_town/actions/dummy_action.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : dummy action to make every STRole can deal DummyMessage which is caused by DummyAction + +from metagpt.actions import Action +from metagpt.schema import Message + + +class DummyAction(Action): + async def run(self, *args, **kwargs): + raise NotImplementedError + + +class DummyMessage(Message): + """ + dummy message to pass to role and make them to have a execution every round + """ + + content: str = "dummy" + cause_by: str = "DummyAction" diff --git a/metagpt/ext/stanford_town/actions/gen_action_details.py b/metagpt/ext/stanford_town/actions/gen_action_details.py new file mode 100644 index 000000000..8e268a723 --- /dev/null +++ b/metagpt/ext/stanford_town/actions/gen_action_details.py @@ -0,0 +1,401 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : gen_action_details + +import random + +from metagpt.environment.stanford_town.env_space import EnvObsParams, EnvObsType +from metagpt.ext.stanford_town.actions.st_action import STAction +from metagpt.logs import logger + + +class GenActionSector(STAction): + name: str = "GenActionSector" + + def _func_cleanup(self, llm_resp: str, prompt: str): + cleaned_response = llm_resp.split("}")[0] + return cleaned_response + + def _func_validate(self, llm_resp: str, prompt: str): + if len(llm_resp.strip()) < 1: + return False + if "}" not in llm_resp: + return False + if "," in llm_resp: + return False + return True + + def _func_fail_default_resp(self): + fs = "kitchen" + return fs + + async def run(self, role: "STRole", access_tile: dict[str, str], act_desp: str): + def create_prompt_input(role, access_tile: dict[str, str], act_desp): + act_world = f"{access_tile['world']}" + + prompt_input = [] + + prompt_input += [role.scratch.get_str_name()] + prompt_input += [role.scratch.living_area.split(":")[1]] + x = f"{act_world}:{role.scratch.living_area.split(':')[1]}" + prompt_input += [role.s_mem.get_str_accessible_sector_arenas(x)] + + prompt_input += [role.scratch.get_str_name()] + prompt_input += [f"{access_tile['sector']}"] + x = f"{act_world}:{access_tile['sector']}" + prompt_input += [role.s_mem.get_str_accessible_sector_arenas(x)] + + if role.scratch.get_str_daily_plan_req() != "": + prompt_input += [f"\n{role.scratch.get_str_daily_plan_req()}"] + else: + prompt_input += [""] + + # MAR 11 TEMP + prompt_input = [] + act_world = access_tile["world"] + accessible_sector_str = role.s_mem.get_str_accessible_sectors(act_world) + curr = accessible_sector_str.split(", ") + fin_accessible_sectors = [] + for i in curr: + if "'s house" in i: + if role.scratch.last_name in i: + fin_accessible_sectors += [i] + else: + fin_accessible_sectors += [i] + accessible_sector_str = ", ".join(fin_accessible_sectors) + # END MAR 11 TEMP + + prompt_input += [accessible_sector_str] + + act_desp_1 = act_desp + act_desp_2 = act_desp + if "(" in act_desp: + act_desp_1 = act_desp.split("(")[0].strip() + act_desp_2 = act_desp.split("(")[-1][:-1] + prompt_input += [role.scratch.get_str_name()] + prompt_input += [act_desp_1] + + prompt_input += [act_desp_2] + prompt_input += [role.scratch.get_str_name()] + return prompt_input + + prompt_template = "action_location_sector_v1.txt" + prompt_input = create_prompt_input(role, access_tile, act_desp) + prompt = self.generate_prompt_with_tmpl_filename(prompt_input, prompt_template) + + self.fail_default_resp = self._func_fail_default_resp() + output = await self._run_gpt35_max_tokens(prompt, max_tokens=15) + y = f"{access_tile['world']}" + x = [i.strip() for i in role.s_mem.get_str_accessible_sectors(y).split(",")] + if output not in x: + # output = random.choice(x) + output = role.scratch.living_area.split(":")[1] + logger.info(f"Role: {role.name} Action: {self.cls_name} output: {output}") + return output + + +class GenActionArena(STAction): + name: str = "GenActionArena" + + def _func_cleanup(self, llm_resp: str, prompt: str): + cleaned_response = llm_resp.split("}")[0] + return cleaned_response + + def _func_validate(self, llm_resp: str, prompt: str): + if len(llm_resp.strip()) < 1: + return False + if "}" not in llm_resp: + return False + if "," in llm_resp: + return False + return True + + def _func_fail_default_resp(self): + fs = "kitchen" + return fs + + async def run(self, role: "STRole", act_desp: str, act_world: str, act_sector: str): + def create_prompt_input(role, act_desp, act_world, act_sector): + prompt_input = [] + prompt_input += [role.scratch.get_str_name()] + x = f"{act_world}:{act_sector}" + prompt_input += [act_sector] + + # MAR 11 TEMP + accessible_arena_str = role.s_mem.get_str_accessible_sector_arenas(x) + curr = accessible_arena_str.split(", ") + fin_accessible_arenas = [] + for i in curr: + if "'s room" in i: + if role.scratch.last_name in i: + fin_accessible_arenas += [i] + else: + fin_accessible_arenas += [i] + accessible_arena_str = ", ".join(fin_accessible_arenas) + # END MAR 11 TEMP + prompt_input += [accessible_arena_str] + act_desp_1 = act_desp + act_desp_2 = act_desp + if "(" in act_desp: + act_desp_1 = act_desp.split("(")[0].strip() + act_desp_2 = act_desp.split("(")[-1][:-1] + prompt_input += [role.scratch.get_str_name()] + prompt_input += [act_desp_1] + + prompt_input += [act_desp_2] + prompt_input += [role.scratch.get_str_name()] + + prompt_input += [act_sector] + prompt_input += [accessible_arena_str] + return prompt_input + + prompt_template = "action_location_object_vMar11.txt" + prompt_input = create_prompt_input(role, act_desp, act_world, act_sector) + prompt = self.generate_prompt_with_tmpl_filename(prompt_input, prompt_template) + self.fail_default_resp = self._func_fail_default_resp() + output = await self._run_gpt35_max_tokens(prompt, max_tokens=15) + logger.info(f"Role: {role.name} Action: {self.cls_name} output: {output}") + return output + + +class GenActionObject(STAction): + name: str = "GenActionObject" + + def _func_validate(self, llm_resp: str, prompt: str): + if len(llm_resp.strip()) < 1: + return False + return True + + def _func_cleanup(self, llm_resp: str, prompt: str): + cleaned_response = llm_resp.strip() + return cleaned_response + + def _func_fail_default_resp(self): + fs = "bed" + return fs + + async def run(self, role: "STRole", act_desp: str, temp_address: str): + def create_prompt_input(role, act_desp, temp_address): + prompt_input = [] + if "(" in act_desp: + act_desp = act_desp.split("(")[-1][:-1] + + prompt_input += [act_desp] + prompt_input += [role.s_mem.get_str_accessible_arena_game_objects(temp_address)] + return prompt_input + + prompt_template = "action_object_v2.txt" + prompt_input = create_prompt_input(role, act_desp, temp_address) + prompt = self.generate_prompt_with_tmpl_filename(prompt_input, prompt_template) + self.fail_default_resp = self._func_fail_default_resp() + output = await self._run_gpt35_max_tokens(prompt, max_tokens=15) + x = [i.strip() for i in role.s_mem.get_str_accessible_arena_game_objects(temp_address).split(",")] + if output not in x: + output = random.choice(x) + logger.info(f"Role: {role.name} Action: {self.cls_name} output: {output}") + return output + + +class GenPronunciatio(STAction): + name: str = "GenPronunciatio" + + def _func_cleanup(self, llm_resp: str, prompt: str): + cr = llm_resp.strip() + if len(cr) > 3: + cr = cr[:3] + return cr + + def _func_validate(self, llm_resp: str, prompt: str): + try: + self._func_cleanup(llm_resp, prompt="") + if len(llm_resp) == 0: + return False + except Exception: + return False + return True + + def _func_fail_default_resp(self): + fs = "😋" + return fs + + async def run(self, role: "STRole", act_desp: str): + def create_prompt_input(act_desp): + if "(" in act_desp: + act_desp = act_desp.split("(")[-1].split(")")[0] + prompt_input = [act_desp] + return prompt_input + + prompt_template = "generate_pronunciatio_v1.txt" + prompt_input = create_prompt_input(act_desp) + prompt = self.generate_prompt_with_tmpl_filename(prompt_input, prompt_template) + example_output = "🛁🧖‍♀️" + special_instruction = "The value for the output must ONLY contain the emojis." + self.fail_default_resp = self._func_fail_default_resp() + output = await self._run_gpt35(prompt, example_output, special_instruction) + logger.info(f"Role: {role.name} Action: {self.cls_name} output: {output}") + return output + + +class GenEventTriple(STAction): + name: str = "GenEventTriple" + + def _func_cleanup(self, llm_resp: str, prompt: str): + cr = llm_resp.strip() + cr = [i.strip() for i in cr.split(")")[0].split(",")] + return cr + + def _func_validate(self, llm_resp: str, prompt: str): + try: + llm_resp = self._func_cleanup(llm_resp, prompt="") + if len(llm_resp) != 2: + return False + except Exception: + return False + return True + + def _func_fail_default_resp(self, role): + fs = (role.name, "is", "idle") + return fs + + async def run(self, role: "STRole", act_desp: str): + def create_prompt_input(role, act_desp): + if "(" in act_desp: + act_desp = act_desp.split("(")[-1].split(")")[0] + prompt_input = [role.name, act_desp, role.name] + return prompt_input + + prompt_template = "generate_event_triple_v1.txt" + prompt_input = create_prompt_input(role, act_desp) + prompt = self.generate_prompt_with_tmpl_filename(prompt_input, prompt_template) + self.fail_default_resp = self._func_fail_default_resp(role) + output = await self._run_gpt35_max_tokens(prompt, max_tokens=30) + output = (role.name, output[0], output[1]) + logger.info(f"Role: {role.name} Action: {self.cls_name} output: {output}") + return output + + +class GenActObjDescription(STAction): + name: str = "GenActObjDescription" + + def _func_cleanup(self, llm_resp: str, prompt: str): + cr = llm_resp.strip() + if cr[-1] == ".": + cr = cr[:-1] + return cr + + def _func_validate(self, llm_resp: str, prompt: str): + try: + llm_resp = self._func_cleanup(llm_resp, prompt="") + except Exception: + return False + return True + + def _func_fail_default_resp(self, act_game_object): + fs = f"{act_game_object} is idle" + return fs + + async def run(self, role: "STRole", act_game_object: str, act_desp: str): + def create_prompt_input(act_game_object, act_desp, role): + prompt_input = [act_game_object, role.name, act_desp, act_game_object, act_game_object] + return prompt_input + + prompt_template = "generate_obj_event_v1.txt" + prompt_input = create_prompt_input(act_game_object, act_desp, role) + prompt = self.generate_prompt_with_tmpl_filename(prompt_input, prompt_template) + example_output = "being fixed" + special_instruction = "The output should ONLY contain the phrase that should go in ." + self.fail_default_resp = self._func_fail_default_resp(act_game_object) + output = await self._run_gpt35(prompt, example_output, special_instruction) + logger.info(f"Role: {role.name} Action: {self.cls_name} output: {output}") + return output + + +class GenObjEventTriple(STAction): + name: str = "GenObjEventTriple" + + def _func_cleanup(self, llm_resp: str, prompt: str): + cr = llm_resp.strip() + cr = [i.strip() for i in cr.split(")")[0].split(",")] + return cr + + def _func_validate(self, llm_resp: str, prompt: str): + try: + llm_resp = self._func_cleanup(llm_resp, prompt="") + if len(llm_resp) != 2: + return False + except Exception: + return False + return True + + def _func_fail_default_resp(self, act_game_object: str): + fs = (act_game_object, "is", "idle") + return fs + + async def run(self, role: "STRole", act_game_object, act_obj_desp): + def create_prompt_input(act_game_object, act_obj_desp): + prompt_input = [act_game_object, act_obj_desp, act_game_object] + return prompt_input + + prompt_template = "generate_event_triple_v1.txt" + prompt_input = create_prompt_input(act_game_object, act_obj_desp) + prompt = self.generate_prompt_with_tmpl_filename(prompt_input, prompt_template) + self.fail_default_resp = self._func_fail_default_resp(act_game_object) + output = await self._run_gpt35_max_tokens(prompt, max_tokens=30) + output = (act_game_object, output[0], output[1]) + logger.info(f"Role: {role.name} Action: {self.cls_name} output: {output}") + return output + + +class GenActionDetails(STAction): + name: str = "GenActionDetails" + + def _func_cleanup(self, llm_resp: str, prompt: str) -> list: + pass + + def _func_validate(self, llm_resp: str, prompt: str) -> bool: + # TODO -- this sometimes generates error + try: + self._func_cleanup(llm_resp) + except Exception: + return False + return True + + def _func_fail_default_resp(self): + fs = {} + return fs + + async def run(self, role: "STRole", act_desp: str, act_dura): + access_tile = role.rc.env.observe( + obs_params=EnvObsParams(obs_type=EnvObsType.GET_TITLE, coord=role.scratch.curr_tile) + ) + act_world = access_tile["world"] + act_sector = await GenActionSector().run(role, access_tile, act_desp) + act_arena = await GenActionArena().run(role, act_desp, act_world, act_sector) + act_address = f"{act_world}:{act_sector}:{act_arena}" + if not role.s_mem.get_str_accessible_arena_game_objects(act_address): + act_game_object = "" + else: + act_game_object = await GenActionObject().run(role, act_desp, act_address) + new_address = f"{act_world}:{act_sector}:{act_arena}:{act_game_object}" + act_pron = await GenPronunciatio().run(role, act_desp) + act_event = await GenEventTriple().run(role, act_desp) + # Persona's actions also influence the object states. We set those up here. + act_obj_desp = await GenActObjDescription().run(role, act_game_object, act_desp) + act_obj_pron = await GenPronunciatio().run(role, act_obj_desp) + act_obj_event = await GenObjEventTriple().run(role, act_game_object, act_obj_desp) + result_dict = { + "action_address": new_address, + "action_duration": int(act_dura), + "action_description": act_desp, + "action_pronunciatio": act_pron, + "action_event": act_event, + "chatting_with": None, + "chat": None, + "chatting_with_buffer": None, + "chatting_end_time": None, + "act_obj_description": act_obj_desp, + "act_obj_pronunciatio": act_obj_pron, + "act_obj_event": act_obj_event, + } + logger.info(f"Role: {role.name} Action: {self.cls_name} output: {result_dict}") + return result_dict diff --git a/metagpt/ext/stanford_town/actions/gen_daily_schedule.py b/metagpt/ext/stanford_town/actions/gen_daily_schedule.py new file mode 100644 index 000000000..5dffa8995 --- /dev/null +++ b/metagpt/ext/stanford_town/actions/gen_daily_schedule.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : gen_daily_schedule + + +from metagpt.ext.stanford_town.actions.st_action import STAction +from metagpt.logs import logger + + +class GenDailySchedule(STAction): + name: str = "GenDailySchedule" + + def _func_validate(self, llm_resp: str, prompt: str) -> bool: + try: + self._func_cleanup(llm_resp, prompt="") + except Exception: + return False + return True + + def _func_cleanup(self, llm_resp: str, prompt: str) -> list: + cr = [] + _cr = llm_resp.split(")") + for i in _cr: + if i[-1].isdigit(): + i = i[:-1].strip() + if i[-1] == "." or i[-1] == ",": + cr += [i[:-1].strip()] + return cr + + def _func_fail_default_resp(self) -> int: + fs = [ + "wake up and complete the morning routine at 6:00 am", + "eat breakfast at 7:00 am", + "read a book from 8:00 am to 12:00 pm", + "have lunch at 12:00 pm", + "take a nap from 1:00 pm to 4:00 pm", + "relax and watch TV from 7:00 pm to 8:00 pm", + "go to bed at 11:00 pm", + ] + return fs + + async def run(self, role: "STRole", wake_up_hour: str): + def create_prompt_input(role, wake_up_hour): + prompt_input = [] + prompt_input += [role.scratch.get_str_iss()] + prompt_input += [role.scratch.get_str_lifestyle()] + prompt_input += [role.scratch.get_str_curr_date_str()] + prompt_input += [role.scratch.get_str_firstname()] + prompt_input += [f"{str(wake_up_hour)}:00 am"] + return prompt_input + + wake_up_hour = int(wake_up_hour) + prompt_template = "daily_planning_v6.txt" + prompt_input = create_prompt_input(role, wake_up_hour) + prompt = self.generate_prompt_with_tmpl_filename(prompt_input, prompt_template) + self.fail_default_resp = self._func_fail_default_resp() + output = await self._run_gpt35_max_tokens(prompt, max_tokens=500) + output = [f"wake up and complete the morning routine at {wake_up_hour}:00 am"] + output + logger.info(f"Role: {role.name} Action: {self.cls_name} output: {output}") + return output diff --git a/metagpt/ext/stanford_town/actions/gen_hourly_schedule.py b/metagpt/ext/stanford_town/actions/gen_hourly_schedule.py new file mode 100644 index 000000000..5d59f96dd --- /dev/null +++ b/metagpt/ext/stanford_town/actions/gen_hourly_schedule.py @@ -0,0 +1,181 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : gen_hourly_schedule + +import random +import string + +from metagpt.logs import logger + +from .st_action import STAction + + +def get_random_alphanumeric(i=6, j=6): + """ + Returns a random alpha numeric strength that has the length of somewhere + between i and j. + + INPUT: + i: min_range for the length + j: max_range for the length + OUTPUT: + an alpha numeric str with the length of somewhere between i and j. + """ + k = random.randint(i, j) + x = "".join(random.choices(string.ascii_letters + string.digits, k=k)) + return x + + +class GenHourlySchedule(STAction): + name: str = "GenHourlySchedule" + + def _func_validate(self, llm_resp: str, prompt: str) -> bool: + try: + self._func_cleanup(llm_resp, prompt="") + except Exception: + return False + return True + + def _func_cleanup(self, llm_resp: str, prompt: str) -> list: + cr = llm_resp.strip() + if cr[-1] == ".": + cr = cr[:-1] + # to only use the first line of output + cr = cr.split("\n")[0] + return cr + + def _func_fail_default_resp(self) -> int: + fs = "asleep" + return fs + + async def _generate_schedule_for_given_hour( + self, role: "STRole", curr_hour_str, p_f_ds_hourly_org, hour_str, intermission2=None + ): + def create_prompt_input(persona, curr_hour_str, p_f_ds_hourly_org, hour_str, intermission2=None): + schedule_format = "" + for i in hour_str: + schedule_format += f"[{persona.scratch.get_str_curr_date_str()} -- {i}]" + schedule_format += " Activity: [Fill in]\n" + schedule_format = schedule_format[:-1] + + intermission_str = "Here the originally intended hourly breakdown of" + intermission_str += f" {persona.scratch.get_str_firstname()}'s schedule today: " + for count, i in enumerate(persona.scratch.daily_req): + intermission_str += f"{str(count + 1)}) {i}, " + intermission_str = intermission_str[:-2] + + prior_schedule = "" + if p_f_ds_hourly_org: + prior_schedule = "\n" + for count, i in enumerate(p_f_ds_hourly_org): + prior_schedule += f"[(ID:{get_random_alphanumeric()})" + prior_schedule += f" {persona.scratch.get_str_curr_date_str()} --" + prior_schedule += f" {hour_str[count]}] Activity:" + prior_schedule += f" {persona.scratch.get_str_firstname()}" + prior_schedule += f" is {i}\n" + + prompt_ending = f"[(ID:{get_random_alphanumeric()})" + prompt_ending += f" {persona.scratch.get_str_curr_date_str()}" + prompt_ending += f" -- {curr_hour_str}] Activity:" + prompt_ending += f" {persona.scratch.get_str_firstname()} is" + + if intermission2: + intermission2 = f"\n{intermission2}" + + prompt_input = [] + prompt_input += [schedule_format] + prompt_input += [persona.scratch.get_str_iss()] + + prompt_input += [prior_schedule + "\n"] + prompt_input += [intermission_str] + if intermission2: + prompt_input += [intermission2] + else: + prompt_input += [""] + prompt_input += [prompt_ending] + + return prompt_input + + prompt_template = "generate_hourly_schedule_v2.txt" + prompt_input = create_prompt_input(role, curr_hour_str, p_f_ds_hourly_org, hour_str, intermission2) + prompt_input_str = "\n".join(prompt_input) + prompt = self.generate_prompt_with_tmpl_filename(prompt_input, prompt_template) + self.fail_default_resp = self._func_fail_default_resp() + output = await self._run_gpt35_max_tokens(prompt, max_tokens=50) + logger.info( + f"Role: {role.name} _generate_schedule_for_given_hour prompt_input: {prompt_input_str}, " + f"output: {output}" + ) + return output + + async def run(self, role: "STRole", wake_up_hour: int): + hour_str = [ + "00:00 AM", + "01:00 AM", + "02:00 AM", + "03:00 AM", + "04:00 AM", + "05:00 AM", + "06:00 AM", + "07:00 AM", + "08:00 AM", + "09:00 AM", + "10:00 AM", + "11:00 AM", + "12:00 PM", + "01:00 PM", + "02:00 PM", + "03:00 PM", + "04:00 PM", + "05:00 PM", + "06:00 PM", + "07:00 PM", + "08:00 PM", + "09:00 PM", + "10:00 PM", + "11:00 PM", + ] + n_m1_activity = [] + diversity_repeat_count = 1 # TODO mg 1->3 + for i in range(diversity_repeat_count): + logger.info(f"diversity_repeat_count idx: {i}") + n_m1_activity_set = set(n_m1_activity) + if len(n_m1_activity_set) < 5: + n_m1_activity = [] + for count, curr_hour_str in enumerate(hour_str): + if wake_up_hour > 0: + n_m1_activity += ["sleeping"] + wake_up_hour -= 1 + else: + logger.info(f"_generate_schedule_for_given_hour idx: {count}, n_m1_activity: {n_m1_activity}") + n_m1_activity += [ + await self._generate_schedule_for_given_hour(role, curr_hour_str, n_m1_activity, hour_str) + ] + + # Step 1. Compressing the hourly schedule to the following format: + # The integer indicates the number of hours. They should add up to 24. + # [['sleeping', 6], ['waking up and starting her morning routine', 1], + # ['eating breakfast', 1], ['getting ready for the day', 1], + # ['working on her painting', 2], ['taking a break', 1], + # ['having lunch', 1], ['working on her painting', 3], + # ['taking a break', 2], ['working on her painting', 2], + # ['relaxing and watching TV', 1], ['going to bed', 1], ['sleeping', 2]] + _n_m1_hourly_compressed = [] + prev = None + prev_count = 0 + for i in n_m1_activity: + if i != prev: + prev_count = 1 + _n_m1_hourly_compressed += [[i, prev_count]] + prev = i + elif _n_m1_hourly_compressed: + _n_m1_hourly_compressed[-1][1] += 1 + + # Step 2. Expand to min scale (from hour scale) + # [['sleeping', 360], ['waking up and starting her morning routine', 60], + # ['eating breakfast', 60],.. + n_m1_hourly_compressed = [] + for task, duration in _n_m1_hourly_compressed: + n_m1_hourly_compressed += [[task, duration * 60]] + logger.info(f"Role: {role.name} Action: {self.cls_name} output: {n_m1_hourly_compressed}") + return n_m1_hourly_compressed diff --git a/metagpt/ext/stanford_town/actions/gen_iter_chat_utt.py b/metagpt/ext/stanford_town/actions/gen_iter_chat_utt.py new file mode 100644 index 000000000..40f6d3af0 --- /dev/null +++ b/metagpt/ext/stanford_town/actions/gen_iter_chat_utt.py @@ -0,0 +1,125 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : generate_iterative_chat_utt + +from metagpt.environment.stanford_town.env_space import EnvObsParams, EnvObsType +from metagpt.ext.stanford_town.actions.st_action import STAction +from metagpt.ext.stanford_town.utils.utils import extract_first_json_dict +from metagpt.logs import logger + + +class GenIterChatUTT(STAction): + name: str = "GenIterChatUTT" + + def _func_validate(self, llm_resp: str, prompt: str) -> bool: + resp = False + try: + _ = extract_first_json_dict(llm_resp) + resp = True + except Exception: + pass + return resp + + def _func_cleanup(self, llm_resp: str, prompt: str) -> dict: + gpt_response = extract_first_json_dict(llm_resp) + + cleaned_dict = dict() + cleaned = [] + for key, val in gpt_response.items(): + cleaned += [val] + cleaned_dict["utterance"] = cleaned[0] + cleaned_dict["end"] = True + if "f" in str(cleaned[1]) or "F" in str(cleaned[1]): + cleaned_dict["end"] = False + + return cleaned_dict + + def _func_fail_default_resp(self) -> dict: + cleaned_dict = dict() + cleaned_dict["utterance"] = "..." + cleaned_dict["end"] = False + return cleaned_dict + + async def run( + self, + init_role: "STRole", + target_role: "STRole", + retrieved: dict, + curr_context: str, + curr_chat: list[str], + *args, + **kwargs, + ) -> dict: + def create_prompt_input( + access_tile: dict[str, str], + init_role: "STRole", + target_role: "STRole", + retrieved: dict, + curr_context: str, + curr_chat: list[str], + ): + role = init_role + scratch = role.rc.scratch + target_scratch = target_role.rc.scratch + prev_convo_insert = "\n" + if role.rc.memory.chat_list: + for i in role.rc.memory.chat_list: + if i.object == target_role.name: + v1 = int((scratch.curr_time - i.created).total_seconds() / 60) + prev_convo_insert += ( + f"{str(v1)} minutes ago, {scratch.name} and " + f"{target_scratch.name} were already {i.description} " + f"This context takes place after that conversation." + ) + break + if prev_convo_insert == "\n": + prev_convo_insert = "" + if role.rc.memory.chat_list: + if int((scratch.curr_time - role.rc.memory.chat_list[-1].created).total_seconds() / 60) > 480: + prev_convo_insert = "" + logger.info(f"prev_convo_insert: {prev_convo_insert}") + + curr_sector = f"{access_tile['sector']}" + curr_arena = f"{access_tile['arena']}" + curr_location = f"{curr_arena} in {curr_sector}" + + retrieved_str = "" + for key, vals in retrieved.items(): + for v in vals: + retrieved_str += f"- {v.description}\n" + + convo_str = "" + for i in curr_chat: + convo_str += ": ".join(i) + "\n" + if convo_str == "": + convo_str = "[The conversation has not started yet -- start it!]" + + init_iss = f"Here is Here is a brief description of {scratch.name}.\n{scratch.get_str_iss()}" + prompt_input = [ + init_iss, + scratch.name, + retrieved_str, + prev_convo_insert, + curr_location, + curr_context, + scratch.name, + target_scratch.name, + convo_str, + scratch.name, + target_scratch.name, + scratch.name, + scratch.name, + scratch.name, + ] + return prompt_input + + access_tile = init_role.rc.env.observe( + obs_params=EnvObsParams(obs_type=EnvObsType.GET_TITLE, coord=init_role.scratch.curr_tile) + ) + prompt_input = create_prompt_input(access_tile, init_role, target_role, retrieved, curr_context, curr_chat) + prompt = self.generate_prompt_with_tmpl_filename(prompt_input, "iterative_convo_v1.txt") + # original using `ChatGPT_safe_generate_response_OLD` + self.fail_default_resp = self._func_fail_default_resp() + output = await self._run_gpt35_wo_extra_prompt(prompt) + logger.info(f"Role: {init_role.name} Action: {self.cls_name} output: {output}") + return output diff --git a/metagpt/ext/stanford_town/actions/inner_voice_action.py b/metagpt/ext/stanford_town/actions/inner_voice_action.py new file mode 100644 index 000000000..83cfa037b --- /dev/null +++ b/metagpt/ext/stanford_town/actions/inner_voice_action.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : + +from metagpt.ext.stanford_town.actions.st_action import STAction +from metagpt.logs import logger + + +class AgentWhisperThoughtAction(STAction): + name: str = "AgentWhisperThoughtAction" + + def _func_validate(self, llm_resp: str, prompt: str) -> bool: + try: + self._func_cleanup(llm_resp, prompt) + return True + except Exception: + return False + + def _func_cleanup(self, llm_resp: str, prompt: str = "") -> list: + return llm_resp.split('"')[0].strip() + + def _func_fail_default_resp(self) -> str: + pass + + async def run(self, role: "STRole", statements: str, test_input=None, verbose=False) -> str: + def create_prompt_input(role: "STRole", statements, test_input=None): + prompt_input = [role.scratch.name, statements] + return prompt_input + + prompt_input = create_prompt_input(role, statements) + prompt = self.generate_prompt_with_tmpl_filename(prompt_input, "whisper_inner_thought_v1.txt") + + output = await self._run_gpt35_max_tokens(prompt, max_tokens=50) + logger.info(f"Role: {role.name} Action: {self.cls_name} output: {output}") + return output diff --git a/metagpt/ext/stanford_town/actions/new_decomp_schedule.py b/metagpt/ext/stanford_town/actions/new_decomp_schedule.py new file mode 100644 index 000000000..759ec170f --- /dev/null +++ b/metagpt/ext/stanford_town/actions/new_decomp_schedule.py @@ -0,0 +1,154 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : new_decomp_schedule + +import datetime + +from metagpt.ext.stanford_town.actions.st_action import STAction +from metagpt.logs import logger + + +class NewDecompSchedule(STAction): + name: str = "NewDecompSchedule" + + def _func_validate(self, llm_resp: str, prompt: str) -> bool: + resp = False + try: + llm_resp = self._func_cleanup(llm_resp, prompt) + dur_sum = 0 + for act, dur in llm_resp: + dur_sum += dur + if isinstance(act, str): + return False + if isinstance(dur, int): + return False + x = prompt.split("\n")[0].split("originally planned schedule from")[-1].strip()[:-1] + x = [datetime.datetime.strptime(i.strip(), "%H:%M %p") for i in x.split(" to ")] + delta_min = int((x[1] - x[0]).total_seconds() / 60) + + if int(dur_sum) != int(delta_min): + return False + except Exception: + pass + return resp + + def _func_cleanup(self, llm_resp: str, prompt: str) -> list: + new_schedule = prompt + " " + llm_resp.strip() + new_schedule = new_schedule.split("The revised schedule:")[-1].strip() + new_schedule = new_schedule.split("\n") + + ret_temp = [] + for i in new_schedule: + ret_temp += [i.split(" -- ")] + + ret = [] + for time_str, action in ret_temp: + start_time = time_str.split(" ~ ")[0].strip() + end_time = time_str.split(" ~ ")[1].strip() + delta = datetime.datetime.strptime(end_time, "%H:%M") - datetime.datetime.strptime(start_time, "%H:%M") + delta_min = int(delta.total_seconds() / 60) + if delta_min < 0: + delta_min = 0 + ret += [[action, delta_min]] + + return ret + + def _func_fail_default_resp(self, main_act_dur: int, truncated_act_dur: int) -> int: + dur_sum = 0 + for act, dur in main_act_dur: + dur_sum += dur + + ret = truncated_act_dur[:] + ret += main_act_dur[len(ret) - 1 :] + + # If there are access, we need to trim... + ret_dur_sum = 0 + count = 0 + over = None + for act, dur in ret: + ret_dur_sum += dur + if ret_dur_sum == dur_sum: + break + if ret_dur_sum > dur_sum: + over = ret_dur_sum - dur_sum + break + count += 1 + + if over: + ret = ret[: count + 1] + ret[-1][1] -= over + + return ret + + async def run( + self, + role: "STRole", + main_act_dur: int, + truncated_act_dur: int, + start_time_hour: datetime, + end_time_hour: datetime, + inserted_act: str, + inserted_act_dur: int, + *args, + **kwargs, + ): + def create_prompt_input( + role: "STRole", + main_act_dur: int, + truncated_act_dur: int, + start_time_hour: datetime, + end_time_hour: datetime, + inserted_act: str, + inserted_act_dur: int, + ): + persona_name = role.name + start_hour_str = start_time_hour.strftime("%H:%M %p") + end_hour_str = end_time_hour.strftime("%H:%M %p") + + original_plan = "" + for_time = start_time_hour + for i in main_act_dur: + original_plan += ( + f'{for_time.strftime("%H:%M")} ~ ' + f'{(for_time + datetime.timedelta(minutes=int(i[1]))).strftime("%H:%M")} -- ' + i[0] + ) + original_plan += "\n" + for_time += datetime.timedelta(minutes=int(i[1])) + + new_plan_init = "" + for_time = start_time_hour + for count, i in enumerate(truncated_act_dur): + new_plan_init += ( + f'{for_time.strftime("%H:%M")} ~ ' + f'{(for_time + datetime.timedelta(minutes=int(i[1]))).strftime("%H:%M")} -- ' + i[0] + ) + new_plan_init += "\n" + if count < len(truncated_act_dur) - 1: + for_time += datetime.timedelta(minutes=int(i[1])) + + new_plan_init += (for_time + datetime.timedelta(minutes=int(i[1]))).strftime("%H:%M") + " ~" + + prompt_input = [ + persona_name, + start_hour_str, + end_hour_str, + original_plan, + persona_name, + inserted_act, + inserted_act_dur, + persona_name, + start_hour_str, + end_hour_str, + end_hour_str, + new_plan_init, + ] + return prompt_input + + prompt_input = create_prompt_input( + role, main_act_dur, truncated_act_dur, start_time_hour, end_time_hour, inserted_act, inserted_act_dur + ) + prompt = self.generate_prompt_with_tmpl_filename(prompt_input, "new_decomp_schedule_v1.txt") + self.fail_default_resp = self._func_fail_default_resp(main_act_dur, truncated_act_dur) + output = await self._run_gpt35_max_tokens(prompt, max_tokens=1000) + logger.info(f"Role: {role.name} Action: {self.cls_name} output: {output}") + return output diff --git a/metagpt/ext/stanford_town/actions/run_reflect_action.py b/metagpt/ext/stanford_town/actions/run_reflect_action.py new file mode 100644 index 000000000..895f6828f --- /dev/null +++ b/metagpt/ext/stanford_town/actions/run_reflect_action.py @@ -0,0 +1,277 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : Integration Reflect Action + +import re + +from metagpt.ext.stanford_town.actions.st_action import STAction +from metagpt.logs import logger + + +# Run GPT Prompt Focal Point method +class AgentFocusPt(STAction): + name: str = "AgentFocusPt" + + def _func_validate(self, llm_resp: str, prompt: str) -> bool: + try: + self._func_cleanup(llm_resp, prompt) + return True + except Exception: + return False + + def _func_cleanup(self, llm_resp: str, prompt: str = "") -> str: + try: + """ + Cleanup handling has been completed for run_v2 + """ + return llm_resp + except Exception as exp: + logger.error(f"{self.cls_name} with error {exp}") + + def _func_fail_default_resp(self) -> str: + pass + + async def run(self, role: "STRole", statements: str, n: int, test_input=None) -> str: + def create_prompt_input(role: "STRole", statements, n, test_input=None): + prompt_input = [statements, str(n)] + return prompt_input + + prompt_input = create_prompt_input(role, statements, n) + prompt = self.generate_prompt_with_tmpl_filename(prompt_input, "generate_focal_pt_v1.txt") + + example_output = '["What should Jane do for lunch", "Does Jane like strawberry", "Who is Jane"]' + special_instruction = "Output must be a list of str." + output = await self._run_gpt35(prompt, example_output, special_instruction) + logger.info(f"Role: {role.name} Action: {self.cls_name} output: {output}") + return output + + +# Run GPT Prompt Insight and Guidance +class AgentInsightAndGuidance(STAction): + name: str = "AgentInsightAndGuidance" + + def _func_validate(self, llm_resp: str, prompt: str) -> bool: + try: + self._func_cleanup(llm_resp, prompt) + return True + except Exception: + return False + + def _func_cleanup(self, llm_resp: str, prompt: str = "") -> dict: + try: + llm_resp = "1. " + llm_resp.strip() + ret = dict() + for i in llm_resp.split("\n"): + row = " ".join(i.split(". ")[1:]) + if "(because of " not in row: + continue + thought = row.split("(because of ")[0].strip() + if ")" not in row.split("(because of ")[1]: + continue + evi_raw = row.split("(because of ")[1].split(")")[0].strip() + evi_raw = re.findall(r"\d+", evi_raw) + evi_raw = [int(i.strip()) for i in evi_raw] + ret[thought] = evi_raw + return ret + except Exception as exp: + logger.error(f"{self.cls_name} with error {exp}") + + def _func_fail_default_resp(self, n: int) -> str: + return ["I am hungry"] * n + + async def run(self, role: "STRole", statements: str, n: int, test_input=None) -> dict: + def create_prompt_input(role, statements, n, test_input=None): + prompt_input = [statements, str(n)] + return prompt_input + + prompt_input = create_prompt_input(role, statements, n) + prompt = self.generate_prompt_with_tmpl_filename(prompt_input, "insight_and_evidence_v1.txt") + + self.fail_default_resp = self._func_fail_default_resp(n) + output = await self._run_gpt35_max_tokens(prompt, max_tokens=150) + logger.info(f"Role: {role.name} Action: {self.cls_name} output: {output}") + return output + + +# Run GPT Prompt Event Triple +class AgentEventTriple(STAction): + name: str = "AgentEventTriple" + + def _func_validate(self, llm_resp: str, prompt: str) -> bool: + try: + llm_resp = self._func_cleanup(llm_resp, prompt="") + if len(llm_resp) != 2: + return False + except Exception: + return False + return True + + def _func_cleanup(self, llm_resp: str, prompt: str = "") -> list: + try: + cr = llm_resp.strip() + cr = [i.strip() for i in cr.split(")")[0].split(",")] + if len(cr) != 2: + return cr[-2:] + return cr + except Exception as exp: + logger.error(f"{self.cls_name} with error {exp}") + + def _func_fail_default_resp(self) -> str: + pass + + async def run(self, statements: str, role: "STRole", verbose=False) -> tuple: + def create_prompt_input(statements, role): + if "(" in statements: + statements = statements.split("(")[-1].split(")")[0] + prompt_input = [role.scratch.name, statements, role.scratch.name] + return prompt_input + + prompt_input = create_prompt_input(statements, role) + prompt = self.generate_prompt_with_tmpl_filename(prompt_input, "generate_event_triple_v1.txt") + + output = await self._run_gpt35_max_tokens(prompt, max_tokens=30) + output = (role.scratch.name, output[0], output[1]) + logger.info(f"Role: {role.name} Action: {self.cls_name} output: {output}") + return output + + +# Run GPT Prompt Event Poignancy +class AgentEventPoignancy(STAction): + name: str = "AgentEventPoignancy" + + def _func_validate(self, llm_resp: str, prompt: str) -> bool: + try: + self._func_cleanup(llm_resp, prompt) + return True + except Exception: + return False + + def _func_cleanup(self, llm_resp: str, prompt: str = "") -> int: + try: + llm_resp = int(llm_resp.strip()) + return llm_resp + except Exception as exp: + logger.error(f"{self.cls_name} with error {exp}") + + def _func_fail_default_resp(self) -> str: + pass + + async def run(self, role: "STRole", statements: str, test_input=None, verbose=False) -> str: + def create_prompt_input(role: "STRole", statements: str, test_input=None): + prompt_input = [role.scratch.name, role.scratch.get_str_iss(), role.scratch.name, statements] + return prompt_input + + prompt_input = create_prompt_input(role, statements) + prompt = self.generate_prompt_with_tmpl_filename(prompt_input, "poignancy_event_v1.txt") + + example_output = "5" # ######## + special_instruction = "The output should ONLY contain ONE integer value on the scale of 1 to 10." + output = await self._run_gpt35(prompt, example_output, special_instruction) + logger.info(f"Role: {role.name} Action: {self.cls_name} output: {output}") + return output + + +# Run GPT Prompt Chat Poignancy +class AgentChatPoignancy(STAction): + name: str = "AgentChatPoignancy" + + def _func_validate(self, llm_resp: str, prompt: str) -> bool: + try: + self._func_cleanup(llm_resp, prompt) + return True + except Exception: + return False + + def _func_cleanup(self, llm_resp: str, prompt: str = "") -> int: + try: + llm_resp = int(llm_resp.strip()) + return llm_resp + except Exception as exp: + logger.error(f"{self.cls_name} with error {exp}") + + def _func_fail_default_resp(self) -> str: + pass + + async def run(self, role: "STRole", statements: str, test_input=None, verbose=False) -> str: + def create_prompt_input(role: "STRole", statements, test_input=None): + prompt_input = [role.scratch.name, role.scratch.get_str_iss(), role.scratch.name, statements] + return prompt_input + + prompt_input = create_prompt_input(role, statements) + prompt = self.generate_prompt_with_tmpl_filename(prompt_input, "poignancy_chat_v1.txt") + + example_output = "5" # ######## + special_instruction = "The output should ONLY contain ONE integer value on the scale of 1 to 10." + output = await self._run_gpt35(prompt, example_output, special_instruction) + logger.info(f"Role: {role.name} Action: {self.cls_name} output: {output}") + return output + + +# Run GPT Prompt Planning Thought on Convo +class AgentPlanThoughtOnConvo(STAction): + name: str = "AgentPlanThoughtOnConvo" + + def _func_validate(self, llm_resp: str, prompt: str) -> bool: + try: + self._func_cleanup(llm_resp, prompt) + return True + except Exception: + return False + + def _func_cleanup(self, llm_resp: str, prompt: str = "") -> str: + try: + return llm_resp.split('"')[0].strip() + except Exception as exp: + logger.error(f"{self.cls_name} with error {exp}") + + def _func_fail_default_resp(self) -> str: + pass + + async def run(self, role: "STRole", statements: str, test_input=None, verbose=False) -> str: + def create_prompt_input(role, statements, test_input=None): + prompt_input = [statements, role.scratch.name, role.scratch.name, role.scratch.name] + return prompt_input + + prompt_input = create_prompt_input(role, statements) + prompt = self.generate_prompt_with_tmpl_filename(prompt_input, "planning_thought_on_convo_v1.txt") + + output = await self._run_gpt35_max_tokens(prompt, max_tokens=50) + logger.info(f"Role: {role.name} Action: {self.cls_name} output: {output}") + return output + + +# Run GPT Prompt Memory on Convo +class AgentMemoryOnConvo(STAction): + name: str = "AgentMemoryOnConvo" + + def _func_validate(self, llm_resp: str, prompt: str) -> bool: + try: + self._func_cleanup(llm_resp, prompt) + return True + except Exception: + return False + + def _func_cleanup(self, llm_resp: str, prompt: str = "") -> str: + try: + return llm_resp.split('"')[0].strip() + except Exception as exp: + logger.error(f"{self.cls_name} with error {exp}") + + def _func_fail_default_resp(self) -> str: + pass + + async def run(self, role: "STRole", statements: str, test_input=None, verbose=False) -> str: + def create_prompt_input(role, statements, test_input=None): + prompt_input = [statements, role.scratch.name, role.scratch.name, role.scratch.name] + return prompt_input + + prompt_input = create_prompt_input(role, statements) + prompt = self.generate_prompt_with_tmpl_filename(prompt_input, "memo_on_convo_v1.txt") + example_output = "Jane Doe was interesting to talk to." + special_instruction = ( + "The output should ONLY contain a string that summarizes anything interesting " + "that the agent may have noticed" + ) + output = await self._run_gpt35(prompt, example_output, special_instruction) + logger.info(f"Role: {role.name} Action: {self.cls_name} output: {output}") + return output diff --git a/metagpt/ext/stanford_town/actions/st_action.py b/metagpt/ext/stanford_town/actions/st_action.py new file mode 100644 index 000000000..321676374 --- /dev/null +++ b/metagpt/ext/stanford_town/actions/st_action.py @@ -0,0 +1,119 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : StanfordTown Action +import json +import time +from abc import abstractmethod +from pathlib import Path +from typing import Any, Optional, Union + +from metagpt.actions.action import Action +from metagpt.config2 import config +from metagpt.ext.stanford_town.utils.const import PROMPTS_DIR +from metagpt.logs import logger + + +class STAction(Action): + name: str = "STAction" + prompt_dir: Path = PROMPTS_DIR + fail_default_resp: Optional[str] = None + + @property + def cls_name(self): + return self.__class__.__name__ + + @abstractmethod + def _func_validate(self, llm_resp: str, prompt: str): + raise NotImplementedError + + @abstractmethod + def _func_cleanup(self, llm_resp: str, prompt: str): + raise NotImplementedError + + @abstractmethod + def _func_fail_default_resp(self): + raise NotImplementedError + + def generate_prompt_with_tmpl_filename(self, prompt_input: Union[str, list], tmpl_filename) -> str: + """ + same with `generate_prompt` + Args: + prompt_input: the input we want to feed in (IF THERE ARE MORE THAN ONE INPUT, THIS CAN BE A LIST.) + tmpl_filename: prompt template filename + Returns: + a str prompt that will be sent to LLM server. + """ + if isinstance(prompt_input, str): + prompt_input = [prompt_input] + prompt_input = [str(i) for i in prompt_input] + + f = open(str(self.prompt_dir.joinpath(tmpl_filename)), "r") + prompt = f.read() + f.close() + for count, i in enumerate(prompt_input): + prompt = prompt.replace(f"!!", i) + if "###" in prompt: + prompt = prompt.split("###")[1] + return prompt.strip() + + async def _aask(self, prompt: str) -> str: + return await self.llm.aask(prompt) + + async def _run_gpt35_max_tokens(self, prompt: str, max_tokens: int = 50, retry: int = 3): + for idx in range(retry): + try: + tmp_max_tokens_rsp = getattr(config.llm, "max_token", 1500) + setattr(config.llm, "max_token", max_tokens) + self.llm.use_system_prompt = False # to make it behave like a non-chat completions + + llm_resp = await self._aask(prompt) + + setattr(config.llm, "max_token", tmp_max_tokens_rsp) + logger.info(f"Action: {self.cls_name} llm _run_gpt35_max_tokens raw resp: {llm_resp}") + if self._func_validate(llm_resp, prompt): + return self._func_cleanup(llm_resp, prompt) + except Exception as exp: + logger.warning(f"Action: {self.cls_name} _run_gpt35_max_tokens exp: {exp}") + time.sleep(5) + return self.fail_default_resp + + async def _run_gpt35( + self, prompt: str, example_output: str, special_instruction: str, retry: int = 3 + ) -> Union[bool, Any]: + """same with `gpt_structure.ChatGPT_safe_generate_response`""" + prompt = '"""\n' + prompt + '\n"""\n' + prompt += f"Output the response to the prompt above in json. {special_instruction}\n" + prompt += "Example output json:\n" + prompt += '{"output": "' + str(example_output) + '"}' + + for idx in range(retry): + try: + llm_resp = await self._aask(prompt) + logger.info(f"Action: {self.cls_name} llm _run_gpt35 raw resp: {llm_resp}") + end_idx = llm_resp.strip().rfind("}") + 1 + llm_resp = llm_resp[:end_idx] + llm_resp = json.loads(llm_resp)["output"] + + if self._func_validate(llm_resp, prompt): + return self._func_cleanup(llm_resp, prompt) + except Exception as exp: + logger.warning(f"Action: {self.cls_name} _run_gpt35 exp: {exp}") + time.sleep(5) # usually avoid `Rate limit` + return False + + async def _run_gpt35_wo_extra_prompt(self, prompt: str, retry: int = 3) -> str: + for idx in range(retry): + try: + llm_resp = await self._aask(prompt) + llm_resp = llm_resp.strip() + logger.info(f"Action: {self.cls_name} llm _run_gpt35_wo_extra_prompt raw resp: {llm_resp}") + if self._func_validate(llm_resp, prompt): + return self._func_cleanup(llm_resp, prompt) + except Exception as exp: + logger.warning(f"Action: {self.cls_name} _run_gpt35_wo_extra_prompt exp: {exp}") + time.sleep(5) # usually avoid `Rate limit` + return self.fail_default_resp + + async def run(self, *args, **kwargs): + """Run action""" + raise NotImplementedError("The run method should be implemented in a subclass.") diff --git a/metagpt/ext/stanford_town/actions/summarize_conv.py b/metagpt/ext/stanford_town/actions/summarize_conv.py new file mode 100644 index 000000000..5be5fcaa4 --- /dev/null +++ b/metagpt/ext/stanford_town/actions/summarize_conv.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : summarize the content of agents' conversation + +from metagpt.ext.stanford_town.actions.st_action import STAction +from metagpt.logs import logger + + +class SummarizeConv(STAction): + name: str = "SummarizeConv" + + def _func_validate(self, llm_resp: str, prompt: str) -> bool: + resp = False + try: + _ = self._func_cleanup(llm_resp, prompt) + resp = True + except Exception: + pass + return resp + + def _func_cleanup(self, llm_resp: str, prompt: str) -> str: + ret = "conversing about " + llm_resp.strip() + return ret + + def _func_fail_default_resp(self) -> str: + return "conversing with a housemate about morning greetings" + + async def run(self, conv: list): + def create_prompt_input(conversation: list): + convo_str = "" + for row in conversation: + convo_str += f'{row[0]}: "{row[1]}"\n' + prompt_input = [convo_str] + return prompt_input + + prompt_input = create_prompt_input(conv) + prompt = self.generate_prompt_with_tmpl_filename(prompt_input, "summarize_conversation_v1.txt") + + example_output = "conversing about what to eat for lunch" + special_instruction = ( + "The output must continue the sentence above by filling in the tag. " + "Don't start with 'this is a conversation about...' Just finish the sentence " + "but do not miss any important details (including who are chatting)." + ) + output = await self._run_gpt35(prompt, example_output, special_instruction) + logger.info(f"Action: {self.cls_name} output: {output}") + return output diff --git a/metagpt/ext/stanford_town/actions/task_decomp.py b/metagpt/ext/stanford_town/actions/task_decomp.py new file mode 100644 index 000000000..3a23a7345 --- /dev/null +++ b/metagpt/ext/stanford_town/actions/task_decomp.py @@ -0,0 +1,173 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : task_decomp + +import datetime + +from metagpt.ext.stanford_town.actions.st_action import STAction +from metagpt.logs import logger + + +class TaskDecomp(STAction): + name: str = "TaskDecomp" + + def _func_cleanup(self, llm_resp: str, prompt: str) -> list: + # TODO SOMETHING HERE sometimes fails... See screenshot + temp = [i.strip() for i in llm_resp.split("\n")] + _cr = [] + cr = [] + for count, i in enumerate(temp): + if count != 0: + _cr += [" ".join([j.strip() for j in i.split(" ")][3:])] + else: + _cr += [i] + for count, i in enumerate(_cr): + k = [j.strip() for j in i.split("(duration in minutes:")] + task = k[0] + if task[-1] == ".": + task = task[:-1] + duration = int(k[1].split(",")[0].strip()) + cr += [[task, duration]] + + total_expected_min = int(prompt.split("(total duration in minutes")[-1].split("):")[0].strip()) + + # TODO -- now, you need to make sure that this is the same as the sum of + # the current action sequence. + curr_min_slot = [ + ["dummy", -1], + ] # (task_name, task_index) + for count, i in enumerate(cr): + i_task = i[0] + i_duration = i[1] + + i_duration -= i_duration % 5 + if i_duration > 0: + for j in range(i_duration): + curr_min_slot += [(i_task, count)] + curr_min_slot = curr_min_slot[1:] + + if len(curr_min_slot) > total_expected_min: + last_task = curr_min_slot[60] + for i in range(1, 6): + curr_min_slot[-1 * i] = last_task + elif len(curr_min_slot) < total_expected_min: + last_task = curr_min_slot[-1] + for i in range(total_expected_min - len(curr_min_slot)): + curr_min_slot += [last_task] + + cr_ret = [ + ["dummy", -1], + ] + for task, task_index in curr_min_slot: + if task != cr_ret[-1][0]: + cr_ret += [[task, 1]] + else: + cr_ret[-1][1] += 1 + cr = cr_ret[1:] + + return cr + + def _func_validate(self, llm_resp: str, prompt: str) -> bool: + # TODO -- this sometimes generates error + try: + self._func_cleanup(llm_resp, prompt) + except Exception: + return False + return True + + def _func_fail_default_resp(self) -> int: + fs = [["asleep", 0]] + return fs + + async def run(self, role: "STRole", task_desc: int, truncated_act_dur: int, *args, **kwargs): + def create_prompt_input(role, task, duration): + """ + Today is Saturday June 25. From 00:00 ~ 06:00am, Maeve is + planning on sleeping, 06:00 ~ 07:00am, Maeve is + planning on waking up and doing her morning routine, + and from 07:00am ~08:00am, Maeve is planning on having breakfast. + """ + + curr_f_org_index = role.scratch.get_f_daily_schedule_hourly_org_index() + all_indices = [] + # if curr_f_org_index > 0: + # all_indices += [curr_f_org_index-1] + all_indices += [curr_f_org_index] + if curr_f_org_index + 1 <= len(role.scratch.f_daily_schedule_hourly_org): + all_indices += [curr_f_org_index + 1] + if curr_f_org_index + 2 <= len(role.scratch.f_daily_schedule_hourly_org): + all_indices += [curr_f_org_index + 2] + + curr_time_range = "" + + logger.debug("DEBUG") + logger.debug(role.scratch.f_daily_schedule_hourly_org) + logger.debug(all_indices) + + summ_str = f'Today is {role.scratch.curr_time.strftime("%B %d, %Y")}. ' + summ_str += "From " + for index in all_indices: + logger.debug(f"index {index}") + if index < len(role.scratch.f_daily_schedule_hourly_org): + start_min = 0 + for i in range(index): + start_min += role.scratch.f_daily_schedule_hourly_org[i][1] + end_min = start_min + role.scratch.f_daily_schedule_hourly_org[index][1] + start_time = datetime.datetime.strptime("00:00:00", "%H:%M:%S") + datetime.timedelta( + minutes=start_min + ) + end_time = datetime.datetime.strptime("00:00:00", "%H:%M:%S") + datetime.timedelta( + minutes=end_min + ) + start_time_str = start_time.strftime("%H:%M%p") + end_time_str = end_time.strftime("%H:%M%p") + summ_str += ( + f"{start_time_str} ~ {end_time_str}, {role.name} is planning " + f"on {role.scratch.f_daily_schedule_hourly_org[index][0]}, " + ) + if curr_f_org_index + 1 == index: + curr_time_range = f"{start_time_str} ~ {end_time_str}" + summ_str = summ_str[:-2] + "." + + prompt_input = [] + prompt_input += [role.scratch.get_str_iss()] + prompt_input += [summ_str] + # prompt_input += [role.scratch.get_str_curr_date_str()] + prompt_input += [role.scratch.get_str_firstname()] + prompt_input += [role.scratch.get_str_firstname()] + prompt_input += [task] + prompt_input += [curr_time_range] + prompt_input += [duration] + prompt_input += [role.scratch.get_str_firstname()] + return prompt_input + + prompt_input = create_prompt_input(role, task_desc, truncated_act_dur) + prompt = self.generate_prompt_with_tmpl_filename(prompt_input, "task_decomp_v3.txt") + self.fail_default_resp = self._func_fail_default_resp() + output = await self._run_gpt35_max_tokens(prompt, max_tokens=1000) + logger.info(f"Role: {role.name} {self.cls_name} output: {output}") + + fin_output = [] + time_sum = 0 + for i_task, i_duration in output: + time_sum += i_duration + # HM????????? + # if time_sum < duration: + if time_sum <= truncated_act_dur: + fin_output += [[i_task, i_duration]] + else: + break + ftime_sum = 0 + for fi_task, fi_duration in fin_output: + ftime_sum += fi_duration + + fin_output[-1][1] += truncated_act_dur - ftime_sum + output = fin_output + + task_decomp = output + ret = [] + for decomp_task, duration in task_decomp: + ret += [[f"{task_desc} ({decomp_task})", duration]] + output = ret + logger.info(f"Role: {role.name} Action: {self.cls_name} output: {output}") + return output diff --git a/metagpt/ext/stanford_town/actions/wake_up.py b/metagpt/ext/stanford_town/actions/wake_up.py new file mode 100644 index 000000000..ea44cd3a4 --- /dev/null +++ b/metagpt/ext/stanford_town/actions/wake_up.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : wake_up + + +from metagpt.ext.stanford_town.actions.st_action import STAction +from metagpt.logs import logger + + +class WakeUp(STAction): + name: str = "WakeUp" + + def _func_validate(self, llm_resp: str, prompt: str = None) -> bool: + try: + self._func_cleanup(llm_resp, prompt="") + except Exception: + return False + return True + + def _func_cleanup(self, llm_resp: str, prompt: str) -> int: + cr = int(llm_resp.strip().lower().split("am")[0]) + return cr + + def _func_fail_default_resp(self) -> int: + fs = 8 + return fs + + async def run(self, role: "STRole"): + def create_prompt_input(role): + prompt_input = [ + role.scratch.get_str_iss(), + role.scratch.get_str_lifestyle(), + role.scratch.get_str_firstname(), + ] + return prompt_input + + prompt_input = create_prompt_input(role) + prompt = self.generate_prompt_with_tmpl_filename(prompt_input, "wake_up_hour_v1.txt") + self.fail_default_resp = self._func_fail_default_resp() + output = await self._run_gpt35_max_tokens(prompt, max_tokens=5) + logger.info(f"Role: {role.name} Action: {self.cls_name} output: {output}") + return output diff --git a/metagpt/ext/stanford_town/memory/__init__.py b/metagpt/ext/stanford_town/memory/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/metagpt/ext/stanford_town/memory/agent_memory.py b/metagpt/ext/stanford_town/memory/agent_memory.py new file mode 100644 index 000000000..d212232f4 --- /dev/null +++ b/metagpt/ext/stanford_town/memory/agent_memory.py @@ -0,0 +1,378 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : BasicMemory,AgentMemory实现 + +from datetime import datetime +from pathlib import Path +from typing import Optional + +from pydantic import Field, field_serializer, model_validator + +from metagpt.logs import logger +from metagpt.memory.memory import Memory +from metagpt.schema import Message +from metagpt.utils.common import read_json_file, write_json_file + + +class BasicMemory(Message): + """ + BasicMemory继承于MG的Message类,其中content属性替代description属性 + Message类中对于Chat类型支持的非常好,对于Agent个体的Perceive,Reflection,Plan支持的并不多 + 在Type设计上,我们延续GA的三个种类,但是对于Chat种类的对话进行特别设计(具体怎么设计还没想好) + """ + + memory_id: Optional[str] = Field(default=None) # 记忆ID + memory_count: int = -1 # 第几个记忆,实际数值与Memory相等 + type_count: int = -1 # 第几种记忆,类型为整数 + memory_type: Optional[str] = Field(default=None) # 记忆类型,包含 event,thought,chat三种类型 + depth: int = -1 # 记忆深度,类型为整数 + created: Optional[datetime] = Field(default=None) # 创建时间 + expiration: Optional[datetime] = Field(default=None) # 记忆失效时间,默认为空() + last_accessed: Optional[datetime] = Field(default=None) # 上一次调用的时间,初始化时候与self.created一致 + subject: Optional[str] = Field(default=None) # 主语 + predicate: Optional[str] = Field(default=None) # 谓语 + object: Optional[str] = Field(default=None) # 宾语 + + description: Optional[str] = Field(default=None) + embedding_key: Optional[str] = Field(default=None) # 内容与self.content一致 + poignancy: int = -1 # importance值 + keywords: list[str] = Field(default=[]) # keywords + filling: list = Field(default=[]) # 装的与之相关联的memory_id的列表 + + __hash__ = object.__hash__ # support hash in AgentMemory + + @model_validator(mode="before") + @classmethod + def check_values(cls, values): + if "created" in values: + values["last_accessed"] = values["created"] + if "content" in values: + values["description"] = values["content"] + if "filling" in values: + values["filling"] = values["filling"] or [] + return values + + @field_serializer("created", "expiration") + def transform_time_field(self, time_field: Optional[datetime]) -> str: + if time_field: + time_field = time_field.strftime("%Y-%m-%d %H:%M:%S") + return time_field + + def summary(self): + return self.subject, self.predicate, self.object + + def save_to_dict(self) -> dict: + """ + 将MemoryBasic类转化为字典,用于存储json文件 + 这里需要注意,cause_by跟GA不兼容,所以需要做一个格式转换 + """ + memory_dict = dict() + node_id = self.memory_id + basic_mem_obj = self.model_dump( + include=[ + "node_count", + "type_count", + "type", + "depth", + "created", + "expiration", + "subject", + "predicate", + "object", + "description", + "embedding_key", + "poignancy", + "keywords", + "filling", + "cause_by", + ] + ) + + memory_dict[node_id] = basic_mem_obj + return memory_dict + + +class AgentMemory(Memory): + """ + GA中主要存储三种JSON + 1. embedding.json (Dict embedding_key:embedding) + 2. Node.json (Dict Node_id:Node) + 3. kw_strength.json + """ + + storage: list[BasicMemory] = [] # 重写Storage,存储BasicMemory所有节点 + event_list: list[BasicMemory] = [] # 存储event记忆 + thought_list: list[BasicMemory] = [] # 存储thought记忆 + chat_list: list[BasicMemory] = [] # chat-related memory + + event_keywords: dict[str, list[BasicMemory]] = dict() # 存储keywords + thought_keywords: dict[str, list[BasicMemory]] = dict() + chat_keywords: dict[str, list[BasicMemory]] = dict() + + kw_strength_event: dict[str, int] = dict() + kw_strength_thought: dict[str, int] = dict() + + memory_saved: Optional[Path] = Field(default=None) + embeddings: dict[str, list[float]] = dict() + + def set_mem_path(self, memory_saved: Path): + self.memory_saved = memory_saved + self.load(memory_saved) + + def save(self, memory_saved: Path): + """ + 将MemoryBasic类存储为Nodes.json形式。复现GA中的Kw Strength.json形式 + 这里添加一个路径即可 + TODO 这里在存储时候进行倒序存储,之后需要验证(test_memory通过) + """ + memory_json = dict() + for i in range(len(self.storage)): + memory_node = self.storage[len(self.storage) - i - 1] + memory_node = memory_node.save_to_dict() + memory_json.update(memory_node) + write_json_file(memory_saved.joinpath("nodes.json"), memory_json) + write_json_file(memory_saved.joinpath("embeddings.json"), self.embeddings) + + strength_json = dict() + strength_json["kw_strength_event"] = self.kw_strength_event + strength_json["kw_strength_thought"] = self.kw_strength_thought + write_json_file(memory_saved.joinpath("kw_strength.json"), strength_json) + + def load(self, memory_saved: Path): + """ + 将GA的JSON解析,填充到AgentMemory类之中 + """ + self.embeddings = read_json_file(memory_saved.joinpath("embeddings.json")) + memory_load = read_json_file(memory_saved.joinpath("nodes.json")) + for count in range(len(memory_load.keys())): + node_id = f"node_{str(count + 1)}" + node_details = memory_load[node_id] + node_type = node_details["type"] + created = datetime.strptime(node_details["created"], "%Y-%m-%d %H:%M:%S") + expiration = None + if node_details["expiration"]: + expiration = datetime.strptime(node_details["expiration"], "%Y-%m-%d %H:%M:%S") + + s = node_details["subject"] + p = node_details["predicate"] + o = node_details["object"] + + description = node_details["description"] + embedding_pair = (node_details["embedding_key"], self.embeddings[node_details["embedding_key"]]) + poignancy = node_details["poignancy"] + keywords = set(node_details["keywords"]) + filling = node_details["filling"] + if node_type == "thought": + self.add_thought( + created, expiration, s, p, o, description, keywords, poignancy, embedding_pair, filling + ) + if node_type == "event": + self.add_event(created, expiration, s, p, o, description, keywords, poignancy, embedding_pair, filling) + if node_type == "chat": + self.add_chat(created, expiration, s, p, o, description, keywords, poignancy, embedding_pair, filling) + + strength_keywords_load = read_json_file(memory_saved.joinpath("kw_strength.json")) + if strength_keywords_load["kw_strength_event"]: + self.kw_strength_event = strength_keywords_load["kw_strength_event"] + if strength_keywords_load["kw_strength_thought"]: + self.kw_strength_thought = strength_keywords_load["kw_strength_thought"] + + def add(self, memory_basic: BasicMemory): + """ + Add a new message to storage, while updating the index + 重写add方法,修改原有的Message类为BasicMemory类,并添加不同的记忆类型添加方式 + """ + if memory_basic.memory_id in self.storage: + return + self.storage.append(memory_basic) + if memory_basic.memory_type == "chat": + self.chat_list[0:0] = [memory_basic] + return + if memory_basic.memory_type == "thought": + self.thought_list[0:0] = [memory_basic] + return + if memory_basic.memory_type == "event": + self.event_list[0:0] = [memory_basic] + return + + def add_chat( + self, created, expiration, s, p, o, content, keywords, poignancy, embedding_pair, filling, cause_by="" + ): + """ + 调用add方法,初始化chat,在创建的时候就需要调用embedding函数 + """ + memory_count = len(self.storage) + 1 + type_count = len(self.thought_list) + 1 + memory_type = "chat" + memory_id = f"node_{str(memory_count)}" + depth = 1 + + memory_node = BasicMemory( + memory_id=memory_id, + memory_count=memory_count, + type_count=type_count, + memory_type=memory_type, + depth=depth, + created=created, + expiration=expiration, + subject=s, + predicate=p, + object=o, + description=content, + embedding_key=embedding_pair[0], + poignancy=poignancy, + keywords=keywords, + filling=filling, + cause_by=cause_by, + ) + + keywords = [i.lower() for i in keywords] + for kw in keywords: + if kw in self.chat_keywords: + self.chat_keywords[kw][0:0] = [memory_node] + else: + self.chat_keywords[kw] = [memory_node] + + self.add(memory_node) + + self.embeddings[embedding_pair[0]] = embedding_pair[1] + return memory_node + + def add_thought(self, created, expiration, s, p, o, content, keywords, poignancy, embedding_pair, filling): + """ + 调用add方法,初始化thought + """ + memory_count = len(self.storage) + 1 + type_count = len(self.thought_list) + 1 + memory_type = "thought" + memory_id = f"node_{str(memory_count)}" + depth = 1 + + try: + if filling: + depth_list = [memory_node.depth for memory_node in self.storage if memory_node.memory_id in filling] + depth += max(depth_list) + except Exception as exp: + logger.warning(f"filling init occur {exp}") + pass + + memory_node = BasicMemory( + memory_id=memory_id, + memory_count=memory_count, + type_count=type_count, + memory_type=memory_type, + depth=depth, + created=created, + expiration=expiration, + subject=s, + predicate=p, + object=o, + description=content, + embedding_key=embedding_pair[0], + poignancy=poignancy, + keywords=keywords, + filling=filling, + ) + + keywords = [i.lower() for i in keywords] + for kw in keywords: + if kw in self.thought_keywords: + self.thought_keywords[kw][0:0] = [memory_node] + else: + self.thought_keywords[kw] = [memory_node] + + self.add(memory_node) + + if f"{p} {o}" != "is idle": + for kw in keywords: + if kw in self.kw_strength_thought: + self.kw_strength_thought[kw] += 1 + else: + self.kw_strength_thought[kw] = 1 + + self.embeddings[embedding_pair[0]] = embedding_pair[1] + return memory_node + + def add_event(self, created, expiration, s, p, o, content, keywords, poignancy, embedding_pair, filling): + """ + 调用add方法,初始化event + """ + memory_count = len(self.storage) + 1 + type_count = len(self.event_list) + 1 + memory_type = "event" + memory_id = f"node_{str(memory_count)}" + depth = 0 + + if "(" in content: + content = " ".join(content.split()[:3]) + " " + content.split("(")[-1][:-1] + + memory_node = BasicMemory( + memory_id=memory_id, + memory_count=memory_count, + type_count=type_count, + memory_type=memory_type, + depth=depth, + created=created, + expiration=expiration, + subject=s, + predicate=p, + object=o, + description=content, + embedding_key=embedding_pair[0], + poignancy=poignancy, + keywords=keywords, + filling=filling, + ) + + keywords = [i.lower() for i in keywords] + for kw in keywords: + if kw in self.event_keywords: + self.event_keywords[kw][0:0] = [memory_node] + else: + self.event_keywords[kw] = [memory_node] + + self.add(memory_node) + + if f"{p} {o}" != "is idle": + for kw in keywords: + if kw in self.kw_strength_event: + self.kw_strength_event[kw] += 1 + else: + self.kw_strength_event[kw] = 1 + + self.embeddings[embedding_pair[0]] = embedding_pair[1] + return memory_node + + def get_summarized_latest_events(self, retention): + ret_set = set() + for e_node in self.event_list[:retention]: + ret_set.add(e_node.summary()) + return ret_set + + def get_last_chat(self, target_role_name: str): + if target_role_name.lower() in self.chat_keywords: + return self.chat_keywords[target_role_name.lower()][0] + else: + return False + + def retrieve_relevant_thoughts(self, s_content: str, p_content: str, o_content: str) -> set: + contents = [s_content, p_content, o_content] + + ret = [] + for i in contents: + if i in self.thought_keywords: + ret += self.thought_keywords[i.lower()] + + ret = set(ret) + return ret + + def retrieve_relevant_events(self, s_content: str, p_content: str, o_content: str) -> set: + contents = [s_content, p_content, o_content] + + ret = [] + for i in contents: + if i in self.event_keywords: + ret += self.event_keywords[i] + + ret = set(ret) + return ret diff --git a/metagpt/ext/stanford_town/memory/retrieve.py b/metagpt/ext/stanford_town/memory/retrieve.py new file mode 100644 index 000000000..c4b32f965 --- /dev/null +++ b/metagpt/ext/stanford_town/memory/retrieve.py @@ -0,0 +1,180 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : Retrieve函数实现 + +import datetime + +from numpy import dot +from numpy.linalg import norm + +from metagpt.ext.stanford_town.memory.agent_memory import BasicMemory +from metagpt.ext.stanford_town.utils.utils import get_embedding + + +def agent_retrieve( + agent_memory, + curr_time: datetime.datetime, + memory_forget: float, + query: str, + nodes: list[BasicMemory], + topk: int = 4, +) -> list[BasicMemory]: + """ + Retrieve需要集合Role使用,原因在于Role才具有AgentMemory,scratch + 逻辑:Role调用该函数,self.rc.AgentMemory,self.rc.scratch.curr_time,self.rc.scratch.memory_forget + 输入希望查询的内容与希望回顾的条数,返回TopK条高分记忆,即List[BasicMemory] + + Score_lists示例 + { + "memory": memories[i], BasicMemory类 + "importance": memories[i].poignancy + "recency": 衰减因子计算结果 + "relevance": 搜索结果 + } + """ + memories = nodes + agent_memory_embedding = agent_memory.embeddings + memories = sorted(memories, key=lambda memory_node: memory_node.last_accessed, reverse=True) + + score_list = [] + score_list = extract_importance(memories, score_list) + score_list = extract_recency(curr_time, memory_forget, score_list) + score_list = extract_relevance(agent_memory_embedding, query, score_list) + score_list = normalize_score_floats(score_list, 0, 1) + + total_dict = {} + gw = [1, 1, 1] # 三个因素的权重,重要性,近因性,相关性, + for i in range(len(score_list)): + total_score = ( + score_list[i]["importance"] * gw[0] + score_list[i]["recency"] * gw[1] + score_list[i]["relevance"] * gw[2] + ) + total_dict[score_list[i]["memory"].memory_id] = total_score + + result = top_highest_x_values(total_dict, topk) + + return result # 返回的是一个BasicMemory列表 + + +def new_agent_retrieve(role, focus_points: list, n_count=30) -> dict: + """ + 输入为role,关注点列表,返回记忆数量 + 输出为字典,键为focus_point,值为对应的记忆列表 + """ + retrieved = dict() + for focal_pt in focus_points: + nodes = [ + [i.last_accessed, i] + for i in role.memory.event_list + role.memory.thought_list + if "idle" not in i.embedding_key + ] + nodes = sorted(nodes, key=lambda x: x[0]) + nodes = [i for created, i in nodes] + results = agent_retrieve( + role.memory, role.scratch.curr_time, role.scratch.recency_decay, focal_pt, nodes, n_count + ) + final_result = [] + for n in results: + for i in role.memory.storage: + if i.memory_id == n: + i.last_accessed = role.scratch.curr_time + final_result.append(i) + + retrieved[focal_pt] = final_result + + return retrieved + + +def top_highest_x_values(d, x): + """ + 输入字典,Topx + 返回以字典值排序,字典键组成的List[BasicMemory] + """ + top_v = [item[0] for item in sorted(d.items(), key=lambda item: item[1], reverse=True)[:x]] + return top_v + + +def extract_importance(memories, score_list): + """ + 抽取重要性 + """ + for i in range(len(memories)): + score = {"memory": memories[i], "importance": memories[i].poignancy} + score_list.append(score) + return score_list + + +def extract_relevance(agent_memory_embedding, query, score_list): + """ + 抽取相关性 + """ + query_embedding = get_embedding(query) + # 进行 + for i in range(len(score_list)): + node_embedding = agent_memory_embedding[score_list[i]["memory"].embedding_key] + result = cos_sim(node_embedding, query_embedding) + score_list[i]["relevance"] = result + + return score_list + + +def extract_recency(curr_time, memory_forget, score_list): + """ + 抽取近因性,目前使用的现实世界过一天走一个衰减因子 + """ + for i in range(len(score_list)): + day_count = (curr_time - score_list[i]["memory"].created).days + score_list[i]["recency"] = memory_forget**day_count + return score_list + + +def cos_sim(a, b): + """ + 计算余弦相似度 + """ + return dot(a, b) / (norm(a) * norm(b)) + + +def normalize_list_floats(single_list, target_min, target_max): + """ + 单个列表归一化 + """ + if len(single_list) == 0: + return [] + + min_val = min(single_list) + max_val = max(single_list) + range_val = max_val - min_val + + if range_val == 0: + for i in range(len(single_list)): + single_list[i] = (target_max - target_min) / 2 + else: + for i in range(len(single_list)): + single_list[i] = (single_list[i] - min_val) * (target_max - target_min) / range_val + target_min + return single_list + + +def normalize_score_floats(score_list, target_min, target_max): + """ + 整体归一化 + """ + importance_list = [] + relevance_list = [] + recency_list = [] + + for i in range(len(score_list)): + importance_list.append(score_list[i]["importance"]) + relevance_list.append(score_list[i]["relevance"]) + recency_list.append(score_list[i]["recency"]) + + # 进行归一化操作 + importance_list = normalize_list_floats(importance_list, target_min, target_max) + relevance_list = normalize_list_floats(relevance_list, target_min, target_max) + recency_list = normalize_list_floats(recency_list, target_min, target_max) + + for i in range(len(score_list)): + score_list[i]["importance"] = importance_list[i] + score_list[i]["relevance"] = relevance_list[i] + score_list[i]["recency"] = recency_list[i] + + return score_list diff --git a/metagpt/ext/stanford_town/memory/scratch.py b/metagpt/ext/stanford_town/memory/scratch.py new file mode 100644 index 000000000..b4036f839 --- /dev/null +++ b/metagpt/ext/stanford_town/memory/scratch.py @@ -0,0 +1,383 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : Scratch类实现(角色信息类) + +from datetime import datetime, timedelta +from pathlib import Path +from typing import Optional, Union + +from pydantic import BaseModel, Field, field_serializer, field_validator + +from metagpt.utils.common import read_json_file, write_json_file + + +class Scratch(BaseModel): + # 类别1:人物超参 + vision_r: int = 4 + att_bandwidth: int = 3 + retention: int = 5 + + # 类别2:世界信息 + curr_time: Optional[datetime] = Field(default=None) + curr_tile: Optional[list[int]] = Field(default=None) + daily_plan_req: Optional[str] = Field(default=None) + + # 类别3:人物角色的核心身份 + name: Optional[str] = Field(default=None) + first_name: Optional[str] = Field(default=None) + last_name: Optional[str] = Field(default=None) + age: Optional[int] = Field(default=None) + innate: Optional[str] = Field(default=None) # L0 permanent core traits. + learned: Optional[str] = Field(default=None) # L1 stable traits. + currently: Optional[str] = Field(default=None) # L2 external implementation. + lifestyle: Optional[str] = Field(default=None) + living_area: Optional[str] = Field(default=None) + + # 类别4:旧反思变量 + concept_forget: int = 100 + daily_reflection_time: int = 60 * 3 + daily_reflection_size: int = 5 + overlap_reflect_th: int = 2 + kw_strg_event_reflect_th: int = 4 + kw_strg_thought_reflect_th: int = 4 + + # 类别5:新反思变量 + recency_w: int = 1 + relevance_w: int = 1 + importance_w: int = 1 + recency_decay: float = 0.99 + importance_trigger_max: int = 150 + importance_trigger_curr: int = 150 + importance_ele_n: int = 0 + thought_count: int = 5 + + # 类别6:个人计划 + daily_req: list[str] = Field(default=[]) + f_daily_schedule: list[list[Union[int, str]]] = Field(default=[]) + f_daily_schedule_hourly_org: list[list[Union[int, str]]] = Field(default=[]) + + # 类别7:当前动作 + act_address: Optional[str] = Field(default=None) + act_start_time: Optional[datetime] = Field(default=None) + act_duration: Optional[int] = Field(default=None) + act_description: Optional[str] = Field(default=None) + act_pronunciatio: Optional[str] = Field(default=None) + act_event: list[Optional[str]] = [None, None, None] + + act_obj_description: Optional[str] = Field(default=None) + act_obj_pronunciatio: Optional[str] = Field(default=None) + act_obj_event: list[Optional[str]] = [None, None, None] + + chatting_with: Optional[str] = Field(default=None) + chat: Optional[str] = Field(default=None) + chatting_with_buffer: dict = dict() + chatting_end_time: Optional[datetime] = Field(default=None) + + act_path_set: bool = False + planned_path: list[list[int]] = Field(default=[]) + + @field_validator("curr_time", "act_start_time", "chatting_end_time", mode="before") + @classmethod + def check_time_filed(cls, time_filed): + val = datetime.strptime(time_filed, "%B %d, %Y, %H:%M:%S") if time_filed else None + return val + + @field_serializer("curr_time", "act_start_time", "chatting_end_time") + def transform_time_field(self, time_filed: Optional[datetime]) -> str: + if time_filed: + time_filed = time_filed.strftime("%B %d, %Y, %H:%M:%S") + return time_filed + + @classmethod + def init_scratch_from_path(cls, f_saved: Path): + scratch_load = read_json_file(f_saved) + scratch = Scratch(**scratch_load) + return scratch + + def save(self, out_json: Path): + """ + Save persona's scratch. + + INPUT: + out_json: The file where we wil be saving our persona's state. + OUTPUT: + None + """ + scratch = self.model_dump() + write_json_file(out_json, scratch, encoding="utf-8") + + def get_f_daily_schedule_index(self, advance=0): + """ + We get the current index of self.f_daily_schedule. + + Recall that self.f_daily_schedule stores the decomposed action sequences + up until now, and the hourly sequences of the future action for the rest + of today. Given that self.f_daily_schedule is a list of list where the + inner list is composed of [task, duration], we continue to add up the + duration until we reach "if elapsed > today_min_elapsed" condition. The + index where we stop is the index we will return. + + INPUT + advance: Integer value of the number minutes we want to look into the + future. This allows us to get the index of a future timeframe. + OUTPUT + an integer value for the current index of f_daily_schedule. + """ + # We first calculate teh number of minutes elapsed today. + today_min_elapsed = 0 + today_min_elapsed += self.curr_time.hour * 60 + today_min_elapsed += self.curr_time.minute + today_min_elapsed += advance + + x = 0 + for task, duration in self.f_daily_schedule: + x += duration + x = 0 + for task, duration in self.f_daily_schedule_hourly_org: + x += duration + + # We then calculate the current index based on that. + curr_index = 0 + elapsed = 0 + for task, duration in self.f_daily_schedule: + elapsed += duration + if elapsed > today_min_elapsed: + return curr_index + curr_index += 1 + + return curr_index + + def get_f_daily_schedule_hourly_org_index(self, advance=0): + """ + We get the current index of self.f_daily_schedule_hourly_org. + It is otherwise the same as get_f_daily_schedule_index. + + INPUT + advance: Integer value of the number minutes we want to look into the + future. This allows us to get the index of a future timeframe. + OUTPUT + an integer value for the current index of f_daily_schedule. + """ + # We first calculate teh number of minutes elapsed today. + today_min_elapsed = 0 + today_min_elapsed += self.curr_time.hour * 60 + today_min_elapsed += self.curr_time.minute + today_min_elapsed += advance + # We then calculate the current index based on that. + curr_index = 0 + elapsed = 0 + for task, duration in self.f_daily_schedule_hourly_org: + elapsed += duration + if elapsed > today_min_elapsed: + return curr_index + curr_index += 1 + return curr_index + + def get_str_iss(self): + """ + ISS stands for "identity stable set." This describes the commonset summary + of this persona -- basically, the bare minimum description of the persona + that gets used in almost all prompts that need to call on the persona. + + INPUT + None + OUTPUT + the identity stable set summary of the persona in a string form. + EXAMPLE STR OUTPUT + "Name: Dolores Heitmiller + Age: 28 + Innate traits: hard-edged, independent, loyal + Learned traits: Dolores is a painter who wants live quietly and paint + while enjoying her everyday life. + Currently: Dolores is preparing for her first solo show. She mostly + works from home. + Lifestyle: Dolores goes to bed around 11pm, sleeps for 7 hours, eats + dinner around 6pm. + Daily plan requirement: Dolores is planning to stay at home all day and + never go out." + """ + commonset = "" + commonset += f"Name: {self.name}\n" + commonset += f"Age: {self.age}\n" + commonset += f"Innate traits: {self.innate}\n" + commonset += f"Learned traits: {self.learned}\n" + commonset += f"Currently: {self.currently}\n" + commonset += f"Lifestyle: {self.lifestyle}\n" + commonset += f"Daily plan requirement: {self.daily_plan_req}\n" + commonset += f"Current Date: {self.curr_time.strftime('%A %B %d') if self.curr_time else ''}\n" + return commonset + + def get_str_name(self): + return self.name + + def get_str_firstname(self): + return self.first_name + + def get_str_lastname(self): + return self.last_name + + def get_str_age(self): + return str(self.age) + + def get_str_innate(self): + return self.innate + + def get_str_learned(self): + return self.learned + + def get_str_currently(self): + return self.currently + + def get_str_lifestyle(self): + return self.lifestyle + + def get_str_daily_plan_req(self): + return self.daily_plan_req + + def get_str_curr_date_str(self): + return self.curr_time.strftime("%A %B %d") + + def get_curr_event(self): + if not self.act_address: + return self.name, None, None + else: + return self.act_event + + def get_curr_event_and_desc(self): + if not self.act_address: + return self.name, None, None, None + else: + return self.act_event[0], self.act_event[1], self.act_event[2], self.act_description + + def get_curr_obj_event_and_desc(self): + if not self.act_address: + return "", None, None, None + else: + return self.act_address, self.act_obj_event[1], self.act_obj_event[2], self.act_obj_description + + def add_new_action( + self, + action_address, + action_duration, + action_description, + action_pronunciatio, + action_event, + chatting_with, + chat, + chatting_with_buffer, + chatting_end_time, + act_obj_description, + act_obj_pronunciatio, + act_obj_event, + act_start_time=None, + ): + self.act_address = action_address + self.act_duration = action_duration + self.act_description = action_description + self.act_pronunciatio = action_pronunciatio + self.act_event = action_event + + self.chatting_with = chatting_with + self.chat = chat + if chatting_with_buffer: + self.chatting_with_buffer.update(chatting_with_buffer) + self.chatting_end_time = chatting_end_time + + self.act_obj_description = act_obj_description + self.act_obj_pronunciatio = act_obj_pronunciatio + self.act_obj_event = act_obj_event + + self.act_start_time = self.curr_time + + self.act_path_set = False + + def act_time_str(self): + """ + Returns a string output of the current time. + + INPUT + None + OUTPUT + A string output of the current time. + EXAMPLE STR OUTPUT + "14:05 P.M." + """ + return self.act_start_time.strftime("%H:%M %p") + + def act_check_finished(self): + """ + Checks whether the self.Action instance has finished. + + INPUT + curr_datetime: Current time. If current time is later than the action's + start time + its duration, then the action has finished. + OUTPUT + Boolean [True]: Action has finished. + Boolean [False]: Action has not finished and is still ongoing. + """ + if not self.act_address: + return True + + if self.chatting_with: + end_time = self.chatting_end_time + else: + x = self.act_start_time + if x.second != 0: + x = x.replace(second=0) + x = x + timedelta(minutes=1) + end_time = x + timedelta(minutes=self.act_duration) + + if end_time.strftime("%H:%M:%S") == self.curr_time.strftime("%H:%M:%S"): + return True + return False + + def act_summarize(self): + """ + Summarize the current action as a dictionary. + + INPUT + None + OUTPUT + ret: A human readable summary of the action. + """ + exp = dict() + exp["persona"] = self.name + exp["address"] = self.act_address + exp["start_datetime"] = self.act_start_time + exp["duration"] = self.act_duration + exp["description"] = self.act_description + exp["pronunciatio"] = self.act_pronunciatio + return exp + + def act_summary_str(self): + """ + Returns a string summary of the current action. Meant to be + human-readable. + + INPUT + None + OUTPUT + ret: A human readable summary of the action. + """ + start_datetime_str = self.act_start_time.strftime("%A %B %d -- %H:%M %p") + ret = f"[{start_datetime_str}]\n" + ret += f"Activity: {self.name} is {self.act_description}\n" + ret += f"Address: {self.act_address}\n" + ret += f"Duration in minutes (e.g., x min): {str(self.act_duration)} min\n" + return ret + + def get_daily_schedule(self, daily_schedule: list[list[str]]): + ret = "" + curr_min_sum = 0 + for row in daily_schedule: + curr_min_sum += row[1] + hour = int(curr_min_sum / 60) + minute = curr_min_sum % 60 + ret += f"{hour:02}:{minute:02} || {row[0]}\n" + return ret + + def get_str_daily_schedule_summary(self): + return self.get_daily_schedule(self.f_daily_schedule) + + def get_str_daily_schedule_hourly_org_summary(self): + return self.get_daily_schedule(self.f_daily_schedule_hourly_org) diff --git a/metagpt/ext/stanford_town/memory/spatial_memory.py b/metagpt/ext/stanford_town/memory/spatial_memory.py new file mode 100644 index 000000000..71b856907 --- /dev/null +++ b/metagpt/ext/stanford_town/memory/spatial_memory.py @@ -0,0 +1,116 @@ +""" +Author: Joon Sung Park (joonspk@stanford.edu) + +File: spatial_memory.py +Description: Defines the MemoryTree class that serves as the agents' spatial +memory that aids in grounding their behavior in the game world. +""" +from pathlib import Path + +from pydantic import BaseModel, Field + +from metagpt.logs import logger +from metagpt.utils.common import read_json_file, write_json_file + + +class MemoryTree(BaseModel): + tree: dict = Field(default=dict) + + def set_mem_path(self, f_saved: Path): + self.tree = read_json_file(f_saved) + + def print_tree(self) -> None: + def _print_tree(tree, depth): + dash = " >" * depth + if isinstance(tree, list): + if tree: + logger.info(f"{dash} {tree}") + return + + for key, val in tree.items(): + if key: + logger.info(f"{dash} {tree}") + _print_tree(val, depth + 1) + + _print_tree(self.tree, 0) + + def save(self, out_json: Path) -> None: + write_json_file(out_json, self.tree) + + def get_str_accessible_sectors(self, curr_world: str) -> str: + """ + Returns a summary string of all the arenas that the persona can access + within the current sector. + + Note that there are places a given persona cannot enter. This information + is provided in the persona sheet. We account for this in this function. + + INPUT + None + OUTPUT + A summary string of all the arenas that the persona can access. + EXAMPLE STR OUTPUT + "bedroom, kitchen, dining room, office, bathroom" + """ + x = ", ".join(list(self.tree[curr_world].keys())) + return x + + def get_str_accessible_sector_arenas(self, sector: str) -> str: + """ + Returns a summary string of all the arenas that the persona can access + within the current sector. + + Note that there are places a given persona cannot enter. This information + is provided in the persona sheet. We account for this in this function. + + INPUT + None + OUTPUT + A summary string of all the arenas that the persona can access. + EXAMPLE STR OUTPUT + "bedroom, kitchen, dining room, office, bathroom" + """ + curr_world, curr_sector = sector.split(":") + if not curr_sector: + return "" + x = ", ".join(list(self.tree[curr_world][curr_sector].keys())) + return x + + def get_str_accessible_arena_game_objects(self, arena: str) -> str: + """ + Get a str list of all accessible game objects that are in the arena. If + temp_address is specified, we return the objects that are available in + that arena, and if not, we return the objects that are in the arena our + persona is currently in. + + INPUT + temp_address: optional arena address + OUTPUT + str list of all accessible game objects in the gmae arena. + EXAMPLE STR OUTPUT + "phone, charger, bed, nightstand" + """ + curr_world, curr_sector, curr_arena = arena.split(":") + + if not curr_arena: + return "" + + try: + x = ", ".join(list(self.tree[curr_world][curr_sector][curr_arena])) + except Exception: + x = ", ".join(list(self.tree[curr_world][curr_sector][curr_arena.lower()])) + return x + + def add_tile_info(self, tile_info: dict) -> None: + if tile_info["world"]: + if tile_info["world"] not in self.tree: + self.tree[tile_info["world"]] = {} + if tile_info["sector"]: + if tile_info["sector"] not in self.tree[tile_info["world"]]: + self.tree[tile_info["world"]][tile_info["sector"]] = {} + if tile_info["arena"]: + if tile_info["arena"] not in self.tree[tile_info["world"]][tile_info["sector"]]: + self.tree[tile_info["world"]][tile_info["sector"]][tile_info["arena"]] = [] + if tile_info["game_object"]: + if tile_info["game_object"] not in self.tree[tile_info["world"]][tile_info["sector"]][tile_info["arena"]]: + self.tree[tile_info["world"]][tile_info["sector"]][tile_info["arena"]] += [tile_info["game_object"]] diff --git a/metagpt/ext/stanford_town/plan/__init__.py b/metagpt/ext/stanford_town/plan/__init__.py new file mode 100644 index 000000000..2bcf8efd0 --- /dev/null +++ b/metagpt/ext/stanford_town/plan/__init__.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : diff --git a/metagpt/ext/stanford_town/plan/converse.py b/metagpt/ext/stanford_town/plan/converse.py new file mode 100644 index 000000000..8eefbc9b4 --- /dev/null +++ b/metagpt/ext/stanford_town/plan/converse.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : conversation between two agents + +from typing import Tuple + +from metagpt.ext.stanford_town.actions.agent_chat_sum_rel import AgentChatSumRel +from metagpt.ext.stanford_town.actions.gen_iter_chat_utt import GenIterChatUTT +from metagpt.ext.stanford_town.memory.retrieve import new_agent_retrieve +from metagpt.logs import logger + + +async def agent_conversation(init_role: "STRole", target_role: "STRole", conv_rounds: int = 8) -> list[list[str]]: + curr_chat = [] + logger.info(f"Role: {init_role.name} starts a conversation with Role: {target_role.name}") + + for idx in range(conv_rounds): + logger.info(f"Conv round: {idx} between {init_role.name} and {target_role.name}") + scratch = init_role.rc.scratch + target_scratch = target_role.rc.scratch + + focal_points = [f"{target_scratch.name}"] + retrieved = new_agent_retrieve(init_role, focal_points, 50) + relationship = await generate_summarize_agent_relationship(init_role, target_role, retrieved) + logger.info(f"The relationship between {init_role.name} and {target_role.name}: {relationship}") + last_chat = "" + for i in curr_chat[-4:]: + last_chat += ": ".join(i) + "\n" + if last_chat: + focal_points = [f"{relationship}", f"{target_scratch.name} is {target_scratch.act_description}", last_chat] + else: + focal_points = [f"{relationship}", f"{target_scratch.name} is {target_scratch.act_description}"] + retrieved = new_agent_retrieve(init_role, focal_points, 15) + utt, end = await generate_one_utterance(init_role, target_role, retrieved, curr_chat) + + curr_chat += [[scratch.name, utt]] + if end: + break + + focal_points = [f"{scratch.name}"] + retrieved = new_agent_retrieve(target_role, focal_points, 50) + relationship = await generate_summarize_agent_relationship(target_role, init_role, retrieved) + logger.info(f"The relationship between {target_role.name} and {init_role.name}: {relationship}") + last_chat = "" + for i in curr_chat[-4:]: + last_chat += ": ".join(i) + "\n" + if last_chat: + focal_points = [f"{relationship}", f"{scratch.name} is {scratch.act_description}", last_chat] + else: + focal_points = [f"{relationship}", f"{scratch.name} is {scratch.act_description}"] + retrieved = new_agent_retrieve(target_role, focal_points, 15) + utt, end = await generate_one_utterance(target_role, init_role, retrieved, curr_chat) + + curr_chat += [[target_scratch.name, utt]] + if end: + break + + logger.warning(f"Conversations between {target_role.name} and {init_role.name}:") + for row in curr_chat: + logger.info(row) + + return curr_chat + + +async def generate_summarize_agent_relationship(init_role: "STRole", target_role: "STRole", retrieved: dict) -> str: + all_embedding_keys = list() + for key, val in retrieved.items(): + for i in val: + all_embedding_keys += [i.embedding_key] + all_embedding_key_str = "" + for i in all_embedding_keys: + all_embedding_key_str += f"{i}\n" + + summarized_relationship = await AgentChatSumRel().run(init_role, target_role, all_embedding_key_str) + return summarized_relationship + + +async def generate_one_utterance(init_role, target_role, retrieved: dict, curr_chat: list) -> Tuple[str, str]: + # Chat version optimized for speed via batch generation + scratch = init_role.rc.scratch + target_scratch = target_role.rc.scratch + curr_context = ( + f"{scratch.name} " + + f"was {scratch.act_description} " + + f"when {scratch.name} " + + f"saw {target_scratch.name} " + + f"in the middle of {target_scratch.act_description}.\n" + ) + curr_context += f"{scratch.name} " + "is initiating a conversation with " + f"{target_scratch.name}." + + x = await GenIterChatUTT().run(init_role, target_role, retrieved, curr_context, curr_chat) + + return x["utterance"], x["end"] diff --git a/metagpt/ext/stanford_town/plan/st_plan.py b/metagpt/ext/stanford_town/plan/st_plan.py new file mode 100644 index 000000000..f63052fc5 --- /dev/null +++ b/metagpt/ext/stanford_town/plan/st_plan.py @@ -0,0 +1,706 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : st' planning execution + +import datetime +import math +import random +from typing import Tuple, Union + +from metagpt.ext.stanford_town.actions.decide_to_talk import DecideToTalk +from metagpt.ext.stanford_town.actions.gen_action_details import GenActionDetails +from metagpt.ext.stanford_town.actions.gen_daily_schedule import GenDailySchedule +from metagpt.ext.stanford_town.actions.gen_hourly_schedule import GenHourlySchedule +from metagpt.ext.stanford_town.actions.new_decomp_schedule import NewDecompSchedule +from metagpt.ext.stanford_town.actions.summarize_conv import SummarizeConv +from metagpt.ext.stanford_town.actions.task_decomp import TaskDecomp +from metagpt.ext.stanford_town.actions.wake_up import WakeUp +from metagpt.ext.stanford_town.memory.retrieve import new_agent_retrieve +from metagpt.ext.stanford_town.plan.converse import agent_conversation +from metagpt.ext.stanford_town.utils.utils import get_embedding +from metagpt.llm import LLM +from metagpt.logs import logger + + +async def plan(role: "STRole", roles: dict["STRole"], new_day: bool, retrieved: dict) -> str: + # PART 1: Generate the hourly schedule. + if new_day: + await _long_term_planning(role, new_day) + + # PART 2: If the current action has expired, we want to create a new plan. + act_check_finished = role.scratch.act_check_finished() + logger.info(f"Role: {role.name} act_check_finished is {act_check_finished}") + if act_check_finished: + await _determine_action(role) + + # PART 3: If you perceived an event that needs to be responded to (saw + # another role), and retrieved relevant information. + # Step 1: Retrieved may have multiple events represented in it. The first + # job here is to determine which of the events we want to focus + # on for the role. + # takes the form of a dictionary like this: + # dictionary {["curr_event"] = , + # ["events"] = [, ...], + # ["thoughts"] = [, ...]} + focused_event = False + if retrieved.keys(): + focused_event = _choose_retrieved(role.name, retrieved) + + # Step 2: Once we choose an event, we need to determine whether the + # role will take any actions for the perceived event. There are + # three possible modes of reaction returned by _should_react. + # a) "chat with {target_role.name}" + # b) "react" + # c) False + logger.info(f"Role: {role.name} focused_event: {focused_event}") + if focused_event: + reaction_mode = await _should_react(role, focused_event, roles) + logger.info(f"Role: {role.name} reaction_mode: {reaction_mode}") + if reaction_mode: + # If we do want to chat, then we generate conversation + if reaction_mode[:9] == "chat with": + await _chat_react(role, reaction_mode, roles) + elif reaction_mode[:4] == "wait": + await _wait_react(role, reaction_mode) + + # Step 3: Chat-related state clean up. + # If the persona is not chatting with anyone, we clean up any of the + # chat-related states here. + if role.rc.scratch.act_event[1] != "chat with": + role.rc.scratch.chatting_with = None + role.rc.scratch.chat = None + role.rc.scratch.chatting_end_time = None + # We want to make sure that the persona does not keep conversing with each + # other in an infinite loop. So, chatting_with_buffer maintains a form of + # buffer that makes the persona wait from talking to the same target + # immediately after chatting once. We keep track of the buffer value here. + curr_persona_chat_buffer = role.rc.scratch.chatting_with_buffer + for persona_name, buffer_count in curr_persona_chat_buffer.items(): + if persona_name != role.rc.scratch.chatting_with: + role.rc.scratch.chatting_with_buffer[persona_name] -= 1 + + return role.rc.scratch.act_address + + +def _choose_retrieved(role_name: str, retrieved: dict) -> Union[None, dict]: + """ + Retrieved elements have multiple core "curr_events". We need to choose one + event to which we are going to react to. We pick that event here. + Args: + role_name: Current role instance's name whose action we are determining. + retrieved: A dictionary of that were retrieved from the + the role's associative memory. This dictionary takes the + following form: + dictionary[event.description] = + {["curr_event"] = , + ["events"] = [, ...], + ["thoughts"] = [, ...] } + """ + # Once we are done with the reflection, we might want to build a more + # complex structure here. + + # We do not want to take self events... for now + copy_retrieved = retrieved.copy() + for event_desc, rel_ctx in copy_retrieved.items(): + curr_event = rel_ctx["curr_event"] + if curr_event.subject == role_name: + del retrieved[event_desc] + + # Always choose role first. + priority = [] + for event_desc, rel_ctx in retrieved.items(): + curr_event = rel_ctx["curr_event"] + if ":" not in curr_event.subject and curr_event.subject != role_name: + priority += [rel_ctx] + if priority: + return random.choice(priority) + + # Skip idle. + for event_desc, rel_ctx in retrieved.items(): + if "is idle" not in event_desc: + priority += [rel_ctx] + if priority: + return random.choice(priority) + return None + + +async def _should_react(role: "STRole", retrieved: dict, roles: dict): + """ + Determines what form of reaction the role should exihibit given the + retrieved values. + INPUT + role: Current <"STRole"> instance whose action we are determining. + retrieved: A dictionary of that were retrieved from the + the role's associative memory. This dictionary takes the + following form: + dictionary[event.description] = + {["curr_event"] = , + ["events"] = [, ...], + ["thoughts"] = [, ...] } + roles: A dictionary that contains all role names as keys, and the + <"STRole"> instance as values. + """ + + async def lets_talk(init_role: "STRole", target_role: "STRole", retrieved: dict): + if init_role.name == target_role.name: + logger.info(f"Role: {role.name} _should_react lets_talk meet same role, return False") + return False + + scratch = init_role.rc.scratch + target_scratch = target_role.rc.scratch + if ( + not target_scratch.act_address + or not target_scratch.act_description + or not scratch.act_address + or not scratch.act_description + ): + return False + + if "sleeping" in target_scratch.act_description or "sleeping" in scratch.act_description: + return False + + if scratch.curr_time.hour == 23: + return False + + if "" in target_scratch.act_address: + return False + + if target_scratch.chatting_with or scratch.chatting_with: + return False + + if target_role.name in scratch.chatting_with_buffer: + if scratch.chatting_with_buffer[target_role.name] > 0: + return False + + if await DecideToTalk().run(init_role, target_role, retrieved): + return True + + return False + + async def lets_react(init_role: "STRole", target_role: "STRole", retrieved: dict): + if init_role.name == target_role.name: + logger.info(f"Role: {role.name} _should_react lets_react meet same role, return False") + return False + + scratch = init_role.rc.scratch + target_scratch = target_role.rc.scratch + if ( + not target_scratch.act_address + or not target_scratch.act_description + or not scratch.act_address + or not scratch.act_description + ): + return False + + if "sleeping" in target_scratch.act_description or "sleeping" in scratch.act_description: + return False + + # return False + if scratch.curr_time.hour == 23: + return False + + if "waiting" in target_scratch.act_description: + return False + if scratch.planned_path == []: + return False + + if scratch.act_address != target_scratch.act_address: + return False + + react_mode = await DecideToTalk().run(init_role, target_role, retrieved) + + if react_mode == "1": + wait_until = ( + target_scratch.act_start_time + datetime.timedelta(minutes=target_scratch.act_duration - 1) + ).strftime("%B %d, %Y, %H:%M:%S") + return f"wait: {wait_until}" + elif react_mode == "2": + return False + return "do other things" + else: + return False # "keep" + + # If the role is chatting right now, default to no reaction + scratch = role.rc.scratch + if scratch.chatting_with: + return False + if "" in scratch.act_address: + return False + + # Recall that retrieved takes the following form: + # dictionary {["curr_event"] = } + curr_event = retrieved["curr_event"] + logger.info(f"Role: {role.name} _should_react curr_event.subject: {curr_event.subject}") + + if ":" not in curr_event.subject: + # this is a role event. + if await lets_talk(role, roles[curr_event.subject], retrieved): + return f"chat with {curr_event.subject}" + react_mode = await lets_react(role, roles[curr_event.subject], retrieved) + return react_mode + return False + + +async def _chat_react(role: "STRole", reaction_mode: str, roles: dict["STRole"]): + # There are two roles -- the role who is initiating the conversation + # and the role who is the target. We get the role instances here. + init_role = role + target_role = roles[reaction_mode[9:].strip()] + + # Actually creating the conversation here. + convo, duration_min = await generate_convo(init_role, target_role) # 2222 + convo_summary = await generate_convo_summary(convo) + inserted_act = convo_summary + inserted_act_dur = duration_min + + act_start_time = target_role.rc.scratch.act_start_time + + curr_time = target_role.rc.scratch.curr_time + if curr_time.second != 0: + temp_curr_time = curr_time + datetime.timedelta(seconds=60 - curr_time.second) + chatting_end_time = temp_curr_time + datetime.timedelta(minutes=inserted_act_dur) + else: + chatting_end_time = curr_time + datetime.timedelta(minutes=inserted_act_dur) + + for role, p in [("init", init_role), ("target", target_role)]: + if role == "init": + act_address = f" {target_role.name}" + act_event = (p.name, "chat with", target_role.name) + chatting_with = target_role.name + chatting_with_buffer = {} + chatting_with_buffer[target_role.name] = 800 + elif role == "target": + act_address = f" {init_role.name}" + act_event = (p.name, "chat with", init_role.name) + chatting_with = init_role.name + chatting_with_buffer = {} + chatting_with_buffer[init_role.name] = 800 + + act_pronunciatio = "💬" + act_obj_description = None + act_obj_pronunciatio = None + act_obj_event = (None, None, None) + + await _create_react( + p, + inserted_act, + inserted_act_dur, + act_address, + act_event, + chatting_with, + convo, + chatting_with_buffer, + chatting_end_time, + act_pronunciatio, + act_obj_description, + act_obj_pronunciatio, + act_obj_event, + act_start_time, + ) + + +async def _create_react( + role: "STRole", + inserted_act: str, + inserted_act_dur: int, + act_address: str, + act_event: Tuple, + chatting_with: str, + chat: list, + chatting_with_buffer: dict, + chatting_end_time: datetime, + act_pronunciatio: str, + act_obj_description: str, + act_obj_pronunciatio: str, + act_obj_event: Tuple, + act_start_time=None, +): + p = role + scratch = role.rc.scratch + + min_sum = 0 + for i in range(scratch.get_f_daily_schedule_hourly_org_index()): + min_sum += scratch.f_daily_schedule_hourly_org[i][1] + start_hour = int(min_sum / 60) + + if scratch.f_daily_schedule_hourly_org[scratch.get_f_daily_schedule_hourly_org_index()][1] >= 120: + end_hour = ( + start_hour + scratch.f_daily_schedule_hourly_org[scratch.get_f_daily_schedule_hourly_org_index()][1] / 60 + ) + + elif ( + scratch.f_daily_schedule_hourly_org[scratch.get_f_daily_schedule_hourly_org_index()][1] + + scratch.f_daily_schedule_hourly_org[scratch.get_f_daily_schedule_hourly_org_index() + 1][1] + ): + end_hour = start_hour + ( + ( + scratch.f_daily_schedule_hourly_org[scratch.get_f_daily_schedule_hourly_org_index()][1] + + scratch.f_daily_schedule_hourly_org[scratch.get_f_daily_schedule_hourly_org_index() + 1][1] + ) + / 60 + ) + + else: + end_hour = start_hour + 2 + end_hour = int(end_hour) + + dur_sum = 0 + count = 0 + start_index = None + end_index = None + for act, dur in scratch.f_daily_schedule: + if dur_sum >= start_hour * 60 and start_index is None: + start_index = count + if dur_sum >= end_hour * 60 and end_index is None: + end_index = count + dur_sum += dur + count += 1 + + ret = await generate_new_decomp_schedule(p, inserted_act, inserted_act_dur, start_hour, end_hour) + scratch.f_daily_schedule[start_index:end_index] = ret + scratch.add_new_action( + act_address, + inserted_act_dur, + inserted_act, + act_pronunciatio, + act_event, + chatting_with, + chat, + chatting_with_buffer, + chatting_end_time, + act_obj_description, + act_obj_pronunciatio, + act_obj_event, + act_start_time, + ) + + +async def _wait_react(role: "STRole", reaction_mode: str): + scratch = role.rc.scratch + + inserted_act = f'waiting to start {scratch.act_description.split("(")[-1][:-1]}' + end_time = datetime.datetime.strptime(reaction_mode[6:].strip(), "%B %d, %Y, %H:%M:%S") + inserted_act_dur = ( + (end_time.minute + end_time.hour * 60) - (scratch.curr_time.minute + scratch.curr_time.hour * 60) + 1 + ) + + act_address = f" {scratch.curr_tile[0]} {scratch.curr_tile[1]}" + act_event = (role.name, "waiting to start", scratch.act_description.split("(")[-1][:-1]) + chatting_with = None + chat = None + chatting_with_buffer = None + chatting_end_time = None + + act_pronunciatio = "⌛" + act_obj_description = None + act_obj_pronunciatio = None + act_obj_event = (None, None, None) + + await _create_react( + role, + inserted_act, + inserted_act_dur, + act_address, + act_event, + chatting_with, + chat, + chatting_with_buffer, + chatting_end_time, + act_pronunciatio, + act_obj_description, + act_obj_pronunciatio, + act_obj_event, + ) + + +async def generate_convo(init_role: "STRole", target_role: "STRole") -> Union[list, int]: + convo = await agent_conversation(init_role, target_role) + all_utt = "" + + for row in convo: + speaker = row[0] + utt = row[1] + all_utt += f"{speaker}: {utt}\n" + + convo_length = math.ceil(int(len(all_utt) / 8) / 30) + + return convo, convo_length + + +async def generate_convo_summary(conv: list[list[str]]) -> str: + conv_summary = await SummarizeConv().run(conv) + return conv_summary + + +async def generate_new_decomp_schedule( + role: "STRole", inserted_act: str, inserted_act_dur: int, start_hour: int, end_hour: int +): + # Step 1: Setting up the core variables for the function. + #

is the role whose schedule we are editing right now. + scratch = role.rc.scratch + # indicates the number of minutes that have passed today. + today_min_pass = int(scratch.curr_time.hour) * 60 + int(scratch.curr_time.minute) + 1 + + # Step 2: We need to create and . + main_act_dur = [] + truncated_act_dur = [] + dur_sum = 0 # duration sum + count = 0 # enumerate count + truncated_fin = False + + logger.debug(f"DEBUG::: {scratch.name}") + for act, dur in scratch.f_daily_schedule: + if (dur_sum >= start_hour * 60) and (dur_sum < end_hour * 60): + main_act_dur += [[act, dur]] + if dur_sum <= today_min_pass: + truncated_act_dur += [[act, dur]] + elif dur_sum > today_min_pass and not truncated_fin: + # We need to insert that last act, duration list like this one: + # e.g., ['wakes up and completes her morning routine (wakes up...)', 2] + truncated_act_dur += [[scratch.f_daily_schedule[count][0], dur_sum - today_min_pass]] + truncated_act_dur[-1][-1] -= ( + dur_sum - today_min_pass + ) # DEC 7 DEBUG;.. is the +1 the right thing to do??? + # DEC 7 DEBUG;.. is the +1 the right thing to do??? + # truncated_act_dur[-1][-1] -= (dur_sum - today_min_pass + 1) + logger.debug(f"DEBUG::: {truncated_act_dur}") + + # DEC 7 DEBUG;.. is the +1 the right thing to do??? + # truncated_act_dur[-1][-1] -= (dur_sum - today_min_pass) + truncated_fin = True + dur_sum += dur + count += 1 + + main_act_dur = main_act_dur + + x = ( + truncated_act_dur[-1][0].split("(")[0].strip() + + " (on the way to " + + truncated_act_dur[-1][0].split("(")[-1][:-1] + + ")" + ) + truncated_act_dur[-1][0] = x + + if "(" in truncated_act_dur[-1][0]: + inserted_act = truncated_act_dur[-1][0].split("(")[0].strip() + " (" + inserted_act + ")" + + # To do inserted_act_dur+1 below is an important decision but I'm not sure + # if I understand the full extent of its implications. Might want to + # revisit. + truncated_act_dur += [[inserted_act, inserted_act_dur]] + start_time_hour = datetime.datetime(2022, 10, 31, 0, 0) + datetime.timedelta(hours=start_hour) + end_time_hour = datetime.datetime(2022, 10, 31, 0, 0) + datetime.timedelta(hours=end_hour) + + return await NewDecompSchedule().run( + role, main_act_dur, truncated_act_dur, start_time_hour, end_time_hour, inserted_act, inserted_act_dur + ) + + +async def _long_term_planning(role: "STRole", new_day: bool): + """ + Formulates the role's daily long-term plan if it is the start of a new + day. This basically has two components: first, we create the wake-up hour, + and second, we create the hourly schedule based on it. + INPUT + new_day: Indicates whether the current time signals a "First day", + "New day", or False (for neither). This is important because we + create the roles' long term planning on the new day. + """ + # We start by creating the wake up hour for the role. + wake_up_hour = await WakeUp().run(role) + wake_up_hour = int(wake_up_hour) + logger.info(f"Role: {role.name} long_term_planning, wake_up_hour: {wake_up_hour}") + + # When it is a new day, we start by creating the daily_req of the role. + # Note that the daily_req is a list of strings that describe the role's + # day in broad strokes. + if new_day == "First day": + # Bootstrapping the daily plan for the start of then generation: + # if this is the start of generation (so there is no previous day's + # daily requirement, or if we are on a new day, we want to create a new + # set of daily requirements. + role.scratch.daily_req = await GenDailySchedule().run(role, wake_up_hour) + logger.info(f"Role: {role.name} daily requirements: {role.scratch.daily_req}") + elif new_day == "New day": + revise_identity(role) + + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - TODO + # We need to create a new daily_req here... + role.scratch.daily_req = role.scratch.daily_req + + # Based on the daily_req, we create an hourly schedule for the role, + # which is a list of todo items with a time duration (in minutes) that + # add up to 24 hours. + role.scratch.f_daily_schedule = await GenHourlySchedule().run(role, wake_up_hour) + logger.info(f"Role: {role.name} f_daily_schedule: {role.scratch.f_daily_schedule}") + role.scratch.f_daily_schedule_hourly_org = role.scratch.f_daily_schedule[:] + + # Added March 4 -- adding plan to the memory. + thought = f"This is {role.scratch.name}'s plan for {role.scratch.curr_time.strftime('%A %B %d')}:" + for i in role.scratch.daily_req: + thought += f" {i}," + thought = thought[:-1] + "." + created = role.scratch.curr_time + expiration = role.scratch.curr_time + datetime.timedelta(days=30) + s, p, o = (role.scratch.name, "plan", role.scratch.curr_time.strftime("%A %B %d")) + keywords = set(["plan"]) + thought_poignancy = 5 + thought_embedding_pair = (thought, get_embedding(thought)) + role.a_mem.add_thought( + created, expiration, s, p, o, thought, keywords, thought_poignancy, thought_embedding_pair, None + ) + + +async def _determine_action(role: "STRole"): + """ + Creates the next action sequence for the role. + The main goal of this function is to run "add_new_action" on the role's + scratch space, which sets up all the action related variables for the next + action. + As a part of this, the role may need to decompose its hourly schedule as + needed. + INPUT + role: Current instance whose action we are determining. + """ + + def determine_decomp(act_desp, act_dura): + """ + Given an action description and its duration, we determine whether we need + to decompose it. If the action is about the agent sleeping, we generally + do not want to decompose it, so that's what we catch here. + + INPUT: + act_desp: the description of the action (e.g., "sleeping") + act_dura: the duration of the action in minutes. + OUTPUT: + a boolean. True if we need to decompose, False otherwise. + """ + if "sleep" not in act_desp and "bed" not in act_desp: + return True + elif "sleeping" in act_desp or "asleep" in act_desp or "in bed" in act_desp: + return False + elif "sleep" in act_desp or "bed" in act_desp: + if act_dura > 60: + return False + return True + + # The goal of this function is to get us the action associated with + # . As a part of this, we may need to decompose some large + # chunk actions. + # Importantly, we try to decompose at least two hours worth of schedule at + # any given point. + curr_index = role.scratch.get_f_daily_schedule_index() + curr_index_60 = role.scratch.get_f_daily_schedule_index(advance=60) + + logger.info(f"f_daily_schedule: {role.scratch.f_daily_schedule}") + # * Decompose * + # During the first hour of the day, we need to decompose two hours + # sequence. We do that here. + if curr_index == 0: + # This portion is invoked if it is the first hour of the day. + act_desp, act_dura = role.scratch.f_daily_schedule[curr_index] + if act_dura >= 60: + # We decompose if the next action is longer than an hour, and fits the + # criteria described in determine_decomp. + if determine_decomp(act_desp, act_dura): + role.scratch.f_daily_schedule[curr_index : curr_index + 1] = await TaskDecomp().run( + role, act_desp, act_dura + ) + if curr_index_60 + 1 < len(role.scratch.f_daily_schedule): + act_desp, act_dura = role.scratch.f_daily_schedule[curr_index_60 + 1] + if act_dura >= 60: + if determine_decomp(act_desp, act_dura): + role.scratch.f_daily_schedule[curr_index_60 + 1 : curr_index_60 + 2] = await TaskDecomp().run( + role, act_desp, act_dura + ) + + if curr_index_60 < len(role.scratch.f_daily_schedule): + # If it is not the first hour of the day, this is always invoked (it is + # also invoked during the first hour of the day -- to double up so we can + # decompose two hours in one go). Of course, we need to have something to + # decompose as well, so we check for that too. + if role.scratch.curr_time.hour < 23: + # And we don't want to decompose after 11 pm. + act_desp, act_dura = role.scratch.f_daily_schedule[curr_index_60] + if act_dura >= 60: + if determine_decomp(act_desp, act_dura): + role.scratch.f_daily_schedule[curr_index_60 : curr_index_60 + 1] = await TaskDecomp().run( + role, act_desp, act_dura + ) + # * End of Decompose * + + # Generate an instance from the action description and duration. By + # this point, we assume that all the relevant actions are decomposed and + # ready in f_daily_schedule. + logger.debug("DEBUG LJSDLFSKJF") + for i in role.scratch.f_daily_schedule: + logger.debug(i) + logger.debug(curr_index) + logger.debug(len(role.scratch.f_daily_schedule)) + logger.debug(role.scratch.name) + + # 1440 + x_emergency = 0 + for i in role.scratch.f_daily_schedule: + x_emergency += i[1] + + if 1440 - x_emergency > 0: + logger.info(f"x_emergency__AAA: {x_emergency}") + role.scratch.f_daily_schedule += [["sleeping", 1440 - x_emergency]] + + act_desp, act_dura = role.scratch.f_daily_schedule[curr_index] + + new_action_details = await GenActionDetails().run(role, act_desp, act_dura) + # Adding the action to role's queue. + role.scratch.add_new_action(**new_action_details) + + +def revise_identity(role: "STRole"): + p_name = role.scratch.name + + focal_points = [ + f"{p_name}'s plan for {role.scratch.get_str_curr_date_str()}.", + f"Important recent events for {p_name}'s life.", + ] + retrieved = new_agent_retrieve(role, focal_points) + + statements = "[Statements]\n" + for key, val in retrieved.items(): + for i in val: + statements += f"{i.created.strftime('%A %B %d -- %H:%M %p')}: {i.embedding_key}\n" + + plan_prompt = statements + "\n" + plan_prompt += f"Given the statements above, is there anything that {p_name} should remember as they plan for" + plan_prompt += f" *{role.scratch.curr_time.strftime('%A %B %d')}*? " + plan_prompt += "If there is any scheduling information, be as specific as possible (include date, time, and location if stated in the statement)\n\n" + plan_prompt += f"Write the response from {p_name}'s perspective." + plan_note = LLM().ask(plan_prompt) + + thought_prompt = statements + "\n" + thought_prompt += ( + f"Given the statements above, how might we summarize {p_name}'s feelings about their days up to now?\n\n" + ) + thought_prompt += f"Write the response from {p_name}'s perspective." + thought_note = LLM().ask(thought_prompt) + + currently_prompt = ( + f"{p_name}'s status from {(role.scratch.curr_time - datetime.timedelta(days=1)).strftime('%A %B %d')}:\n" + ) + currently_prompt += f"{role.scratch.currently}\n\n" + currently_prompt += f"{p_name}'s thoughts at the end of {(role.scratch.curr_time - datetime.timedelta(days=1)).strftime('%A %B %d')}:\n" + currently_prompt += (plan_note + thought_note).replace("\n", "") + "\n\n" + currently_prompt += f"It is now {role.scratch.curr_time.strftime('%A %B %d')}. Given the above, write {p_name}'s status for {role.scratch.curr_time.strftime('%A %B %d')} that reflects {p_name}'s thoughts at the end of {(role.scratch.curr_time - datetime.timedelta(days=1)).strftime('%A %B %d')}. Write this in third-person talking about {p_name}." + currently_prompt += "If there is any scheduling information, be as specific as possible (include date, time, and location if stated in the statement).\n\n" + currently_prompt += "Follow this format below:\nStatus: " + new_currently = LLM().ask(currently_prompt) + + role.scratch.currently = new_currently + + daily_req_prompt = role.scratch.get_str_iss() + "\n" + daily_req_prompt += f"Today is {role.scratch.curr_time.strftime('%A %B %d')}. Here is {role.scratch.name}'s plan today in broad-strokes (with the time of the day. e.g., have a lunch at 12:00 pm, watch TV from 7 to 8 pm).\n\n" + daily_req_prompt += "Follow this format (the list should have 4~6 items but no more):\n" + daily_req_prompt += "1. wake up and complete the morning routine at

\n

2048

\n
\n
\n
分数
\n
{{ score }}
\n
\n
\n
最高分
\n
{{ bestScore }}
\n
\n
\n
\n
\n
\n {{ cell !== 0 ? cell : \\'\\' }}\n
\n
\n
\n \n
\n\n \n \n \n \n\n\n\n----- styles.css\n/* styles.css */\nbody, html {\n margin: 0;\n padding: 0;\n font-family: \\'Arial\\', sans-serif;\n}\n\n#app {\n text-align: center;\n font-size: 18px;\n color: #776e65;\n}\n\nh1 {\n color: #776e65;\n font-size: 72px;\n font-weight: bold;\n margin: 20px 0;\n}\n\n.scores-container {\n display: flex;\n justify-content: center;\n margin-bottom: 20px;\n}\n\n.score-container, .best-container {\n background: #bbada0;\n padding: 10px;\n border-radius: 5px;\n margin: 0 10px;\n min-width: 100px;\n text-align: center;\n}\n\n.score-header, .best-header {\n color: #eee4da;\n font-size: 18px;\n margin-bottom: 5px;\n}\n\n.game-container {\n max-width: 500px;\n margin: 0 auto 20px;\n background: #bbada0;\n padding: 15px;\n border-radius: 10px;\n position: relative;\n}\n\n.grid-row {\n display: flex;\n}\n\n.grid-cell {\n background: #cdc1b4;\n width: 100px;\n height: 100px;\n margin: 5px;\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: 35px;\n font-weight: bold;\n color: #776e65;\n border-radius: 3px;\n}\n\n/* Dynamic classes for different number cells */\n.number-cell-2 {\n background: #eee4da;\n}\n\n.number-cell-4 {\n background: #ede0c8;\n}\n\n.number-cell-8 {\n background: #f2b179;\n color: #f9f6f2;\n}\n\n.number-cell-16 {\n background: #f59563;\n color: #f9f6f2;\n}\n\n.number-cell-32 {\n background: #f67c5f;\n color: #f9f6f2;\n}\n\n.number-cell-64 {\n background: #f65e3b;\n color: #f9f6f2;\n}\n\n.number-cell-128 {\n background: #edcf72;\n color: #f9f6f2;\n}\n\n.number-cell-256 {\n background: #edcc61;\n color: #f9f6f2;\n}\n\n.number-cell-512 {\n background: #edc850;\n color: #f9f6f2;\n}\n\n.number-cell-1024 {\n background: #edc53f;\n color: #f9f6f2;\n}\n\n.number-cell-2048 {\n background: #edc22e;\n color: #f9f6f2;\n}\n\n/* Larger numbers need smaller font sizes */\n.number-cell-1024, .number-cell-2048 {\n font-size: 30px;\n}\n\nbutton {\n background-color: #8f7a66;\n color: #f9f6f2;\n border: none;\n border-radius: 3px;\n padding: 10px 20px;\n font-size: 18px;\n cursor: pointer;\n outline: none;\n}\n\nbutton:hover {\n background-color: #9f8b76;\n}\n\n----- storage.js\n## storage.js\nclass Storage {\n // 获取最高分\n getBestScore() {\n // 尝试从localStorage中获取最高分,如果不存在则默认为0\n const bestScore = localStorage.getItem(\\'bestScore\\');\n return bestScore ? Number(bestScore) : 0;\n }\n\n // 设置最高分\n setBestScore(score) {\n // 将最高分设置到localStorage中\n localStorage.setItem(\\'bestScore\\', score.toString());\n }\n}\n\n\n\n## Code to be Reviewed: game.js\n```Code\n## game.js\nclass Game {\n constructor() {\n this.board = this.createEmptyBoard();\n this.score = 0;\n this.bestScore = 0;\n }\n\n createEmptyBoard() {\n const board = [];\n for (let i = 0; i < 4; i++) {\n board[i] = [0, 0, 0, 0];\n }\n return board;\n }\n\n startGame() {\n this.board = this.createEmptyBoard();\n this.score = 0;\n this.addRandomTile();\n this.addRandomTile();\n }\n\n addRandomTile() {\n let emptyCells = [];\n for (let r = 0; r < 4; r++) {\n for (let c = 0; c < 4; c++) {\n if (this.board[r][c] === 0) {\n emptyCells.push({ r, c });\n }\n }\n }\n if (emptyCells.length > 0) {\n let randomCell = emptyCells[Math.floor(Math.random() * emptyCells.length)];\n this.board[randomCell.r][randomCell.c] = Math.random() < 0.9 ? 2 : 4;\n }\n }\n\n move(direction) {\n // This function will handle the logic for moving tiles\n // in the specified direction and merging them\n // It will also update the score and add a new random tile if the move is successful\n // The actual implementation of this function is complex and would require\n // a significant amount of code to handle all the cases for moving and merging tiles\n // For the purposes of this example, we will not implement the full logic\n // Instead, we will just call addRandomTile to simulate a move\n this.addRandomTile();\n }\n\n getBoard() {\n return this.board;\n }\n\n getScore() {\n return this.score;\n }\n\n getBestScore() {\n return this.bestScore;\n }\n\n setBestScore(score) {\n this.bestScore = score;\n }\n}\n\n```\n\"\"\"\n\n\nCODE_REVIEW_SMALLEST_CONTEXT = \"\"\"\n## Code to be Reviewed: game.js\n```Code\n// game.js\nclass Game {\n constructor() {\n this.board = this.createEmptyBoard();\n this.score = 0;\n this.bestScore = 0;\n }\n\n createEmptyBoard() {\n const board = [];\n for (let i = 0; i < 4; i++) {\n board[i] = [0, 0, 0, 0];\n }\n return board;\n }\n\n startGame() {\n this.board = this.createEmptyBoard();\n this.score = 0;\n this.addRandomTile();\n this.addRandomTile();\n }\n\n addRandomTile() {\n let emptyCells = [];\n for (let r = 0; r < 4; r++) {\n for (let c = 0; c < 4; c++) {\n if (this.board[r][c] === 0) {\n emptyCells.push({ r, c });\n }\n }\n }\n if (emptyCells.length > 0) {\n let randomCell = emptyCells[Math.floor(Math.random() * emptyCells.length)];\n this.board[randomCell.r][randomCell.c] = Math.random() < 0.9 ? 2 : 4;\n }\n }\n\n move(direction) {\n // This function will handle the logic for moving tiles\n // in the specified direction and merging them\n // It will also update the score and add a new random tile if the move is successful\n // The actual implementation of this function is complex and would require\n // a significant amount of code to handle all the cases for moving and merging tiles\n // For the purposes of this example, we will not implement the full logic\n // Instead, we will just call addRandomTile to simulate a move\n this.addRandomTile();\n }\n\n getBoard() {\n return this.board;\n }\n\n getScore() {\n return this.score;\n }\n\n getBestScore() {\n return this.bestScore;\n }\n\n setBestScore(score) {\n this.bestScore = score;\n }\n}\n\n```\n\"\"\"\n\n\nCODE_REVIEW_SAMPLE = \"\"\"\n## Code Review: game.js\n1. The code partially implements the requirements. The `Game` class is missing the full implementation of the `move` method, which is crucial for the game\\'s functionality.\n2. The code logic is not completely correct. The `move` method is not implemented, which means the game cannot process player moves.\n3. The existing code follows the \"Data structures and interfaces\" in terms of class structure but lacks full method implementations.\n4. Not all functions are implemented. The `move` method is incomplete and does not handle the logic for moving and merging tiles.\n5. All necessary pre-dependencies seem to be imported since the code does not indicate the need for additional imports.\n6. The methods from other files (such as `Storage`) are not being used in the provided code snippet, but the class structure suggests that they will be used correctly.\n\n## Actions\n1. Implement the `move` method to handle tile movements and merging. This is a complex task that requires careful consideration of the game\\'s rules and logic. Here is a simplified version of how one might begin to implement the `move` method:\n ```javascript\n move(direction) {\n // Simplified logic for moving tiles up\n if (direction === \\'up\\') {\n for (let col = 0; col < 4; col++) {\n let tiles = this.board.map(row => row[col]).filter(val => val !== 0);\n let merged = [];\n for (let i = 0; i < tiles.length; i++) {\n if (tiles[i] === tiles[i + 1]) {\n tiles[i] *= 2;\n this.score += tiles[i];\n tiles[i + 1] = 0;\n merged.push(i);\n }\n }\n tiles = tiles.filter(val => val !== 0);\n while (tiles.length < 4) {\n tiles.push(0);\n }\n for (let row = 0; row < 4; row++) {\n this.board[row][col] = tiles[row];\n }\n }\n }\n // Additional logic needed for \\'down\\', \\'left\\', \\'right\\'\n // ...\n this.addRandomTile();\n }\n ```\n2. Integrate the `Storage` class methods to handle the best score. This means updating the `startGame` and `setBestScore` methods to use `Storage` for retrieving and setting the best score:\n ```javascript\n startGame() {\n this.board = this.createEmptyBoard();\n this.score = 0;\n this.bestScore = new Storage().getBestScore(); // Retrieve the best score from storage\n this.addRandomTile();\n this.addRandomTile();\n }\n\n setBestScore(score) {\n if (score > this.bestScore) {\n this.bestScore = score;\n new Storage().setBestScore(score); // Set the new best score in storage\n }\n }\n ```\n\n## Code Review Result\nLBTM\n\n```\n\"\"\"\n\n\nWRITE_CODE_NODE = ActionNode.from_children(\"WRITE_REVIEW_NODE\", [REVIEW, LGTM, ACTIONS])\nWRITE_MOVE_NODE = ActionNode.from_children(\"WRITE_MOVE_NODE\", [WRITE_DRAFT, WRITE_MOVE_FUNCTION])\n\n\nCR_FOR_MOVE_FUNCTION_BY_3 = \"\"\"\nThe move function implementation provided appears to be well-structured and follows a clear logic for moving and merging tiles in the specified direction. However, there are a few potential improvements that could be made to enhance the code:\n\n1. Encapsulation: The logic for moving and merging tiles could be encapsulated into smaller, reusable functions to improve readability and maintainability.\n\n2. Magic Numbers: There are some magic numbers (e.g., 4, 3) used in the loops that could be replaced with named constants for improved readability and easier maintenance.\n\n3. Comments: Adding comments to explain the logic and purpose of each section of the code can improve understanding for future developers who may need to work on or maintain the code.\n\n4. Error Handling: It's important to consider error handling for unexpected input or edge cases to ensure the function behaves as expected in all scenarios.\n\nOverall, the code could benefit from refactoring to improve readability, maintainability, and extensibility. If you would like, I can provide a refactored version of the move function that addresses these considerations.\n\"\"\"\n\n\nclass WriteCodeAN(Action):\n \"\"\"Write a code review for the context.\"\"\"\n\n async def run(self, context):\n self.llm.system_prompt = \"You are an outstanding engineer and can implement any code\"\n return await WRITE_MOVE_FUNCTION.fill(context=context, llm=self.llm, schema=\"json\")\n # return await WRITE_CODE_NODE.fill(context=context, llm=self.llm, schema=\"markdown\")\n\n\nasync def main():\n await WriteCodeAN().run(CODE_REVIEW_SMALLEST_CONTEXT)\n\n\nif __name__ == \"__main__\":\n asyncio.run(main())\n\n```\n\n---\nTranslate the code above into Mermaid Sequence Diagram.": "```mermaid\nsequenceDiagram\n participant User\n participant CodeReview\n participant WriteCodeAN\n participant WRITE_MOVE_FUNCTION\n\n User->>CodeReview: Request code review\n CodeReview->>WriteCodeAN: Run WriteCodeAN action\n WriteCodeAN->>WRITE_MOVE_FUNCTION: Fill WRITE_MOVE_FUNCTION node\n WRITE_MOVE_FUNCTION-->>WriteCodeAN: Return filled node\n WriteCodeAN-->>CodeReview: Return filled node\n CodeReview-->>User: Return code review result\n```\n", - "You are a python code to Mermaid Sequence Diagram translator in function detail#SYSTEM_MSG_END#```python\n#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\"\"\"\n@Time : 2023/12/14 15:28\n@Author : alexanderwu\n@File : project_management_an.py\n\"\"\"\nfrom typing import List\n\nfrom metagpt.actions.action_node import ActionNode\nfrom metagpt.logs import logger\n\nREQUIRED_PYTHON_PACKAGES = ActionNode(\n key=\"Required Python packages\",\n expected_type=List[str],\n instruction=\"Provide required Python packages in requirements.txt format.\",\n example=[\"flask==1.1.2\", \"bcrypt==3.2.0\"],\n)\n\nREQUIRED_OTHER_LANGUAGE_PACKAGES = ActionNode(\n key=\"Required Other language third-party packages\",\n expected_type=List[str],\n instruction=\"List down the required packages for languages other than Python.\",\n example=[\"No third-party dependencies required\"],\n)\n\nLOGIC_ANALYSIS = ActionNode(\n key=\"Logic Analysis\",\n expected_type=List[List[str]],\n instruction=\"Provide a list of files with the classes/methods/functions to be implemented, \"\n \"including dependency analysis and imports.\",\n example=[\n [\"game.py\", \"Contains Game class and ... functions\"],\n [\"main.py\", \"Contains main function, from game import Game\"],\n ],\n)\n\nTASK_LIST = ActionNode(\n key=\"Task list\",\n expected_type=List[str],\n instruction=\"Break down the tasks into a list of filenames, prioritized by dependency order.\",\n example=[\"game.py\", \"main.py\"],\n)\n\nFULL_API_SPEC = ActionNode(\n key=\"Full API spec\",\n expected_type=str,\n instruction=\"Describe all APIs using OpenAPI 3.0 spec that may be used by both frontend and backend. If front-end \"\n \"and back-end communication is not required, leave it blank.\",\n example=\"openapi: 3.0.0 ...\",\n)\n\nSHARED_KNOWLEDGE = ActionNode(\n key=\"Shared Knowledge\",\n expected_type=str,\n instruction=\"Detail any shared knowledge, like common utility functions or configuration variables.\",\n example=\"'game.py' contains functions shared across the project.\",\n)\n\nANYTHING_UNCLEAR_PM = ActionNode(\n key=\"Anything UNCLEAR\",\n expected_type=str,\n instruction=\"Mention any unclear aspects in the project management context and try to clarify them.\",\n example=\"Clarification needed on how to start and initialize third-party libraries.\",\n)\n\nNODES = [\n REQUIRED_PYTHON_PACKAGES,\n REQUIRED_OTHER_LANGUAGE_PACKAGES,\n LOGIC_ANALYSIS,\n TASK_LIST,\n FULL_API_SPEC,\n SHARED_KNOWLEDGE,\n ANYTHING_UNCLEAR_PM,\n]\n\n\nPM_NODE = ActionNode.from_children(\"PM_NODE\", NODES)\n\n\ndef main():\n prompt = PM_NODE.compile(context=\"\")\n logger.info(prompt)\n\n\nif __name__ == \"__main__\":\n main()\n\n```\n\n---\nTranslate the code above into Mermaid Sequence Diagram.": "```mermaid\nsequenceDiagram\n participant ActionNode\n participant PM_NODE\n participant main\n\n main->>PM_NODE: compile(context=\"\")\n PM_NODE->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>Action", + "You are a python code to Mermaid Sequence Diagram translator in function detail#SYSTEM_MSG_END#```python\n#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\"\"\"\n@Author : alexanderwu\n@File : write_review.py\n\"\"\"\nimport asyncio\nfrom typing import List\n\nfrom metagpt.actions import Action\nfrom metagpt.actions.action_node import ActionNode\n\nREVIEW = ActionNode(\n key=\"Review\",\n expected_type=List[str],\n instruction=\"Act as an experienced reviewer and critically assess the given output. Provide specific and\"\n \" constructive feedback, highlighting areas for improvement and suggesting changes.\",\n example=[\n \"The logic in the function `calculate_total` seems flawed. Shouldn't it consider the discount rate as well?\",\n \"The TODO function is not implemented yet? Should we implement it before commit?\",\n ],\n)\n\nLGTM = ActionNode(\n key=\"LGTM\",\n expected_type=str,\n instruction=\"LGTM/LBTM. If the code is fully implemented, \"\n \"give a LGTM (Looks Good To Me), otherwise provide a LBTM (Looks Bad To Me).\",\n example=\"LBTM\",\n)\n\nACTIONS = ActionNode(\n key=\"Actions\",\n expected_type=str,\n instruction=\"Based on the code review outcome, suggest actionable steps. This can include code changes, \"\n \"refactoring suggestions, or any follow-up tasks.\",\n example=\"\"\"1. Refactor the `process_data` method to improve readability and efficiency.\n2. Cover edge cases in the `validate_user` function.\n3. Implement a the TODO in the `calculate_total` function.\n4. Fix the `handle_events` method to update the game state only if a move is successful.\n ```python\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n return False\n if event.type == pygame.KEYDOWN:\n moved = False\n if event.key == pygame.K_UP:\n moved = self.game.move('UP')\n elif event.key == pygame.K_DOWN:\n moved = self.game.move('DOWN')\n elif event.key == pygame.K_LEFT:\n moved = self.game.move('LEFT')\n elif event.key == pygame.K_RIGHT:\n moved = self.game.move('RIGHT')\n if moved:\n # Update the game state only if a move was successful\n self.render()\n return True\n ```\n\"\"\",\n)\n\nWRITE_DRAFT = ActionNode(\n key=\"WriteDraft\",\n expected_type=str,\n instruction=\"Could you write draft code for move function in order to implement it?\",\n example=\"Draft: ...\",\n)\n\n\nWRITE_MOVE_FUNCTION = ActionNode(\n key=\"WriteFunction\",\n expected_type=str,\n instruction=\"write code for the function not implemented.\",\n example=\"\"\"\n```Code\n...\n```\n\"\"\",\n)\n\n\nREWRITE_CODE = ActionNode(\n key=\"RewriteCode\",\n expected_type=str,\n instruction=\"\"\"rewrite code based on the Review and Actions\"\"\",\n example=\"\"\"\n```python\n## example.py\ndef calculate_total(price, quantity):\n total = price * quantity\n```\n\"\"\",\n)\n\n\nCODE_REVIEW_CONTEXT = \"\"\"\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\n\n# Context\n## System Design\n{\"Implementation approach\": \"我们将使用HTML、CSS和JavaScript来实现这个单机的响应式2048游戏。为了确保游戏性能流畅和响应式设计,我们会选择使用Vue.js框架,因为它易于上手且适合构建交互式界面。我们还将使用localStorage来记录玩家的最高分。\", \"File list\": [\"index.html\", \"styles.css\", \"main.js\", \"game.js\", \"storage.js\"], \"Data structures and interfaces\": \"classDiagram\\\n class Game {\\\n -board Array\\\n -score Number\\\n -bestScore Number\\\n +constructor()\\\n +startGame()\\\n +move(direction: String)\\\n +getBoard() Array\\\n +getScore() Number\\\n +getBestScore() Number\\\n +setBestScore(score: Number)\\\n }\\\n class Storage {\\\n +getBestScore() Number\\\n +setBestScore(score: Number)\\\n }\\\n class Main {\\\n +init()\\\n +bindEvents()\\\n }\\\n Game --> Storage : uses\\\n Main --> Game : uses\", \"Program call flow\": \"sequenceDiagram\\\n participant M as Main\\\n participant G as Game\\\n participant S as Storage\\\n M->>G: init()\\\n G->>S: getBestScore()\\\n S-->>G: return bestScore\\\n M->>G: bindEvents()\\\n M->>G: startGame()\\\n loop Game Loop\\\n M->>G: move(direction)\\\n G->>S: setBestScore(score)\\\n S-->>G: return\\\n end\", \"Anything UNCLEAR\": \"目前项目要求明确,没有不清楚的地方。\"}\n\n## Tasks\n{\"Required packages\": [\"无需Python包\"], \"Required Other language third-party packages\": [\"vue.js\"], \"Logic Analysis\": [[\"index.html\", \"作为游戏的入口文件和主要的HTML结构\"], [\"styles.css\", \"包含所有的CSS样式,确保游戏界面美观\"], [\"main.js\", \"包含Main类,负责初始化游戏和绑定事件\"], [\"game.js\", \"包含Game类,负责游戏逻辑,如开始游戏、移动方块等\"], [\"storage.js\", \"包含Storage类,用于获取和设置玩家的最高分\"]], \"Task list\": [\"index.html\", \"styles.css\", \"storage.js\", \"game.js\", \"main.js\"], \"Full API spec\": \"\", \"Shared Knowledge\": \"\\'game.js\\' 包含游戏逻辑相关的函数,被 \\'main.js\\' 调用。\", \"Anything UNCLEAR\": \"目前项目要求明确,没有不清楚的地方。\"}\n\n## Code Files\n----- index.html\n\n\n\n \n \n 2048游戏\n \n \n\n\n
\n

2048

\n
\n
\n
分数
\n
{{ score }}
\n
\n
\n
最高分
\n
{{ bestScore }}
\n
\n
\n
\n
\n
\n {{ cell !== 0 ? cell : \\'\\' }}\n
\n
\n
\n \n
\n\n \n \n \n \n\n\n\n----- styles.css\n/* styles.css */\nbody, html {\n margin: 0;\n padding: 0;\n font-family: \\'Arial\\', sans-serif;\n}\n\n#app {\n text-align: center;\n font-size: 18px;\n color: #776e65;\n}\n\nh1 {\n color: #776e65;\n font-size: 72px;\n font-weight: bold;\n margin: 20px 0;\n}\n\n.scores-container {\n display: flex;\n justify-content: center;\n margin-bottom: 20px;\n}\n\n.score-container, .best-container {\n background: #bbada0;\n padding: 10px;\n border-radius: 5px;\n margin: 0 10px;\n min-width: 100px;\n text-align: center;\n}\n\n.score-header, .best-header {\n color: #eee4da;\n font-size: 18px;\n margin-bottom: 5px;\n}\n\n.game-container {\n max-width: 500px;\n margin: 0 auto 20px;\n background: #bbada0;\n padding: 15px;\n border-radius: 10px;\n position: relative;\n}\n\n.grid-row {\n display: flex;\n}\n\n.grid-cell {\n background: #cdc1b4;\n width: 100px;\n height: 100px;\n margin: 5px;\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: 35px;\n font-weight: bold;\n color: #776e65;\n border-radius: 3px;\n}\n\n/* Dynamic classes for different number cells */\n.number-cell-2 {\n background: #eee4da;\n}\n\n.number-cell-4 {\n background: #ede0c8;\n}\n\n.number-cell-8 {\n background: #f2b179;\n color: #f9f6f2;\n}\n\n.number-cell-16 {\n background: #f59563;\n color: #f9f6f2;\n}\n\n.number-cell-32 {\n background: #f67c5f;\n color: #f9f6f2;\n}\n\n.number-cell-64 {\n background: #f65e3b;\n color: #f9f6f2;\n}\n\n.number-cell-128 {\n background: #edcf72;\n color: #f9f6f2;\n}\n\n.number-cell-256 {\n background: #edcc61;\n color: #f9f6f2;\n}\n\n.number-cell-512 {\n background: #edc850;\n color: #f9f6f2;\n}\n\n.number-cell-1024 {\n background: #edc53f;\n color: #f9f6f2;\n}\n\n.number-cell-2048 {\n background: #edc22e;\n color: #f9f6f2;\n}\n\n/* Larger numbers need smaller font sizes */\n.number-cell-1024, .number-cell-2048 {\n font-size: 30px;\n}\n\nbutton {\n background-color: #8f7a66;\n color: #f9f6f2;\n border: none;\n border-radius: 3px;\n padding: 10px 20px;\n font-size: 18px;\n cursor: pointer;\n outline: none;\n}\n\nbutton:hover {\n background-color: #9f8b76;\n}\n\n----- storage.js\n## storage.js\nclass Storage {\n // 获取最高分\n getBestScore() {\n // 尝试从localStorage中获取最高分,如果不存在则默认为0\n const bestScore = localStorage.getItem(\\'bestScore\\');\n return bestScore ? Number(bestScore) : 0;\n }\n\n // 设置最高分\n setBestScore(score) {\n // 将最高分设置到localStorage中\n localStorage.setItem(\\'bestScore\\', score.toString());\n }\n}\n\n\n\n## Code to be Reviewed: game.js\n```Code\n## game.js\nclass Game {\n constructor() {\n this.board = this.createEmptyBoard();\n this.score = 0;\n this.bestScore = 0;\n }\n\n createEmptyBoard() {\n const board = [];\n for (let i = 0; i < 4; i++) {\n board[i] = [0, 0, 0, 0];\n }\n return board;\n }\n\n startGame() {\n this.board = this.createEmptyBoard();\n this.score = 0;\n this.addRandomTile();\n this.addRandomTile();\n }\n\n addRandomTile() {\n let emptyCells = [];\n for (let r = 0; r < 4; r++) {\n for (let c = 0; c < 4; c++) {\n if (this.board[r][c] === 0) {\n emptyCells.push({ r, c });\n }\n }\n }\n if (emptyCells.length > 0) {\n let randomCell = emptyCells[Math.floor(Math.random() * emptyCells.length)];\n this.board[randomCell.r][randomCell.c] = Math.random() < 0.9 ? 2 : 4;\n }\n }\n\n move(direction) {\n // This function will handle the logic for moving tiles\n // in the specified direction and merging them\n // It will also update the score and add a new random tile if the move is successful\n // The actual implementation of this function is complex and would require\n // a significant amount of code to handle all the cases for moving and merging tiles\n // For the purposes of this example, we will not implement the full logic\n // Instead, we will just call addRandomTile to simulate a move\n this.addRandomTile();\n }\n\n getBoard() {\n return this.board;\n }\n\n getScore() {\n return this.score;\n }\n\n getBestScore() {\n return this.bestScore;\n }\n\n setBestScore(score) {\n this.bestScore = score;\n }\n}\n\n```\n\"\"\"\n\n\nCODE_REVIEW_SMALLEST_CONTEXT = \"\"\"\n## Code to be Reviewed: game.js\n```Code\n// game.js\nclass Game {\n constructor() {\n this.board = this.createEmptyBoard();\n this.score = 0;\n this.bestScore = 0;\n }\n\n createEmptyBoard() {\n const board = [];\n for (let i = 0; i < 4; i++) {\n board[i] = [0, 0, 0, 0];\n }\n return board;\n }\n\n startGame() {\n this.board = this.createEmptyBoard();\n this.score = 0;\n this.addRandomTile();\n this.addRandomTile();\n }\n\n addRandomTile() {\n let emptyCells = [];\n for (let r = 0; r < 4; r++) {\n for (let c = 0; c < 4; c++) {\n if (this.board[r][c] === 0) {\n emptyCells.push({ r, c });\n }\n }\n }\n if (emptyCells.length > 0) {\n let randomCell = emptyCells[Math.floor(Math.random() * emptyCells.length)];\n this.board[randomCell.r][randomCell.c] = Math.random() < 0.9 ? 2 : 4;\n }\n }\n\n move(direction) {\n // This function will handle the logic for moving tiles\n // in the specified direction and merging them\n // It will also update the score and add a new random tile if the move is successful\n // The actual implementation of this function is complex and would require\n // a significant amount of code to handle all the cases for moving and merging tiles\n // For the purposes of this example, we will not implement the full logic\n // Instead, we will just call addRandomTile to simulate a move\n this.addRandomTile();\n }\n\n getBoard() {\n return this.board;\n }\n\n getScore() {\n return this.score;\n }\n\n getBestScore() {\n return this.bestScore;\n }\n\n setBestScore(score) {\n this.bestScore = score;\n }\n}\n\n```\n\"\"\"\n\n\nCODE_REVIEW_SAMPLE = \"\"\"\n## Code Review: game.js\n1. The code partially implements the requirements. The `Game` class is missing the full implementation of the `move` method, which is crucial for the game\\'s functionality.\n2. The code logic is not completely correct. The `move` method is not implemented, which means the game cannot process player moves.\n3. The existing code follows the \"Data structures and interfaces\" in terms of class structure but lacks full method implementations.\n4. Not all functions are implemented. The `move` method is incomplete and does not handle the logic for moving and merging tiles.\n5. All necessary pre-dependencies seem to be imported since the code does not indicate the need for additional imports.\n6. The methods from other files (such as `Storage`) are not being used in the provided code snippet, but the class structure suggests that they will be used correctly.\n\n## Actions\n1. Implement the `move` method to handle tile movements and merging. This is a complex task that requires careful consideration of the game\\'s rules and logic. Here is a simplified version of how one might begin to implement the `move` method:\n ```javascript\n move(direction) {\n // Simplified logic for moving tiles up\n if (direction === \\'up\\') {\n for (let col = 0; col < 4; col++) {\n let tiles = this.board.map(row => row[col]).filter(val => val !== 0);\n let merged = [];\n for (let i = 0; i < tiles.length; i++) {\n if (tiles[i] === tiles[i + 1]) {\n tiles[i] *= 2;\n this.score += tiles[i];\n tiles[i + 1] = 0;\n merged.push(i);\n }\n }\n tiles = tiles.filter(val => val !== 0);\n while (tiles.length < 4) {\n tiles.push(0);\n }\n for (let row = 0; row < 4; row++) {\n this.board[row][col] = tiles[row];\n }\n }\n }\n // Additional logic needed for \\'down\\', \\'left\\', \\'right\\'\n // ...\n this.addRandomTile();\n }\n ```\n2. Integrate the `Storage` class methods to handle the best score. This means updating the `startGame` and `setBestScore` methods to use `Storage` for retrieving and setting the best score:\n ```javascript\n startGame() {\n this.board = this.createEmptyBoard();\n this.score = 0;\n this.bestScore = new Storage().getBestScore(); // Retrieve the best score from storage\n this.addRandomTile();\n this.addRandomTile();\n }\n\n setBestScore(score) {\n if (score > this.bestScore) {\n this.bestScore = score;\n new Storage().setBestScore(score); // Set the new best score in storage\n }\n }\n ```\n\n## Code Review Result\nLBTM\n\n```\n\"\"\"\n\n\nWRITE_CODE_NODE = ActionNode.from_children(\"WRITE_REVIEW_NODE\", [REVIEW, LGTM, ACTIONS])\nWRITE_MOVE_NODE = ActionNode.from_children(\"WRITE_MOVE_NODE\", [WRITE_DRAFT, WRITE_MOVE_FUNCTION])\n\n\nCR_FOR_MOVE_FUNCTION_BY_3 = \"\"\"\nThe move function implementation provided appears to be well-structured and follows a clear logic for moving and merging tiles in the specified direction. However, there are a few potential improvements that could be made to enhance the code:\n\n1. Encapsulation: The logic for moving and merging tiles could be encapsulated into smaller, reusable functions to improve readability and maintainability.\n\n2. Magic Numbers: There are some magic numbers (e.g., 4, 3) used in the loops that could be replaced with named constants for improved readability and easier maintenance.\n\n3. Comments: Adding comments to explain the logic and purpose of each section of the code can improve understanding for future developers who may need to work on or maintain the code.\n\n4. Error Handling: It's important to consider error handling for unexpected input or edge cases to ensure the function behaves as expected in all scenarios.\n\nOverall, the code could benefit from refactoring to improve readability, maintainability, and extensibility. If you would like, I can provide a refactored version of the move function that addresses these considerations.\n\"\"\"\n\n\nclass WriteCodeAN(Action):\n \"\"\"Write a code review for the context.\"\"\"\n\n async def run(self, context):\n self.llm.system_prompt = \"You are an outstanding engineer and can implement any code\"\n return await WRITE_MOVE_FUNCTION.fill(context=context, llm=self.llm, schema=\"json\")\n # return await WRITE_CODE_NODE.fill(context=context, llm=self.llm, schema=\"markdown\")\n\n\nasync def main():\n await WriteCodeAN().run(CODE_REVIEW_SMALLEST_CONTEXT)\n\n\nif __name__ == \"__main__\":\n asyncio.run(main())\n\n```\n\n---\nTranslate the code above into Mermaid Sequence Diagram.": "```mermaid\nsequenceDiagram\n participant User\n participant CodeReview\n participant WriteCodeAN\n participant WRITE_MOVE_FUNCTION\n\n User->>CodeReview: Request code review\n CodeReview->>WriteCodeAN: Run WriteCodeAN action\n WriteCodeAN->>WRITE_MOVE_FUNCTION: Fill WRITE_MOVE_FUNCTION node\n WRITE_MOVE_FUNCTION-->>WriteCodeAN: Return filled node\n WriteCodeAN-->>CodeReview: Return filled node\n CodeReview-->>User: Return code review result\n```\n", + "You are a python code to Mermaid Sequence Diagram translator in function detail#SYSTEM_MSG_END#```python\n#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\"\"\"\n@Time : 2023/12/14 15:28\n@Author : alexanderwu\n@File : project_management_an.py\n\"\"\"\nfrom typing import List\n\nfrom metagpt.actions.action_node import ActionNode\nfrom metagpt.logs import logger\n\nREQUIRED_PYTHON_PACKAGES = ActionNode(\n key=\"Required packages\",\n expected_type=List[str],\n instruction=\"Provide Required packages in requirements.txt format.\",\n example=[\"flask==1.1.2\", \"bcrypt==3.2.0\"],\n)\n\nREQUIRED_OTHER_LANGUAGE_PACKAGES = ActionNode(\n key=\"Required Other language third-party packages\",\n expected_type=List[str],\n instruction=\"List down the required packages for languages other than Python.\",\n example=[\"No third-party dependencies required\"],\n)\n\nLOGIC_ANALYSIS = ActionNode(\n key=\"Logic Analysis\",\n expected_type=List[List[str]],\n instruction=\"Provide a list of files with the classes/methods/functions to be implemented, \"\n \"including dependency analysis and imports.\",\n example=[\n [\"game.py\", \"Contains Game class and ... functions\"],\n [\"main.py\", \"Contains main function, from game import Game\"],\n ],\n)\n\nTASK_LIST = ActionNode(\n key=\"Task list\",\n expected_type=List[str],\n instruction=\"Break down the tasks into a list of filenames, prioritized by dependency order.\",\n example=[\"game.py\", \"main.py\"],\n)\n\nFULL_API_SPEC = ActionNode(\n key=\"Full API spec\",\n expected_type=str,\n instruction=\"Describe all APIs using OpenAPI 3.0 spec that may be used by both frontend and backend. If front-end \"\n \"and back-end communication is not required, leave it blank.\",\n example=\"openapi: 3.0.0 ...\",\n)\n\nSHARED_KNOWLEDGE = ActionNode(\n key=\"Shared Knowledge\",\n expected_type=str,\n instruction=\"Detail any shared knowledge, like common utility functions or configuration variables.\",\n example=\"'game.py' contains functions shared across the project.\",\n)\n\nANYTHING_UNCLEAR_PM = ActionNode(\n key=\"Anything UNCLEAR\",\n expected_type=str,\n instruction=\"Mention any unclear aspects in the project management context and try to clarify them.\",\n example=\"Clarification needed on how to start and initialize third-party libraries.\",\n)\n\nNODES = [\n REQUIRED_PYTHON_PACKAGES,\n REQUIRED_OTHER_LANGUAGE_PACKAGES,\n LOGIC_ANALYSIS,\n TASK_LIST,\n FULL_API_SPEC,\n SHARED_KNOWLEDGE,\n ANYTHING_UNCLEAR_PM,\n]\n\n\nPM_NODE = ActionNode.from_children(\"PM_NODE\", NODES)\n\n\ndef main():\n prompt = PM_NODE.compile(context=\"\")\n logger.info(prompt)\n\n\nif __name__ == \"__main__\":\n main()\n\n```\n\n---\nTranslate the code above into Mermaid Sequence Diagram.": "```mermaid\nsequenceDiagram\n participant ActionNode\n participant PM_NODE\n participant main\n\n main->>PM_NODE: compile(context=\"\")\n PM_NODE->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>ActionNode: compile(context=\"\")\n ActionNode->>Action", "You are a function parser. You can convert spoken words into function parameters.\n\n---\ntext_to_image function parameters description:\nparameter `text`: The text used for image conversion.\nparameter `size_type`: size type\n\n---\nExamples:\nIf want you to do `Draw a girl`, return `text_to_image(text=\"Draw a girl\", size_type=\"512x512\")` brief and clear.\nIf want you to do `Draw an apple`, return `text_to_image(text=\"Draw an apple\", size_type=\"512x512\")` brief and clear.\n\n---\n\nRefer to the `text_to_image` function description, and fill in the function parameters according to the example \"I want you to do xx\" in the Examples section.\nNow I want you to do `Draw an apple`, return function parameters in Examples format above, brief and clear.": "`text_to_image(text=\"Draw an apple\", size_type=\"512x512\")`", "\nNOTICE\nRole: You are a professional software engineer, and your main task is to review the code.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n-----\n# System Design\n```text\n\n{\"Implementation approach\": \"To develop this snake game, we will use the Python language and choose the Pygame library. Pygame is an open-source Python module collection specifically designed for writing video games. It provides functionalities such as displaying images and playing sounds, making it suitable for creating intuitive and responsive user interfaces. We will ensure efficient game logic to prevent any delays during gameplay. The scoring system will be simple, with the snake gaining points for each food it eats. We will use Pygame's event handling system to implement pause and resume functionality, as well as high-score tracking. The difficulty will increase by speeding up the snake's movement. In the initial version, we will focus on single-player mode and consider adding multiplayer mode and customizable skins in future updates. Based on the new requirement, we will also add a moving obstacle that appears randomly. If the snake eats this obstacle, the game will end. If the snake does not eat the obstacle, it will disappear after 5 seconds. For this, we need to add mechanisms for obstacle generation, movement, and disappearance in the game logic.\", \"Project_name\": \"snake_game\", \"File list\": [\"main.py\", \"game.py\", \"snake.py\", \"food.py\", \"obstacle.py\", \"scoreboard.py\", \"constants.py\", \"assets/styles.css\", \"assets/index.html\"], \"Data structures and interfaces\": \"```mermaid\n classDiagram\n class Game{\n +int score\n +int speed\n +bool game_over\n +bool paused\n +Snake snake\n +Food food\n +Obstacle obstacle\n +Scoreboard scoreboard\n +start_game() void\n +pause_game() void\n +resume_game() void\n +end_game() void\n +increase_difficulty() void\n +update() void\n +render() void\n Game()\n }\n class Snake{\n +list body_parts\n +str direction\n +bool grow\n +move() void\n +grow() void\n +check_collision() bool\n Snake()\n }\n class Food{\n +tuple position\n +spawn() void\n Food()\n }\n class Obstacle{\n +tuple position\n +int lifetime\n +bool active\n +spawn() void\n +move() void\n +check_collision() bool\n +disappear() void\n Obstacle()\n }\n class Scoreboard{\n +int high_score\n +update_score(int) void\n +reset_score() void\n +load_high_score() void\n +save_high_score() void\n Scoreboard()\n }\n class Constants{\n }\n Game \"1\" -- \"1\" Snake: has\n Game \"1\" -- \"1\" Food: has\n Game \"1\" -- \"1\" Obstacle: has\n Game \"1\" -- \"1\" Scoreboard: has\n ```\", \"Program call flow\": \"```sequenceDiagram\n participant M as Main\n participant G as Game\n participant S as Snake\n participant F as Food\n participant O as Obstacle\n participant SB as Scoreboard\n M->>G: start_game()\n loop game loop\n G->>S: move()\n G->>S: check_collision()\n G->>F: spawn()\n G->>O: spawn()\n G->>O: move()\n G->>O: check_collision()\n G->>O: disappear()\n G->>SB: update_score(score)\n G->>G: update()\n G->>G: render()\n alt if paused\n M->>G: pause_game()\n M->>G: resume_game()\n end\n alt if game_over\n G->>M: end_game()\n end\n end\n```\", \"Anything UNCLEAR\": \"There is no need for further clarification as the requirements are already clear.\"}\n\n```\n-----\n# Tasks\n```text\n\n{\"Required Python third-party packages\": [\"pygame==2.0.1\"], \"Required Other language third-party packages\": [\"No third-party packages required for other languages.\"], \"Full API spec\": \"\n openapi: 3.0.0\n info:\n title: Snake Game API\n version: \"1.0.0\"\n paths:\n /start:\n get:\n summary: Start the game\n responses:\n '200':\n description: Game started successfully\n /pause:\n get:\n summary: Pause the game\n responses:\n '200':\n description: Game paused successfully\n /resume:\n get:\n summary: Resume the game\n responses:\n '200':\n description: Game resumed successfully\n /end:\n get:\n summary: End the game\n responses:\n '200':\n description: Game ended successfully\n /score:\n get:\n summary: Get the current score\n responses:\n '200':\n description: Current score retrieved successfully\n /highscore:\n get:\n summary: Get the high score\n responses:\n '200':\n description: High score retrieved successfully\n components: {}\n \", \"Logic Analysis\": [[\"constants.py\", \"Contains all the constant values like screen size, colors, game speeds, etc. This should be implemented first as it provides the base values for other components.\"], [\"snake.py\", \"Contains the Snake class with methods for movement, growth, and collision detection. It is dependent on constants.py for configuration values.\"], [\"food.py\", \"Contains the Food class responsible for spawning food items on the screen. It is dependent on constants.py for configuration values.\"], [\"obstacle.py\", \"Contains the Obstacle class with methods for spawning, moving, and disappearing of obstacles, as well as collision detection with the snake. It is dependent on constants.py for configuration values.\"], [\"scoreboard.py\", \"Contains the Scoreboard class for updating, resetting, loading, and saving high scores. It may use constants.py for configuration values and depends on the game's scoring logic.\"], [\"game.py\", \"Contains the main Game class which includes the game loop and methods for starting, pausing, resuming, and ending the game. It is dependent on snake.py, food.py, obstacle.py, and scoreboard.py.\"], [\"main.py\", \"The entry point of the game that initializes the game and starts the game loop. It is dependent on game.py.\"]], \"Task list\": [\"constants.py\", \"snake.py\", \"food.py\", \"obstacle.py\", \"scoreboard.py\", \"game.py\", \"main.py\"], \"Shared Knowledge\": \"\n 'constants.py' should contain all the necessary configurations for the game, such as screen dimensions, color definitions, and speed settings. These constants will be used across multiple files, ensuring consistency and ease of updates. Ensure that the Pygame library is initialized correctly in 'main.py' before starting the game loop. Also, make sure that the game's state is managed properly when pausing and resuming the game.\n \", \"Anything UNCLEAR\": \"The interaction between the 'obstacle.py' and the game loop needs to be clearly defined to ensure obstacles appear and disappear correctly. The lifetime of the obstacle and its random movement should be implemented in a way that does not interfere with the game's performance.\"}\n\n```\n-----\n```python\n\n## game.py\nimport pygame\nfrom snake import Snake\nfrom food import Food\n\nclass Game:\n def __init__(self):\n self.score = 0\n self.level = 1\n self.snake = Snake()\n self.food = Food()\n\n def start_game(self):\n pygame.init()\n self.initialize_game()\n self.game_loop()\n\n def initialize_game(self):\n self.score = 0\n self.level = 1\n self.snake.reset()\n self.food.generate()\n\n def game_loop(self):\n game_over = False\n\n while not game_over:\n self.update()\n self.draw()\n self.handle_events()\n self.check_collision()\n self.increase_score()\n self.increase_level()\n\n if self.snake.is_collision():\n game_over = True\n self.game_over()\n\n def update(self):\n self.snake.move()\n\n def draw(self):\n self.snake.draw()\n self.food.draw()\n\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n pygame.quit()\n quit()\n elif event.type == pygame.KEYDOWN:\n if event.key == pygame.K_UP:\n self.snake.change_direction(\"UP\")\n elif event.key == pygame.K_DOWN:\n self.snake.change_direction(\"DOWN\")\n elif event.key == pygame.K_LEFT:\n self.snake.change_direction(\"LEFT\")\n elif event.key == pygame.K_RIGHT:\n self.snake.change_direction(\"RIGHT\")\n\n def check_collision(self):\n if self.snake.get_head() == self.food.get_position():\n self.snake.grow()\n self.food.generate()\n\n def increase_score(self):\n self.score += 1\n\n def increase_level(self):\n if self.score % 10 == 0:\n self.level += 1\n\n def game_over(self):\n print(\"Game Over\")\n self.initialize_game()\n\n\n```\n-----\n```python\n\n## snake.py\nimport pygame\n\nclass Snake:\n def __init__(self):\n self.body = [(0, 0)]\n self.direction = (1, 0)\n\n def move(self):\n head = self.body[0]\n dx, dy = self.direction\n new_head = (head[0] + dx, head[1] + dy)\n self.body.insert(0, new_head)\n self.body.pop()\n\n def change_direction(self, direction):\n if direction == \"UP\":\n self.direction = (0, -1)\n elif direction == \"DOWN\":\n self.direction = (0, 1)\n elif direction == \"LEFT\":\n self.direction = (-1, 0)\n elif direction == \"RIGHT\":\n self.direction = (1, 0)\n\n def grow(self):\n tail = self.body[-1]\n dx, dy = self.direction\n new_tail = (tail[0] - dx, tail[1] - dy)\n self.body.append(new_tail)\n\n def get_head(self):\n return self.body[0]\n\n def get_body(self):\n return self.body[1:]\n\n\n```\n-----\n```python\n\n## main.py\nimport pygame\nfrom game import Game\n\ndef main():\n pygame.init()\n game = Game()\n game.start_game()\n\nif __name__ == \"__main__\":\n main()\n\n\n```\n-----\n```python\n\n## food.py\nimport random\n\nclass Food:\n def __init__(self):\n self.position = (0, 0)\n\n def generate(self):\n x = random.randint(0, 9)\n y = random.randint(0, 9)\n self.position = (x, y)\n\n def get_position(self):\n return self.position\n\n\n```\n-----\n\n## Code Review All: Please read all historical files and find possible bugs in the files, such as unimplemented functions, calling errors, unreferences, etc.\n\n## Call flow: mermaid code, based on the implemented function, use mermaid to draw a complete call chain\n\n## Summary: Summary based on the implementation of historical files\n\n## TODOs: Python dict[str, str], write down the list of files that need to be modified and the reasons. We will modify them later.\n\n": "## Code Review\n\n### game.py\n- The `game_over` variable is not being used in the `game_loop` method. It can be removed.\n- The `increase_score` method should only increase the score if there is a collision with the food. Move the score increment logic inside the `check_collision` method.\n- The `increase_level` method should only increase the level if the score is divisible by 10. Move the level increment logic inside the `check_collision` method.\n- The `game_over` method should be called after the game loop ends, not inside the loop.\n\n### snake.py\n- The `get_body` method is not being used. It can be removed.\n\n### main.py\n- The `pygame.init()` method is being called twice, once in the `main` function and once in the `start_game` method of the `Game` class. It should only be called once, preferably in the `main` function.\n\n### food.py\n- The `generate` method should generate random positions within the game boundaries defined in the `constants.py` file.\n\n## Call Flow\n\n```mermaid\nsequenceDiagram\n participant M as Main\n participant G as Game\n participant S as Snake\n participant F as Food\n\n M->>G: start_game()\n G->>G: initialize_game()\n G->>G: game_loop()\n loop game loop\n G->>S: move()\n G->>G: update()\n G->>S: draw()\n G->>F: draw()\n G->>G: handle_events()\n G->>G: check_collision()\n G->>G: increase_score()\n G->>G: increase_level()\n alt if snake collision\n G->>G: game_over()\n end\n end\n```\n\n## Summary\nThe code consists of several classes that work together to create a snake game. The `Game` class manages the game loop and handles events. The `Snake` class represents the snake and handles its movement and collision detection. The `Food` class represents the food and handles its generation and position. The code is missing some functionality, such as updating the score and level, and handling game over conditions. There are also some minor issues with the code structure and logic that need to be addressed.\n\n## TODOs\n- Modify `game.py`:\n - Remove the unused `game_over` variable in the `game_loop` method.\n - Move the score increment logic from the `increase_score` method to the `check_collision` method.\n - Move the level increment logic from the `increase_level` method to the `check_collision` method.\n - Call the `game_over` method after the game loop ends.\n- Modify `snake.py`:\n - Remove the unused `get_body` method.\n- Modify `main.py`:\n - Remove the redundant `pygame.init()` method call in the `start_game` method of the `Game` class.\n- Modify `food.py`:\n - Generate random positions within the game boundaries defined in the `constants.py` file.", "\nNOTICE\nRole: You are a professional software engineer, and your main task is to review the code.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n-----\n# System Design\n```text\n\n{\"Implementation approach\": \"To develop this snake game, we will use the Python language and choose the Pygame library. Pygame is an open-source Python module collection specifically designed for writing video games. It provides functionalities such as displaying images and playing sounds, making it suitable for creating intuitive and responsive user interfaces. We will ensure efficient game logic to prevent any delays during gameplay. The scoring system will be simple, with the snake gaining points for each food it eats. We will use Pygame's event handling system to implement pause and resume functionality, as well as high-score tracking. The difficulty will increase by speeding up the snake's movement. In the initial version, we will focus on single-player mode and consider adding multiplayer mode and customizable skins in future updates. Based on the new requirement, we will also add a moving obstacle that appears randomly. If the snake eats this obstacle, the game will end. If the snake does not eat the obstacle, it will disappear after 5 seconds. For this, we need to add mechanisms for obstacle generation, movement, and disappearance in the game logic.\", \"Project_name\": \"snake_game\", \"File list\": [\"main.py\", \"game.py\", \"snake.py\", \"food.py\", \"obstacle.py\", \"scoreboard.py\", \"constants.py\", \"assets/styles.css\", \"assets/index.html\"], \"Data structures and interfaces\": \"```mermaid\n classDiagram\n class Game{\n +int score\n +int speed\n +bool game_over\n +bool paused\n +Snake snake\n +Food food\n +Obstacle obstacle\n +Scoreboard scoreboard\n +start_game() void\n +pause_game() void\n +resume_game() void\n +end_game() void\n +increase_difficulty() void\n +update() void\n +render() void\n Game()\n }\n class Snake{\n +list body_parts\n +str direction\n +bool grow\n +move() void\n +grow() void\n +check_collision() bool\n Snake()\n }\n class Food{\n +tuple position\n +spawn() void\n Food()\n }\n class Obstacle{\n +tuple position\n +int lifetime\n +bool active\n +spawn() void\n +move() void\n +check_collision() bool\n +disappear() void\n Obstacle()\n }\n class Scoreboard{\n +int high_score\n +update_score(int) void\n +reset_score() void\n +load_high_score() void\n +save_high_score() void\n Scoreboard()\n }\n class Constants{\n }\n Game \"1\" -- \"1\" Snake: has\n Game \"1\" -- \"1\" Food: has\n Game \"1\" -- \"1\" Obstacle: has\n Game \"1\" -- \"1\" Scoreboard: has\n ```\", \"Program call flow\": \"```sequenceDiagram\n participant M as Main\n participant G as Game\n participant S as Snake\n participant F as Food\n participant O as Obstacle\n participant SB as Scoreboard\n M->>G: start_game()\n loop game loop\n G->>S: move()\n G->>S: check_collision()\n G->>F: spawn()\n G->>O: spawn()\n G->>O: move()\n G->>O: check_collision()\n G->>O: disappear()\n G->>SB: update_score(score)\n G->>G: update()\n G->>G: render()\n alt if paused\n M->>G: pause_game()\n M->>G: resume_game()\n end\n alt if game_over\n G->>M: end_game()\n end\n end\n```\", \"Anything UNCLEAR\": \"There is no need for further clarification as the requirements are already clear.\"}\n\n```\n-----\n# Tasks\n```text\n\n{\"Required Python third-party packages\": [\"pygame==2.0.1\"], \"Required Other language third-party packages\": [\"No third-party packages required for other languages.\"], \"Full API spec\": \"\n openapi: 3.0.0\n info:\n title: Snake Game API\n version: \"1.0.0\"\n paths:\n /start:\n get:\n summary: Start the game\n responses:\n '200':\n description: Game started successfully\n /pause:\n get:\n summary: Pause the game\n responses:\n '200':\n description: Game paused successfully\n /resume:\n get:\n summary: Resume the game\n responses:\n '200':\n description: Game resumed successfully\n /end:\n get:\n summary: End the game\n responses:\n '200':\n description: Game ended successfully\n /score:\n get:\n summary: Get the current score\n responses:\n '200':\n description: Current score retrieved successfully\n /highscore:\n get:\n summary: Get the high score\n responses:\n '200':\n description: High score retrieved successfully\n components: {}\n \", \"Logic Analysis\": [[\"constants.py\", \"Contains all the constant values like screen size, colors, game speeds, etc. This should be implemented first as it provides the base values for other components.\"], [\"snake.py\", \"Contains the Snake class with methods for movement, growth, and collision detection. It is dependent on constants.py for configuration values.\"], [\"food.py\", \"Contains the Food class responsible for spawning food items on the screen. It is dependent on constants.py for configuration values.\"], [\"obstacle.py\", \"Contains the Obstacle class with methods for spawning, moving, and disappearing of obstacles, as well as collision detection with the snake. It is dependent on constants.py for configuration values.\"], [\"scoreboard.py\", \"Contains the Scoreboard class for updating, resetting, loading, and saving high scores. It may use constants.py for configuration values and depends on the game's scoring logic.\"], [\"game.py\", \"Contains the main Game class which includes the game loop and methods for starting, pausing, resuming, and ending the game. It is dependent on snake.py, food.py, obstacle.py, and scoreboard.py.\"], [\"main.py\", \"The entry point of the game that initializes the game and starts the game loop. It is dependent on game.py.\"]], \"Task list\": [\"constants.py\", \"snake.py\", \"food.py\", \"obstacle.py\", \"scoreboard.py\", \"game.py\", \"main.py\"], \"Shared Knowledge\": \"\n 'constants.py' should contain all the necessary configurations for the game, such as screen dimensions, color definitions, and speed settings. These constants will be used across multiple files, ensuring consistency and ease of updates. Ensure that the Pygame library is initialized correctly in 'main.py' before starting the game loop. Also, make sure that the game's state is managed properly when pausing and resuming the game.\n \", \"Anything UNCLEAR\": \"The interaction between the 'obstacle.py' and the game loop needs to be clearly defined to ensure obstacles appear and disappear correctly. The lifetime of the obstacle and its random movement should be implemented in a way that does not interfere with the game's performance.\"}\n\n```\n-----\n```python\n\n## food.py\nimport random\n\nclass Food:\n def __init__(self):\n self.position = (0, 0)\n\n def generate(self):\n x = random.randint(0, 9)\n y = random.randint(0, 9)\n self.position = (x, y)\n\n def get_position(self):\n return self.position\n\n\n```\n-----\n```python\n\n## snake.py\nimport pygame\n\nclass Snake:\n def __init__(self):\n self.body = [(0, 0)]\n self.direction = (1, 0)\n\n def move(self):\n head = self.body[0]\n dx, dy = self.direction\n new_head = (head[0] + dx, head[1] + dy)\n self.body.insert(0, new_head)\n self.body.pop()\n\n def change_direction(self, direction):\n if direction == \"UP\":\n self.direction = (0, -1)\n elif direction == \"DOWN\":\n self.direction = (0, 1)\n elif direction == \"LEFT\":\n self.direction = (-1, 0)\n elif direction == \"RIGHT\":\n self.direction = (1, 0)\n\n def grow(self):\n tail = self.body[-1]\n dx, dy = self.direction\n new_tail = (tail[0] - dx, tail[1] - dy)\n self.body.append(new_tail)\n\n def get_head(self):\n return self.body[0]\n\n def get_body(self):\n return self.body[1:]\n\n\n```\n-----\n```python\n\n## game.py\nimport pygame\nfrom snake import Snake\nfrom food import Food\n\nclass Game:\n def __init__(self):\n self.score = 0\n self.level = 1\n self.snake = Snake()\n self.food = Food()\n\n def start_game(self):\n pygame.init()\n self.initialize_game()\n self.game_loop()\n\n def initialize_game(self):\n self.score = 0\n self.level = 1\n self.snake.reset()\n self.food.generate()\n\n def game_loop(self):\n game_over = False\n\n while not game_over:\n self.update()\n self.draw()\n self.handle_events()\n self.check_collision()\n self.increase_score()\n self.increase_level()\n\n if self.snake.is_collision():\n game_over = True\n self.game_over()\n\n def update(self):\n self.snake.move()\n\n def draw(self):\n self.snake.draw()\n self.food.draw()\n\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n pygame.quit()\n quit()\n elif event.type == pygame.KEYDOWN:\n if event.key == pygame.K_UP:\n self.snake.change_direction(\"UP\")\n elif event.key == pygame.K_DOWN:\n self.snake.change_direction(\"DOWN\")\n elif event.key == pygame.K_LEFT:\n self.snake.change_direction(\"LEFT\")\n elif event.key == pygame.K_RIGHT:\n self.snake.change_direction(\"RIGHT\")\n\n def check_collision(self):\n if self.snake.get_head() == self.food.get_position():\n self.snake.grow()\n self.food.generate()\n\n def increase_score(self):\n self.score += 1\n\n def increase_level(self):\n if self.score % 10 == 0:\n self.level += 1\n\n def game_over(self):\n print(\"Game Over\")\n self.initialize_game()\n\n\n```\n-----\n```python\n\n## main.py\nimport pygame\nfrom game import Game\n\ndef main():\n pygame.init()\n game = Game()\n game.start_game()\n\nif __name__ == \"__main__\":\n main()\n\n\n```\n-----\n\n## Code Review All: Please read all historical files and find possible bugs in the files, such as unimplemented functions, calling errors, unreferences, etc.\n\n## Call flow: mermaid code, based on the implemented function, use mermaid to draw a complete call chain\n\n## Summary: Summary based on the implementation of historical files\n\n## TODOs: Python dict[str, str], write down the list of files that need to be modified and the reasons. We will modify them later.\n\n": "## Code Review\n\n### food.py\n- The `generate` method should be renamed to `spawn` to be consistent with the naming convention used in other classes.\n- The `get_position` method can be simplified by directly returning the `self.position` attribute.\n\n### snake.py\n- The `change_direction` method should handle lowercase direction inputs as well to make it more flexible.\n- The `grow` method can be optimized by directly appending the new tail position to the `self.body` list instead of calculating it based on the current direction.\n\n### game.py\n- The `initialize_game` method should call the `reset` method of the `self.snake` object instead of a non-existent `reset` method.\n- The `game_over` method should reset the game state by calling the `initialize_game` method instead of manually resetting the score and level attributes.\n- The `draw` method should be implemented to draw the snake and food on the screen using the Pygame library.\n- The `handle_events` method should handle the case when the snake is moving in one direction and the opposite direction key is pressed, which should be ignored to prevent the snake from reversing.\n- The `check_collision` method should be implemented to check for collisions between the snake's head and the food, and handle the snake's growth and food respawn accordingly.\n- The `increase_score` and `increase_level` methods should be implemented to increase the score and level based on the game's scoring logic.\n- The `game_over` method should be implemented to handle the game over condition, display a game over message, and reset the game state.\n\n### main.py\n- The `pygame.init()` method is called twice, once in the `main` function and once in the `Game` class. It should only be called once, preferably in the `main` function.\n\n## Call Flow\n\n```mermaid\nsequenceDiagram\n participant M as Main\n participant G as Game\n participant S as Snake\n participant F as Food\n\n M->>G: start_game()\n loop game loop\n G->>S: move()\n G->>S: check_collision()\n G->>F: spawn()\n G->>G: update()\n G->>G: draw()\n G->>G: handle_events()\n G->>G: check_collision()\n G->>G: increase_score()\n G->>G: increase_level()\n alt if game over\n G->>G: game_over()\n end\n end\n```\n\n## Summary\n\nThe code consists of several classes that represent different components of the snake game, such as the snake itself, the food, and the game logic. The `main` function initializes the game and starts the game loop. The game loop handles updating the game state, drawing the game objects on the screen, and handling user input. The snake can move in different directions, grow when it eats food, and collide with itself or the boundaries of the screen. The game keeps track of the score and level, and ends when the snake collides with itself or the boundaries.\n\n## TODOs\n\n- Modify `food.py`:\n - Rename the `generate` method to `spawn`.\n - Simplify the `get_position` method.\n- Modify `snake.py`:\n - Handle lowercase direction inputs in the `change_direction` method.\n - Optimize the `grow` method by directly appending the new tail position to the `self.body` list.\n- Modify `game.py`:\n - Call the `reset` method of the `self.snake` object in the `initialize_game` method.\n - Implement the `draw` method to draw the snake and food on the screen.\n - Implement the `handle_events` method to handle direction changes and ignore opposite direction inputs.\n - Implement the `check_collision` method to handle collisions between the snake's head and the food.\n - Implement the `increase_score` and `increase_level` methods based on the game's scoring logic.\n - Implement the `game_over` method to handle the game over condition and reset the game state.\n- Remove the duplicate `pygame.init()` call in the `main` function.", @@ -53,7 +53,7 @@ "You are mathematician.#MSG_SEP#Your responses should align with the role-play agreement, maintaining the character's persona and habits. When faced with unrelated questions, playfully decline to answer without revealing your AI nature to preserve the character's image.#MSG_SEP#If the information is insufficient, you can search in the context or knowledge.#MSG_SEP#Answer the following questions strictly in Chinese, and the answers must follow the Markdown format.#SYSTEM_MSG_END#Does Susie have an apple?": "根据提供的信息,Susie曾经有一个苹果,但是她已经吃掉了。", "\nNOTICE\nRole: You are a professional engineer; the main goal is to write google-style, elegant, modular, easy to read and maintain code\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## Design\n设计一个名为'add'的函数,该函数接受两个整数作为输入,并返回它们的和。\n\n## Tasks\n\n\n## Legacy Code\n```Code\n\n```\n\n## Debug logs\n```text\n\n\n\n```\n\n## Bug Feedback logs\n```text\n\n```\n\n# Format example\n## Code: \n```python\n## \n...\n```\n\n# Instruction: Based on the context, follow \"Format example\", write code.\n\n## Code: . Write code with triple quoto, based on the following attentions and context.\n1. Only One file: do your best to implement THIS ONLY ONE FILE.\n2. COMPLETE CODE: Your code will be part of the entire project, so please implement complete, reliable, reusable code snippets.\n3. Set default value: If there is any setting, ALWAYS SET A DEFAULT VALUE, ALWAYS USE STRONG TYPE AND EXPLICIT VARIABLE. AVOID circular import.\n4. Follow design: YOU MUST FOLLOW \"Data structures and interfaces\". DONT CHANGE ANY DESIGN. Do not use public member functions that do not exist in your design.\n5. CAREFULLY CHECK THAT YOU DONT MISS ANY NECESSARY CLASS/FUNCTION IN THIS FILE.\n6. Before using a external variable/module, make sure you import it first.\n7. Write out EVERY CODE DETAIL, DON'T LEAVE TODO.\n\n": "## Code:\n\n```python\ndef add(num1: int, num2: int) -> int:\n \"\"\"\n This function takes two integers as input and returns their sum.\n \n Args:\n num1 (int): The first integer.\n num2 (int): The second integer.\n \n Returns:\n int: The sum of the two integers.\n \"\"\"\n return num1 + num2\n```\n\n# Instruction: Based on the context, write code.\n\n## Code: \n```python\ndef add(num1: int, num2: int) -> int:\n \"\"\"\n This function takes two integers as input and returns their sum.\n \n Args:\n num1 (int): The first integer.\n num2 (int): The second integer.\n \n Returns:\n int: The sum of the two integers.\n \"\"\"\n return num1 + num2\n```", "\n你是一个工程师。下面是背景信息与你的当前任务,请为任务撰写代码。\n撰写的代码应该符合PEP8,优雅,模块化,易于阅读与维护,代码本身应该有__main__入口来防止桩函数\n\n## 用户编写程序所需的全部、详尽的文件路径列表(只需要相对路径,并不需要前缀,组织形式应该符合PEP规范)\n\n- `main.py`: 主程序文件\n- `search_engine.py`: 搜索引擎实现文件\n- `knowledge_base.py`: 知识库管理文件\n- `user_interface.py`: 用户界面文件\n- `data_import.py`: 数据导入功能文件\n- `data_export.py`: 数据导出功能文件\n- `utils.py`: 工具函数文件\n\n## 数据结构\n\n- `KnowledgeBase`: 知识库类,用于管理私有知识库的内容、分类、标签和关键词。\n- `SearchEngine`: 搜索引擎类,基于大语言模型,用于对用户输入的关键词或短语进行语义理解,并提供准确的搜索结果。\n- `SearchResult`: 搜索结果类,包含与用户搜索意图相关的知识库内容的相关信息。\n- `UserInterface`: 用户界面类,提供简洁、直观的用户界面,支持多种搜索方式和搜索结果的排序和过滤。\n- `DataImporter`: 数据导入类,支持多种数据格式的导入功能,用于将外部数据导入到知识库中。\n- `DataExporter`: 数据导出类,支持多种数据格式的导出功能,用于将知识库内容进行备份和分享。\n\n## API接口\n\n- `KnowledgeBase`类接口:\n - `add_entry(entry: str, category: str, tags: List[str], keywords: List[str]) -> bool`: 添加知识库条目。\n - `delete_entry(entry_id: str) -> bool`: 删除知识库条目。\n - `update_entry(entry_id: str, entry: str, category: str, tags: List[str], keywords: List[str]) -> bool`: 更新知识库条目。\n - `search_entries(query: str) -> List[str]`: 根据查询词搜索知识库条目。\n\n- `SearchEngine`类接口:\n - `search(query: str) -> SearchResult`: 根据用户查询词进行搜索,返回与查询意图相关的搜索结果。\n\n- `UserInterface`类接口:\n - `display_search_results(results: List[SearchResult]) -> None`: 显示搜索结果。\n - `filter_results(results: List[SearchResult], filters: Dict[str, Any]) -> List[SearchResult]`: 根据过滤条件对搜索结果进行过滤。\n - `sort_results(results: List[SearchResult], key: str, reverse: bool = False) -> List[SearchResult]`: 根据指定的键对搜索结果进行排序。\n\n- `DataImporter`类接口:\n - `import_data(file_path: str) -> bool`: 导入外部数据到知识库。\n\n- `DataExporter`类接口:\n - `export_data(file_path: str) -> bool`: 导出知识库数据到外部文件。\n\n## 调用流程(以dot语言描述)\n\n```dot\ndigraph call_flow {\n rankdir=LR;\n\n subgraph cluster_user_program {\n label=\"User Program\";\n style=dotted;\n\n main_py -> search_engine_py;\n main_py -> knowledge_base_py;\n main_py -> user_interface_py;\n main_py -> data_import_py;\n main_py -> data_export_py;\n\n search_engine_py -> knowledge_base_py;\n search_engine_py -> user_interface_py;\n\n user_interface_py -> knowledge_base_py;\n user_interface_py -> search_engine_py;\n\n data_import_py -> knowledge_base_py;\n data_import_py -> user_interface_py;\n\n data_export_py -> knowledge_base_py;\n data_export_py -> user_interface_py;\n }\n\n main_py [label=\"main.py\"];\n search_engine_py [label=\"search_engine.py\"];\n knowledge_base_py [label=\"knowledge_base.py\"];\n user_interface_py [label=\"user_interface.py\"];\n data_import_py [label=\"data_import.py\"];\n data_export_py [label=\"data_export.py\"];\n}\n```\n\n这是一个简化的调用流程图,展示了各个模块之间的调用关系。用户程序的`main.py`文件通过调用其他模块实现搜索引擎的功能。`search_engine.py`模块与`knowledge_base.py`和`user_interface.py`模块进行交互,实现搜索算法和搜索结果的展示。`data_import.py`和`data_export.py`模块与`knowledge_base.py`和`user_interface.py`模块进行交互,实现数据导入和导出的功能。用户界面模块`user_interface.py`与其他模块进行交互,提供简洁、直观的用户界面,并支持搜索方式、排序和过滤等操作。\n\n## 当前任务\n\n\n完成main.py的功能": "根据任务要求,我们需要在`main.py`文件中完成以下功能:\n\n1. 导入所需模块和类:`KnowledgeBase`、`SearchEngine`、`UserInterface`、`DataImporter`、`DataExporter`。\n2. 创建一个`KnowledgeBase`对象,用于管理知识库的内容。\n3. 创建一个`SearchEngine`对象,用于进行搜索操作。\n4. 创建一个`UserInterface`对象,用于与用户进行交互。\n5. 创建一个`DataImporter`对象,用于导入外部数据到知识库。\n6. 创建一个`DataExporter`对象,用于导出知识库数据到外部文件。\n7. 实现主程序逻辑,包括用户界面的显示和用户输入的处理。\n\n下面是一个示例的`main.py`代码实现:\n\n```python\nfrom knowledge_base import KnowledgeBase\nfrom search_engine import SearchEngine\nfrom user_interface import UserInterface\nfrom data_import import DataImporter\nfrom data_export import DataExporter\n\ndef main():\n # 创建知识库对象\n knowledge_base = KnowledgeBase()\n\n # 创建搜索引擎对象\n search_engine = SearchEngine(knowledge_base)\n\n # 创建用户界面对象\n user_interface = UserInterface(search_engine)\n\n # 创建数据导入对象\n data_importer = DataImporter(knowledge_base)\n\n # 创建数据导出对象\n data_exporter = DataExporter(knowledge_base)\n\n # 主程序逻辑\n while True:\n # 显示用户界面\n user_interface.display_menu()\n\n # 获取用户输入\n user_input = input(\"请输入选项:\")\n\n # 处理用户输入\n if user_input == \"1\":\n # 搜索知识库\n query = input(\"请输入搜索关键词:\")\n search_results = search_engine.search(query)\n user_interface.display_search_results(search_results)\n elif user_input == \"2\":\n # 导入数据\n file_path = input(\"请输入要导入的文件路径:\")\n data_importer.import_data(file_path)\n elif user_input == \"3\":\n # 导出数据\n file_path = input(\"请输入要导出的文件路径:\")\n data_exporter.export_data(file_path)\n elif user_input == \"4\":\n # 退出程序\n break\n else:\n print(\"无效的选项,请重新输入。\")\n\nif __name__ == \"__main__\":\n main()\n```\n\n在这个示例代码中,我们首先导入了所需的模块和类。然后,我们创建了`KnowledgeBase`、`SearchEngine`、`UserInterface`、`DataImporter`和`DataExporter`对象。接下来,我们使用一个无限循环来实现主程序逻辑。在每次循环中,我们首先显示用户界面,然后获取用户输入,并根据用户输入执行相应的操作。用户可以选择搜索知识库、导入数据、导出数据或退出程序。最后,我们使用`if __name__ == \"__main__\":`来确保代码在作为主程序运行时才会执行。", - "\nNOTICE\nRole: You are a professional engineer; the main goal is to write google-style, elegant, modular, easy to read and maintain code\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## Design\n{\"Implementation approach\": \"We will use the Pygame library to create the game interface and handle user input. The game logic will be implemented using Python classes and data structures.\", \"File list\": [\"main.py\", \"game.py\"], \"Data structures and interfaces\": \"classDiagram\\n class Game {\\n -grid: List[List[int]]\\n -score: int\\n -game_over: bool\\n +__init__()\\n +reset_game()\\n +move(direction: str)\\n +is_game_over() bool\\n +get_empty_cells() List[Tuple[int, int]]\\n +add_new_tile()\\n +get_score() int\\n }\\n class UI {\\n -game: Game\\n +__init__(game: Game)\\n +draw_grid()\\n +draw_score()\\n +draw_game_over()\\n +handle_input()\\n }\\n Game --> UI\", \"Program call flow\": \"sequenceDiagram\\n participant M as Main\\n participant G as Game\\n participant U as UI\\n M->>G: reset_game()\\n M->>U: draw_grid()\\n M->>U: draw_score()\\n M->>U: handle_input()\\n U->>G: move(direction)\\n G->>G: add_new_tile()\\n G->>U: draw_grid()\\n G->>U: draw_score()\\n G->>U: draw_game_over()\\n G->>G: is_game_over()\\n G->>G: get_empty_cells()\\n G->>G: get_score()\", \"Anything UNCLEAR\": \"...\"}\n\n## Tasks\n{\"Required Python packages\": [\"pygame==2.0.1\"], \"Required Other language third-party packages\": [\"No third-party dependencies required\"], \"Logic Analysis\": [[\"game.py\", \"Contains Game class and related functions for game logic\"], [\"main.py\", \"Contains main function, initializes the game and UI\"]], \"Task list\": [\"game.py\", \"main.py\"], \"Full API spec\": \"\", \"Shared Knowledge\": \"The game logic will be implemented using Python classes and data structures. The Pygame library will be used to create the game interface and handle user input.\", \"Anything UNCLEAR\": \"...\"}\n\n## Legacy Code\n```Code\n----- main.py\nif __name__ == \"__main__\":\nmain()\n```\n\n## Debug logs\n```text\nE.......F\n======================================================================\nERROR: test_add_new_tile (__main__.TestGame)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/Users/xx/tests/test_game.py\", line 104, in test_add_new_tile\n self.assertIn(self.game.grid[empty_cells[0][0]][empty_cells[0][1]], [2, 4])\nIndexError: list index out of range\n\n======================================================================\nFAIL: test_reset_game (__main__.TestGame)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/Users/xx/tests/test_game.py\", line 13, in test_reset_game\n self.assertEqual(self.game.grid, [[0 for _ in range(4)] for _ in range(4)])\nAssertionError: Lists differ: [[0, 0, 0, 0], [0, 2, 0, 0], [0, 0, 0, 2], [0, 0, 0, 0]] != [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]\n\nFirst differing element 1:\n[0, 2, 0, 0]\n[0, 0, 0, 0]\n\n- [[0, 0, 0, 0], [0, 2, 0, 0], [0, 0, 0, 2], [0, 0, 0, 0]]\n? --- ^\n\n+ [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]\n? +++ ^\n\n\n----------------------------------------------------------------------\nRan 9 tests in 0.002s\n\nFAILED (failures=1, errors=1)\n\n\n{\"design_filename\": \"docs/system_design/20231221155954.json\", \"task_filename\": \"docs/tasks/20231221155954.json\", \"codes_filenames\": [\"game.py\", \"main.py\"], \"reason\": \"```json\\n{\\n \\\"game.py\\\": \\\"Add handling for no empty cells in add_new_tile function, Update score in move function\\\",\\n \\\"main.py\\\": \\\"Handle game over condition in the game loop\\\"\\n}\\n```\"}\n```\n\n## Bug Feedback logs\n```text\n\n```\n\n# Format example\n## Code: game.py\n```python\n## game.py\n...\n```\n\n# Instruction: Based on the context, follow \"Format example\", write code.\n\n## Code: game.py. Write code with triple quoto, based on the following attentions and context.\n1. Only One file: do your best to implement THIS ONLY ONE FILE.\n2. COMPLETE CODE: Your code will be part of the entire project, so please implement complete, reliable, reusable code snippets.\n3. Set default value: If there is any setting, ALWAYS SET A DEFAULT VALUE, ALWAYS USE STRONG TYPE AND EXPLICIT VARIABLE. AVOID circular import.\n4. Follow design: YOU MUST FOLLOW \"Data structures and interfaces\". DONT CHANGE ANY DESIGN. Do not use public member functions that do not exist in your design.\n5. CAREFULLY CHECK THAT YOU DONT MISS ANY NECESSARY CLASS/FUNCTION IN THIS FILE.\n6. Before using a external variable/module, make sure you import it first.\n7. Write out EVERY CODE DETAIL, DON'T LEAVE TODO.\n\n": "## Code: game.py\n\n```python\nclass Game:\n def __init__(self):\n self.grid = [[0 for _ in range(4)] for _ in range(4)]\n self.score = 0\n self.game_over = False\n\n def reset_game(self):\n self.grid = [[0 for _ in range(4)] for _ in range(4)]\n self.score = 0\n self.game_over = False\n\n def move(self, direction: str):\n # TODO: Implement the move logic based on the given direction\n pass\n\n def is_game_over(self) -> bool:\n # TODO: Implement the game over logic\n pass\n\n def get_empty_cells(self) -> List[Tuple[int, int]]:\n # TODO: Return a list of coordinates of empty cells in the grid\n pass\n\n def add_new_tile(self):\n # TODO: Add a new tile (either 2 or 4) to a random empty cell in the grid\n pass\n\n def get_score(self) -> int:\n return self.score\n```\n\n## Explanation:\nIn the `Game` class, we have implemented the constructor `__init__` to initialize the grid, score, and game_over attributes. The `reset_game` method is used to reset the game by setting the grid, score, and game_over attributes to their initial values.\n\nThe `move` method is not implemented yet and will handle the logic for moving the tiles in the grid based on the given direction.\n\nThe `is_game_over` method is not implemented yet and will check if the game is over by checking if there are any possible moves left.\n\nThe `get_empty_cells` method is not implemented yet and will return a list of coordinates of empty cells in the grid.\n\nThe `add_new_tile` method is not implemented yet and will add a new tile (either 2 or 4) to a random empty cell in the grid.\n\nThe `get_score` method returns the current score of the game.", + "\nNOTICE\nRole: You are a professional engineer; the main goal is to write google-style, elegant, modular, easy to read and maintain code\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## Design\n{\"Implementation approach\": \"We will use the Pygame library to create the game interface and handle user input. The game logic will be implemented using Python classes and data structures.\", \"File list\": [\"main.py\", \"game.py\"], \"Data structures and interfaces\": \"classDiagram\\n class Game {\\n -grid: List[List[int]]\\n -score: int\\n -game_over: bool\\n +__init__()\\n +reset_game()\\n +move(direction: str)\\n +is_game_over() bool\\n +get_empty_cells() List[Tuple[int, int]]\\n +add_new_tile()\\n +get_score() int\\n }\\n class UI {\\n -game: Game\\n +__init__(game: Game)\\n +draw_grid()\\n +draw_score()\\n +draw_game_over()\\n +handle_input()\\n }\\n Game --> UI\", \"Program call flow\": \"sequenceDiagram\\n participant M as Main\\n participant G as Game\\n participant U as UI\\n M->>G: reset_game()\\n M->>U: draw_grid()\\n M->>U: draw_score()\\n M->>U: handle_input()\\n U->>G: move(direction)\\n G->>G: add_new_tile()\\n G->>U: draw_grid()\\n G->>U: draw_score()\\n G->>U: draw_game_over()\\n G->>G: is_game_over()\\n G->>G: get_empty_cells()\\n G->>G: get_score()\", \"Anything UNCLEAR\": \"...\"}\n\n## Tasks\n{\"Required packages\": [\"pygame==2.0.1\"], \"Required Other language third-party packages\": [\"No third-party dependencies required\"], \"Logic Analysis\": [[\"game.py\", \"Contains Game class and related functions for game logic\"], [\"main.py\", \"Contains main function, initializes the game and UI\"]], \"Task list\": [\"game.py\", \"main.py\"], \"Full API spec\": \"\", \"Shared Knowledge\": \"The game logic will be implemented using Python classes and data structures. The Pygame library will be used to create the game interface and handle user input.\", \"Anything UNCLEAR\": \"...\"}\n\n## Legacy Code\n```Code\n----- main.py\nif __name__ == \"__main__\":\nmain()\n```\n\n## Debug logs\n```text\nE.......F\n======================================================================\nERROR: test_add_new_tile (__main__.TestGame)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/Users/xx/tests/test_game.py\", line 104, in test_add_new_tile\n self.assertIn(self.game.grid[empty_cells[0][0]][empty_cells[0][1]], [2, 4])\nIndexError: list index out of range\n\n======================================================================\nFAIL: test_reset_game (__main__.TestGame)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/Users/xx/tests/test_game.py\", line 13, in test_reset_game\n self.assertEqual(self.game.grid, [[0 for _ in range(4)] for _ in range(4)])\nAssertionError: Lists differ: [[0, 0, 0, 0], [0, 2, 0, 0], [0, 0, 0, 2], [0, 0, 0, 0]] != [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]\n\nFirst differing element 1:\n[0, 2, 0, 0]\n[0, 0, 0, 0]\n\n- [[0, 0, 0, 0], [0, 2, 0, 0], [0, 0, 0, 2], [0, 0, 0, 0]]\n? --- ^\n\n+ [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]\n? +++ ^\n\n\n----------------------------------------------------------------------\nRan 9 tests in 0.002s\n\nFAILED (failures=1, errors=1)\n\n\n{\"design_filename\": \"docs/system_design/20231221155954.json\", \"task_filename\": \"docs/tasks/20231221155954.json\", \"codes_filenames\": [\"game.py\", \"main.py\"], \"reason\": \"```json\\n{\\n \\\"game.py\\\": \\\"Add handling for no empty cells in add_new_tile function, Update score in move function\\\",\\n \\\"main.py\\\": \\\"Handle game over condition in the game loop\\\"\\n}\\n```\"}\n```\n\n## Bug Feedback logs\n```text\n\n```\n\n# Format example\n## Code: game.py\n```python\n## game.py\n...\n```\n\n# Instruction: Based on the context, follow \"Format example\", write code.\n\n## Code: game.py. Write code with triple quoto, based on the following attentions and context.\n1. Only One file: do your best to implement THIS ONLY ONE FILE.\n2. COMPLETE CODE: Your code will be part of the entire project, so please implement complete, reliable, reusable code snippets.\n3. Set default value: If there is any setting, ALWAYS SET A DEFAULT VALUE, ALWAYS USE STRONG TYPE AND EXPLICIT VARIABLE. AVOID circular import.\n4. Follow design: YOU MUST FOLLOW \"Data structures and interfaces\". DONT CHANGE ANY DESIGN. Do not use public member functions that do not exist in your design.\n5. CAREFULLY CHECK THAT YOU DONT MISS ANY NECESSARY CLASS/FUNCTION IN THIS FILE.\n6. Before using a external variable/module, make sure you import it first.\n7. Write out EVERY CODE DETAIL, DON'T LEAVE TODO.\n\n": "## Code: game.py\n\n```python\nclass Game:\n def __init__(self):\n self.grid = [[0 for _ in range(4)] for _ in range(4)]\n self.score = 0\n self.game_over = False\n\n def reset_game(self):\n self.grid = [[0 for _ in range(4)] for _ in range(4)]\n self.score = 0\n self.game_over = False\n\n def move(self, direction: str):\n # TODO: Implement the move logic based on the given direction\n pass\n\n def is_game_over(self) -> bool:\n # TODO: Implement the game over logic\n pass\n\n def get_empty_cells(self) -> List[Tuple[int, int]]:\n # TODO: Return a list of coordinates of empty cells in the grid\n pass\n\n def add_new_tile(self):\n # TODO: Add a new tile (either 2 or 4) to a random empty cell in the grid\n pass\n\n def get_score(self) -> int:\n return self.score\n```\n\n## Explanation:\nIn the `Game` class, we have implemented the constructor `__init__` to initialize the grid, score, and game_over attributes. The `reset_game` method is used to reset the game by setting the grid, score, and game_over attributes to their initial values.\n\nThe `move` method is not implemented yet and will handle the logic for moving the tiles in the grid based on the given direction.\n\nThe `is_game_over` method is not implemented yet and will check if the game is over by checking if there are any possible moves left.\n\nThe `get_empty_cells` method is not implemented yet and will return a list of coordinates of empty cells in the grid.\n\nThe `add_new_tile` method is not implemented yet and will add a new tile (either 2 or 4) to a random empty cell in the grid.\n\nThe `get_score` method returns the current score of the game.", "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n编写一个从a加b的函数,返回a+b\n\n## Tasks\n\n\n## Code Files\n\n\n\n## Code to be Reviewed: \n```Code\n\ndef add(a, b):\n return a + \n\n```\n\n\n\n# Format example 1\n## Code Review: \n1. No, we should fix the logic of class A due to ...\n2. ...\n3. ...\n4. No, function B is not implemented, ...\n5. ...\n6. ...\n\n## Actions\n1. Fix the `handle_events` method to update the game state only if a move is successful.\n ```python\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n return False\n if event.type == pygame.KEYDOWN:\n moved = False\n if event.key == pygame.K_UP:\n moved = self.game.move('UP')\n elif event.key == pygame.K_DOWN:\n moved = self.game.move('DOWN')\n elif event.key == pygame.K_LEFT:\n moved = self.game.move('LEFT')\n elif event.key == pygame.K_RIGHT:\n moved = self.game.move('RIGHT')\n if moved:\n # Update the game state only if a move was successful\n self.render()\n return True\n ```\n2. Implement function B\n\n## Code Review Result\nLBTM\n\n# Format example 2\n## Code Review: \n1. Yes.\n2. Yes.\n3. Yes.\n4. Yes.\n5. Yes.\n6. Yes.\n\n## Actions\npass\n\n## Code Review Result\nLGTM\n\n\n\n# Instruction: Based on the actual code situation, follow one of the \"Format example\". Return only 1 file under review.\n\n## Code Review: Ordered List. Based on the \"Code to be Reviewed\", provide key, clear, concise, and specific answer. If any answer is no, explain how to fix it step by step.\n1. Is the code implemented as per the requirements? If not, how to achieve it? Analyse it step by step.\n2. Is the code logic completely correct? If there are errors, please indicate how to correct them.\n3. Does the existing code follow the \"Data structures and interfaces\"?\n4. Are all functions implemented? If there is no implementation, please indicate how to achieve it step by step.\n5. Have all necessary pre-dependencies been imported? If not, indicate which ones need to be imported\n6. Are methods from other files being reused correctly?\n\n## Actions: Ordered List. Things that should be done after CR, such as implementing class A and function B\n\n## Code Review Result: str. If the code doesn't have bugs, we don't need to rewrite it, so answer LGTM and stop. ONLY ANSWER LGTM/LBTM.\nLGTM/LBTM\n\n": "## Code Review: \n1. No, the code is not implemented as per the requirements. The `add` function is missing the second parameter `b` in the return statement. To fix it, we need to include `b` in the return statement as well. The corrected code should be:\n```python\ndef add(a, b):\n return a + b\n```\n\n## Actions\n1. Implement the fix mentioned above.\n\n## Code Review Result\nLBTM", "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n编写一个从a加b的函数,返回a+b\n\n## Tasks\n\n\n## Code Files\n\n\n\n## Code to be Reviewed: \n```Code\n\ndef add(a, b):\n return a + \n\n```\n\n## Code Review: \n1. No, the code is not implemented as per the requirements. The `add` function is missing the second parameter `b` in the return statement. To fix it, we need to include `b` in the return statement as well. The corrected code should be:\n```python\ndef add(a, b):\n return a + b\n```\n\n## Actions\n1. Implement the fix mentioned above.\n\n## Code Review Result\nLBTM\n\n# Instruction: rewrite code based on the Code Review and Actions\n## Rewrite Code: CodeBlock. If it still has some bugs, rewrite with triple quotes. Do your utmost to optimize THIS SINGLE FILE. Return all completed codes and prohibit the return of unfinished codes.\n```Code\n## \n...\n```\n": "```python\ndef add(a, b):\n return a + b\n```", "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n编写一个从a加b的函数,返回a+b\n\n## Tasks\n\n\n## Code Files\n\n\n\n## Code to be Reviewed: \n```Code\ndef add(a, b):\n return a + b\n\n```\n\n\n\n# Format example 1\n## Code Review: \n1. No, we should fix the logic of class A due to ...\n2. ...\n3. ...\n4. No, function B is not implemented, ...\n5. ...\n6. ...\n\n## Actions\n1. Fix the `handle_events` method to update the game state only if a move is successful.\n ```python\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n return False\n if event.type == pygame.KEYDOWN:\n moved = False\n if event.key == pygame.K_UP:\n moved = self.game.move('UP')\n elif event.key == pygame.K_DOWN:\n moved = self.game.move('DOWN')\n elif event.key == pygame.K_LEFT:\n moved = self.game.move('LEFT')\n elif event.key == pygame.K_RIGHT:\n moved = self.game.move('RIGHT')\n if moved:\n # Update the game state only if a move was successful\n self.render()\n return True\n ```\n2. Implement function B\n\n## Code Review Result\nLBTM\n\n# Format example 2\n## Code Review: \n1. Yes.\n2. Yes.\n3. Yes.\n4. Yes.\n5. Yes.\n6. Yes.\n\n## Actions\npass\n\n## Code Review Result\nLGTM\n\n\n\n# Instruction: Based on the actual code situation, follow one of the \"Format example\". Return only 1 file under review.\n\n## Code Review: Ordered List. Based on the \"Code to be Reviewed\", provide key, clear, concise, and specific answer. If any answer is no, explain how to fix it step by step.\n1. Is the code implemented as per the requirements? If not, how to achieve it? Analyse it step by step.\n2. Is the code logic completely correct? If there are errors, please indicate how to correct them.\n3. Does the existing code follow the \"Data structures and interfaces\"?\n4. Are all functions implemented? If there is no implementation, please indicate how to achieve it step by step.\n5. Have all necessary pre-dependencies been imported? If not, indicate which ones need to be imported\n6. Are methods from other files being reused correctly?\n\n## Actions: Ordered List. Things that should be done after CR, such as implementing class A and function B\n\n## Code Review Result: str. If the code doesn't have bugs, we don't need to rewrite it, so answer LGTM and stop. ONLY ANSWER LGTM/LBTM.\nLGTM/LBTM\n\n": "## Code Review: \n1. Yes.\n2. Yes.\n3. Yes.\n4. Yes.\n5. Yes.\n6. Yes.\n\n## Actions\npass\n\n## Code Review Result\nLGTM", @@ -158,13 +158,13 @@ "\n## context\n\n### Project Name\n20240110212347\n\n### Original Requirements\n['需要一个基于LLM做总结的搜索引擎']\n\n### Search Information\n-\n\n\n-----\n\n## format example\n[CONTENT]\n{\n \"Language\": \"en_us\",\n \"Programming Language\": \"Python\",\n \"Original Requirements\": \"Create a 2048 game\",\n \"Product Goals\": [\n \"Create an engaging user experience\",\n \"Improve accessibility, be responsive\",\n \"More beautiful UI\"\n ],\n \"User Stories\": [\n \"As a player, I want to be able to choose difficulty levels\",\n \"As a player, I want to see my score after each game\",\n \"As a player, I want to get restart button when I lose\",\n \"As a player, I want to see beautiful UI that make me feel good\",\n \"As a player, I want to play game via mobile phone\"\n ],\n \"Competitive Analysis\": [\n \"2048 Game A: Simple interface, lacks responsive features\",\n \"play2048.co: Beautiful and responsive UI with my best score shown\",\n \"2048game.com: Responsive UI with my best score shown, but many ads\"\n ],\n \"Competitive Quadrant Chart\": \"quadrantChart\\n title \\\"Reach and engagement of campaigns\\\"\\n x-axis \\\"Low Reach\\\" --> \\\"High Reach\\\"\\n y-axis \\\"Low Engagement\\\" --> \\\"High Engagement\\\"\\n quadrant-1 \\\"We should expand\\\"\\n quadrant-2 \\\"Need to promote\\\"\\n quadrant-3 \\\"Re-evaluate\\\"\\n quadrant-4 \\\"May be improved\\\"\\n \\\"Campaign A\\\": [0.3, 0.6]\\n \\\"Campaign B\\\": [0.45, 0.23]\\n \\\"Campaign C\\\": [0.57, 0.69]\\n \\\"Campaign D\\\": [0.78, 0.34]\\n \\\"Campaign E\\\": [0.40, 0.34]\\n \\\"Campaign F\\\": [0.35, 0.78]\\n \\\"Our Target Product\\\": [0.5, 0.6]\",\n \"Requirement Analysis\": \"\",\n \"Requirement Pool\": [\n [\n \"P0\",\n \"The main code ...\"\n ],\n [\n \"P0\",\n \"The game algorithm ...\"\n ]\n ],\n \"UI Design draft\": \"Basic function description with a simple style and layout.\",\n \"Anything UNCLEAR\": \"\"\n}\n[/CONTENT]\n\n## nodes: \": # \"\n- Language: # Provide the language used in the project, typically matching the user's requirement language.\n- Programming Language: # Python/JavaScript or other mainstream programming language.\n- Original Requirements: # Place the original user's requirements here.\n- Product Goals: typing.List[str] # Provide up to three clear, orthogonal product goals.\n- User Stories: typing.List[str] # Provide up to 3 to 5 scenario-based user stories.\n- Competitive Analysis: typing.List[str] # Provide 5 to 7 competitive products.\n- Competitive Quadrant Chart: # Use mermaid quadrantChart syntax. Distribute scores evenly between 0 and 1\n- Requirement Analysis: # Provide a detailed analysis of the requirements.\n- Requirement Pool: typing.List[typing.List[str]] # List down the top-5 requirements with their priority (P0, P1, P2).\n- UI Design draft: # Provide a simple description of UI elements, functions, style, and layout.\n- Anything UNCLEAR: # Mention any aspects of the project that are unclear and try to clarify them.\n\n\n## constraint\nLanguage: Please use the same language as Human INPUT.\nFormat: output wrapped inside [CONTENT][/CONTENT] like format example, nothing else.\n\n## action\nFollow instructions of nodes, generate output and make sure it follows the format example.\n": "[CONTENT]\n{\n \"Language\": \"zh_cn\",\n \"Programming Language\": \"LLM\",\n \"Original Requirements\": \"需要一个基于LLM做总结的搜索引擎\",\n \"Product Goals\": [],\n \"User Stories\": [],\n \"Competitive Analysis\": [],\n \"Competitive Quadrant Chart\": \"\",\n \"Requirement Analysis\": \"\",\n \"Requirement Pool\": [],\n \"UI Design draft\": \"\",\n \"Anything UNCLEAR\": \"\"\n}\n[/CONTENT]", "\n## context\n\n### Project Name\n20240101\n\n### Original Requirements\n['Make a cli snake game']\n\n### Search Information\n-\n\n\n-----\n\n## format example\n[CONTENT]\n{\n \"Language\": \"en_us\",\n \"Programming Language\": \"Python\",\n \"Original Requirements\": \"Create a 2048 game\",\n \"Product Goals\": [\n \"Create an engaging user experience\",\n \"Improve accessibility, be responsive\",\n \"More beautiful UI\"\n ],\n \"User Stories\": [\n \"As a player, I want to be able to choose difficulty levels\",\n \"As a player, I want to see my score after each game\",\n \"As a player, I want to get restart button when I lose\",\n \"As a player, I want to see beautiful UI that make me feel good\",\n \"As a player, I want to play game via mobile phone\"\n ],\n \"Competitive Analysis\": [\n \"2048 Game A: Simple interface, lacks responsive features\",\n \"play2048.co: Beautiful and responsive UI with my best score shown\",\n \"2048game.com: Responsive UI with my best score shown, but many ads\"\n ],\n \"Competitive Quadrant Chart\": \"quadrantChart\\n title \\\"Reach and engagement of campaigns\\\"\\n x-axis \\\"Low Reach\\\" --> \\\"High Reach\\\"\\n y-axis \\\"Low Engagement\\\" --> \\\"High Engagement\\\"\\n quadrant-1 \\\"We should expand\\\"\\n quadrant-2 \\\"Need to promote\\\"\\n quadrant-3 \\\"Re-evaluate\\\"\\n quadrant-4 \\\"May be improved\\\"\\n \\\"Campaign A\\\": [0.3, 0.6]\\n \\\"Campaign B\\\": [0.45, 0.23]\\n \\\"Campaign C\\\": [0.57, 0.69]\\n \\\"Campaign D\\\": [0.78, 0.34]\\n \\\"Campaign E\\\": [0.40, 0.34]\\n \\\"Campaign F\\\": [0.35, 0.78]\\n \\\"Our Target Product\\\": [0.5, 0.6]\",\n \"Requirement Analysis\": \"\",\n \"Requirement Pool\": [\n [\n \"P0\",\n \"The main code ...\"\n ],\n [\n \"P0\",\n \"The game algorithm ...\"\n ]\n ],\n \"UI Design draft\": \"Basic function description with a simple style and layout.\",\n \"Anything UNCLEAR\": \"\"\n}\n[/CONTENT]\n\n## nodes: \": # \"\n- Language: # Provide the language used in the project, typically matching the user's requirement language.\n- Programming Language: # Python/JavaScript or other mainstream programming language.\n- Original Requirements: # Place the original user's requirements here.\n- Product Goals: typing.List[str] # Provide up to three clear, orthogonal product goals.\n- User Stories: typing.List[str] # Provide up to 3 to 5 scenario-based user stories.\n- Competitive Analysis: typing.List[str] # Provide 5 to 7 competitive products.\n- Competitive Quadrant Chart: # Use mermaid quadrantChart syntax. Distribute scores evenly between 0 and 1\n- Requirement Analysis: # Provide a detailed analysis of the requirements.\n- Requirement Pool: typing.List[typing.List[str]] # List down the top-5 requirements with their priority (P0, P1, P2).\n- UI Design draft: # Provide a simple description of UI elements, functions, style, and layout.\n- Anything UNCLEAR: # Mention any aspects of the project that are unclear and try to clarify them.\n\n\n## constraint\nLanguage: Please use the same language as Human INPUT.\nFormat: output wrapped inside [CONTENT][/CONTENT] like format example, nothing else.\n\n## action\nFollow instructions of nodes, generate output and make sure it follows the format example.\n": "[CONTENT]\n{\n \"Language\": \"en_us\",\n \"Programming Language\": \"Python\",\n \"Original Requirements\": \"Make a cli snake game\",\n \"Product Goals\": [],\n \"User Stories\": [],\n \"Competitive Analysis\": [],\n \"Competitive Quadrant Chart\": \"\",\n \"Requirement Analysis\": \"\",\n \"Requirement Pool\": [],\n \"UI Design draft\": \"\",\n \"Anything UNCLEAR\": \"Please provide more details on the product goals and user stories.\"\n}\n[/CONTENT]", "\n## context\n{\"Language\":\"en_us\",\"Programming Language\":\"Python\",\"Original Requirements\":\"Make a cli snake game\",\"Product Goals\":[],\"User Stories\":[],\"Competitive Analysis\":[],\"Competitive Quadrant Chart\":\"\",\"Requirement Analysis\":\"\",\"Requirement Pool\":[],\"UI Design draft\":\"\",\"Anything UNCLEAR\":\"Please provide more details on the product goals and user stories.\"}\n\n-----\n\n## format example\n[CONTENT]\n{\n \"Implementation approach\": \"We will ...\",\n \"File list\": [\n \"main.py\",\n \"game.py\"\n ],\n \"Data structures and interfaces\": \"\\nclassDiagram\\n class Main {\\n -SearchEngine search_engine\\n +main() str\\n }\\n class SearchEngine {\\n -Index index\\n -Ranking ranking\\n -Summary summary\\n +search(query: str) str\\n }\\n class Index {\\n -KnowledgeBase knowledge_base\\n +create_index(data: dict)\\n +query_index(query: str) list\\n }\\n class Ranking {\\n +rank_results(results: list) list\\n }\\n class Summary {\\n +summarize_results(results: list) str\\n }\\n class KnowledgeBase {\\n +update(data: dict)\\n +fetch_data(query: str) dict\\n }\\n Main --> SearchEngine\\n SearchEngine --> Index\\n SearchEngine --> Ranking\\n SearchEngine --> Summary\\n Index --> KnowledgeBase\\n\",\n \"Program call flow\": \"\\nsequenceDiagram\\n participant M as Main\\n participant SE as SearchEngine\\n participant I as Index\\n participant R as Ranking\\n participant S as Summary\\n participant KB as KnowledgeBase\\n M->>SE: search(query)\\n SE->>I: query_index(query)\\n I->>KB: fetch_data(query)\\n KB-->>I: return data\\n I-->>SE: return results\\n SE->>R: rank_results(results)\\n R-->>SE: return ranked_results\\n SE->>S: summarize_results(ranked_results)\\n S-->>SE: return summary\\n SE-->>M: return summary\\n\",\n \"Anything UNCLEAR\": \"Clarification needed on third-party API integration, ...\"\n}\n[/CONTENT]\n\n## nodes: \": # \"\n- Implementation approach: # Analyze the difficult points of the requirements, select the appropriate open-source framework\n- File list: typing.List[str] # Only need relative paths. ALWAYS write a main.py or app.py here\n- Data structures and interfaces: # Use mermaid classDiagram code syntax, including classes, method(__init__ etc.) and functions with type annotations, CLEARLY MARK the RELATIONSHIPS between classes, and comply with PEP8 standards. The data structures SHOULD BE VERY DETAILED and the API should be comprehensive with a complete design.\n- Program call flow: # Use sequenceDiagram code syntax, COMPLETE and VERY DETAILED, using CLASSES AND API DEFINED ABOVE accurately, covering the CRUD AND INIT of each object, SYNTAX MUST BE CORRECT.\n- Anything UNCLEAR: # Mention unclear project aspects, then try to clarify it.\n\n\n## constraint\nLanguage: Please use the same language as Human INPUT.\nFormat: output wrapped inside [CONTENT][/CONTENT] like format example, nothing else.\n\n## action\nFollow instructions of nodes, generate output and make sure it follows the format example.\n": "[CONTENT]\n{\n \"Product Goals\": [\n \"Create a command-line interface (CLI) snake game\",\n \"Implement game logic for movement, collision, and scoring\",\n \"Provide a user-friendly and interactive gaming experience\"\n ],\n \"User Stories\": [\n \"As a player, I want to be able to control the snake's movement using arrow keys\",\n \"As a player, I want the game to end when the snake collides with the walls or itself\",\n \"As a player, I want to see my score displayed on the screen during and after the game\"\n ],\n \"Anything UNCLEAR\": \"Please provide more details on the specific features and functionalities expected in the snake game.\"\n}\n[/CONTENT]", - "\n## context\n{\"Implementation approach\":\"We will use Python and the curses library to create the snake game. The game logic will be implemented in a separate module, and the main.py file will handle the user interface and game loop.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -Snake snake\\n -Food food\\n -Score score\\n +__init__(width: int, height: int)\\n +start_game()\\n +move_snake(direction: str)\\n +generate_food()\\n +update_score(points: int)\\n }\\n class Snake {\\n -body list\\n -direction str\\n +__init__(x: int, y: int)\\n +move(direction: str)\\n +grow()\\n +collides_with_self() bool\\n }\\n class Food {\\n -position tuple\\n +__init__(x: int, y: int)\\n +get_position() tuple\\n }\\n class Score {\\n -points int\\n +__init__()\\n +increase(points: int)\\n }\\n Game --> Snake\\n Game --> Food\\n Game --> Score\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: start_game()\\n M->>G: move_snake(direction)\\n G->>G: generate_food()\\n G->>G: update_score(points)\\n\",\"Anything UNCLEAR\":\"Please provide more details on the game mechanics and user interactions.\"}\n\n-----\n\n## format example\n[CONTENT]\n{\n \"Required Python packages\": [\n \"flask==1.1.2\",\n \"bcrypt==3.2.0\"\n ],\n \"Required Other language third-party packages\": [\n \"No third-party dependencies required\"\n ],\n \"Logic Analysis\": [\n [\n \"game.py\",\n \"Contains Game class and ... functions\"\n ],\n [\n \"main.py\",\n \"Contains main function, from game import Game\"\n ]\n ],\n \"Task list\": [\n \"game.py\",\n \"main.py\"\n ],\n \"Full API spec\": \"openapi: 3.0.0 ...\",\n \"Shared Knowledge\": \"'game.py' contains functions shared across the project.\",\n \"Anything UNCLEAR\": \"Clarification needed on how to start and initialize third-party libraries.\"\n}\n[/CONTENT]\n\n## nodes: \": # \"\n- Required Python packages: typing.List[str] # Provide required Python packages in requirements.txt format.\n- Required Other language third-party packages: typing.List[str] # List down the required packages for languages other than Python.\n- Logic Analysis: typing.List[typing.List[str]] # Provide a list of files with the classes/methods/functions to be implemented, including dependency analysis and imports.\n- Task list: typing.List[str] # Break down the tasks into a list of filenames, prioritized by dependency order.\n- Full API spec: # Describe all APIs using OpenAPI 3.0 spec that may be used by both frontend and backend. If front-end and back-end communication is not required, leave it blank.\n- Shared Knowledge: # Detail any shared knowledge, like common utility functions or configuration variables.\n- Anything UNCLEAR: # Mention any unclear aspects in the project management context and try to clarify them.\n\n\n## constraint\nLanguage: Please use the same language as Human INPUT.\nFormat: output wrapped inside [CONTENT][/CONTENT] like format example, nothing else.\n\n## action\nFollow instructions of nodes, generate output and make sure it follows the format example.\n": "[CONTENT]\n{\n \"Required Python packages\": [\n \"curses==2.2.0\"\n ],\n \"Required Other language third-party packages\": [\n \"No third-party dependencies required\"\n ],\n \"Logic Analysis\": [\n [\n \"game.py\",\n \"Contains Game class and ... functions\"\n ],\n [\n \"main.py\",\n \"Contains main function, from game import Game\"\n ]\n ],\n \"Task list\": [\n \"game.py\",\n \"main.py\"\n ],\n \"Full API spec\": \"\",\n \"Shared Knowledge\": \"'game.py' contains functions shared across the project.\",\n \"Anything UNCLEAR\": \"Please provide more details on the game mechanics and user interactions.\"\n}\n[/CONTENT]", - "\nNOTICE\nRole: You are a professional engineer; the main goal is to write google-style, elegant, modular, easy to read and maintain code\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## Design\n{\"Implementation approach\":\"We will use Python and the curses library to create the snake game. The game logic will be implemented in a separate module, and the main.py file will handle the user interface and game loop.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -Snake snake\\n -Food food\\n -Score score\\n +__init__(width: int, height: int)\\n +start_game()\\n +move_snake(direction: str)\\n +generate_food()\\n +update_score(points: int)\\n }\\n class Snake {\\n -body list\\n -direction str\\n +__init__(x: int, y: int)\\n +move(direction: str)\\n +grow()\\n +collides_with_self() bool\\n }\\n class Food {\\n -position tuple\\n +__init__(x: int, y: int)\\n +get_position() tuple\\n }\\n class Score {\\n -points int\\n +__init__()\\n +increase(points: int)\\n }\\n Game --> Snake\\n Game --> Food\\n Game --> Score\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: start_game()\\n M->>G: move_snake(direction)\\n G->>G: generate_food()\\n G->>G: update_score(points)\\n\",\"Anything UNCLEAR\":\"Please provide more details on the game mechanics and user interactions.\"}\n\n## Tasks\n{\"Required Python packages\":[\"curses==2.2.0\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Please provide more details on the game mechanics and user interactions.\"}\n\n## Legacy Code\n```Code\n\n```\n\n## Debug logs\n```text\n\n\n\n```\n\n## Bug Feedback logs\n```text\n\n```\n\n# Format example\n## Code: game.py\n```python\n## game.py\n...\n```\n\n# Instruction: Based on the context, follow \"Format example\", write code.\n\n## Code: game.py. Write code with triple quoto, based on the following attentions and context.\n1. Only One file: do your best to implement THIS ONLY ONE FILE.\n2. COMPLETE CODE: Your code will be part of the entire project, so please implement complete, reliable, reusable code snippets.\n3. Set default value: If there is any setting, ALWAYS SET A DEFAULT VALUE, ALWAYS USE STRONG TYPE AND EXPLICIT VARIABLE. AVOID circular import.\n4. Follow design: YOU MUST FOLLOW \"Data structures and interfaces\". DONT CHANGE ANY DESIGN. Do not use public member functions that do not exist in your design.\n5. CAREFULLY CHECK THAT YOU DONT MISS ANY NECESSARY CLASS/FUNCTION IN THIS FILE.\n6. Before using a external variable/module, make sure you import it first.\n7. Write out EVERY CODE DETAIL, DON'T LEAVE TODO.\n\n": "```python\n## game.py\n\nclass Snake:\n def __init__(self, x: int, y: int):\n self.body = [(x, y)]\n self.direction = 'right'\n\n def move(self, direction: str):\n if direction == 'up' and self.direction != 'down':\n self.direction = 'up'\n elif direction == 'down' and self.direction != 'up':\n self.direction = 'down'\n elif direction == 'left' and self.direction != 'right':\n self.direction = 'left'\n elif direction == 'right' and self.direction != 'left':\n self.direction = 'right'\n\n head = self.body[0]\n x, y = head\n if self.direction == 'up':\n new_head = (x, y - 1)\n elif self.direction == 'down':\n new_head = (x, y + 1)\n elif self.direction == 'left':\n new_head = (x - 1, y)\n elif self.direction == 'right':\n new_head = (x + 1, y)\n self.body.insert(0, new_head)\n\n def grow(self):\n tail = self.body[-1]\n x, y = tail\n if self.direction == 'up':\n new_tail = (x, y + 1)\n elif self.direction == 'down':\n new_tail = (x, y - 1)\n elif self.direction == 'left':\n new_tail = (x + 1, y)\n elif self.direction == 'right':\n new_tail = (x - 1, y)\n self.body.append(new_tail)\n\n def collides_with_self(self) -> bool:\n return len(self.body) != len(set(self.body))\n\nclass Food:\n def __init__(self, x: int, y: int):\n self.position = (x, y)\n\n def get_position(self) -> tuple:\n return self.position\n\nclass Score:\n def __init__(self):\n self.points = 0\n\n def increase(self, points: int):\n self.points += points\n\nclass Game:\n def __init__(self, width: int, height: int):\n self.snake = Snake(width // 2, height // 2)\n self.food = None\n self.score = Score()\n self.width = width\n self.height = height\n\n def start_game(self):\n self.generate_food()\n\n def move_snake(self, direction: str):\n self.snake.move(direction)\n if self.check_collision():\n return False\n self.check_eat()\n return True\n\n def generate_food(self):\n import random\n x = random.randint(0, self.width - 1)\n y = random.randint(0, self.height - 1)\n self.food = Food(x, y)\n\n def update_score(self, points: int):\n self.score.increase(points)\n\n def check_collision(self) -> bool:\n head = self.snake.body[0]\n if head[0] < 0 or head[0] >= self.width or head[1] < 0 or head[1] >= self.height:\n return True\n if self.snake.collides_with_self():\n return True\n return False\n\n def check_eat(self):\n if self.snake.body[0] == self.food.get_position():\n self.snake.grow()\n self.generate_food()\n self.update_score(10)\n```", - "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use Python and the curses library to create the snake game. The game logic will be implemented in a separate module, and the main.py file will handle the user interface and game loop.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -Snake snake\\n -Food food\\n -Score score\\n +__init__(width: int, height: int)\\n +start_game()\\n +move_snake(direction: str)\\n +generate_food()\\n +update_score(points: int)\\n }\\n class Snake {\\n -body list\\n -direction str\\n +__init__(x: int, y: int)\\n +move(direction: str)\\n +grow()\\n +collides_with_self() bool\\n }\\n class Food {\\n -position tuple\\n +__init__(x: int, y: int)\\n +get_position() tuple\\n }\\n class Score {\\n -points int\\n +__init__()\\n +increase(points: int)\\n }\\n Game --> Snake\\n Game --> Food\\n Game --> Score\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: start_game()\\n M->>G: move_snake(direction)\\n G->>G: generate_food()\\n G->>G: update_score(points)\\n\",\"Anything UNCLEAR\":\"Please provide more details on the game mechanics and user interactions.\"}\n\n## Tasks\n{\"Required Python packages\":[\"curses==2.2.0\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Please provide more details on the game mechanics and user interactions.\"}\n\n## Code Files\n\n\n\n## Code to be Reviewed: game.py\n```Code\n## game.py\n\nclass Snake:\n def __init__(self, x: int, y: int):\n self.body = [(x, y)]\n self.direction = 'right'\n\n def move(self, direction: str):\n if direction == 'up' and self.direction != 'down':\n self.direction = 'up'\n elif direction == 'down' and self.direction != 'up':\n self.direction = 'down'\n elif direction == 'left' and self.direction != 'right':\n self.direction = 'left'\n elif direction == 'right' and self.direction != 'left':\n self.direction = 'right'\n\n head = self.body[0]\n x, y = head\n if self.direction == 'up':\n new_head = (x, y - 1)\n elif self.direction == 'down':\n new_head = (x, y + 1)\n elif self.direction == 'left':\n new_head = (x - 1, y)\n elif self.direction == 'right':\n new_head = (x + 1, y)\n self.body.insert(0, new_head)\n\n def grow(self):\n tail = self.body[-1]\n x, y = tail\n if self.direction == 'up':\n new_tail = (x, y + 1)\n elif self.direction == 'down':\n new_tail = (x, y - 1)\n elif self.direction == 'left':\n new_tail = (x + 1, y)\n elif self.direction == 'right':\n new_tail = (x - 1, y)\n self.body.append(new_tail)\n\n def collides_with_self(self) -> bool:\n return len(self.body) != len(set(self.body))\n\nclass Food:\n def __init__(self, x: int, y: int):\n self.position = (x, y)\n\n def get_position(self) -> tuple:\n return self.position\n\nclass Score:\n def __init__(self):\n self.points = 0\n\n def increase(self, points: int):\n self.points += points\n\nclass Game:\n def __init__(self, width: int, height: int):\n self.snake = Snake(width // 2, height // 2)\n self.food = None\n self.score = Score()\n self.width = width\n self.height = height\n\n def start_game(self):\n self.generate_food()\n\n def move_snake(self, direction: str):\n self.snake.move(direction)\n if self.check_collision():\n return False\n self.check_eat()\n return True\n\n def generate_food(self):\n import random\n x = random.randint(0, self.width - 1)\n y = random.randint(0, self.height - 1)\n self.food = Food(x, y)\n\n def update_score(self, points: int):\n self.score.increase(points)\n\n def check_collision(self) -> bool:\n head = self.snake.body[0]\n if head[0] < 0 or head[0] >= self.width or head[1] < 0 or head[1] >= self.height:\n return True\n if self.snake.collides_with_self():\n return True\n return False\n\n def check_eat(self):\n if self.snake.body[0] == self.food.get_position():\n self.snake.grow()\n self.generate_food()\n self.update_score(10)\n\n```\n\n\n\n# Format example 1\n## Code Review: game.py\n1. No, we should fix the logic of class A due to ...\n2. ...\n3. ...\n4. No, function B is not implemented, ...\n5. ...\n6. ...\n\n## Actions\n1. Fix the `handle_events` method to update the game state only if a move is successful.\n ```python\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n return False\n if event.type == pygame.KEYDOWN:\n moved = False\n if event.key == pygame.K_UP:\n moved = self.game.move('UP')\n elif event.key == pygame.K_DOWN:\n moved = self.game.move('DOWN')\n elif event.key == pygame.K_LEFT:\n moved = self.game.move('LEFT')\n elif event.key == pygame.K_RIGHT:\n moved = self.game.move('RIGHT')\n if moved:\n # Update the game state only if a move was successful\n self.render()\n return True\n ```\n2. Implement function B\n\n## Code Review Result\nLBTM\n\n# Format example 2\n## Code Review: game.py\n1. Yes.\n2. Yes.\n3. Yes.\n4. Yes.\n5. Yes.\n6. Yes.\n\n## Actions\npass\n\n## Code Review Result\nLGTM\n\n\n\n# Instruction: Based on the actual code situation, follow one of the \"Format example\". Return only 1 file under review.\n\n## Code Review: Ordered List. Based on the \"Code to be Reviewed\", provide key, clear, concise, and specific answer. If any answer is no, explain how to fix it step by step.\n1. Is the code implemented as per the requirements? If not, how to achieve it? Analyse it step by step.\n2. Is the code logic completely correct? If there are errors, please indicate how to correct them.\n3. Does the existing code follow the \"Data structures and interfaces\"?\n4. Are all functions implemented? If there is no implementation, please indicate how to achieve it step by step.\n5. Have all necessary pre-dependencies been imported? If not, indicate which ones need to be imported\n6. Are methods from other files being reused correctly?\n\n## Actions: Ordered List. Things that should be done after CR, such as implementing class A and function B\n\n## Code Review Result: str. If the code doesn't have bugs, we don't need to rewrite it, so answer LGTM and stop. ONLY ANSWER LGTM/LBTM.\nLGTM/LBTM\n\n": "## Code Review: game.py\n1. Yes, the code is implemented as per the requirements. The Snake, Food, and Score classes are correctly implemented, and the Game class handles the game logic as specified.\n2. Yes, the code logic is correct. The movement, growth, collision detection, and scoring mechanisms are implemented accurately.\n3. Yes, the existing code follows the \"Data structures and interfaces\" as specified in the class diagram.\n4. Yes, all functions are implemented as required.\n5. No, the necessary pre-dependencies have not been imported. The `curses` package needs to be imported at the beginning of the file using `import curses`.\n6. Yes, methods from other files are being reused correctly.\n\n## Actions\n1. Import the necessary pre-dependency `curses` at the beginning of the file using `import curses`.\n\n## Code Review Result\nLBTM", - "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use Python and the curses library to create the snake game. The game logic will be implemented in a separate module, and the main.py file will handle the user interface and game loop.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -Snake snake\\n -Food food\\n -Score score\\n +__init__(width: int, height: int)\\n +start_game()\\n +move_snake(direction: str)\\n +generate_food()\\n +update_score(points: int)\\n }\\n class Snake {\\n -body list\\n -direction str\\n +__init__(x: int, y: int)\\n +move(direction: str)\\n +grow()\\n +collides_with_self() bool\\n }\\n class Food {\\n -position tuple\\n +__init__(x: int, y: int)\\n +get_position() tuple\\n }\\n class Score {\\n -points int\\n +__init__()\\n +increase(points: int)\\n }\\n Game --> Snake\\n Game --> Food\\n Game --> Score\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: start_game()\\n M->>G: move_snake(direction)\\n G->>G: generate_food()\\n G->>G: update_score(points)\\n\",\"Anything UNCLEAR\":\"Please provide more details on the game mechanics and user interactions.\"}\n\n## Tasks\n{\"Required Python packages\":[\"curses==2.2.0\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Please provide more details on the game mechanics and user interactions.\"}\n\n## Code Files\n\n\n\n## Code to be Reviewed: game.py\n```Code\n## game.py\n\nclass Snake:\n def __init__(self, x: int, y: int):\n self.body = [(x, y)]\n self.direction = 'right'\n\n def move(self, direction: str):\n if direction == 'up' and self.direction != 'down':\n self.direction = 'up'\n elif direction == 'down' and self.direction != 'up':\n self.direction = 'down'\n elif direction == 'left' and self.direction != 'right':\n self.direction = 'left'\n elif direction == 'right' and self.direction != 'left':\n self.direction = 'right'\n\n head = self.body[0]\n x, y = head\n if self.direction == 'up':\n new_head = (x, y - 1)\n elif self.direction == 'down':\n new_head = (x, y + 1)\n elif self.direction == 'left':\n new_head = (x - 1, y)\n elif self.direction == 'right':\n new_head = (x + 1, y)\n self.body.insert(0, new_head)\n\n def grow(self):\n tail = self.body[-1]\n x, y = tail\n if self.direction == 'up':\n new_tail = (x, y + 1)\n elif self.direction == 'down':\n new_tail = (x, y - 1)\n elif self.direction == 'left':\n new_tail = (x + 1, y)\n elif self.direction == 'right':\n new_tail = (x - 1, y)\n self.body.append(new_tail)\n\n def collides_with_self(self) -> bool:\n return len(self.body) != len(set(self.body))\n\nclass Food:\n def __init__(self, x: int, y: int):\n self.position = (x, y)\n\n def get_position(self) -> tuple:\n return self.position\n\nclass Score:\n def __init__(self):\n self.points = 0\n\n def increase(self, points: int):\n self.points += points\n\nclass Game:\n def __init__(self, width: int, height: int):\n self.snake = Snake(width // 2, height // 2)\n self.food = None\n self.score = Score()\n self.width = width\n self.height = height\n\n def start_game(self):\n self.generate_food()\n\n def move_snake(self, direction: str):\n self.snake.move(direction)\n if self.check_collision():\n return False\n self.check_eat()\n return True\n\n def generate_food(self):\n import random\n x = random.randint(0, self.width - 1)\n y = random.randint(0, self.height - 1)\n self.food = Food(x, y)\n\n def update_score(self, points: int):\n self.score.increase(points)\n\n def check_collision(self) -> bool:\n head = self.snake.body[0]\n if head[0] < 0 or head[0] >= self.width or head[1] < 0 or head[1] >= self.height:\n return True\n if self.snake.collides_with_self():\n return True\n return False\n\n def check_eat(self):\n if self.snake.body[0] == self.food.get_position():\n self.snake.grow()\n self.generate_food()\n self.update_score(10)\n\n```\n\n## Code Review: game.py\n1. Yes, the code is implemented as per the requirements. The Snake, Food, and Score classes are correctly implemented, and the Game class handles the game logic as specified.\n2. Yes, the code logic is correct. The movement, growth, collision detection, and scoring mechanisms are implemented accurately.\n3. Yes, the existing code follows the \"Data structures and interfaces\" as specified in the class diagram.\n4. Yes, all functions are implemented as required.\n5. No, the necessary pre-dependencies have not been imported. The `curses` package needs to be imported at the beginning of the file using `import curses`.\n6. Yes, methods from other files are being reused correctly.\n\n## Actions\n1. Import the necessary pre-dependency `curses` at the beginning of the file using `import curses`.\n\n## Code Review Result\nLBTM\n\n# Instruction: rewrite code based on the Code Review and Actions\n## Rewrite Code: CodeBlock. If it still has some bugs, rewrite game.py with triple quotes. Do your utmost to optimize THIS SINGLE FILE. Return all completed codes and prohibit the return of unfinished codes.\n```Code\n## game.py\n...\n```\n": "```Code\n## game.py\n\nimport curses\n\nclass Snake:\n def __init__(self, x: int, y: int):\n self.body = [(x, y)]\n self.direction = 'right'\n\n def move(self, direction: str):\n if direction == 'up' and self.direction != 'down':\n self.direction = 'up'\n elif direction == 'down' and self.direction != 'up':\n self.direction = 'down'\n elif direction == 'left' and self.direction != 'right':\n self.direction = 'left'\n elif direction == 'right' and self.direction != 'left':\n self.direction = 'right'\n\n head = self.body[0]\n x, y = head\n if self.direction == 'up':\n new_head = (x, y - 1)\n elif self.direction == 'down':\n new_head = (x, y + 1)\n elif self.direction == 'left':\n new_head = (x - 1, y)\n elif self.direction == 'right':\n new_head = (x + 1, y)\n self.body.insert(0, new_head)\n\n def grow(self):\n tail = self.body[-1]\n x, y = tail\n if self.direction == 'up':\n new_tail = (x, y + 1)\n elif self.direction == 'down':\n new_tail = (x, y - 1)\n elif self.direction == 'left':\n new_tail = (x + 1, y)\n elif self.direction == 'right':\n new_tail = (x - 1, y)\n self.body.append(new_tail)\n\n def collides_with_self(self) -> bool:\n return len(self.body) != len(set(self.body))\n\nclass Food:\n def __init__(self, x: int, y: int):\n self.position = (x, y)\n\n def get_position(self) -> tuple:\n return self.position\n\nclass Score:\n def __init__(self):\n self.points = 0\n\n def increase(self, points: int):\n self.points += points\n\nclass Game:\n def __init__(self, width: int, height: int):\n self.snake = Snake(width // 2, height // 2)\n self.food = None\n self.score = Score()\n self.width = width\n self.height = height\n\n def start_game(self):\n self.generate_food()\n\n def move_snake(self, direction: str):\n self.snake.move(direction)\n if self.check_collision():\n return False\n self.check_eat()\n return True\n\n def generate_food(self):\n import random\n x = random.randint(0, self.width - 1)\n y = random.randint(0, self.height - 1)\n self.food = Food(x, y)\n\n def update_score(self, points: int):\n self.score.increase(points)\n\n def check_collision(self) -> bool:\n head = self.snake.body[0]\n if head[0] < 0 or head[0] >= self.width or head[1] < 0 or head[1] >= self.height:\n return True\n if self.snake.collides_with_self():\n return True\n return False\n\n def check_eat(self):\n if self.snake.body[0] == self.food.get_position():\n self.snake.grow()\n self.generate_food()\n self.update_score(10)\n\n```", - "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use Python and the curses library to create the snake game. The game logic will be implemented in a separate module, and the main.py file will handle the user interface and game loop.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -Snake snake\\n -Food food\\n -Score score\\n +__init__(width: int, height: int)\\n +start_game()\\n +move_snake(direction: str)\\n +generate_food()\\n +update_score(points: int)\\n }\\n class Snake {\\n -body list\\n -direction str\\n +__init__(x: int, y: int)\\n +move(direction: str)\\n +grow()\\n +collides_with_self() bool\\n }\\n class Food {\\n -position tuple\\n +__init__(x: int, y: int)\\n +get_position() tuple\\n }\\n class Score {\\n -points int\\n +__init__()\\n +increase(points: int)\\n }\\n Game --> Snake\\n Game --> Food\\n Game --> Score\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: start_game()\\n M->>G: move_snake(direction)\\n G->>G: generate_food()\\n G->>G: update_score(points)\\n\",\"Anything UNCLEAR\":\"Please provide more details on the game mechanics and user interactions.\"}\n\n## Tasks\n{\"Required Python packages\":[\"curses==2.2.0\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Please provide more details on the game mechanics and user interactions.\"}\n\n## Code Files\n\n\n\n## Code to be Reviewed: game.py\n```Code\n## game.py\n\nimport curses\n\nclass Snake:\n def __init__(self, x: int, y: int):\n self.body = [(x, y)]\n self.direction = 'right'\n\n def move(self, direction: str):\n if direction == 'up' and self.direction != 'down':\n self.direction = 'up'\n elif direction == 'down' and self.direction != 'up':\n self.direction = 'down'\n elif direction == 'left' and self.direction != 'right':\n self.direction = 'left'\n elif direction == 'right' and self.direction != 'left':\n self.direction = 'right'\n\n head = self.body[0]\n x, y = head\n if self.direction == 'up':\n new_head = (x, y - 1)\n elif self.direction == 'down':\n new_head = (x, y + 1)\n elif self.direction == 'left':\n new_head = (x - 1, y)\n elif self.direction == 'right':\n new_head = (x + 1, y)\n self.body.insert(0, new_head)\n\n def grow(self):\n tail = self.body[-1]\n x, y = tail\n if self.direction == 'up':\n new_tail = (x, y + 1)\n elif self.direction == 'down':\n new_tail = (x, y - 1)\n elif self.direction == 'left':\n new_tail = (x + 1, y)\n elif self.direction == 'right':\n new_tail = (x - 1, y)\n self.body.append(new_tail)\n\n def collides_with_self(self) -> bool:\n return len(self.body) != len(set(self.body))\n\nclass Food:\n def __init__(self, x: int, y: int):\n self.position = (x, y)\n\n def get_position(self) -> tuple:\n return self.position\n\nclass Score:\n def __init__(self):\n self.points = 0\n\n def increase(self, points: int):\n self.points += points\n\nclass Game:\n def __init__(self, width: int, height: int):\n self.snake = Snake(width // 2, height // 2)\n self.food = None\n self.score = Score()\n self.width = width\n self.height = height\n\n def start_game(self):\n self.generate_food()\n\n def move_snake(self, direction: str):\n self.snake.move(direction)\n if self.check_collision():\n return False\n self.check_eat()\n return True\n\n def generate_food(self):\n import random\n x = random.randint(0, self.width - 1)\n y = random.randint(0, self.height - 1)\n self.food = Food(x, y)\n\n def update_score(self, points: int):\n self.score.increase(points)\n\n def check_collision(self) -> bool:\n head = self.snake.body[0]\n if head[0] < 0 or head[0] >= self.width or head[1] < 0 or head[1] >= self.height:\n return True\n if self.snake.collides_with_self():\n return True\n return False\n\n def check_eat(self):\n if self.snake.body[0] == self.food.get_position():\n self.snake.grow()\n self.generate_food()\n self.update_score(10)\n\n\n```\n\n\n\n# Format example 1\n## Code Review: game.py\n1. No, we should fix the logic of class A due to ...\n2. ...\n3. ...\n4. No, function B is not implemented, ...\n5. ...\n6. ...\n\n## Actions\n1. Fix the `handle_events` method to update the game state only if a move is successful.\n ```python\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n return False\n if event.type == pygame.KEYDOWN:\n moved = False\n if event.key == pygame.K_UP:\n moved = self.game.move('UP')\n elif event.key == pygame.K_DOWN:\n moved = self.game.move('DOWN')\n elif event.key == pygame.K_LEFT:\n moved = self.game.move('LEFT')\n elif event.key == pygame.K_RIGHT:\n moved = self.game.move('RIGHT')\n if moved:\n # Update the game state only if a move was successful\n self.render()\n return True\n ```\n2. Implement function B\n\n## Code Review Result\nLBTM\n\n# Format example 2\n## Code Review: game.py\n1. Yes.\n2. Yes.\n3. Yes.\n4. Yes.\n5. Yes.\n6. Yes.\n\n## Actions\npass\n\n## Code Review Result\nLGTM\n\n\n\n# Instruction: Based on the actual code situation, follow one of the \"Format example\". Return only 1 file under review.\n\n## Code Review: Ordered List. Based on the \"Code to be Reviewed\", provide key, clear, concise, and specific answer. If any answer is no, explain how to fix it step by step.\n1. Is the code implemented as per the requirements? If not, how to achieve it? Analyse it step by step.\n2. Is the code logic completely correct? If there are errors, please indicate how to correct them.\n3. Does the existing code follow the \"Data structures and interfaces\"?\n4. Are all functions implemented? If there is no implementation, please indicate how to achieve it step by step.\n5. Have all necessary pre-dependencies been imported? If not, indicate which ones need to be imported\n6. Are methods from other files being reused correctly?\n\n## Actions: Ordered List. Things that should be done after CR, such as implementing class A and function B\n\n## Code Review Result: str. If the code doesn't have bugs, we don't need to rewrite it, so answer LGTM and stop. ONLY ANSWER LGTM/LBTM.\nLGTM/LBTM\n\n": "## Code Review: game.py\n1. Yes, the code is implemented as per the requirements.\n2. Yes, the code logic is completely correct.\n3. Yes, the existing code follows the \"Data structures and interfaces\".\n4. Yes, all functions are implemented.\n5. Yes, all necessary pre-dependencies have been imported.\n6. Yes, methods from other files are being reused correctly.\n\n## Code Review Result\nLGTM", - "\nNOTICE\nRole: You are a professional engineer; the main goal is to write google-style, elegant, modular, easy to read and maintain code\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## Design\n{\"Implementation approach\":\"We will use Python and the curses library to create the snake game. The game logic will be implemented in a separate module, and the main.py file will handle the user interface and game loop.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -Snake snake\\n -Food food\\n -Score score\\n +__init__(width: int, height: int)\\n +start_game()\\n +move_snake(direction: str)\\n +generate_food()\\n +update_score(points: int)\\n }\\n class Snake {\\n -body list\\n -direction str\\n +__init__(x: int, y: int)\\n +move(direction: str)\\n +grow()\\n +collides_with_self() bool\\n }\\n class Food {\\n -position tuple\\n +__init__(x: int, y: int)\\n +get_position() tuple\\n }\\n class Score {\\n -points int\\n +__init__()\\n +increase(points: int)\\n }\\n Game --> Snake\\n Game --> Food\\n Game --> Score\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: start_game()\\n M->>G: move_snake(direction)\\n G->>G: generate_food()\\n G->>G: update_score(points)\\n\",\"Anything UNCLEAR\":\"Please provide more details on the game mechanics and user interactions.\"}\n\n## Tasks\n{\"Required Python packages\":[\"curses==2.2.0\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Please provide more details on the game mechanics and user interactions.\"}\n\n## Legacy Code\n```Code\n----- game.py\n## game.py\n\nimport curses\n\nclass Snake:\n def __init__(self, x: int, y: int):\n self.body = [(x, y)]\n self.direction = 'right'\n\n def move(self, direction: str):\n if direction == 'up' and self.direction != 'down':\n self.direction = 'up'\n elif direction == 'down' and self.direction != 'up':\n self.direction = 'down'\n elif direction == 'left' and self.direction != 'right':\n self.direction = 'left'\n elif direction == 'right' and self.direction != 'left':\n self.direction = 'right'\n\n head = self.body[0]\n x, y = head\n if self.direction == 'up':\n new_head = (x, y - 1)\n elif self.direction == 'down':\n new_head = (x, y + 1)\n elif self.direction == 'left':\n new_head = (x - 1, y)\n elif self.direction == 'right':\n new_head = (x + 1, y)\n self.body.insert(0, new_head)\n\n def grow(self):\n tail = self.body[-1]\n x, y = tail\n if self.direction == 'up':\n new_tail = (x, y + 1)\n elif self.direction == 'down':\n new_tail = (x, y - 1)\n elif self.direction == 'left':\n new_tail = (x + 1, y)\n elif self.direction == 'right':\n new_tail = (x - 1, y)\n self.body.append(new_tail)\n\n def collides_with_self(self) -> bool:\n return len(self.body) != len(set(self.body))\n\nclass Food:\n def __init__(self, x: int, y: int):\n self.position = (x, y)\n\n def get_position(self) -> tuple:\n return self.position\n\nclass Score:\n def __init__(self):\n self.points = 0\n\n def increase(self, points: int):\n self.points += points\n\nclass Game:\n def __init__(self, width: int, height: int):\n self.snake = Snake(width // 2, height // 2)\n self.food = None\n self.score = Score()\n self.width = width\n self.height = height\n\n def start_game(self):\n self.generate_food()\n\n def move_snake(self, direction: str):\n self.snake.move(direction)\n if self.check_collision():\n return False\n self.check_eat()\n return True\n\n def generate_food(self):\n import random\n x = random.randint(0, self.width - 1)\n y = random.randint(0, self.height - 1)\n self.food = Food(x, y)\n\n def update_score(self, points: int):\n self.score.increase(points)\n\n def check_collision(self) -> bool:\n head = self.snake.body[0]\n if head[0] < 0 or head[0] >= self.width or head[1] < 0 or head[1] >= self.height:\n return True\n if self.snake.collides_with_self():\n return True\n return False\n\n def check_eat(self):\n if self.snake.body[0] == self.food.get_position():\n self.snake.grow()\n self.generate_food()\n self.update_score(10)\n\n\n```\n\n## Debug logs\n```text\n\n\n\n```\n\n## Bug Feedback logs\n```text\n\n```\n\n# Format example\n## Code: main.py\n```python\n## main.py\n...\n```\n\n# Instruction: Based on the context, follow \"Format example\", write code.\n\n## Code: main.py. Write code with triple quoto, based on the following attentions and context.\n1. Only One file: do your best to implement THIS ONLY ONE FILE.\n2. COMPLETE CODE: Your code will be part of the entire project, so please implement complete, reliable, reusable code snippets.\n3. Set default value: If there is any setting, ALWAYS SET A DEFAULT VALUE, ALWAYS USE STRONG TYPE AND EXPLICIT VARIABLE. AVOID circular import.\n4. Follow design: YOU MUST FOLLOW \"Data structures and interfaces\". DONT CHANGE ANY DESIGN. Do not use public member functions that do not exist in your design.\n5. CAREFULLY CHECK THAT YOU DONT MISS ANY NECESSARY CLASS/FUNCTION IN THIS FILE.\n6. Before using a external variable/module, make sure you import it first.\n7. Write out EVERY CODE DETAIL, DON'T LEAVE TODO.\n\n": "```python\n## main.py\n\nfrom game import Game\n\ndef main():\n width = 20 # Set default width\n height = 20 # Set default height\n game = Game(width, height)\n game.start_game()\n\n while True:\n # Get user input for direction\n direction = input(\"Enter direction (up/down/left/right): \")\n if direction in ['up', 'down', 'left', 'right']:\n if not game.move_snake(direction):\n print(\"Game over!\")\n break\n else:\n print(\"Invalid direction!\")\n\nif __name__ == \"__main__\":\n main()\n```", - "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use Python and the curses library to create the snake game. The game logic will be implemented in a separate module, and the main.py file will handle the user interface and game loop.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -Snake snake\\n -Food food\\n -Score score\\n +__init__(width: int, height: int)\\n +start_game()\\n +move_snake(direction: str)\\n +generate_food()\\n +update_score(points: int)\\n }\\n class Snake {\\n -body list\\n -direction str\\n +__init__(x: int, y: int)\\n +move(direction: str)\\n +grow()\\n +collides_with_self() bool\\n }\\n class Food {\\n -position tuple\\n +__init__(x: int, y: int)\\n +get_position() tuple\\n }\\n class Score {\\n -points int\\n +__init__()\\n +increase(points: int)\\n }\\n Game --> Snake\\n Game --> Food\\n Game --> Score\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: start_game()\\n M->>G: move_snake(direction)\\n G->>G: generate_food()\\n G->>G: update_score(points)\\n\",\"Anything UNCLEAR\":\"Please provide more details on the game mechanics and user interactions.\"}\n\n## Tasks\n{\"Required Python packages\":[\"curses==2.2.0\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Please provide more details on the game mechanics and user interactions.\"}\n\n## Code Files\n----- game.py\n## game.py\n\nimport curses\n\nclass Snake:\n def __init__(self, x: int, y: int):\n self.body = [(x, y)]\n self.direction = 'right'\n\n def move(self, direction: str):\n if direction == 'up' and self.direction != 'down':\n self.direction = 'up'\n elif direction == 'down' and self.direction != 'up':\n self.direction = 'down'\n elif direction == 'left' and self.direction != 'right':\n self.direction = 'left'\n elif direction == 'right' and self.direction != 'left':\n self.direction = 'right'\n\n head = self.body[0]\n x, y = head\n if self.direction == 'up':\n new_head = (x, y - 1)\n elif self.direction == 'down':\n new_head = (x, y + 1)\n elif self.direction == 'left':\n new_head = (x - 1, y)\n elif self.direction == 'right':\n new_head = (x + 1, y)\n self.body.insert(0, new_head)\n\n def grow(self):\n tail = self.body[-1]\n x, y = tail\n if self.direction == 'up':\n new_tail = (x, y + 1)\n elif self.direction == 'down':\n new_tail = (x, y - 1)\n elif self.direction == 'left':\n new_tail = (x + 1, y)\n elif self.direction == 'right':\n new_tail = (x - 1, y)\n self.body.append(new_tail)\n\n def collides_with_self(self) -> bool:\n return len(self.body) != len(set(self.body))\n\nclass Food:\n def __init__(self, x: int, y: int):\n self.position = (x, y)\n\n def get_position(self) -> tuple:\n return self.position\n\nclass Score:\n def __init__(self):\n self.points = 0\n\n def increase(self, points: int):\n self.points += points\n\nclass Game:\n def __init__(self, width: int, height: int):\n self.snake = Snake(width // 2, height // 2)\n self.food = None\n self.score = Score()\n self.width = width\n self.height = height\n\n def start_game(self):\n self.generate_food()\n\n def move_snake(self, direction: str):\n self.snake.move(direction)\n if self.check_collision():\n return False\n self.check_eat()\n return True\n\n def generate_food(self):\n import random\n x = random.randint(0, self.width - 1)\n y = random.randint(0, self.height - 1)\n self.food = Food(x, y)\n\n def update_score(self, points: int):\n self.score.increase(points)\n\n def check_collision(self) -> bool:\n head = self.snake.body[0]\n if head[0] < 0 or head[0] >= self.width or head[1] < 0 or head[1] >= self.height:\n return True\n if self.snake.collides_with_self():\n return True\n return False\n\n def check_eat(self):\n if self.snake.body[0] == self.food.get_position():\n self.snake.grow()\n self.generate_food()\n self.update_score(10)\n\n\n\n\n## Code to be Reviewed: main.py\n```Code\n## main.py\n\nfrom game import Game\n\ndef main():\n width = 20 # Set default width\n height = 20 # Set default height\n game = Game(width, height)\n game.start_game()\n\n while True:\n # Get user input for direction\n direction = input(\"Enter direction (up/down/left/right): \")\n if direction in ['up', 'down', 'left', 'right']:\n if not game.move_snake(direction):\n print(\"Game over!\")\n break\n else:\n print(\"Invalid direction!\")\n\nif __name__ == \"__main__\":\n main()\n\n```\n\n\n\n# Format example 1\n## Code Review: main.py\n1. No, we should fix the logic of class A due to ...\n2. ...\n3. ...\n4. No, function B is not implemented, ...\n5. ...\n6. ...\n\n## Actions\n1. Fix the `handle_events` method to update the game state only if a move is successful.\n ```python\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n return False\n if event.type == pygame.KEYDOWN:\n moved = False\n if event.key == pygame.K_UP:\n moved = self.game.move('UP')\n elif event.key == pygame.K_DOWN:\n moved = self.game.move('DOWN')\n elif event.key == pygame.K_LEFT:\n moved = self.game.move('LEFT')\n elif event.key == pygame.K_RIGHT:\n moved = self.game.move('RIGHT')\n if moved:\n # Update the game state only if a move was successful\n self.render()\n return True\n ```\n2. Implement function B\n\n## Code Review Result\nLBTM\n\n# Format example 2\n## Code Review: main.py\n1. Yes.\n2. Yes.\n3. Yes.\n4. Yes.\n5. Yes.\n6. Yes.\n\n## Actions\npass\n\n## Code Review Result\nLGTM\n\n\n\n# Instruction: Based on the actual code situation, follow one of the \"Format example\". Return only 1 file under review.\n\n## Code Review: Ordered List. Based on the \"Code to be Reviewed\", provide key, clear, concise, and specific answer. If any answer is no, explain how to fix it step by step.\n1. Is the code implemented as per the requirements? If not, how to achieve it? Analyse it step by step.\n2. Is the code logic completely correct? If there are errors, please indicate how to correct them.\n3. Does the existing code follow the \"Data structures and interfaces\"?\n4. Are all functions implemented? If there is no implementation, please indicate how to achieve it step by step.\n5. Have all necessary pre-dependencies been imported? If not, indicate which ones need to be imported\n6. Are methods from other files being reused correctly?\n\n## Actions: Ordered List. Things that should be done after CR, such as implementing class A and function B\n\n## Code Review Result: str. If the code doesn't have bugs, we don't need to rewrite it, so answer LGTM and stop. ONLY ANSWER LGTM/LBTM.\nLGTM/LBTM\n\n": "## Code Review: main.py\n1. The code is implemented as per the requirements. The main function initializes the game and handles user input for the snake's direction.\n2. The code logic is correct. It correctly handles user input and updates the game state based on the snake's movement.\n3. The existing code follows the \"Data structures and interfaces\" as defined in the class diagram.\n4. All necessary functions are implemented in the code.\n5. The necessary pre-dependencies have been imported. The required Python package \"curses==2.2.0\" has been imported.\n6. The methods from the \"game.py\" file are being reused correctly.\n\n## Actions\npass\n\n## Code Review Result\nLGTM", + "\n## context\n{\"Implementation approach\":\"We will use Python and the curses library to create the snake game. The game logic will be implemented in a separate module, and the main.py file will handle the user interface and game loop.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -Snake snake\\n -Food food\\n -Score score\\n +__init__(width: int, height: int)\\n +start_game()\\n +move_snake(direction: str)\\n +generate_food()\\n +update_score(points: int)\\n }\\n class Snake {\\n -body list\\n -direction str\\n +__init__(x: int, y: int)\\n +move(direction: str)\\n +grow()\\n +collides_with_self() bool\\n }\\n class Food {\\n -position tuple\\n +__init__(x: int, y: int)\\n +get_position() tuple\\n }\\n class Score {\\n -points int\\n +__init__()\\n +increase(points: int)\\n }\\n Game --> Snake\\n Game --> Food\\n Game --> Score\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: start_game()\\n M->>G: move_snake(direction)\\n G->>G: generate_food()\\n G->>G: update_score(points)\\n\",\"Anything UNCLEAR\":\"Please provide more details on the game mechanics and user interactions.\"}\n\n-----\n\n## format example\n[CONTENT]\n{\n \"Required packages\": [\n \"flask==1.1.2\",\n \"bcrypt==3.2.0\"\n ],\n \"Required Other language third-party packages\": [\n \"No third-party dependencies required\"\n ],\n \"Logic Analysis\": [\n [\n \"game.py\",\n \"Contains Game class and ... functions\"\n ],\n [\n \"main.py\",\n \"Contains main function, from game import Game\"\n ]\n ],\n \"Task list\": [\n \"game.py\",\n \"main.py\"\n ],\n \"Full API spec\": \"openapi: 3.0.0 ...\",\n \"Shared Knowledge\": \"'game.py' contains functions shared across the project.\",\n \"Anything UNCLEAR\": \"Clarification needed on how to start and initialize third-party libraries.\"\n}\n[/CONTENT]\n\n## nodes: \": # \"\n- Required packages: typing.List[str] # Provide Required packages in requirements.txt format.\n- Required Other language third-party packages: typing.List[str] # List down the required packages for languages other than Python.\n- Logic Analysis: typing.List[typing.List[str]] # Provide a list of files with the classes/methods/functions to be implemented, including dependency analysis and imports.\n- Task list: typing.List[str] # Break down the tasks into a list of filenames, prioritized by dependency order.\n- Full API spec: # Describe all APIs using OpenAPI 3.0 spec that may be used by both frontend and backend. If front-end and back-end communication is not required, leave it blank.\n- Shared Knowledge: # Detail any shared knowledge, like common utility functions or configuration variables.\n- Anything UNCLEAR: # Mention any unclear aspects in the project management context and try to clarify them.\n\n\n## constraint\nLanguage: Please use the same language as Human INPUT.\nFormat: output wrapped inside [CONTENT][/CONTENT] like format example, nothing else.\n\n## action\nFollow instructions of nodes, generate output and make sure it follows the format example.\n": "[CONTENT]\n{\n \"Required packages\": [\n \"curses==2.2.0\"\n ],\n \"Required Other language third-party packages\": [\n \"No third-party dependencies required\"\n ],\n \"Logic Analysis\": [\n [\n \"game.py\",\n \"Contains Game class and ... functions\"\n ],\n [\n \"main.py\",\n \"Contains main function, from game import Game\"\n ]\n ],\n \"Task list\": [\n \"game.py\",\n \"main.py\"\n ],\n \"Full API spec\": \"\",\n \"Shared Knowledge\": \"'game.py' contains functions shared across the project.\",\n \"Anything UNCLEAR\": \"Please provide more details on the game mechanics and user interactions.\"\n}\n[/CONTENT]", + "\nNOTICE\nRole: You are a professional engineer; the main goal is to write google-style, elegant, modular, easy to read and maintain code\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## Design\n{\"Implementation approach\":\"We will use Python and the curses library to create the snake game. The game logic will be implemented in a separate module, and the main.py file will handle the user interface and game loop.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -Snake snake\\n -Food food\\n -Score score\\n +__init__(width: int, height: int)\\n +start_game()\\n +move_snake(direction: str)\\n +generate_food()\\n +update_score(points: int)\\n }\\n class Snake {\\n -body list\\n -direction str\\n +__init__(x: int, y: int)\\n +move(direction: str)\\n +grow()\\n +collides_with_self() bool\\n }\\n class Food {\\n -position tuple\\n +__init__(x: int, y: int)\\n +get_position() tuple\\n }\\n class Score {\\n -points int\\n +__init__()\\n +increase(points: int)\\n }\\n Game --> Snake\\n Game --> Food\\n Game --> Score\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: start_game()\\n M->>G: move_snake(direction)\\n G->>G: generate_food()\\n G->>G: update_score(points)\\n\",\"Anything UNCLEAR\":\"Please provide more details on the game mechanics and user interactions.\"}\n\n## Tasks\n{\"Required packages\":[\"curses==2.2.0\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Please provide more details on the game mechanics and user interactions.\"}\n\n## Legacy Code\n```Code\n\n```\n\n## Debug logs\n```text\n\n\n\n```\n\n## Bug Feedback logs\n```text\n\n```\n\n# Format example\n## Code: game.py\n```python\n## game.py\n...\n```\n\n# Instruction: Based on the context, follow \"Format example\", write code.\n\n## Code: game.py. Write code with triple quoto, based on the following attentions and context.\n1. Only One file: do your best to implement THIS ONLY ONE FILE.\n2. COMPLETE CODE: Your code will be part of the entire project, so please implement complete, reliable, reusable code snippets.\n3. Set default value: If there is any setting, ALWAYS SET A DEFAULT VALUE, ALWAYS USE STRONG TYPE AND EXPLICIT VARIABLE. AVOID circular import.\n4. Follow design: YOU MUST FOLLOW \"Data structures and interfaces\". DONT CHANGE ANY DESIGN. Do not use public member functions that do not exist in your design.\n5. CAREFULLY CHECK THAT YOU DONT MISS ANY NECESSARY CLASS/FUNCTION IN THIS FILE.\n6. Before using a external variable/module, make sure you import it first.\n7. Write out EVERY CODE DETAIL, DON'T LEAVE TODO.\n\n": "```python\n## game.py\n\nclass Snake:\n def __init__(self, x: int, y: int):\n self.body = [(x, y)]\n self.direction = 'right'\n\n def move(self, direction: str):\n if direction == 'up' and self.direction != 'down':\n self.direction = 'up'\n elif direction == 'down' and self.direction != 'up':\n self.direction = 'down'\n elif direction == 'left' and self.direction != 'right':\n self.direction = 'left'\n elif direction == 'right' and self.direction != 'left':\n self.direction = 'right'\n\n head = self.body[0]\n x, y = head\n if self.direction == 'up':\n new_head = (x, y - 1)\n elif self.direction == 'down':\n new_head = (x, y + 1)\n elif self.direction == 'left':\n new_head = (x - 1, y)\n elif self.direction == 'right':\n new_head = (x + 1, y)\n self.body.insert(0, new_head)\n\n def grow(self):\n tail = self.body[-1]\n x, y = tail\n if self.direction == 'up':\n new_tail = (x, y + 1)\n elif self.direction == 'down':\n new_tail = (x, y - 1)\n elif self.direction == 'left':\n new_tail = (x + 1, y)\n elif self.direction == 'right':\n new_tail = (x - 1, y)\n self.body.append(new_tail)\n\n def collides_with_self(self) -> bool:\n return len(self.body) != len(set(self.body))\n\nclass Food:\n def __init__(self, x: int, y: int):\n self.position = (x, y)\n\n def get_position(self) -> tuple:\n return self.position\n\nclass Score:\n def __init__(self):\n self.points = 0\n\n def increase(self, points: int):\n self.points += points\n\nclass Game:\n def __init__(self, width: int, height: int):\n self.snake = Snake(width // 2, height // 2)\n self.food = None\n self.score = Score()\n self.width = width\n self.height = height\n\n def start_game(self):\n self.generate_food()\n\n def move_snake(self, direction: str):\n self.snake.move(direction)\n if self.check_collision():\n return False\n self.check_eat()\n return True\n\n def generate_food(self):\n import random\n x = random.randint(0, self.width - 1)\n y = random.randint(0, self.height - 1)\n self.food = Food(x, y)\n\n def update_score(self, points: int):\n self.score.increase(points)\n\n def check_collision(self) -> bool:\n head = self.snake.body[0]\n if head[0] < 0 or head[0] >= self.width or head[1] < 0 or head[1] >= self.height:\n return True\n if self.snake.collides_with_self():\n return True\n return False\n\n def check_eat(self):\n if self.snake.body[0] == self.food.get_position():\n self.snake.grow()\n self.generate_food()\n self.update_score(10)\n```", + "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use Python and the curses library to create the snake game. The game logic will be implemented in a separate module, and the main.py file will handle the user interface and game loop.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -Snake snake\\n -Food food\\n -Score score\\n +__init__(width: int, height: int)\\n +start_game()\\n +move_snake(direction: str)\\n +generate_food()\\n +update_score(points: int)\\n }\\n class Snake {\\n -body list\\n -direction str\\n +__init__(x: int, y: int)\\n +move(direction: str)\\n +grow()\\n +collides_with_self() bool\\n }\\n class Food {\\n -position tuple\\n +__init__(x: int, y: int)\\n +get_position() tuple\\n }\\n class Score {\\n -points int\\n +__init__()\\n +increase(points: int)\\n }\\n Game --> Snake\\n Game --> Food\\n Game --> Score\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: start_game()\\n M->>G: move_snake(direction)\\n G->>G: generate_food()\\n G->>G: update_score(points)\\n\",\"Anything UNCLEAR\":\"Please provide more details on the game mechanics and user interactions.\"}\n\n## Tasks\n{\"Required packages\":[\"curses==2.2.0\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Please provide more details on the game mechanics and user interactions.\"}\n\n## Code Files\n\n\n\n## Code to be Reviewed: game.py\n```Code\n## game.py\n\nclass Snake:\n def __init__(self, x: int, y: int):\n self.body = [(x, y)]\n self.direction = 'right'\n\n def move(self, direction: str):\n if direction == 'up' and self.direction != 'down':\n self.direction = 'up'\n elif direction == 'down' and self.direction != 'up':\n self.direction = 'down'\n elif direction == 'left' and self.direction != 'right':\n self.direction = 'left'\n elif direction == 'right' and self.direction != 'left':\n self.direction = 'right'\n\n head = self.body[0]\n x, y = head\n if self.direction == 'up':\n new_head = (x, y - 1)\n elif self.direction == 'down':\n new_head = (x, y + 1)\n elif self.direction == 'left':\n new_head = (x - 1, y)\n elif self.direction == 'right':\n new_head = (x + 1, y)\n self.body.insert(0, new_head)\n\n def grow(self):\n tail = self.body[-1]\n x, y = tail\n if self.direction == 'up':\n new_tail = (x, y + 1)\n elif self.direction == 'down':\n new_tail = (x, y - 1)\n elif self.direction == 'left':\n new_tail = (x + 1, y)\n elif self.direction == 'right':\n new_tail = (x - 1, y)\n self.body.append(new_tail)\n\n def collides_with_self(self) -> bool:\n return len(self.body) != len(set(self.body))\n\nclass Food:\n def __init__(self, x: int, y: int):\n self.position = (x, y)\n\n def get_position(self) -> tuple:\n return self.position\n\nclass Score:\n def __init__(self):\n self.points = 0\n\n def increase(self, points: int):\n self.points += points\n\nclass Game:\n def __init__(self, width: int, height: int):\n self.snake = Snake(width // 2, height // 2)\n self.food = None\n self.score = Score()\n self.width = width\n self.height = height\n\n def start_game(self):\n self.generate_food()\n\n def move_snake(self, direction: str):\n self.snake.move(direction)\n if self.check_collision():\n return False\n self.check_eat()\n return True\n\n def generate_food(self):\n import random\n x = random.randint(0, self.width - 1)\n y = random.randint(0, self.height - 1)\n self.food = Food(x, y)\n\n def update_score(self, points: int):\n self.score.increase(points)\n\n def check_collision(self) -> bool:\n head = self.snake.body[0]\n if head[0] < 0 or head[0] >= self.width or head[1] < 0 or head[1] >= self.height:\n return True\n if self.snake.collides_with_self():\n return True\n return False\n\n def check_eat(self):\n if self.snake.body[0] == self.food.get_position():\n self.snake.grow()\n self.generate_food()\n self.update_score(10)\n\n```\n\n\n\n# Format example 1\n## Code Review: game.py\n1. No, we should fix the logic of class A due to ...\n2. ...\n3. ...\n4. No, function B is not implemented, ...\n5. ...\n6. ...\n\n## Actions\n1. Fix the `handle_events` method to update the game state only if a move is successful.\n ```python\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n return False\n if event.type == pygame.KEYDOWN:\n moved = False\n if event.key == pygame.K_UP:\n moved = self.game.move('UP')\n elif event.key == pygame.K_DOWN:\n moved = self.game.move('DOWN')\n elif event.key == pygame.K_LEFT:\n moved = self.game.move('LEFT')\n elif event.key == pygame.K_RIGHT:\n moved = self.game.move('RIGHT')\n if moved:\n # Update the game state only if a move was successful\n self.render()\n return True\n ```\n2. Implement function B\n\n## Code Review Result\nLBTM\n\n# Format example 2\n## Code Review: game.py\n1. Yes.\n2. Yes.\n3. Yes.\n4. Yes.\n5. Yes.\n6. Yes.\n\n## Actions\npass\n\n## Code Review Result\nLGTM\n\n\n\n# Instruction: Based on the actual code situation, follow one of the \"Format example\". Return only 1 file under review.\n\n## Code Review: Ordered List. Based on the \"Code to be Reviewed\", provide key, clear, concise, and specific answer. If any answer is no, explain how to fix it step by step.\n1. Is the code implemented as per the requirements? If not, how to achieve it? Analyse it step by step.\n2. Is the code logic completely correct? If there are errors, please indicate how to correct them.\n3. Does the existing code follow the \"Data structures and interfaces\"?\n4. Are all functions implemented? If there is no implementation, please indicate how to achieve it step by step.\n5. Have all necessary pre-dependencies been imported? If not, indicate which ones need to be imported\n6. Are methods from other files being reused correctly?\n\n## Actions: Ordered List. Things that should be done after CR, such as implementing class A and function B\n\n## Code Review Result: str. If the code doesn't have bugs, we don't need to rewrite it, so answer LGTM and stop. ONLY ANSWER LGTM/LBTM.\nLGTM/LBTM\n\n": "## Code Review: game.py\n1. Yes, the code is implemented as per the requirements. The Snake, Food, and Score classes are correctly implemented, and the Game class handles the game logic as specified.\n2. Yes, the code logic is correct. The movement, growth, collision detection, and scoring mechanisms are implemented accurately.\n3. Yes, the existing code follows the \"Data structures and interfaces\" as specified in the class diagram.\n4. Yes, all functions are implemented as required.\n5. No, the necessary pre-dependencies have not been imported. The `curses` package needs to be imported at the beginning of the file using `import curses`.\n6. Yes, methods from other files are being reused correctly.\n\n## Actions\n1. Import the necessary pre-dependency `curses` at the beginning of the file using `import curses`.\n\n## Code Review Result\nLBTM", + "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use Python and the curses library to create the snake game. The game logic will be implemented in a separate module, and the main.py file will handle the user interface and game loop.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -Snake snake\\n -Food food\\n -Score score\\n +__init__(width: int, height: int)\\n +start_game()\\n +move_snake(direction: str)\\n +generate_food()\\n +update_score(points: int)\\n }\\n class Snake {\\n -body list\\n -direction str\\n +__init__(x: int, y: int)\\n +move(direction: str)\\n +grow()\\n +collides_with_self() bool\\n }\\n class Food {\\n -position tuple\\n +__init__(x: int, y: int)\\n +get_position() tuple\\n }\\n class Score {\\n -points int\\n +__init__()\\n +increase(points: int)\\n }\\n Game --> Snake\\n Game --> Food\\n Game --> Score\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: start_game()\\n M->>G: move_snake(direction)\\n G->>G: generate_food()\\n G->>G: update_score(points)\\n\",\"Anything UNCLEAR\":\"Please provide more details on the game mechanics and user interactions.\"}\n\n## Tasks\n{\"Required packages\":[\"curses==2.2.0\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Please provide more details on the game mechanics and user interactions.\"}\n\n## Code Files\n\n\n\n## Code to be Reviewed: game.py\n```Code\n## game.py\n\nclass Snake:\n def __init__(self, x: int, y: int):\n self.body = [(x, y)]\n self.direction = 'right'\n\n def move(self, direction: str):\n if direction == 'up' and self.direction != 'down':\n self.direction = 'up'\n elif direction == 'down' and self.direction != 'up':\n self.direction = 'down'\n elif direction == 'left' and self.direction != 'right':\n self.direction = 'left'\n elif direction == 'right' and self.direction != 'left':\n self.direction = 'right'\n\n head = self.body[0]\n x, y = head\n if self.direction == 'up':\n new_head = (x, y - 1)\n elif self.direction == 'down':\n new_head = (x, y + 1)\n elif self.direction == 'left':\n new_head = (x - 1, y)\n elif self.direction == 'right':\n new_head = (x + 1, y)\n self.body.insert(0, new_head)\n\n def grow(self):\n tail = self.body[-1]\n x, y = tail\n if self.direction == 'up':\n new_tail = (x, y + 1)\n elif self.direction == 'down':\n new_tail = (x, y - 1)\n elif self.direction == 'left':\n new_tail = (x + 1, y)\n elif self.direction == 'right':\n new_tail = (x - 1, y)\n self.body.append(new_tail)\n\n def collides_with_self(self) -> bool:\n return len(self.body) != len(set(self.body))\n\nclass Food:\n def __init__(self, x: int, y: int):\n self.position = (x, y)\n\n def get_position(self) -> tuple:\n return self.position\n\nclass Score:\n def __init__(self):\n self.points = 0\n\n def increase(self, points: int):\n self.points += points\n\nclass Game:\n def __init__(self, width: int, height: int):\n self.snake = Snake(width // 2, height // 2)\n self.food = None\n self.score = Score()\n self.width = width\n self.height = height\n\n def start_game(self):\n self.generate_food()\n\n def move_snake(self, direction: str):\n self.snake.move(direction)\n if self.check_collision():\n return False\n self.check_eat()\n return True\n\n def generate_food(self):\n import random\n x = random.randint(0, self.width - 1)\n y = random.randint(0, self.height - 1)\n self.food = Food(x, y)\n\n def update_score(self, points: int):\n self.score.increase(points)\n\n def check_collision(self) -> bool:\n head = self.snake.body[0]\n if head[0] < 0 or head[0] >= self.width or head[1] < 0 or head[1] >= self.height:\n return True\n if self.snake.collides_with_self():\n return True\n return False\n\n def check_eat(self):\n if self.snake.body[0] == self.food.get_position():\n self.snake.grow()\n self.generate_food()\n self.update_score(10)\n\n```\n\n## Code Review: game.py\n1. Yes, the code is implemented as per the requirements. The Snake, Food, and Score classes are correctly implemented, and the Game class handles the game logic as specified.\n2. Yes, the code logic is correct. The movement, growth, collision detection, and scoring mechanisms are implemented accurately.\n3. Yes, the existing code follows the \"Data structures and interfaces\" as specified in the class diagram.\n4. Yes, all functions are implemented as required.\n5. No, the necessary pre-dependencies have not been imported. The `curses` package needs to be imported at the beginning of the file using `import curses`.\n6. Yes, methods from other files are being reused correctly.\n\n## Actions\n1. Import the necessary pre-dependency `curses` at the beginning of the file using `import curses`.\n\n## Code Review Result\nLBTM\n\n# Instruction: rewrite code based on the Code Review and Actions\n## Rewrite Code: CodeBlock. If it still has some bugs, rewrite game.py with triple quotes. Do your utmost to optimize THIS SINGLE FILE. Return all completed codes and prohibit the return of unfinished codes.\n```Code\n## game.py\n...\n```\n": "```Code\n## game.py\n\nimport curses\n\nclass Snake:\n def __init__(self, x: int, y: int):\n self.body = [(x, y)]\n self.direction = 'right'\n\n def move(self, direction: str):\n if direction == 'up' and self.direction != 'down':\n self.direction = 'up'\n elif direction == 'down' and self.direction != 'up':\n self.direction = 'down'\n elif direction == 'left' and self.direction != 'right':\n self.direction = 'left'\n elif direction == 'right' and self.direction != 'left':\n self.direction = 'right'\n\n head = self.body[0]\n x, y = head\n if self.direction == 'up':\n new_head = (x, y - 1)\n elif self.direction == 'down':\n new_head = (x, y + 1)\n elif self.direction == 'left':\n new_head = (x - 1, y)\n elif self.direction == 'right':\n new_head = (x + 1, y)\n self.body.insert(0, new_head)\n\n def grow(self):\n tail = self.body[-1]\n x, y = tail\n if self.direction == 'up':\n new_tail = (x, y + 1)\n elif self.direction == 'down':\n new_tail = (x, y - 1)\n elif self.direction == 'left':\n new_tail = (x + 1, y)\n elif self.direction == 'right':\n new_tail = (x - 1, y)\n self.body.append(new_tail)\n\n def collides_with_self(self) -> bool:\n return len(self.body) != len(set(self.body))\n\nclass Food:\n def __init__(self, x: int, y: int):\n self.position = (x, y)\n\n def get_position(self) -> tuple:\n return self.position\n\nclass Score:\n def __init__(self):\n self.points = 0\n\n def increase(self, points: int):\n self.points += points\n\nclass Game:\n def __init__(self, width: int, height: int):\n self.snake = Snake(width // 2, height // 2)\n self.food = None\n self.score = Score()\n self.width = width\n self.height = height\n\n def start_game(self):\n self.generate_food()\n\n def move_snake(self, direction: str):\n self.snake.move(direction)\n if self.check_collision():\n return False\n self.check_eat()\n return True\n\n def generate_food(self):\n import random\n x = random.randint(0, self.width - 1)\n y = random.randint(0, self.height - 1)\n self.food = Food(x, y)\n\n def update_score(self, points: int):\n self.score.increase(points)\n\n def check_collision(self) -> bool:\n head = self.snake.body[0]\n if head[0] < 0 or head[0] >= self.width or head[1] < 0 or head[1] >= self.height:\n return True\n if self.snake.collides_with_self():\n return True\n return False\n\n def check_eat(self):\n if self.snake.body[0] == self.food.get_position():\n self.snake.grow()\n self.generate_food()\n self.update_score(10)\n\n```", + "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use Python and the curses library to create the snake game. The game logic will be implemented in a separate module, and the main.py file will handle the user interface and game loop.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -Snake snake\\n -Food food\\n -Score score\\n +__init__(width: int, height: int)\\n +start_game()\\n +move_snake(direction: str)\\n +generate_food()\\n +update_score(points: int)\\n }\\n class Snake {\\n -body list\\n -direction str\\n +__init__(x: int, y: int)\\n +move(direction: str)\\n +grow()\\n +collides_with_self() bool\\n }\\n class Food {\\n -position tuple\\n +__init__(x: int, y: int)\\n +get_position() tuple\\n }\\n class Score {\\n -points int\\n +__init__()\\n +increase(points: int)\\n }\\n Game --> Snake\\n Game --> Food\\n Game --> Score\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: start_game()\\n M->>G: move_snake(direction)\\n G->>G: generate_food()\\n G->>G: update_score(points)\\n\",\"Anything UNCLEAR\":\"Please provide more details on the game mechanics and user interactions.\"}\n\n## Tasks\n{\"Required packages\":[\"curses==2.2.0\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Please provide more details on the game mechanics and user interactions.\"}\n\n## Code Files\n\n\n\n## Code to be Reviewed: game.py\n```Code\n## game.py\n\nimport curses\n\nclass Snake:\n def __init__(self, x: int, y: int):\n self.body = [(x, y)]\n self.direction = 'right'\n\n def move(self, direction: str):\n if direction == 'up' and self.direction != 'down':\n self.direction = 'up'\n elif direction == 'down' and self.direction != 'up':\n self.direction = 'down'\n elif direction == 'left' and self.direction != 'right':\n self.direction = 'left'\n elif direction == 'right' and self.direction != 'left':\n self.direction = 'right'\n\n head = self.body[0]\n x, y = head\n if self.direction == 'up':\n new_head = (x, y - 1)\n elif self.direction == 'down':\n new_head = (x, y + 1)\n elif self.direction == 'left':\n new_head = (x - 1, y)\n elif self.direction == 'right':\n new_head = (x + 1, y)\n self.body.insert(0, new_head)\n\n def grow(self):\n tail = self.body[-1]\n x, y = tail\n if self.direction == 'up':\n new_tail = (x, y + 1)\n elif self.direction == 'down':\n new_tail = (x, y - 1)\n elif self.direction == 'left':\n new_tail = (x + 1, y)\n elif self.direction == 'right':\n new_tail = (x - 1, y)\n self.body.append(new_tail)\n\n def collides_with_self(self) -> bool:\n return len(self.body) != len(set(self.body))\n\nclass Food:\n def __init__(self, x: int, y: int):\n self.position = (x, y)\n\n def get_position(self) -> tuple:\n return self.position\n\nclass Score:\n def __init__(self):\n self.points = 0\n\n def increase(self, points: int):\n self.points += points\n\nclass Game:\n def __init__(self, width: int, height: int):\n self.snake = Snake(width // 2, height // 2)\n self.food = None\n self.score = Score()\n self.width = width\n self.height = height\n\n def start_game(self):\n self.generate_food()\n\n def move_snake(self, direction: str):\n self.snake.move(direction)\n if self.check_collision():\n return False\n self.check_eat()\n return True\n\n def generate_food(self):\n import random\n x = random.randint(0, self.width - 1)\n y = random.randint(0, self.height - 1)\n self.food = Food(x, y)\n\n def update_score(self, points: int):\n self.score.increase(points)\n\n def check_collision(self) -> bool:\n head = self.snake.body[0]\n if head[0] < 0 or head[0] >= self.width or head[1] < 0 or head[1] >= self.height:\n return True\n if self.snake.collides_with_self():\n return True\n return False\n\n def check_eat(self):\n if self.snake.body[0] == self.food.get_position():\n self.snake.grow()\n self.generate_food()\n self.update_score(10)\n\n\n```\n\n\n\n# Format example 1\n## Code Review: game.py\n1. No, we should fix the logic of class A due to ...\n2. ...\n3. ...\n4. No, function B is not implemented, ...\n5. ...\n6. ...\n\n## Actions\n1. Fix the `handle_events` method to update the game state only if a move is successful.\n ```python\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n return False\n if event.type == pygame.KEYDOWN:\n moved = False\n if event.key == pygame.K_UP:\n moved = self.game.move('UP')\n elif event.key == pygame.K_DOWN:\n moved = self.game.move('DOWN')\n elif event.key == pygame.K_LEFT:\n moved = self.game.move('LEFT')\n elif event.key == pygame.K_RIGHT:\n moved = self.game.move('RIGHT')\n if moved:\n # Update the game state only if a move was successful\n self.render()\n return True\n ```\n2. Implement function B\n\n## Code Review Result\nLBTM\n\n# Format example 2\n## Code Review: game.py\n1. Yes.\n2. Yes.\n3. Yes.\n4. Yes.\n5. Yes.\n6. Yes.\n\n## Actions\npass\n\n## Code Review Result\nLGTM\n\n\n\n# Instruction: Based on the actual code situation, follow one of the \"Format example\". Return only 1 file under review.\n\n## Code Review: Ordered List. Based on the \"Code to be Reviewed\", provide key, clear, concise, and specific answer. If any answer is no, explain how to fix it step by step.\n1. Is the code implemented as per the requirements? If not, how to achieve it? Analyse it step by step.\n2. Is the code logic completely correct? If there are errors, please indicate how to correct them.\n3. Does the existing code follow the \"Data structures and interfaces\"?\n4. Are all functions implemented? If there is no implementation, please indicate how to achieve it step by step.\n5. Have all necessary pre-dependencies been imported? If not, indicate which ones need to be imported\n6. Are methods from other files being reused correctly?\n\n## Actions: Ordered List. Things that should be done after CR, such as implementing class A and function B\n\n## Code Review Result: str. If the code doesn't have bugs, we don't need to rewrite it, so answer LGTM and stop. ONLY ANSWER LGTM/LBTM.\nLGTM/LBTM\n\n": "## Code Review: game.py\n1. Yes, the code is implemented as per the requirements.\n2. Yes, the code logic is completely correct.\n3. Yes, the existing code follows the \"Data structures and interfaces\".\n4. Yes, all functions are implemented.\n5. Yes, all necessary pre-dependencies have been imported.\n6. Yes, methods from other files are being reused correctly.\n\n## Code Review Result\nLGTM", + "\nNOTICE\nRole: You are a professional engineer; the main goal is to write google-style, elegant, modular, easy to read and maintain code\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## Design\n{\"Implementation approach\":\"We will use Python and the curses library to create the snake game. The game logic will be implemented in a separate module, and the main.py file will handle the user interface and game loop.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -Snake snake\\n -Food food\\n -Score score\\n +__init__(width: int, height: int)\\n +start_game()\\n +move_snake(direction: str)\\n +generate_food()\\n +update_score(points: int)\\n }\\n class Snake {\\n -body list\\n -direction str\\n +__init__(x: int, y: int)\\n +move(direction: str)\\n +grow()\\n +collides_with_self() bool\\n }\\n class Food {\\n -position tuple\\n +__init__(x: int, y: int)\\n +get_position() tuple\\n }\\n class Score {\\n -points int\\n +__init__()\\n +increase(points: int)\\n }\\n Game --> Snake\\n Game --> Food\\n Game --> Score\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: start_game()\\n M->>G: move_snake(direction)\\n G->>G: generate_food()\\n G->>G: update_score(points)\\n\",\"Anything UNCLEAR\":\"Please provide more details on the game mechanics and user interactions.\"}\n\n## Tasks\n{\"Required packages\":[\"curses==2.2.0\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Please provide more details on the game mechanics and user interactions.\"}\n\n## Legacy Code\n```Code\n----- game.py\n## game.py\n\nimport curses\n\nclass Snake:\n def __init__(self, x: int, y: int):\n self.body = [(x, y)]\n self.direction = 'right'\n\n def move(self, direction: str):\n if direction == 'up' and self.direction != 'down':\n self.direction = 'up'\n elif direction == 'down' and self.direction != 'up':\n self.direction = 'down'\n elif direction == 'left' and self.direction != 'right':\n self.direction = 'left'\n elif direction == 'right' and self.direction != 'left':\n self.direction = 'right'\n\n head = self.body[0]\n x, y = head\n if self.direction == 'up':\n new_head = (x, y - 1)\n elif self.direction == 'down':\n new_head = (x, y + 1)\n elif self.direction == 'left':\n new_head = (x - 1, y)\n elif self.direction == 'right':\n new_head = (x + 1, y)\n self.body.insert(0, new_head)\n\n def grow(self):\n tail = self.body[-1]\n x, y = tail\n if self.direction == 'up':\n new_tail = (x, y + 1)\n elif self.direction == 'down':\n new_tail = (x, y - 1)\n elif self.direction == 'left':\n new_tail = (x + 1, y)\n elif self.direction == 'right':\n new_tail = (x - 1, y)\n self.body.append(new_tail)\n\n def collides_with_self(self) -> bool:\n return len(self.body) != len(set(self.body))\n\nclass Food:\n def __init__(self, x: int, y: int):\n self.position = (x, y)\n\n def get_position(self) -> tuple:\n return self.position\n\nclass Score:\n def __init__(self):\n self.points = 0\n\n def increase(self, points: int):\n self.points += points\n\nclass Game:\n def __init__(self, width: int, height: int):\n self.snake = Snake(width // 2, height // 2)\n self.food = None\n self.score = Score()\n self.width = width\n self.height = height\n\n def start_game(self):\n self.generate_food()\n\n def move_snake(self, direction: str):\n self.snake.move(direction)\n if self.check_collision():\n return False\n self.check_eat()\n return True\n\n def generate_food(self):\n import random\n x = random.randint(0, self.width - 1)\n y = random.randint(0, self.height - 1)\n self.food = Food(x, y)\n\n def update_score(self, points: int):\n self.score.increase(points)\n\n def check_collision(self) -> bool:\n head = self.snake.body[0]\n if head[0] < 0 or head[0] >= self.width or head[1] < 0 or head[1] >= self.height:\n return True\n if self.snake.collides_with_self():\n return True\n return False\n\n def check_eat(self):\n if self.snake.body[0] == self.food.get_position():\n self.snake.grow()\n self.generate_food()\n self.update_score(10)\n\n\n```\n\n## Debug logs\n```text\n\n\n\n```\n\n## Bug Feedback logs\n```text\n\n```\n\n# Format example\n## Code: main.py\n```python\n## main.py\n...\n```\n\n# Instruction: Based on the context, follow \"Format example\", write code.\n\n## Code: main.py. Write code with triple quoto, based on the following attentions and context.\n1. Only One file: do your best to implement THIS ONLY ONE FILE.\n2. COMPLETE CODE: Your code will be part of the entire project, so please implement complete, reliable, reusable code snippets.\n3. Set default value: If there is any setting, ALWAYS SET A DEFAULT VALUE, ALWAYS USE STRONG TYPE AND EXPLICIT VARIABLE. AVOID circular import.\n4. Follow design: YOU MUST FOLLOW \"Data structures and interfaces\". DONT CHANGE ANY DESIGN. Do not use public member functions that do not exist in your design.\n5. CAREFULLY CHECK THAT YOU DONT MISS ANY NECESSARY CLASS/FUNCTION IN THIS FILE.\n6. Before using a external variable/module, make sure you import it first.\n7. Write out EVERY CODE DETAIL, DON'T LEAVE TODO.\n\n": "```python\n## main.py\n\nfrom game import Game\n\ndef main():\n width = 20 # Set default width\n height = 20 # Set default height\n game = Game(width, height)\n game.start_game()\n\n while True:\n # Get user input for direction\n direction = input(\"Enter direction (up/down/left/right): \")\n if direction in ['up', 'down', 'left', 'right']:\n if not game.move_snake(direction):\n print(\"Game over!\")\n break\n else:\n print(\"Invalid direction!\")\n\nif __name__ == \"__main__\":\n main()\n```", + "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use Python and the curses library to create the snake game. The game logic will be implemented in a separate module, and the main.py file will handle the user interface and game loop.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -Snake snake\\n -Food food\\n -Score score\\n +__init__(width: int, height: int)\\n +start_game()\\n +move_snake(direction: str)\\n +generate_food()\\n +update_score(points: int)\\n }\\n class Snake {\\n -body list\\n -direction str\\n +__init__(x: int, y: int)\\n +move(direction: str)\\n +grow()\\n +collides_with_self() bool\\n }\\n class Food {\\n -position tuple\\n +__init__(x: int, y: int)\\n +get_position() tuple\\n }\\n class Score {\\n -points int\\n +__init__()\\n +increase(points: int)\\n }\\n Game --> Snake\\n Game --> Food\\n Game --> Score\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: start_game()\\n M->>G: move_snake(direction)\\n G->>G: generate_food()\\n G->>G: update_score(points)\\n\",\"Anything UNCLEAR\":\"Please provide more details on the game mechanics and user interactions.\"}\n\n## Tasks\n{\"Required packages\":[\"curses==2.2.0\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Please provide more details on the game mechanics and user interactions.\"}\n\n## Code Files\n----- game.py\n## game.py\n\nimport curses\n\nclass Snake:\n def __init__(self, x: int, y: int):\n self.body = [(x, y)]\n self.direction = 'right'\n\n def move(self, direction: str):\n if direction == 'up' and self.direction != 'down':\n self.direction = 'up'\n elif direction == 'down' and self.direction != 'up':\n self.direction = 'down'\n elif direction == 'left' and self.direction != 'right':\n self.direction = 'left'\n elif direction == 'right' and self.direction != 'left':\n self.direction = 'right'\n\n head = self.body[0]\n x, y = head\n if self.direction == 'up':\n new_head = (x, y - 1)\n elif self.direction == 'down':\n new_head = (x, y + 1)\n elif self.direction == 'left':\n new_head = (x - 1, y)\n elif self.direction == 'right':\n new_head = (x + 1, y)\n self.body.insert(0, new_head)\n\n def grow(self):\n tail = self.body[-1]\n x, y = tail\n if self.direction == 'up':\n new_tail = (x, y + 1)\n elif self.direction == 'down':\n new_tail = (x, y - 1)\n elif self.direction == 'left':\n new_tail = (x + 1, y)\n elif self.direction == 'right':\n new_tail = (x - 1, y)\n self.body.append(new_tail)\n\n def collides_with_self(self) -> bool:\n return len(self.body) != len(set(self.body))\n\nclass Food:\n def __init__(self, x: int, y: int):\n self.position = (x, y)\n\n def get_position(self) -> tuple:\n return self.position\n\nclass Score:\n def __init__(self):\n self.points = 0\n\n def increase(self, points: int):\n self.points += points\n\nclass Game:\n def __init__(self, width: int, height: int):\n self.snake = Snake(width // 2, height // 2)\n self.food = None\n self.score = Score()\n self.width = width\n self.height = height\n\n def start_game(self):\n self.generate_food()\n\n def move_snake(self, direction: str):\n self.snake.move(direction)\n if self.check_collision():\n return False\n self.check_eat()\n return True\n\n def generate_food(self):\n import random\n x = random.randint(0, self.width - 1)\n y = random.randint(0, self.height - 1)\n self.food = Food(x, y)\n\n def update_score(self, points: int):\n self.score.increase(points)\n\n def check_collision(self) -> bool:\n head = self.snake.body[0]\n if head[0] < 0 or head[0] >= self.width or head[1] < 0 or head[1] >= self.height:\n return True\n if self.snake.collides_with_self():\n return True\n return False\n\n def check_eat(self):\n if self.snake.body[0] == self.food.get_position():\n self.snake.grow()\n self.generate_food()\n self.update_score(10)\n\n\n\n\n## Code to be Reviewed: main.py\n```Code\n## main.py\n\nfrom game import Game\n\ndef main():\n width = 20 # Set default width\n height = 20 # Set default height\n game = Game(width, height)\n game.start_game()\n\n while True:\n # Get user input for direction\n direction = input(\"Enter direction (up/down/left/right): \")\n if direction in ['up', 'down', 'left', 'right']:\n if not game.move_snake(direction):\n print(\"Game over!\")\n break\n else:\n print(\"Invalid direction!\")\n\nif __name__ == \"__main__\":\n main()\n\n```\n\n\n\n# Format example 1\n## Code Review: main.py\n1. No, we should fix the logic of class A due to ...\n2. ...\n3. ...\n4. No, function B is not implemented, ...\n5. ...\n6. ...\n\n## Actions\n1. Fix the `handle_events` method to update the game state only if a move is successful.\n ```python\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n return False\n if event.type == pygame.KEYDOWN:\n moved = False\n if event.key == pygame.K_UP:\n moved = self.game.move('UP')\n elif event.key == pygame.K_DOWN:\n moved = self.game.move('DOWN')\n elif event.key == pygame.K_LEFT:\n moved = self.game.move('LEFT')\n elif event.key == pygame.K_RIGHT:\n moved = self.game.move('RIGHT')\n if moved:\n # Update the game state only if a move was successful\n self.render()\n return True\n ```\n2. Implement function B\n\n## Code Review Result\nLBTM\n\n# Format example 2\n## Code Review: main.py\n1. Yes.\n2. Yes.\n3. Yes.\n4. Yes.\n5. Yes.\n6. Yes.\n\n## Actions\npass\n\n## Code Review Result\nLGTM\n\n\n\n# Instruction: Based on the actual code situation, follow one of the \"Format example\". Return only 1 file under review.\n\n## Code Review: Ordered List. Based on the \"Code to be Reviewed\", provide key, clear, concise, and specific answer. If any answer is no, explain how to fix it step by step.\n1. Is the code implemented as per the requirements? If not, how to achieve it? Analyse it step by step.\n2. Is the code logic completely correct? If there are errors, please indicate how to correct them.\n3. Does the existing code follow the \"Data structures and interfaces\"?\n4. Are all functions implemented? If there is no implementation, please indicate how to achieve it step by step.\n5. Have all necessary pre-dependencies been imported? If not, indicate which ones need to be imported\n6. Are methods from other files being reused correctly?\n\n## Actions: Ordered List. Things that should be done after CR, such as implementing class A and function B\n\n## Code Review Result: str. If the code doesn't have bugs, we don't need to rewrite it, so answer LGTM and stop. ONLY ANSWER LGTM/LBTM.\nLGTM/LBTM\n\n": "## Code Review: main.py\n1. The code is implemented as per the requirements. The main function initializes the game and handles user input for the snake's direction.\n2. The code logic is correct. It correctly handles user input and updates the game state based on the snake's movement.\n3. The existing code follows the \"Data structures and interfaces\" as defined in the class diagram.\n4. All necessary functions are implemented in the code.\n5. The necessary pre-dependencies have been imported. The required Python package \"curses==2.2.0\" has been imported.\n6. The methods from the \"game.py\" file are being reused correctly.\n\n## Actions\npass\n\n## Code Review Result\nLGTM", "\n## context\n\n### Project Name\n20240110212717\n\n### Original Requirements\n['开发一个基于大语言模型与私有知识库的搜索引擎,希望可以基于大语言模型进行搜索总结']\n\n### Search Information\n-\n\n\n-----\n\n## format example\n[CONTENT]\n{\n \"Language\": \"en_us\",\n \"Programming Language\": \"Python\",\n \"Original Requirements\": \"Create a 2048 game\",\n \"Product Goals\": [\n \"Create an engaging user experience\",\n \"Improve accessibility, be responsive\",\n \"More beautiful UI\"\n ],\n \"User Stories\": [\n \"As a player, I want to be able to choose difficulty levels\",\n \"As a player, I want to see my score after each game\",\n \"As a player, I want to get restart button when I lose\",\n \"As a player, I want to see beautiful UI that make me feel good\",\n \"As a player, I want to play game via mobile phone\"\n ],\n \"Competitive Analysis\": [\n \"2048 Game A: Simple interface, lacks responsive features\",\n \"play2048.co: Beautiful and responsive UI with my best score shown\",\n \"2048game.com: Responsive UI with my best score shown, but many ads\"\n ],\n \"Competitive Quadrant Chart\": \"quadrantChart\\n title \\\"Reach and engagement of campaigns\\\"\\n x-axis \\\"Low Reach\\\" --> \\\"High Reach\\\"\\n y-axis \\\"Low Engagement\\\" --> \\\"High Engagement\\\"\\n quadrant-1 \\\"We should expand\\\"\\n quadrant-2 \\\"Need to promote\\\"\\n quadrant-3 \\\"Re-evaluate\\\"\\n quadrant-4 \\\"May be improved\\\"\\n \\\"Campaign A\\\": [0.3, 0.6]\\n \\\"Campaign B\\\": [0.45, 0.23]\\n \\\"Campaign C\\\": [0.57, 0.69]\\n \\\"Campaign D\\\": [0.78, 0.34]\\n \\\"Campaign E\\\": [0.40, 0.34]\\n \\\"Campaign F\\\": [0.35, 0.78]\\n \\\"Our Target Product\\\": [0.5, 0.6]\",\n \"Requirement Analysis\": \"\",\n \"Requirement Pool\": [\n [\n \"P0\",\n \"The main code ...\"\n ],\n [\n \"P0\",\n \"The game algorithm ...\"\n ]\n ],\n \"UI Design draft\": \"Basic function description with a simple style and layout.\",\n \"Anything UNCLEAR\": \"\"\n}\n[/CONTENT]\n\n## nodes: \": # \"\n- Language: # Provide the language used in the project, typically matching the user's requirement language.\n- Programming Language: # Python/JavaScript or other mainstream programming language.\n- Original Requirements: # Place the original user's requirements here.\n- Product Goals: typing.List[str] # Provide up to three clear, orthogonal product goals.\n- User Stories: typing.List[str] # Provide up to 3 to 5 scenario-based user stories.\n- Competitive Analysis: typing.List[str] # Provide 5 to 7 competitive products.\n- Competitive Quadrant Chart: # Use mermaid quadrantChart syntax. Distribute scores evenly between 0 and 1\n- Requirement Analysis: # Provide a detailed analysis of the requirements.\n- Requirement Pool: typing.List[typing.List[str]] # List down the top-5 requirements with their priority (P0, P1, P2).\n- UI Design draft: # Provide a simple description of UI elements, functions, style, and layout.\n- Anything UNCLEAR: # Mention any aspects of the project that are unclear and try to clarify them.\n\n\n## constraint\nLanguage: Please use the same language as Human INPUT.\nFormat: output wrapped inside [CONTENT][/CONTENT] like format example, nothing else.\n\n## action\nFollow instructions of nodes, generate output and make sure it follows the format example.\n": "[CONTENT]\n{\n \"Language\": \"zh_cn\",\n \"Programming Language\": \"Python\",\n \"Original Requirements\": \"开发一个基于大语言模型与私有知识库的搜索引擎,希望可以基于大语言模型进行搜索总结\",\n \"Product Goals\": [],\n \"User Stories\": [],\n \"Competitive Analysis\": [],\n \"Competitive Quadrant Chart\": \"\",\n \"Requirement Analysis\": \"\",\n \"Requirement Pool\": [],\n \"UI Design draft\": \"\",\n \"Anything UNCLEAR\": \"\"\n}\n[/CONTENT]", "\n## context\n\n### Project Name\n20240110212717\n\n### Original Requirements\n['']\n\n### Search Information\n-\n\n\n-----\n\n## format example\n[CONTENT]\n{\n \"Language\": \"en_us\",\n \"Programming Language\": \"Python\",\n \"Original Requirements\": \"Create a 2048 game\",\n \"Product Goals\": [\n \"Create an engaging user experience\",\n \"Improve accessibility, be responsive\",\n \"More beautiful UI\"\n ],\n \"User Stories\": [\n \"As a player, I want to be able to choose difficulty levels\",\n \"As a player, I want to see my score after each game\",\n \"As a player, I want to get restart button when I lose\",\n \"As a player, I want to see beautiful UI that make me feel good\",\n \"As a player, I want to play game via mobile phone\"\n ],\n \"Competitive Analysis\": [\n \"2048 Game A: Simple interface, lacks responsive features\",\n \"play2048.co: Beautiful and responsive UI with my best score shown\",\n \"2048game.com: Responsive UI with my best score shown, but many ads\"\n ],\n \"Competitive Quadrant Chart\": \"quadrantChart\\n title \\\"Reach and engagement of campaigns\\\"\\n x-axis \\\"Low Reach\\\" --> \\\"High Reach\\\"\\n y-axis \\\"Low Engagement\\\" --> \\\"High Engagement\\\"\\n quadrant-1 \\\"We should expand\\\"\\n quadrant-2 \\\"Need to promote\\\"\\n quadrant-3 \\\"Re-evaluate\\\"\\n quadrant-4 \\\"May be improved\\\"\\n \\\"Campaign A\\\": [0.3, 0.6]\\n \\\"Campaign B\\\": [0.45, 0.23]\\n \\\"Campaign C\\\": [0.57, 0.69]\\n \\\"Campaign D\\\": [0.78, 0.34]\\n \\\"Campaign E\\\": [0.40, 0.34]\\n \\\"Campaign F\\\": [0.35, 0.78]\\n \\\"Our Target Product\\\": [0.5, 0.6]\",\n \"Requirement Analysis\": \"\",\n \"Requirement Pool\": [\n [\n \"P0\",\n \"The main code ...\"\n ],\n [\n \"P0\",\n \"The game algorithm ...\"\n ]\n ],\n \"UI Design draft\": \"Basic function description with a simple style and layout.\",\n \"Anything UNCLEAR\": \"\"\n}\n[/CONTENT]\n\n## nodes: \": # \"\n- Language: # Provide the language used in the project, typically matching the user's requirement language.\n- Programming Language: # Python/JavaScript or other mainstream programming language.\n- Original Requirements: # Place the original user's requirements here.\n- Product Goals: typing.List[str] # Provide up to three clear, orthogonal product goals.\n- User Stories: typing.List[str] # Provide up to 3 to 5 scenario-based user stories.\n- Competitive Analysis: typing.List[str] # Provide 5 to 7 competitive products.\n- Competitive Quadrant Chart: # Use mermaid quadrantChart syntax. Distribute scores evenly between 0 and 1\n- Requirement Analysis: # Provide a detailed analysis of the requirements.\n- Requirement Pool: typing.List[typing.List[str]] # List down the top-5 requirements with their priority (P0, P1, P2).\n- UI Design draft: # Provide a simple description of UI elements, functions, style, and layout.\n- Anything UNCLEAR: # Mention any aspects of the project that are unclear and try to clarify them.\n\n\n## constraint\nLanguage: Please use the same language as Human INPUT.\nFormat: output wrapped inside [CONTENT][/CONTENT] like format example, nothing else.\n\n## action\nFollow instructions of nodes, generate output and make sure it follows the format example.\n": "[CONTENT]\n{\n \"Language\": \"en_us\",\n \"Programming Language\": \"Python\",\n \"Original Requirements\": \"\",\n \"Product Goals\": [],\n \"User Stories\": [],\n \"Competitive Analysis\": [],\n \"Competitive Quadrant Chart\": \"\",\n \"Requirement Analysis\": \"\",\n \"Requirement Pool\": [],\n \"UI Design draft\": \"\",\n \"Anything UNCLEAR\": \"\"\n}\n[/CONTENT]", "\n## context\n\n### Project Name\n20240110220803\n\n### Original Requirements\n['需要一个基于LLM做总结的搜索引擎']\n\n### Search Information\n-\n\n\n-----\n\n## format example\n[CONTENT]\n{\n \"Language\": \"en_us\",\n \"Programming Language\": \"Python\",\n \"Original Requirements\": \"Create a 2048 game\",\n \"Product Goals\": [\n \"Create an engaging user experience\",\n \"Improve accessibility, be responsive\",\n \"More beautiful UI\"\n ],\n \"User Stories\": [\n \"As a player, I want to be able to choose difficulty levels\",\n \"As a player, I want to see my score after each game\",\n \"As a player, I want to get restart button when I lose\",\n \"As a player, I want to see beautiful UI that make me feel good\",\n \"As a player, I want to play game via mobile phone\"\n ],\n \"Competitive Analysis\": [\n \"2048 Game A: Simple interface, lacks responsive features\",\n \"play2048.co: Beautiful and responsive UI with my best score shown\",\n \"2048game.com: Responsive UI with my best score shown, but many ads\"\n ],\n \"Competitive Quadrant Chart\": \"quadrantChart\\n title \\\"Reach and engagement of campaigns\\\"\\n x-axis \\\"Low Reach\\\" --> \\\"High Reach\\\"\\n y-axis \\\"Low Engagement\\\" --> \\\"High Engagement\\\"\\n quadrant-1 \\\"We should expand\\\"\\n quadrant-2 \\\"Need to promote\\\"\\n quadrant-3 \\\"Re-evaluate\\\"\\n quadrant-4 \\\"May be improved\\\"\\n \\\"Campaign A\\\": [0.3, 0.6]\\n \\\"Campaign B\\\": [0.45, 0.23]\\n \\\"Campaign C\\\": [0.57, 0.69]\\n \\\"Campaign D\\\": [0.78, 0.34]\\n \\\"Campaign E\\\": [0.40, 0.34]\\n \\\"Campaign F\\\": [0.35, 0.78]\\n \\\"Our Target Product\\\": [0.5, 0.6]\",\n \"Requirement Analysis\": \"\",\n \"Requirement Pool\": [\n [\n \"P0\",\n \"The main code ...\"\n ],\n [\n \"P0\",\n \"The game algorithm ...\"\n ]\n ],\n \"UI Design draft\": \"Basic function description with a simple style and layout.\",\n \"Anything UNCLEAR\": \"\"\n}\n[/CONTENT]\n\n## nodes: \": # \"\n- Language: # Provide the language used in the project, typically matching the user's requirement language.\n- Programming Language: # Python/JavaScript or other mainstream programming language.\n- Original Requirements: # Place the original user's requirements here.\n- Product Goals: typing.List[str] # Provide up to three clear, orthogonal product goals.\n- User Stories: typing.List[str] # Provide up to 3 to 5 scenario-based user stories.\n- Competitive Analysis: typing.List[str] # Provide 5 to 7 competitive products.\n- Competitive Quadrant Chart: # Use mermaid quadrantChart syntax. Distribute scores evenly between 0 and 1\n- Requirement Analysis: # Provide a detailed analysis of the requirements.\n- Requirement Pool: typing.List[typing.List[str]] # List down the top-5 requirements with their priority (P0, P1, P2).\n- UI Design draft: # Provide a simple description of UI elements, functions, style, and layout.\n- Anything UNCLEAR: # Mention any aspects of the project that are unclear and try to clarify them.\n\n\n## constraint\nLanguage: Please use the same language as Human INPUT.\nFormat: output wrapped inside [CONTENT][/CONTENT] like format example, nothing else.\n\n## action\nFollow instructions of nodes, generate output and make sure it follows the format example.\n": "[CONTENT]\n{\n \"Language\": \"zh_cn\",\n \"Programming Language\": \"LLM\",\n \"Original Requirements\": \"需要一个基于LLM做总结的搜索引擎\",\n \"Product Goals\": [],\n \"User Stories\": [],\n \"Competitive Analysis\": [],\n \"Competitive Quadrant Chart\": \"\",\n \"Requirement Analysis\": \"\",\n \"Requirement Pool\": [],\n \"UI Design draft\": \"\",\n \"Anything UNCLEAR\": \"\"\n}\n[/CONTENT]", @@ -201,20 +201,20 @@ "\n## context\n\n### Project Name\n\n\n### Original Requirements\n需要一个基于LLM做总结的搜索引擎\n\n### Search Information\n-\n\n\n-----\n\n## format example\n[CONTENT]\n{\n \"Language\": \"en_us\",\n \"Programming Language\": \"Python\",\n \"Original Requirements\": \"Create a 2048 game\",\n \"Project Name\": \"game_2048\",\n \"Product Goals\": [\n \"Create an engaging user experience\",\n \"Improve accessibility, be responsive\",\n \"More beautiful UI\"\n ],\n \"User Stories\": [\n \"As a player, I want to be able to choose difficulty levels\",\n \"As a player, I want to see my score after each game\",\n \"As a player, I want to get restart button when I lose\",\n \"As a player, I want to see beautiful UI that make me feel good\",\n \"As a player, I want to play game via mobile phone\"\n ],\n \"Competitive Analysis\": [\n \"2048 Game A: Simple interface, lacks responsive features\",\n \"play2048.co: Beautiful and responsive UI with my best score shown\",\n \"2048game.com: Responsive UI with my best score shown, but many ads\"\n ],\n \"Competitive Quadrant Chart\": \"quadrantChart\\n title \\\"Reach and engagement of campaigns\\\"\\n x-axis \\\"Low Reach\\\" --> \\\"High Reach\\\"\\n y-axis \\\"Low Engagement\\\" --> \\\"High Engagement\\\"\\n quadrant-1 \\\"We should expand\\\"\\n quadrant-2 \\\"Need to promote\\\"\\n quadrant-3 \\\"Re-evaluate\\\"\\n quadrant-4 \\\"May be improved\\\"\\n \\\"Campaign A\\\": [0.3, 0.6]\\n \\\"Campaign B\\\": [0.45, 0.23]\\n \\\"Campaign C\\\": [0.57, 0.69]\\n \\\"Campaign D\\\": [0.78, 0.34]\\n \\\"Campaign E\\\": [0.40, 0.34]\\n \\\"Campaign F\\\": [0.35, 0.78]\\n \\\"Our Target Product\\\": [0.5, 0.6]\",\n \"Requirement Analysis\": \"\",\n \"Requirement Pool\": [\n [\n \"P0\",\n \"The main code ...\"\n ],\n [\n \"P0\",\n \"The game algorithm ...\"\n ]\n ],\n \"UI Design draft\": \"Basic function description with a simple style and layout.\",\n \"Anything UNCLEAR\": \"\"\n}\n[/CONTENT]\n\n## nodes: \": # \"\n- Language: # Provide the language used in the project, typically matching the user's requirement language.\n- Programming Language: # Python/JavaScript or other mainstream programming language.\n- Original Requirements: # Place the original user's requirements here.\n- Project Name: # According to the content of \"Original Requirements,\" name the project using snake case style , like 'game_2048' or 'simple_crm.\n- Product Goals: typing.List[str] # Provide up to three clear, orthogonal product goals.\n- User Stories: typing.List[str] # Provide up to 3 to 5 scenario-based user stories.\n- Competitive Analysis: typing.List[str] # Provide 5 to 7 competitive products.\n- Competitive Quadrant Chart: # Use mermaid quadrantChart syntax. Distribute scores evenly between 0 and 1\n- Requirement Analysis: # Provide a detailed analysis of the requirements.\n- Requirement Pool: typing.List[typing.List[str]] # List down the top-5 requirements with their priority (P0, P1, P2).\n- UI Design draft: # Provide a simple description of UI elements, functions, style, and layout.\n- Anything UNCLEAR: # Mention any aspects of the project that are unclear and try to clarify them.\n\n\n## constraint\nLanguage: Please use the same language as Human INPUT.\nFormat: output wrapped inside [CONTENT][/CONTENT] like format example, nothing else.\n\n## action\nFollow instructions of nodes, generate output and make sure it follows the format example.\n": "[CONTENT]\n{\n \"Language\": \"zh_cn\",\n \"Programming Language\": \"LLM\",\n \"Original Requirements\": \"需要一个基于LLM做总结的搜索引擎\",\n \"Project Name\": \"llm_summary_search_engine\",\n \"Product Goals\": [\n \"提供准确的搜索结果\",\n \"提高搜索引擎的效率\",\n \"优化用户体验\"\n ],\n \"User Stories\": [\n \"作为用户,我希望能够快速找到我需要的信息\",\n \"作为用户,我希望搜索结果准确无误\",\n \"作为用户,我希望搜索引擎能够智能推荐相关内容\"\n ],\n \"Competitive Analysis\": [\n \"搜索引擎A: 提供准确的搜索结果,但界面简陋\",\n \"搜索引擎B: 界面美观,但搜索结果不够准确\",\n \"搜索引擎C: 搜索结果准确,但速度较慢\"\n ],\n \"Competitive Quadrant Chart\": \"quadrantChart\\n title \\\"搜索引擎比较\\\"\\n x-axis \\\"低准确性\\\" --> \\\"高准确性\\\"\\n y-axis \\\"低速度\\\" --> \\\"高速度\\\"\\n quadrant-1 \\\"需要改进\\\"\\n quadrant-2 \\\"值得推广\\\"\\n quadrant-3 \\\"重新评估\\\"\\n quadrant-4 \\\"需要扩展\\\"\\n \\\"搜索引擎A\\\": [0.8, 0.3]\\n \\\"搜索引擎B\\\": [0.5, 0.7]\\n \\\"搜索引擎C\\\": [0.9, 0.2]\\n \\\"我们的搜索引擎\\\": [0.7, 0.6]\",\n \"Requirement Analysis\": \"\",\n \"Requirement Pool\": [\n [\n \"P0\",\n \"实现LLM技术进行文本摘要\"\n ],\n [\n \"P0\",\n \"构建搜索算法,提高搜索效率\"\n ],\n [\n \"P1\",\n \"设计智能推荐系统\"\n ]\n ],\n \"UI Design draft\": \"简洁的搜索框,清晰的搜索结果页面,智能推荐模块\",\n \"Anything UNCLEAR\": \"\"\n}\n[/CONTENT]", "\n## context\n\n### Project Name\n\n\n### Original Requirements\nMake a cli snake game\n\n### Search Information\n-\n\n\n-----\n\n## format example\n[CONTENT]\n{\n \"Language\": \"en_us\",\n \"Programming Language\": \"Python\",\n \"Original Requirements\": \"Create a 2048 game\",\n \"Project Name\": \"game_2048\",\n \"Product Goals\": [\n \"Create an engaging user experience\",\n \"Improve accessibility, be responsive\",\n \"More beautiful UI\"\n ],\n \"User Stories\": [\n \"As a player, I want to be able to choose difficulty levels\",\n \"As a player, I want to see my score after each game\",\n \"As a player, I want to get restart button when I lose\",\n \"As a player, I want to see beautiful UI that make me feel good\",\n \"As a player, I want to play game via mobile phone\"\n ],\n \"Competitive Analysis\": [\n \"2048 Game A: Simple interface, lacks responsive features\",\n \"play2048.co: Beautiful and responsive UI with my best score shown\",\n \"2048game.com: Responsive UI with my best score shown, but many ads\"\n ],\n \"Competitive Quadrant Chart\": \"quadrantChart\\n title \\\"Reach and engagement of campaigns\\\"\\n x-axis \\\"Low Reach\\\" --> \\\"High Reach\\\"\\n y-axis \\\"Low Engagement\\\" --> \\\"High Engagement\\\"\\n quadrant-1 \\\"We should expand\\\"\\n quadrant-2 \\\"Need to promote\\\"\\n quadrant-3 \\\"Re-evaluate\\\"\\n quadrant-4 \\\"May be improved\\\"\\n \\\"Campaign A\\\": [0.3, 0.6]\\n \\\"Campaign B\\\": [0.45, 0.23]\\n \\\"Campaign C\\\": [0.57, 0.69]\\n \\\"Campaign D\\\": [0.78, 0.34]\\n \\\"Campaign E\\\": [0.40, 0.34]\\n \\\"Campaign F\\\": [0.35, 0.78]\\n \\\"Our Target Product\\\": [0.5, 0.6]\",\n \"Requirement Analysis\": \"\",\n \"Requirement Pool\": [\n [\n \"P0\",\n \"The main code ...\"\n ],\n [\n \"P0\",\n \"The game algorithm ...\"\n ]\n ],\n \"UI Design draft\": \"Basic function description with a simple style and layout.\",\n \"Anything UNCLEAR\": \"\"\n}\n[/CONTENT]\n\n## nodes: \": # \"\n- Language: # Provide the language used in the project, typically matching the user's requirement language.\n- Programming Language: # Python/JavaScript or other mainstream programming language.\n- Original Requirements: # Place the original user's requirements here.\n- Project Name: # According to the content of \"Original Requirements,\" name the project using snake case style , like 'game_2048' or 'simple_crm.\n- Product Goals: typing.List[str] # Provide up to three clear, orthogonal product goals.\n- User Stories: typing.List[str] # Provide up to 3 to 5 scenario-based user stories.\n- Competitive Analysis: typing.List[str] # Provide 5 to 7 competitive products.\n- Competitive Quadrant Chart: # Use mermaid quadrantChart syntax. Distribute scores evenly between 0 and 1\n- Requirement Analysis: # Provide a detailed analysis of the requirements.\n- Requirement Pool: typing.List[typing.List[str]] # List down the top-5 requirements with their priority (P0, P1, P2).\n- UI Design draft: # Provide a simple description of UI elements, functions, style, and layout.\n- Anything UNCLEAR: # Mention any aspects of the project that are unclear and try to clarify them.\n\n\n## constraint\nLanguage: Please use the same language as Human INPUT.\nFormat: output wrapped inside [CONTENT][/CONTENT] like format example, nothing else.\n\n## action\nFollow instructions of nodes, generate output and make sure it follows the format example.\n": "[CONTENT]\n{\n \"Language\": \"en_us\",\n \"Programming Language\": \"Python\",\n \"Original Requirements\": \"Make a cli snake game\",\n \"Project Name\": \"cli_snake_game\",\n \"Product Goals\": [\n \"Create an engaging user experience\",\n \"Improve accessibility and responsiveness\",\n \"Enhance the game with additional features\"\n ],\n \"User Stories\": [\n \"As a player, I want to control the snake using arrow keys\",\n \"As a player, I want to see my score during the game\",\n \"As a player, I want to have the option to restart the game\",\n \"As a player, I want to see a visually appealing UI\",\n \"As a player, I want to play the game on different platforms\"\n ],\n \"Competitive Analysis\": [\n \"Snake Game A: Simple interface, lacks responsive features\",\n \"SnakeGame.co: Beautiful and responsive UI with high scores displayed\",\n \"SnakeGame.com: Responsive UI with high scores shown, but many ads\"\n ],\n \"Competitive Quadrant Chart\": \"quadrantChart\\n title \\\"Reach and engagement of snake games\\\"\\n x-axis \\\"Low Reach\\\" --> \\\"High Reach\\\"\\n y-axis \\\"Low Engagement\\\" --> \\\"High Engagement\\\"\\n quadrant-1 \\\"We should expand\\\"\\n quadrant-2 \\\"Need to promote\\\"\\n quadrant-3 \\\"Re-evaluate\\\"\\n quadrant-4 \\\"May be improved\\\"\\n \\\"Snake Game A\\\": [0.3, 0.6]\\n \\\"SnakeGame.co\\\": [0.45, 0.23]\\n \\\"SnakeGame.com\\\": [0.57, 0.69]\\n \\\"Our Target Product\\\": [0.5, 0.6]\",\n \"Requirement Analysis\": \"\",\n \"Requirement Pool\": [\n [\n \"P0\",\n \"The main code for controlling the snake and game logic\"\n ],\n [\n \"P1\",\n \"Implementing the scoring system and UI\"\n ],\n [\n \"P2\",\n \"Adding platform compatibility and restart functionality\"\n ]\n ],\n \"UI Design draft\": \"The game will have a simple and intuitive UI with clear controls and a visually appealing design.\",\n \"Anything UNCLEAR\": \"\"\n}\n[/CONTENT]", "\n## context\n{\"Language\":\"en_us\",\"Programming Language\":\"Python\",\"Original Requirements\":\"Make a cli snake game\",\"Project Name\":\"cli_snake_game\",\"Product Goals\":[\"Create an engaging user experience\",\"Improve accessibility and responsiveness\",\"Enhance the game with additional features\"],\"User Stories\":[\"As a player, I want to control the snake using arrow keys\",\"As a player, I want to see my score during the game\",\"As a player, I want to have the option to restart the game\",\"As a player, I want to see a visually appealing UI\",\"As a player, I want to play the game on different platforms\"],\"Competitive Analysis\":[\"Snake Game A: Simple interface, lacks responsive features\",\"SnakeGame.co: Beautiful and responsive UI with high scores displayed\",\"SnakeGame.com: Responsive UI with high scores shown, but many ads\"],\"Competitive Quadrant Chart\":\"quadrantChart\\n title \\\"Reach and engagement of snake games\\\"\\n x-axis \\\"Low Reach\\\" --> \\\"High Reach\\\"\\n y-axis \\\"Low Engagement\\\" --> \\\"High Engagement\\\"\\n quadrant-1 \\\"We should expand\\\"\\n quadrant-2 \\\"Need to promote\\\"\\n quadrant-3 \\\"Re-evaluate\\\"\\n quadrant-4 \\\"May be improved\\\"\\n \\\"Snake Game A\\\": [0.3, 0.6]\\n \\\"SnakeGame.co\\\": [0.45, 0.23]\\n \\\"SnakeGame.com\\\": [0.57, 0.69]\\n \\\"Our Target Product\\\": [0.5, 0.6]\",\"Requirement Analysis\":\"\",\"Requirement Pool\":[[\"P0\",\"The main code for controlling the snake and game logic\"],[\"P1\",\"Implementing the scoring system and UI\"],[\"P2\",\"Adding platform compatibility and restart functionality\"]],\"UI Design draft\":\"The game will have a simple and intuitive UI with clear controls and a visually appealing design.\",\"Anything UNCLEAR\":\"\"}\n\n-----\n\n## format example\n[CONTENT]\n{\n \"Implementation approach\": \"We will ...\",\n \"File list\": [\n \"main.py\",\n \"game.py\"\n ],\n \"Data structures and interfaces\": \"\\nclassDiagram\\n class Main {\\n -SearchEngine search_engine\\n +main() str\\n }\\n class SearchEngine {\\n -Index index\\n -Ranking ranking\\n -Summary summary\\n +search(query: str) str\\n }\\n class Index {\\n -KnowledgeBase knowledge_base\\n +create_index(data: dict)\\n +query_index(query: str) list\\n }\\n class Ranking {\\n +rank_results(results: list) list\\n }\\n class Summary {\\n +summarize_results(results: list) str\\n }\\n class KnowledgeBase {\\n +update(data: dict)\\n +fetch_data(query: str) dict\\n }\\n Main --> SearchEngine\\n SearchEngine --> Index\\n SearchEngine --> Ranking\\n SearchEngine --> Summary\\n Index --> KnowledgeBase\\n\",\n \"Program call flow\": \"\\nsequenceDiagram\\n participant M as Main\\n participant SE as SearchEngine\\n participant I as Index\\n participant R as Ranking\\n participant S as Summary\\n participant KB as KnowledgeBase\\n M->>SE: search(query)\\n SE->>I: query_index(query)\\n I->>KB: fetch_data(query)\\n KB-->>I: return data\\n I-->>SE: return results\\n SE->>R: rank_results(results)\\n R-->>SE: return ranked_results\\n SE->>S: summarize_results(ranked_results)\\n S-->>SE: return summary\\n SE-->>M: return summary\\n\",\n \"Anything UNCLEAR\": \"Clarification needed on third-party API integration, ...\"\n}\n[/CONTENT]\n\n## nodes: \": # \"\n- Implementation approach: # Analyze the difficult points of the requirements, select the appropriate open-source framework\n- File list: typing.List[str] # Only need relative paths. ALWAYS write a main.py or app.py here\n- Data structures and interfaces: # Use mermaid classDiagram code syntax, including classes, method(__init__ etc.) and functions with type annotations, CLEARLY MARK the RELATIONSHIPS between classes, and comply with PEP8 standards. The data structures SHOULD BE VERY DETAILED and the API should be comprehensive with a complete design.\n- Program call flow: # Use sequenceDiagram code syntax, COMPLETE and VERY DETAILED, using CLASSES AND API DEFINED ABOVE accurately, covering the CRUD AND INIT of each object, SYNTAX MUST BE CORRECT.\n- Anything UNCLEAR: # Mention unclear project aspects, then try to clarify it.\n\n\n## constraint\nLanguage: Please use the same language as Human INPUT.\nFormat: output wrapped inside [CONTENT][/CONTENT] like format example, nothing else.\n\n## action\nFollow instructions of nodes, generate output and make sure it follows the format example.\n": "[CONTENT]\n{\n \"Implementation approach\": \"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\n \"File list\": [\n \"main.py\",\n \"game.py\"\n ],\n \"Data structures and interfaces\": \"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\n \"Program call flow\": \"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\n \"Anything UNCLEAR\": \"Clarification needed on the scoring system and how the game over condition will be handled.\"\n}\n[/CONTENT]", - "\n## context\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n-----\n\n## format example\n[CONTENT]\n{\n \"Required Python packages\": [\n \"flask==1.1.2\",\n \"bcrypt==3.2.0\"\n ],\n \"Required Other language third-party packages\": [\n \"No third-party dependencies required\"\n ],\n \"Logic Analysis\": [\n [\n \"game.py\",\n \"Contains Game class and ... functions\"\n ],\n [\n \"main.py\",\n \"Contains main function, from game import Game\"\n ]\n ],\n \"Task list\": [\n \"game.py\",\n \"main.py\"\n ],\n \"Full API spec\": \"openapi: 3.0.0 ...\",\n \"Shared Knowledge\": \"'game.py' contains functions shared across the project.\",\n \"Anything UNCLEAR\": \"Clarification needed on how to start and initialize third-party libraries.\"\n}\n[/CONTENT]\n\n## nodes: \": # \"\n- Required Python packages: typing.List[str] # Provide required Python packages in requirements.txt format.\n- Required Other language third-party packages: typing.List[str] # List down the required packages for languages other than Python.\n- Logic Analysis: typing.List[typing.List[str]] # Provide a list of files with the classes/methods/functions to be implemented, including dependency analysis and imports.\n- Task list: typing.List[str] # Break down the tasks into a list of filenames, prioritized by dependency order.\n- Full API spec: # Describe all APIs using OpenAPI 3.0 spec that may be used by both frontend and backend. If front-end and back-end communication is not required, leave it blank.\n- Shared Knowledge: # Detail any shared knowledge, like common utility functions or configuration variables.\n- Anything UNCLEAR: # Mention any unclear aspects in the project management context and try to clarify them.\n\n\n## constraint\nLanguage: Please use the same language as Human INPUT.\nFormat: output wrapped inside [CONTENT][/CONTENT] like format example, nothing else.\n\n## action\nFollow instructions of nodes, generate output and make sure it follows the format example.\n": "[CONTENT]\n{\n \"Required Python packages\": [\n \"pygame==2.0.1\"\n ],\n \"Required Other language third-party packages\": [\n \"No third-party dependencies required\"\n ],\n \"Logic Analysis\": [\n [\n \"game.py\",\n \"Contains Game class and ... functions\"\n ],\n [\n \"main.py\",\n \"Contains main function, from game import Game\"\n ]\n ],\n \"Task list\": [\n \"game.py\",\n \"main.py\"\n ],\n \"Full API spec\": \"\",\n \"Shared Knowledge\": \"'game.py' contains functions shared across the project.\",\n \"Anything UNCLEAR\": \"Clarification needed on the scoring system and how the game over condition will be handled.\"\n}\n[/CONTENT]", - "\nNOTICE\nRole: You are a professional engineer; the main goal is to write google-style, elegant, modular, easy to read and maintain code\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Tasks\n{\"Required Python packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Legacy Code\n```Code\n\n```\n\n## Debug logs\n```text\n\n\n\n```\n\n## Bug Feedback logs\n```text\n\n```\n\n# Format example\n## Code: game.py\n```python\n## game.py\n...\n```\n\n# Instruction: Based on the context, follow \"Format example\", write code.\n\n## Code: game.py. Write code with triple quoto, based on the following attentions and context.\n1. Only One file: do your best to implement THIS ONLY ONE FILE.\n2. COMPLETE CODE: Your code will be part of the entire project, so please implement complete, reliable, reusable code snippets.\n3. Set default value: If there is any setting, ALWAYS SET A DEFAULT VALUE, ALWAYS USE STRONG TYPE AND EXPLICIT VARIABLE. AVOID circular import.\n4. Follow design: YOU MUST FOLLOW \"Data structures and interfaces\". DONT CHANGE ANY DESIGN. Do not use public member functions that do not exist in your design.\n5. CAREFULLY CHECK THAT YOU DONT MISS ANY NECESSARY CLASS/FUNCTION IN THIS FILE.\n6. Before using a external variable/module, make sure you import it first.\n7. Write out EVERY CODE DETAIL, DON'T LEAVE TODO.\n\n": "```python\n## game.py\n\nclass Game:\n def __init__(self):\n self.snake = []\n self.food = (0, 0)\n self.score = 0\n\n def update(self):\n # Update game state\n pass\n\n def draw(self):\n # Draw game\n pass\n\n def handle_input(self):\n # Handle user input\n pass\n\n def restart(self):\n # Restart game\n pass\n\n\nclass Snake:\n def __init__(self, start_pos: tuple, length: int, direction: str):\n self.body = []\n self.direction = direction\n\n def move(self):\n # Move snake\n pass\n\n def change_direction(self, new_direction: str):\n # Change snake direction\n pass\n\n def grow(self):\n # Grow snake\n pass\n```", - "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Tasks\n{\"Required Python packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Code Files\n\n\n\n## Code to be Reviewed: game.py\n```Code\n## game.py\n\nclass Game:\n def __init__(self):\n self.snake = []\n self.food = (0, 0)\n self.score = 0\n\n def update(self):\n # Update game state\n pass\n\n def draw(self):\n # Draw game\n pass\n\n def handle_input(self):\n # Handle user input\n pass\n\n def restart(self):\n # Restart game\n pass\n\n\nclass Snake:\n def __init__(self, start_pos: tuple, length: int, direction: str):\n self.body = []\n self.direction = direction\n\n def move(self):\n # Move snake\n pass\n\n def change_direction(self, new_direction: str):\n # Change snake direction\n pass\n\n def grow(self):\n # Grow snake\n pass\n\n```\n\n\n\n# Format example 1\n## Code Review: game.py\n1. No, we should fix the logic of class A due to ...\n2. ...\n3. ...\n4. No, function B is not implemented, ...\n5. ...\n6. ...\n\n## Actions\n1. Fix the `handle_events` method to update the game state only if a move is successful.\n ```python\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n return False\n if event.type == pygame.KEYDOWN:\n moved = False\n if event.key == pygame.K_UP:\n moved = self.game.move('UP')\n elif event.key == pygame.K_DOWN:\n moved = self.game.move('DOWN')\n elif event.key == pygame.K_LEFT:\n moved = self.game.move('LEFT')\n elif event.key == pygame.K_RIGHT:\n moved = self.game.move('RIGHT')\n if moved:\n # Update the game state only if a move was successful\n self.render()\n return True\n ```\n2. Implement function B\n\n## Code Review Result\nLBTM\n\n# Format example 2\n## Code Review: game.py\n1. Yes.\n2. Yes.\n3. Yes.\n4. Yes.\n5. Yes.\n6. Yes.\n\n## Actions\npass\n\n## Code Review Result\nLGTM\n\n\n\n# Instruction: Based on the actual code situation, follow one of the \"Format example\". Return only 1 file under review.\n\n## Code Review: Ordered List. Based on the \"Code to be Reviewed\", provide key, clear, concise, and specific answer. If any answer is no, explain how to fix it step by step.\n1. Is the code implemented as per the requirements? If not, how to achieve it? Analyse it step by step.\n2. Is the code logic completely correct? If there are errors, please indicate how to correct them.\n3. Does the existing code follow the \"Data structures and interfaces\"?\n4. Are all functions implemented? If there is no implementation, please indicate how to achieve it step by step.\n5. Have all necessary pre-dependencies been imported? If not, indicate which ones need to be imported\n6. Are methods from other files being reused correctly?\n\n## Actions: Ordered List. Things that should be done after CR, such as implementing class A and function B\n\n## Code Review Result: str. If the code doesn't have bugs, we don't need to rewrite it, so answer LGTM and stop. ONLY ANSWER LGTM/LBTM.\nLGTM/LBTM\n\n": "## Code Review: game.py\n1. No, the code is not implemented as per the requirements. The Game class should have a method to handle game over condition and update the scoring system.\n2. No, the code logic is not completely correct. The Snake class is missing the implementation of the move, change_direction, and grow methods.\n3. Yes, the existing code follows the \"Data structures and interfaces\" provided.\n4. No, the move, change_direction, and grow methods of the Snake class are not implemented. To achieve this, the methods need to be implemented with the appropriate logic for moving the snake, changing its direction, and growing its body.\n5. Yes, all necessary pre-dependencies have been imported.\n6. No, there are no methods from other files being reused in the current code.\n\n## Actions\n1. Implement a method in the Game class to handle the game over condition and update the scoring system.\n2. Implement the move, change_direction, and grow methods in the Snake class.\n3. Reuse methods from other files if necessary.\n\n## Code Review Result\nLBTM", - "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Tasks\n{\"Required Python packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Code Files\n\n\n\n## Code to be Reviewed: game.py\n```Code\n## game.py\n\nclass Game:\n def __init__(self):\n self.snake = []\n self.food = (0, 0)\n self.score = 0\n\n def update(self):\n # Update game state\n pass\n\n def draw(self):\n # Draw game\n pass\n\n def handle_input(self):\n # Handle user input\n pass\n\n def restart(self):\n # Restart game\n pass\n\n\nclass Snake:\n def __init__(self, start_pos: tuple, length: int, direction: str):\n self.body = []\n self.direction = direction\n\n def move(self):\n # Move snake\n pass\n\n def change_direction(self, new_direction: str):\n # Change snake direction\n pass\n\n def grow(self):\n # Grow snake\n pass\n\n```\n\n## Code Review: game.py\n1. No, the code is not implemented as per the requirements. The Game class should have a method to handle game over condition and update the scoring system.\n2. No, the code logic is not completely correct. The Snake class is missing the implementation of the move, change_direction, and grow methods.\n3. Yes, the existing code follows the \"Data structures and interfaces\" provided.\n4. No, the move, change_direction, and grow methods of the Snake class are not implemented. To achieve this, the methods need to be implemented with the appropriate logic for moving the snake, changing its direction, and growing its body.\n5. Yes, all necessary pre-dependencies have been imported.\n6. No, there are no methods from other files being reused in the current code.\n\n## Actions\n1. Implement a method in the Game class to handle the game over condition and update the scoring system.\n2. Implement the move, change_direction, and grow methods in the Snake class.\n3. Reuse methods from other files if necessary.\n\n## Code Review Result\nLBTM\n\n# Instruction: rewrite code based on the Code Review and Actions\n## Rewrite Code: CodeBlock. If it still has some bugs, rewrite game.py with triple quotes. Do your utmost to optimize THIS SINGLE FILE. Return all completed codes and prohibit the return of unfinished codes.\n```Code\n## game.py\n...\n```\n": "```Code\n## game.py\n\nclass Game:\n def __init__(self):\n self.snake = []\n self.food = (0, 0)\n self.score = 0\n\n def update(self):\n # Update game state\n pass\n\n def draw(self):\n # Draw game\n pass\n\n def handle_input(self):\n # Handle user input\n pass\n\n def restart(self):\n # Restart game\n pass\n\n def handle_game_over(self):\n # Handle game over condition\n pass\n\n def update_score(self):\n # Update scoring system\n pass\n\n\nclass Snake:\n def __init__(self, start_pos: tuple, length: int, direction: str):\n self.body = []\n self.direction = direction\n\n def move(self):\n # Move snake\n pass\n\n def change_direction(self, new_direction: str):\n # Change snake direction\n pass\n\n def grow(self):\n # Grow snake\n pass\n```", - "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Tasks\n{\"Required Python packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Code Files\n\n\n\n## Code to be Reviewed: game.py\n```Code\n## game.py\n\nclass Game:\n def __init__(self):\n self.snake = []\n self.food = (0, 0)\n self.score = 0\n\n def update(self):\n # Update game state\n pass\n\n def draw(self):\n # Draw game\n pass\n\n def handle_input(self):\n # Handle user input\n pass\n\n def restart(self):\n # Restart game\n pass\n\n def handle_game_over(self):\n # Handle game over condition\n pass\n\n def update_score(self):\n # Update scoring system\n pass\n\n\nclass Snake:\n def __init__(self, start_pos: tuple, length: int, direction: str):\n self.body = []\n self.direction = direction\n\n def move(self):\n # Move snake\n pass\n\n def change_direction(self, new_direction: str):\n # Change snake direction\n pass\n\n def grow(self):\n # Grow snake\n pass\n\n```\n\n\n\n# Format example 1\n## Code Review: game.py\n1. No, we should fix the logic of class A due to ...\n2. ...\n3. ...\n4. No, function B is not implemented, ...\n5. ...\n6. ...\n\n## Actions\n1. Fix the `handle_events` method to update the game state only if a move is successful.\n ```python\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n return False\n if event.type == pygame.KEYDOWN:\n moved = False\n if event.key == pygame.K_UP:\n moved = self.game.move('UP')\n elif event.key == pygame.K_DOWN:\n moved = self.game.move('DOWN')\n elif event.key == pygame.K_LEFT:\n moved = self.game.move('LEFT')\n elif event.key == pygame.K_RIGHT:\n moved = self.game.move('RIGHT')\n if moved:\n # Update the game state only if a move was successful\n self.render()\n return True\n ```\n2. Implement function B\n\n## Code Review Result\nLBTM\n\n# Format example 2\n## Code Review: game.py\n1. Yes.\n2. Yes.\n3. Yes.\n4. Yes.\n5. Yes.\n6. Yes.\n\n## Actions\npass\n\n## Code Review Result\nLGTM\n\n\n\n# Instruction: Based on the actual code situation, follow one of the \"Format example\". Return only 1 file under review.\n\n## Code Review: Ordered List. Based on the \"Code to be Reviewed\", provide key, clear, concise, and specific answer. If any answer is no, explain how to fix it step by step.\n1. Is the code implemented as per the requirements? If not, how to achieve it? Analyse it step by step.\n2. Is the code logic completely correct? If there are errors, please indicate how to correct them.\n3. Does the existing code follow the \"Data structures and interfaces\"?\n4. Are all functions implemented? If there is no implementation, please indicate how to achieve it step by step.\n5. Have all necessary pre-dependencies been imported? If not, indicate which ones need to be imported\n6. Are methods from other files being reused correctly?\n\n## Actions: Ordered List. Things that should be done after CR, such as implementing class A and function B\n\n## Code Review Result: str. If the code doesn't have bugs, we don't need to rewrite it, so answer LGTM and stop. ONLY ANSWER LGTM/LBTM.\nLGTM/LBTM\n\n": "## Code Review: game.py\n1. No, the code is not implemented as per the requirements. The `handle_game_over` and `update_score` methods are missing, and the `handle_input` method needs to be implemented to handle user input.\n2. The code logic is not completely correct. The `Snake` class `__init__` method does not initialize the `body` attribute with the `start_pos` and `length` parameters.\n3. The existing code follows the \"Data structures and interfaces\" for the `Game` and `Snake` classes.\n4. The `handle_game_over` and `update_score` methods are not implemented. The `handle_input` method needs to be implemented to handle user input.\n5. The necessary pre-dependencies have been imported.\n6. The methods from other files are not being reused in the existing code.\n\n## Actions\n1. Implement the `handle_game_over` method to handle the game over condition.\n2. Implement the `update_score` method to update the scoring system.\n3. Implement the `handle_input` method to handle user input and update the game state accordingly.\n\n## Code Review Result\nLBTM", - "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Tasks\n{\"Required Python packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Code Files\n\n\n\n## Code to be Reviewed: game.py\n```Code\n## game.py\n\nclass Game:\n def __init__(self):\n self.snake = []\n self.food = (0, 0)\n self.score = 0\n\n def update(self):\n # Update game state\n pass\n\n def draw(self):\n # Draw game\n pass\n\n def handle_input(self):\n # Handle user input\n pass\n\n def restart(self):\n # Restart game\n pass\n\n def handle_game_over(self):\n # Handle game over condition\n pass\n\n def update_score(self):\n # Update scoring system\n pass\n\n\nclass Snake:\n def __init__(self, start_pos: tuple, length: int, direction: str):\n self.body = []\n self.direction = direction\n\n def move(self):\n # Move snake\n pass\n\n def change_direction(self, new_direction: str):\n # Change snake direction\n pass\n\n def grow(self):\n # Grow snake\n pass\n\n```\n\n## Code Review: game.py\n1. No, the code is not implemented as per the requirements. The `handle_game_over` and `update_score` methods are missing, and the `handle_input` method needs to be implemented to handle user input.\n2. The code logic is not completely correct. The `Snake` class `__init__` method does not initialize the `body` attribute with the `start_pos` and `length` parameters.\n3. The existing code follows the \"Data structures and interfaces\" for the `Game` and `Snake` classes.\n4. The `handle_game_over` and `update_score` methods are not implemented. The `handle_input` method needs to be implemented to handle user input.\n5. The necessary pre-dependencies have been imported.\n6. The methods from other files are not being reused in the existing code.\n\n## Actions\n1. Implement the `handle_game_over` method to handle the game over condition.\n2. Implement the `update_score` method to update the scoring system.\n3. Implement the `handle_input` method to handle user input and update the game state accordingly.\n\n## Code Review Result\nLBTM\n\n# Instruction: rewrite code based on the Code Review and Actions\n## Rewrite Code: CodeBlock. If it still has some bugs, rewrite game.py with triple quotes. Do your utmost to optimize THIS SINGLE FILE. Return all completed codes and prohibit the return of unfinished codes.\n```Code\n## game.py\n...\n```\n": "```Code\n## game.py\n\nclass Game:\n def __init__(self):\n self.snake = []\n self.food = (0, 0)\n self.score = 0\n\n def update(self):\n # Update game state\n pass\n\n def draw(self):\n # Draw game\n pass\n\n def handle_input(self):\n # Handle user input\n pass\n\n def restart(self):\n # Restart game\n pass\n\n def handle_game_over(self):\n # Handle game over condition\n pass\n\n def update_score(self):\n # Update scoring system\n pass\n\n\nclass Snake:\n def __init__(self, start_pos: tuple, length: int, direction: str):\n self.body = [start_pos] # Initialize body with start_pos\n self.direction = direction\n\n def move(self):\n # Move snake\n pass\n\n def change_direction(self, new_direction: str):\n # Change snake direction\n pass\n\n def grow(self):\n # Grow snake\n pass\n```", - "\nNOTICE\nRole: You are a professional engineer; the main goal is to write google-style, elegant, modular, easy to read and maintain code\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Tasks\n{\"Required Python packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Legacy Code\n```Code\n----- game.py\n## game.py\n\nclass Game:\n def __init__(self):\n self.snake = []\n self.food = (0, 0)\n self.score = 0\n\n def update(self):\n # Update game state\n pass\n\n def draw(self):\n # Draw game\n pass\n\n def handle_input(self):\n # Handle user input\n pass\n\n def restart(self):\n # Restart game\n pass\n\n def handle_game_over(self):\n # Handle game over condition\n pass\n\n def update_score(self):\n # Update scoring system\n pass\n\n\nclass Snake:\n def __init__(self, start_pos: tuple, length: int, direction: str):\n self.body = [start_pos] # Initialize body with start_pos\n self.direction = direction\n\n def move(self):\n # Move snake\n pass\n\n def change_direction(self, new_direction: str):\n # Change snake direction\n pass\n\n def grow(self):\n # Grow snake\n pass\n\n```\n\n## Debug logs\n```text\n\n\n\n```\n\n## Bug Feedback logs\n```text\n\n```\n\n# Format example\n## Code: main.py\n```python\n## main.py\n...\n```\n\n# Instruction: Based on the context, follow \"Format example\", write code.\n\n## Code: main.py. Write code with triple quoto, based on the following attentions and context.\n1. Only One file: do your best to implement THIS ONLY ONE FILE.\n2. COMPLETE CODE: Your code will be part of the entire project, so please implement complete, reliable, reusable code snippets.\n3. Set default value: If there is any setting, ALWAYS SET A DEFAULT VALUE, ALWAYS USE STRONG TYPE AND EXPLICIT VARIABLE. AVOID circular import.\n4. Follow design: YOU MUST FOLLOW \"Data structures and interfaces\". DONT CHANGE ANY DESIGN. Do not use public member functions that do not exist in your design.\n5. CAREFULLY CHECK THAT YOU DONT MISS ANY NECESSARY CLASS/FUNCTION IN THIS FILE.\n6. Before using a external variable/module, make sure you import it first.\n7. Write out EVERY CODE DETAIL, DON'T LEAVE TODO.\n\n": "```python\n## main.py\n\nfrom game import Game\n\ndef main():\n game = Game()\n running = True\n\n while running:\n game.handle_input()\n game.update()\n game.draw()\n\n if game.handle_game_over():\n game.restart()\n\nif __name__ == \"__main__\":\n main()\n```", - "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Tasks\n{\"Required Python packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Code Files\n----- game.py\n## game.py\n\nclass Game:\n def __init__(self):\n self.snake = []\n self.food = (0, 0)\n self.score = 0\n\n def update(self):\n # Update game state\n pass\n\n def draw(self):\n # Draw game\n pass\n\n def handle_input(self):\n # Handle user input\n pass\n\n def restart(self):\n # Restart game\n pass\n\n def handle_game_over(self):\n # Handle game over condition\n pass\n\n def update_score(self):\n # Update scoring system\n pass\n\n\nclass Snake:\n def __init__(self, start_pos: tuple, length: int, direction: str):\n self.body = [start_pos] # Initialize body with start_pos\n self.direction = direction\n\n def move(self):\n # Move snake\n pass\n\n def change_direction(self, new_direction: str):\n # Change snake direction\n pass\n\n def grow(self):\n # Grow snake\n pass\n\n\n\n## Code to be Reviewed: main.py\n```Code\n## main.py\n\nfrom game import Game\n\ndef main():\n game = Game()\n running = True\n\n while running:\n game.handle_input()\n game.update()\n game.draw()\n\n if game.handle_game_over():\n game.restart()\n\nif __name__ == \"__main__\":\n main()\n\n```\n\n\n\n# Format example 1\n## Code Review: main.py\n1. No, we should fix the logic of class A due to ...\n2. ...\n3. ...\n4. No, function B is not implemented, ...\n5. ...\n6. ...\n\n## Actions\n1. Fix the `handle_events` method to update the game state only if a move is successful.\n ```python\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n return False\n if event.type == pygame.KEYDOWN:\n moved = False\n if event.key == pygame.K_UP:\n moved = self.game.move('UP')\n elif event.key == pygame.K_DOWN:\n moved = self.game.move('DOWN')\n elif event.key == pygame.K_LEFT:\n moved = self.game.move('LEFT')\n elif event.key == pygame.K_RIGHT:\n moved = self.game.move('RIGHT')\n if moved:\n # Update the game state only if a move was successful\n self.render()\n return True\n ```\n2. Implement function B\n\n## Code Review Result\nLBTM\n\n# Format example 2\n## Code Review: main.py\n1. Yes.\n2. Yes.\n3. Yes.\n4. Yes.\n5. Yes.\n6. Yes.\n\n## Actions\npass\n\n## Code Review Result\nLGTM\n\n\n\n# Instruction: Based on the actual code situation, follow one of the \"Format example\". Return only 1 file under review.\n\n## Code Review: Ordered List. Based on the \"Code to be Reviewed\", provide key, clear, concise, and specific answer. If any answer is no, explain how to fix it step by step.\n1. Is the code implemented as per the requirements? If not, how to achieve it? Analyse it step by step.\n2. Is the code logic completely correct? If there are errors, please indicate how to correct them.\n3. Does the existing code follow the \"Data structures and interfaces\"?\n4. Are all functions implemented? If there is no implementation, please indicate how to achieve it step by step.\n5. Have all necessary pre-dependencies been imported? If not, indicate which ones need to be imported\n6. Are methods from other files being reused correctly?\n\n## Actions: Ordered List. Things that should be done after CR, such as implementing class A and function B\n\n## Code Review Result: str. If the code doesn't have bugs, we don't need to rewrite it, so answer LGTM and stop. ONLY ANSWER LGTM/LBTM.\nLGTM/LBTM\n\n": "## Code Review: main.py\n1. The code is implemented as per the requirements, but the game over condition and scoring system need to be clarified and implemented.\n \n## Actions\n1. Clarify and implement the game over condition and scoring system in the `Game` class.\n\n## Code Review Result\nLBTM", - "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Tasks\n{\"Required Python packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Code Files\n----- game.py\n## game.py\n\nclass Game:\n def __init__(self):\n self.snake = []\n self.food = (0, 0)\n self.score = 0\n\n def update(self):\n # Update game state\n pass\n\n def draw(self):\n # Draw game\n pass\n\n def handle_input(self):\n # Handle user input\n pass\n\n def restart(self):\n # Restart game\n pass\n\n def handle_game_over(self):\n # Handle game over condition\n pass\n\n def update_score(self):\n # Update scoring system\n pass\n\n\nclass Snake:\n def __init__(self, start_pos: tuple, length: int, direction: str):\n self.body = [start_pos] # Initialize body with start_pos\n self.direction = direction\n\n def move(self):\n # Move snake\n pass\n\n def change_direction(self, new_direction: str):\n # Change snake direction\n pass\n\n def grow(self):\n # Grow snake\n pass\n\n\n\n## Code to be Reviewed: main.py\n```Code\n## main.py\n\nfrom game import Game\n\ndef main():\n game = Game()\n running = True\n\n while running:\n game.handle_input()\n game.update()\n game.draw()\n\n if game.handle_game_over():\n game.restart()\n\nif __name__ == \"__main__\":\n main()\n\n```\n\n## Code Review: main.py\n1. The code is implemented as per the requirements, but the game over condition and scoring system need to be clarified and implemented.\n \n## Actions\n1. Clarify and implement the game over condition and scoring system in the `Game` class.\n\n## Code Review Result\nLBTM\n\n# Instruction: rewrite code based on the Code Review and Actions\n## Rewrite Code: CodeBlock. If it still has some bugs, rewrite main.py with triple quotes. Do your utmost to optimize THIS SINGLE FILE. Return all completed codes and prohibit the return of unfinished codes.\n```Code\n## main.py\n...\n```\n": "```python\n## main.py\n\nfrom game import Game\n\ndef main():\n game = Game()\n running = True\n\n while running:\n game.handle_input()\n game.update()\n game.draw()\n\n if game.is_game_over():\n game.restart()\n\nif __name__ == \"__main__\":\n main()\n```", - "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Tasks\n{\"Required Python packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Code Files\n----- game.py\n## game.py\n\nclass Game:\n def __init__(self):\n self.snake = []\n self.food = (0, 0)\n self.score = 0\n\n def update(self):\n # Update game state\n pass\n\n def draw(self):\n # Draw game\n pass\n\n def handle_input(self):\n # Handle user input\n pass\n\n def restart(self):\n # Restart game\n pass\n\n def handle_game_over(self):\n # Handle game over condition\n pass\n\n def update_score(self):\n # Update scoring system\n pass\n\n\nclass Snake:\n def __init__(self, start_pos: tuple, length: int, direction: str):\n self.body = [start_pos] # Initialize body with start_pos\n self.direction = direction\n\n def move(self):\n # Move snake\n pass\n\n def change_direction(self, new_direction: str):\n # Change snake direction\n pass\n\n def grow(self):\n # Grow snake\n pass\n\n\n\n## Code to be Reviewed: main.py\n```Code\n## main.py\n\nfrom game import Game\n\ndef main():\n game = Game()\n running = True\n\n while running:\n game.handle_input()\n game.update()\n game.draw()\n\n if game.is_game_over():\n game.restart()\n\nif __name__ == \"__main__\":\n main()\n\n```\n\n\n\n# Format example 1\n## Code Review: main.py\n1. No, we should fix the logic of class A due to ...\n2. ...\n3. ...\n4. No, function B is not implemented, ...\n5. ...\n6. ...\n\n## Actions\n1. Fix the `handle_events` method to update the game state only if a move is successful.\n ```python\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n return False\n if event.type == pygame.KEYDOWN:\n moved = False\n if event.key == pygame.K_UP:\n moved = self.game.move('UP')\n elif event.key == pygame.K_DOWN:\n moved = self.game.move('DOWN')\n elif event.key == pygame.K_LEFT:\n moved = self.game.move('LEFT')\n elif event.key == pygame.K_RIGHT:\n moved = self.game.move('RIGHT')\n if moved:\n # Update the game state only if a move was successful\n self.render()\n return True\n ```\n2. Implement function B\n\n## Code Review Result\nLBTM\n\n# Format example 2\n## Code Review: main.py\n1. Yes.\n2. Yes.\n3. Yes.\n4. Yes.\n5. Yes.\n6. Yes.\n\n## Actions\npass\n\n## Code Review Result\nLGTM\n\n\n\n# Instruction: Based on the actual code situation, follow one of the \"Format example\". Return only 1 file under review.\n\n## Code Review: Ordered List. Based on the \"Code to be Reviewed\", provide key, clear, concise, and specific answer. If any answer is no, explain how to fix it step by step.\n1. Is the code implemented as per the requirements? If not, how to achieve it? Analyse it step by step.\n2. Is the code logic completely correct? If there are errors, please indicate how to correct them.\n3. Does the existing code follow the \"Data structures and interfaces\"?\n4. Are all functions implemented? If there is no implementation, please indicate how to achieve it step by step.\n5. Have all necessary pre-dependencies been imported? If not, indicate which ones need to be imported\n6. Are methods from other files being reused correctly?\n\n## Actions: Ordered List. Things that should be done after CR, such as implementing class A and function B\n\n## Code Review Result: str. If the code doesn't have bugs, we don't need to rewrite it, so answer LGTM and stop. ONLY ANSWER LGTM/LBTM.\nLGTM/LBTM\n\n": "## Code Review: main.py\n1. The code is implemented as per the requirements, but the `is_game_over` method is missing. To achieve this, we need to implement the `is_game_over` method in the Game class to check for the game over condition.\n2. The code logic is correct, but the missing `is_game_over` method needs to be added to handle the game over condition.\n3. The existing code follows the \"Data structures and interfaces\" as per the provided class diagram.\n4. All functions are implemented, but the `is_game_over` method is missing in the Game class. To achieve this, we need to implement the `is_game_over` method to handle the game over condition.\n5. All necessary pre-dependencies have been imported.\n6. Methods from other files are not being reused in the current code.\n\n## Actions\n1. Implement the `is_game_over` method in the Game class to handle the game over condition.\n\n## Code Review Result\nLBTM", - "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Tasks\n{\"Required Python packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Code Files\n----- game.py\n## game.py\n\nclass Game:\n def __init__(self):\n self.snake = []\n self.food = (0, 0)\n self.score = 0\n\n def update(self):\n # Update game state\n pass\n\n def draw(self):\n # Draw game\n pass\n\n def handle_input(self):\n # Handle user input\n pass\n\n def restart(self):\n # Restart game\n pass\n\n def handle_game_over(self):\n # Handle game over condition\n pass\n\n def update_score(self):\n # Update scoring system\n pass\n\n\nclass Snake:\n def __init__(self, start_pos: tuple, length: int, direction: str):\n self.body = [start_pos] # Initialize body with start_pos\n self.direction = direction\n\n def move(self):\n # Move snake\n pass\n\n def change_direction(self, new_direction: str):\n # Change snake direction\n pass\n\n def grow(self):\n # Grow snake\n pass\n\n\n\n## Code to be Reviewed: main.py\n```Code\n## main.py\n\nfrom game import Game\n\ndef main():\n game = Game()\n running = True\n\n while running:\n game.handle_input()\n game.update()\n game.draw()\n\n if game.is_game_over():\n game.restart()\n\nif __name__ == \"__main__\":\n main()\n\n```\n\n## Code Review: main.py\n1. The code is implemented as per the requirements, but the `is_game_over` method is missing. To achieve this, we need to implement the `is_game_over` method in the Game class to check for the game over condition.\n2. The code logic is correct, but the missing `is_game_over` method needs to be added to handle the game over condition.\n3. The existing code follows the \"Data structures and interfaces\" as per the provided class diagram.\n4. All functions are implemented, but the `is_game_over` method is missing in the Game class. To achieve this, we need to implement the `is_game_over` method to handle the game over condition.\n5. All necessary pre-dependencies have been imported.\n6. Methods from other files are not being reused in the current code.\n\n## Actions\n1. Implement the `is_game_over` method in the Game class to handle the game over condition.\n\n## Code Review Result\nLBTM\n\n# Instruction: rewrite code based on the Code Review and Actions\n## Rewrite Code: CodeBlock. If it still has some bugs, rewrite main.py with triple quotes. Do your utmost to optimize THIS SINGLE FILE. Return all completed codes and prohibit the return of unfinished codes.\n```Code\n## main.py\n...\n```\n": "```python\n## main.py\n\nfrom game import Game\n\ndef main():\n game = Game()\n running = True\n\n while running:\n game.handle_input()\n game.update()\n game.draw()\n\n if game.is_game_over(): # Check for game over condition\n game.restart()\n\nif __name__ == \"__main__\":\n main()\n```", - "You are a python code to Mermaid Sequence Diagram translator in function detail#SYSTEM_MSG_END#```python\n#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\"\"\"\n@Author : alexanderwu\n@File : write_review.py\n\"\"\"\nimport asyncio\nfrom typing import List, Literal\n\nfrom metagpt.actions import Action\nfrom metagpt.actions.action_node import ActionNode\n\nREVIEW = ActionNode(\n key=\"Review\",\n expected_type=List[str],\n instruction=\"Act as an experienced reviewer and critically assess the given output. Provide specific and\"\n \" constructive feedback, highlighting areas for improvement and suggesting changes.\",\n example=[\n \"The logic in the function `calculate_total` seems flawed. Shouldn't it consider the discount rate as well?\",\n \"The TODO function is not implemented yet? Should we implement it before commit?\",\n ],\n)\n\nREVIEW_RESULT = ActionNode(\n key=\"ReviewResult\",\n expected_type=Literal[\"LGTM\", \"LBTM\"],\n instruction=\"LGTM/LBTM. If the code is fully implemented, \" \"give a LGTM, otherwise provide a LBTM.\",\n example=\"LBTM\",\n)\n\nNEXT_STEPS = ActionNode(\n key=\"NextSteps\",\n expected_type=str,\n instruction=\"Based on the code review outcome, suggest actionable steps. This can include code changes, \"\n \"refactoring suggestions, or any follow-up tasks.\",\n example=\"\"\"1. Refactor the `process_data` method to improve readability and efficiency.\n2. Cover edge cases in the `validate_user` function.\n3. Implement a the TODO in the `calculate_total` function.\n4. Fix the `handle_events` method to update the game state only if a move is successful.\n ```python\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n return False\n if event.type == pygame.KEYDOWN:\n moved = False\n if event.key == pygame.K_UP:\n moved = self.game.move('UP')\n elif event.key == pygame.K_DOWN:\n moved = self.game.move('DOWN')\n elif event.key == pygame.K_LEFT:\n moved = self.game.move('LEFT')\n elif event.key == pygame.K_RIGHT:\n moved = self.game.move('RIGHT')\n if moved:\n # Update the game state only if a move was successful\n self.render()\n return True\n ```\n\"\"\",\n)\n\nWRITE_DRAFT = ActionNode(\n key=\"WriteDraft\",\n expected_type=str,\n instruction=\"Could you write draft code for move function in order to implement it?\",\n example=\"Draft: ...\",\n)\n\n\nWRITE_FUNCTION = ActionNode(\n key=\"WriteFunction\",\n expected_type=str,\n instruction=\"write code for the function not implemented.\",\n example=\"\"\"\n```Code\n...\n```\n\"\"\",\n)\n\n\nREWRITE_CODE = ActionNode(\n key=\"RewriteCode\",\n expected_type=str,\n instruction=\"\"\"rewrite code based on the Review and Actions\"\"\",\n example=\"\"\"\n```python\n## example.py\ndef calculate_total(price, quantity):\n total = price * quantity\n```\n\"\"\",\n)\n\n\nCODE_REVIEW_CONTEXT = \"\"\"\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\n\n# Context\n## System Design\n{\"Implementation approach\": \"我们将使用HTML、CSS和JavaScript来实现这个单机的响应式2048游戏。为了确保游戏性能流畅和响应式设计,我们会选择使用Vue.js框架,因为它易于上手且适合构建交互式界面。我们还将使用localStorage来记录玩家的最高分。\", \"File list\": [\"index.html\", \"styles.css\", \"main.js\", \"game.js\", \"storage.js\"], \"Data structures and interfaces\": \"classDiagram\\\n class Game {\\\n -board Array\\\n -score Number\\\n -bestScore Number\\\n +constructor()\\\n +startGame()\\\n +move(direction: String)\\\n +getBoard() Array\\\n +getScore() Number\\\n +getBestScore() Number\\\n +setBestScore(score: Number)\\\n }\\\n class Storage {\\\n +getBestScore() Number\\\n +setBestScore(score: Number)\\\n }\\\n class Main {\\\n +init()\\\n +bindEvents()\\\n }\\\n Game --> Storage : uses\\\n Main --> Game : uses\", \"Program call flow\": \"sequenceDiagram\\\n participant M as Main\\\n participant G as Game\\\n participant S as Storage\\\n M->>G: init()\\\n G->>S: getBestScore()\\\n S-->>G: return bestScore\\\n M->>G: bindEvents()\\\n M->>G: startGame()\\\n loop Game Loop\\\n M->>G: move(direction)\\\n G->>S: setBestScore(score)\\\n S-->>G: return\\\n end\", \"Anything UNCLEAR\": \"目前项目要求明确,没有不清楚的地方。\"}\n\n## Tasks\n{\"Required Python packages\": [\"无需Python包\"], \"Required Other language third-party packages\": [\"vue.js\"], \"Logic Analysis\": [[\"index.html\", \"作为游戏的入口文件和主要的HTML结构\"], [\"styles.css\", \"包含所有的CSS样式,确保游戏界面美观\"], [\"main.js\", \"包含Main类,负责初始化游戏和绑定事件\"], [\"game.js\", \"包含Game类,负责游戏逻辑,如开始游戏、移动方块等\"], [\"storage.js\", \"包含Storage类,用于获取和设置玩家的最高分\"]], \"Task list\": [\"index.html\", \"styles.css\", \"storage.js\", \"game.js\", \"main.js\"], \"Full API spec\": \"\", \"Shared Knowledge\": \"\\'game.js\\' 包含游戏逻辑相关的函数,被 \\'main.js\\' 调用。\", \"Anything UNCLEAR\": \"目前项目要求明确,没有不清楚的地方。\"}\n\n## Code Files\n----- index.html\n\n\n\n \n \n 2048游戏\n \n \n\n\n
\n

2048

\n
\n
\n
分数
\n
{{ score }}
\n
\n
\n
最高分
\n
{{ bestScore }}
\n
\n
\n
\n
\n
\n {{ cell !== 0 ? cell : \\'\\' }}\n
\n
\n
\n \n
\n\n \n \n \n \n\n\n\n----- styles.css\n/* styles.css */\nbody, html {\n margin: 0;\n padding: 0;\n font-family: \\'Arial\\', sans-serif;\n}\n\n#app {\n text-align: center;\n font-size: 18px;\n color: #776e65;\n}\n\nh1 {\n color: #776e65;\n font-size: 72px;\n font-weight: bold;\n margin: 20px 0;\n}\n\n.scores-container {\n display: flex;\n justify-content: center;\n margin-bottom: 20px;\n}\n\n.score-container, .best-container {\n background: #bbada0;\n padding: 10px;\n border-radius: 5px;\n margin: 0 10px;\n min-width: 100px;\n text-align: center;\n}\n\n.score-header, .best-header {\n color: #eee4da;\n font-size: 18px;\n margin-bottom: 5px;\n}\n\n.game-container {\n max-width: 500px;\n margin: 0 auto 20px;\n background: #bbada0;\n padding: 15px;\n border-radius: 10px;\n position: relative;\n}\n\n.grid-row {\n display: flex;\n}\n\n.grid-cell {\n background: #cdc1b4;\n width: 100px;\n height: 100px;\n margin: 5px;\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: 35px;\n font-weight: bold;\n color: #776e65;\n border-radius: 3px;\n}\n\n/* Dynamic classes for different number cells */\n.number-cell-2 {\n background: #eee4da;\n}\n\n.number-cell-4 {\n background: #ede0c8;\n}\n\n.number-cell-8 {\n background: #f2b179;\n color: #f9f6f2;\n}\n\n.number-cell-16 {\n background: #f59563;\n color: #f9f6f2;\n}\n\n.number-cell-32 {\n background: #f67c5f;\n color: #f9f6f2;\n}\n\n.number-cell-64 {\n background: #f65e3b;\n color: #f9f6f2;\n}\n\n.number-cell-128 {\n background: #edcf72;\n color: #f9f6f2;\n}\n\n.number-cell-256 {\n background: #edcc61;\n color: #f9f6f2;\n}\n\n.number-cell-512 {\n background: #edc850;\n color: #f9f6f2;\n}\n\n.number-cell-1024 {\n background: #edc53f;\n color: #f9f6f2;\n}\n\n.number-cell-2048 {\n background: #edc22e;\n color: #f9f6f2;\n}\n\n/* Larger numbers need smaller font sizes */\n.number-cell-1024, .number-cell-2048 {\n font-size: 30px;\n}\n\nbutton {\n background-color: #8f7a66;\n color: #f9f6f2;\n border: none;\n border-radius: 3px;\n padding: 10px 20px;\n font-size: 18px;\n cursor: pointer;\n outline: none;\n}\n\nbutton:hover {\n background-color: #9f8b76;\n}\n\n----- storage.js\n## storage.js\nclass Storage {\n // 获取最高分\n getBestScore() {\n // 尝试从localStorage中获取最高分,如果不存在则默认为0\n const bestScore = localStorage.getItem(\\'bestScore\\');\n return bestScore ? Number(bestScore) : 0;\n }\n\n // 设置最高分\n setBestScore(score) {\n // 将最高分设置到localStorage中\n localStorage.setItem(\\'bestScore\\', score.toString());\n }\n}\n\n\n\n## Code to be Reviewed: game.js\n```Code\n## game.js\nclass Game {\n constructor() {\n this.board = this.createEmptyBoard();\n this.score = 0;\n this.bestScore = 0;\n }\n\n createEmptyBoard() {\n const board = [];\n for (let i = 0; i < 4; i++) {\n board[i] = [0, 0, 0, 0];\n }\n return board;\n }\n\n startGame() {\n this.board = this.createEmptyBoard();\n this.score = 0;\n this.addRandomTile();\n this.addRandomTile();\n }\n\n addRandomTile() {\n let emptyCells = [];\n for (let r = 0; r < 4; r++) {\n for (let c = 0; c < 4; c++) {\n if (this.board[r][c] === 0) {\n emptyCells.push({ r, c });\n }\n }\n }\n if (emptyCells.length > 0) {\n let randomCell = emptyCells[Math.floor(Math.random() * emptyCells.length)];\n this.board[randomCell.r][randomCell.c] = Math.random() < 0.9 ? 2 : 4;\n }\n }\n\n move(direction) {\n // This function will handle the logic for moving tiles\n // in the specified direction and merging them\n // It will also update the score and add a new random tile if the move is successful\n // The actual implementation of this function is complex and would require\n // a significant amount of code to handle all the cases for moving and merging tiles\n // For the purposes of this example, we will not implement the full logic\n // Instead, we will just call addRandomTile to simulate a move\n this.addRandomTile();\n }\n\n getBoard() {\n return this.board;\n }\n\n getScore() {\n return this.score;\n }\n\n getBestScore() {\n return this.bestScore;\n }\n\n setBestScore(score) {\n this.bestScore = score;\n }\n}\n\n```\n\"\"\"\n\n\nCODE_REVIEW_SMALLEST_CONTEXT = \"\"\"\n## Code to be Reviewed: game.js\n```Code\n// game.js\nclass Game {\n constructor() {\n this.board = this.createEmptyBoard();\n this.score = 0;\n this.bestScore = 0;\n }\n\n createEmptyBoard() {\n const board = [];\n for (let i = 0; i < 4; i++) {\n board[i] = [0, 0, 0, 0];\n }\n return board;\n }\n\n startGame() {\n this.board = this.createEmptyBoard();\n this.score = 0;\n this.addRandomTile();\n this.addRandomTile();\n }\n\n addRandomTile() {\n let emptyCells = [];\n for (let r = 0; r < 4; r++) {\n for (let c = 0; c < 4; c++) {\n if (this.board[r][c] === 0) {\n emptyCells.push({ r, c });\n }\n }\n }\n if (emptyCells.length > 0) {\n let randomCell = emptyCells[Math.floor(Math.random() * emptyCells.length)];\n this.board[randomCell.r][randomCell.c] = Math.random() < 0.9 ? 2 : 4;\n }\n }\n\n move(direction) {\n // This function will handle the logic for moving tiles\n // in the specified direction and merging them\n // It will also update the score and add a new random tile if the move is successful\n // The actual implementation of this function is complex and would require\n // a significant amount of code to handle all the cases for moving and merging tiles\n // For the purposes of this example, we will not implement the full logic\n // Instead, we will just call addRandomTile to simulate a move\n this.addRandomTile();\n }\n\n getBoard() {\n return this.board;\n }\n\n getScore() {\n return this.score;\n }\n\n getBestScore() {\n return this.bestScore;\n }\n\n setBestScore(score) {\n this.bestScore = score;\n }\n}\n\n```\n\"\"\"\n\n\nCODE_REVIEW_SAMPLE = \"\"\"\n## Code Review: game.js\n1. The code partially implements the requirements. The `Game` class is missing the full implementation of the `move` method, which is crucial for the game\\'s functionality.\n2. The code logic is not completely correct. The `move` method is not implemented, which means the game cannot process player moves.\n3. The existing code follows the \"Data structures and interfaces\" in terms of class structure but lacks full method implementations.\n4. Not all functions are implemented. The `move` method is incomplete and does not handle the logic for moving and merging tiles.\n5. All necessary pre-dependencies seem to be imported since the code does not indicate the need for additional imports.\n6. The methods from other files (such as `Storage`) are not being used in the provided code snippet, but the class structure suggests that they will be used correctly.\n\n## Actions\n1. Implement the `move` method to handle tile movements and merging. This is a complex task that requires careful consideration of the game\\'s rules and logic. Here is a simplified version of how one might begin to implement the `move` method:\n ```javascript\n move(direction) {\n // Simplified logic for moving tiles up\n if (direction === \\'up\\') {\n for (let col = 0; col < 4; col++) {\n let tiles = this.board.map(row => row[col]).filter(val => val !== 0);\n let merged = [];\n for (let i = 0; i < tiles.length; i++) {\n if (tiles[i] === tiles[i + 1]) {\n tiles[i] *= 2;\n this.score += tiles[i];\n tiles[i + 1] = 0;\n merged.push(i);\n }\n }\n tiles = tiles.filter(val => val !== 0);\n while (tiles.length < 4) {\n tiles.push(0);\n }\n for (let row = 0; row < 4; row++) {\n this.board[row][col] = tiles[row];\n }\n }\n }\n // Additional logic needed for \\'down\\', \\'left\\', \\'right\\'\n // ...\n this.addRandomTile();\n }\n ```\n2. Integrate the `Storage` class methods to handle the best score. This means updating the `startGame` and `setBestScore` methods to use `Storage` for retrieving and setting the best score:\n ```javascript\n startGame() {\n this.board = this.createEmptyBoard();\n this.score = 0;\n this.bestScore = new Storage().getBestScore(); // Retrieve the best score from storage\n this.addRandomTile();\n this.addRandomTile();\n }\n\n setBestScore(score) {\n if (score > this.bestScore) {\n this.bestScore = score;\n new Storage().setBestScore(score); // Set the new best score in storage\n }\n }\n ```\n\n## Code Review Result\nLBTM\n\n```\n\"\"\"\n\n\nWRITE_CODE_NODE = ActionNode.from_children(\"WRITE_REVIEW_NODE\", [REVIEW, REVIEW_RESULT, NEXT_STEPS])\nWRITE_MOVE_NODE = ActionNode.from_children(\"WRITE_MOVE_NODE\", [WRITE_DRAFT, WRITE_FUNCTION])\n\n\nCR_FOR_MOVE_FUNCTION_BY_3 = \"\"\"\nThe move function implementation provided appears to be well-structured and follows a clear logic for moving and merging tiles in the specified direction. However, there are a few potential improvements that could be made to enhance the code:\n\n1. Encapsulation: The logic for moving and merging tiles could be encapsulated into smaller, reusable functions to improve readability and maintainability.\n\n2. Magic Numbers: There are some magic numbers (e.g., 4, 3) used in the loops that could be replaced with named constants for improved readability and easier maintenance.\n\n3. Comments: Adding comments to explain the logic and purpose of each section of the code can improve understanding for future developers who may need to work on or maintain the code.\n\n4. Error Handling: It's important to consider error handling for unexpected input or edge cases to ensure the function behaves as expected in all scenarios.\n\nOverall, the code could benefit from refactoring to improve readability, maintainability, and extensibility. If you would like, I can provide a refactored version of the move function that addresses these considerations.\n\"\"\"\n\n\nclass WriteCodeAN(Action):\n \"\"\"Write a code review for the context.\"\"\"\n\n async def run(self, context):\n self.llm.system_prompt = \"You are an outstanding engineer and can implement any code\"\n return await WRITE_MOVE_NODE.fill(context=context, llm=self.llm, schema=\"json\")\n\n\nasync def main():\n await WriteCodeAN().run(CODE_REVIEW_SMALLEST_CONTEXT)\n\n\nif __name__ == \"__main__\":\n asyncio.run(main())\n\n```\n\n---\nTranslate the code above into Mermaid Sequence Diagram.": "```mermaid\nsequenceDiagram\n participant User\n participant WriteCodeAN\n participant WRITE_MOVE_NODE\n\n User->>WriteCodeAN: Run\n WriteCodeAN->>WRITE_MOVE_NODE: Fill\n WRITE_MOVE_NODE->>WriteCodeAN: Filled\n WriteCodeAN->>User: Return Filled Context\n```", + "\n## context\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n-----\n\n## format example\n[CONTENT]\n{\n \"Required packages\": [\n \"flask==1.1.2\",\n \"bcrypt==3.2.0\"\n ],\n \"Required Other language third-party packages\": [\n \"No third-party dependencies required\"\n ],\n \"Logic Analysis\": [\n [\n \"game.py\",\n \"Contains Game class and ... functions\"\n ],\n [\n \"main.py\",\n \"Contains main function, from game import Game\"\n ]\n ],\n \"Task list\": [\n \"game.py\",\n \"main.py\"\n ],\n \"Full API spec\": \"openapi: 3.0.0 ...\",\n \"Shared Knowledge\": \"'game.py' contains functions shared across the project.\",\n \"Anything UNCLEAR\": \"Clarification needed on how to start and initialize third-party libraries.\"\n}\n[/CONTENT]\n\n## nodes: \": # \"\n- Required packages: typing.List[str] # Provide Required packages in requirements.txt format.\n- Required Other language third-party packages: typing.List[str] # List down the required packages for languages other than Python.\n- Logic Analysis: typing.List[typing.List[str]] # Provide a list of files with the classes/methods/functions to be implemented, including dependency analysis and imports.\n- Task list: typing.List[str] # Break down the tasks into a list of filenames, prioritized by dependency order.\n- Full API spec: # Describe all APIs using OpenAPI 3.0 spec that may be used by both frontend and backend. If front-end and back-end communication is not required, leave it blank.\n- Shared Knowledge: # Detail any shared knowledge, like common utility functions or configuration variables.\n- Anything UNCLEAR: # Mention any unclear aspects in the project management context and try to clarify them.\n\n\n## constraint\nLanguage: Please use the same language as Human INPUT.\nFormat: output wrapped inside [CONTENT][/CONTENT] like format example, nothing else.\n\n## action\nFollow instructions of nodes, generate output and make sure it follows the format example.\n": "[CONTENT]\n{\n \"Required packages\": [\n \"pygame==2.0.1\"\n ],\n \"Required Other language third-party packages\": [\n \"No third-party dependencies required\"\n ],\n \"Logic Analysis\": [\n [\n \"game.py\",\n \"Contains Game class and ... functions\"\n ],\n [\n \"main.py\",\n \"Contains main function, from game import Game\"\n ]\n ],\n \"Task list\": [\n \"game.py\",\n \"main.py\"\n ],\n \"Full API spec\": \"\",\n \"Shared Knowledge\": \"'game.py' contains functions shared across the project.\",\n \"Anything UNCLEAR\": \"Clarification needed on the scoring system and how the game over condition will be handled.\"\n}\n[/CONTENT]", + "\nNOTICE\nRole: You are a professional engineer; the main goal is to write google-style, elegant, modular, easy to read and maintain code\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Tasks\n{\"Required packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Legacy Code\n```Code\n\n```\n\n## Debug logs\n```text\n\n\n\n```\n\n## Bug Feedback logs\n```text\n\n```\n\n# Format example\n## Code: game.py\n```python\n## game.py\n...\n```\n\n# Instruction: Based on the context, follow \"Format example\", write code.\n\n## Code: game.py. Write code with triple quoto, based on the following attentions and context.\n1. Only One file: do your best to implement THIS ONLY ONE FILE.\n2. COMPLETE CODE: Your code will be part of the entire project, so please implement complete, reliable, reusable code snippets.\n3. Set default value: If there is any setting, ALWAYS SET A DEFAULT VALUE, ALWAYS USE STRONG TYPE AND EXPLICIT VARIABLE. AVOID circular import.\n4. Follow design: YOU MUST FOLLOW \"Data structures and interfaces\". DONT CHANGE ANY DESIGN. Do not use public member functions that do not exist in your design.\n5. CAREFULLY CHECK THAT YOU DONT MISS ANY NECESSARY CLASS/FUNCTION IN THIS FILE.\n6. Before using a external variable/module, make sure you import it first.\n7. Write out EVERY CODE DETAIL, DON'T LEAVE TODO.\n\n": "```python\n## game.py\n\nclass Game:\n def __init__(self):\n self.snake = []\n self.food = (0, 0)\n self.score = 0\n\n def update(self):\n # Update game state\n pass\n\n def draw(self):\n # Draw game\n pass\n\n def handle_input(self):\n # Handle user input\n pass\n\n def restart(self):\n # Restart game\n pass\n\n\nclass Snake:\n def __init__(self, start_pos: tuple, length: int, direction: str):\n self.body = []\n self.direction = direction\n\n def move(self):\n # Move snake\n pass\n\n def change_direction(self, new_direction: str):\n # Change snake direction\n pass\n\n def grow(self):\n # Grow snake\n pass\n```", + "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Tasks\n{\"Required packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Code Files\n\n\n\n## Code to be Reviewed: game.py\n```Code\n## game.py\n\nclass Game:\n def __init__(self):\n self.snake = []\n self.food = (0, 0)\n self.score = 0\n\n def update(self):\n # Update game state\n pass\n\n def draw(self):\n # Draw game\n pass\n\n def handle_input(self):\n # Handle user input\n pass\n\n def restart(self):\n # Restart game\n pass\n\n\nclass Snake:\n def __init__(self, start_pos: tuple, length: int, direction: str):\n self.body = []\n self.direction = direction\n\n def move(self):\n # Move snake\n pass\n\n def change_direction(self, new_direction: str):\n # Change snake direction\n pass\n\n def grow(self):\n # Grow snake\n pass\n\n```\n\n\n\n# Format example 1\n## Code Review: game.py\n1. No, we should fix the logic of class A due to ...\n2. ...\n3. ...\n4. No, function B is not implemented, ...\n5. ...\n6. ...\n\n## Actions\n1. Fix the `handle_events` method to update the game state only if a move is successful.\n ```python\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n return False\n if event.type == pygame.KEYDOWN:\n moved = False\n if event.key == pygame.K_UP:\n moved = self.game.move('UP')\n elif event.key == pygame.K_DOWN:\n moved = self.game.move('DOWN')\n elif event.key == pygame.K_LEFT:\n moved = self.game.move('LEFT')\n elif event.key == pygame.K_RIGHT:\n moved = self.game.move('RIGHT')\n if moved:\n # Update the game state only if a move was successful\n self.render()\n return True\n ```\n2. Implement function B\n\n## Code Review Result\nLBTM\n\n# Format example 2\n## Code Review: game.py\n1. Yes.\n2. Yes.\n3. Yes.\n4. Yes.\n5. Yes.\n6. Yes.\n\n## Actions\npass\n\n## Code Review Result\nLGTM\n\n\n\n# Instruction: Based on the actual code situation, follow one of the \"Format example\". Return only 1 file under review.\n\n## Code Review: Ordered List. Based on the \"Code to be Reviewed\", provide key, clear, concise, and specific answer. If any answer is no, explain how to fix it step by step.\n1. Is the code implemented as per the requirements? If not, how to achieve it? Analyse it step by step.\n2. Is the code logic completely correct? If there are errors, please indicate how to correct them.\n3. Does the existing code follow the \"Data structures and interfaces\"?\n4. Are all functions implemented? If there is no implementation, please indicate how to achieve it step by step.\n5. Have all necessary pre-dependencies been imported? If not, indicate which ones need to be imported\n6. Are methods from other files being reused correctly?\n\n## Actions: Ordered List. Things that should be done after CR, such as implementing class A and function B\n\n## Code Review Result: str. If the code doesn't have bugs, we don't need to rewrite it, so answer LGTM and stop. ONLY ANSWER LGTM/LBTM.\nLGTM/LBTM\n\n": "## Code Review: game.py\n1. No, the code is not implemented as per the requirements. The Game class should have a method to handle game over condition and update the scoring system.\n2. No, the code logic is not completely correct. The Snake class is missing the implementation of the move, change_direction, and grow methods.\n3. Yes, the existing code follows the \"Data structures and interfaces\" provided.\n4. No, the move, change_direction, and grow methods of the Snake class are not implemented. To achieve this, the methods need to be implemented with the appropriate logic for moving the snake, changing its direction, and growing its body.\n5. Yes, all necessary pre-dependencies have been imported.\n6. No, there are no methods from other files being reused in the current code.\n\n## Actions\n1. Implement a method in the Game class to handle the game over condition and update the scoring system.\n2. Implement the move, change_direction, and grow methods in the Snake class.\n3. Reuse methods from other files if necessary.\n\n## Code Review Result\nLBTM", + "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Tasks\n{\"Required packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Code Files\n\n\n\n## Code to be Reviewed: game.py\n```Code\n## game.py\n\nclass Game:\n def __init__(self):\n self.snake = []\n self.food = (0, 0)\n self.score = 0\n\n def update(self):\n # Update game state\n pass\n\n def draw(self):\n # Draw game\n pass\n\n def handle_input(self):\n # Handle user input\n pass\n\n def restart(self):\n # Restart game\n pass\n\n\nclass Snake:\n def __init__(self, start_pos: tuple, length: int, direction: str):\n self.body = []\n self.direction = direction\n\n def move(self):\n # Move snake\n pass\n\n def change_direction(self, new_direction: str):\n # Change snake direction\n pass\n\n def grow(self):\n # Grow snake\n pass\n\n```\n\n## Code Review: game.py\n1. No, the code is not implemented as per the requirements. The Game class should have a method to handle game over condition and update the scoring system.\n2. No, the code logic is not completely correct. The Snake class is missing the implementation of the move, change_direction, and grow methods.\n3. Yes, the existing code follows the \"Data structures and interfaces\" provided.\n4. No, the move, change_direction, and grow methods of the Snake class are not implemented. To achieve this, the methods need to be implemented with the appropriate logic for moving the snake, changing its direction, and growing its body.\n5. Yes, all necessary pre-dependencies have been imported.\n6. No, there are no methods from other files being reused in the current code.\n\n## Actions\n1. Implement a method in the Game class to handle the game over condition and update the scoring system.\n2. Implement the move, change_direction, and grow methods in the Snake class.\n3. Reuse methods from other files if necessary.\n\n## Code Review Result\nLBTM\n\n# Instruction: rewrite code based on the Code Review and Actions\n## Rewrite Code: CodeBlock. If it still has some bugs, rewrite game.py with triple quotes. Do your utmost to optimize THIS SINGLE FILE. Return all completed codes and prohibit the return of unfinished codes.\n```Code\n## game.py\n...\n```\n": "```Code\n## game.py\n\nclass Game:\n def __init__(self):\n self.snake = []\n self.food = (0, 0)\n self.score = 0\n\n def update(self):\n # Update game state\n pass\n\n def draw(self):\n # Draw game\n pass\n\n def handle_input(self):\n # Handle user input\n pass\n\n def restart(self):\n # Restart game\n pass\n\n def handle_game_over(self):\n # Handle game over condition\n pass\n\n def update_score(self):\n # Update scoring system\n pass\n\n\nclass Snake:\n def __init__(self, start_pos: tuple, length: int, direction: str):\n self.body = []\n self.direction = direction\n\n def move(self):\n # Move snake\n pass\n\n def change_direction(self, new_direction: str):\n # Change snake direction\n pass\n\n def grow(self):\n # Grow snake\n pass\n```", + "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Tasks\n{\"Required packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Code Files\n\n\n\n## Code to be Reviewed: game.py\n```Code\n## game.py\n\nclass Game:\n def __init__(self):\n self.snake = []\n self.food = (0, 0)\n self.score = 0\n\n def update(self):\n # Update game state\n pass\n\n def draw(self):\n # Draw game\n pass\n\n def handle_input(self):\n # Handle user input\n pass\n\n def restart(self):\n # Restart game\n pass\n\n def handle_game_over(self):\n # Handle game over condition\n pass\n\n def update_score(self):\n # Update scoring system\n pass\n\n\nclass Snake:\n def __init__(self, start_pos: tuple, length: int, direction: str):\n self.body = []\n self.direction = direction\n\n def move(self):\n # Move snake\n pass\n\n def change_direction(self, new_direction: str):\n # Change snake direction\n pass\n\n def grow(self):\n # Grow snake\n pass\n\n```\n\n\n\n# Format example 1\n## Code Review: game.py\n1. No, we should fix the logic of class A due to ...\n2. ...\n3. ...\n4. No, function B is not implemented, ...\n5. ...\n6. ...\n\n## Actions\n1. Fix the `handle_events` method to update the game state only if a move is successful.\n ```python\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n return False\n if event.type == pygame.KEYDOWN:\n moved = False\n if event.key == pygame.K_UP:\n moved = self.game.move('UP')\n elif event.key == pygame.K_DOWN:\n moved = self.game.move('DOWN')\n elif event.key == pygame.K_LEFT:\n moved = self.game.move('LEFT')\n elif event.key == pygame.K_RIGHT:\n moved = self.game.move('RIGHT')\n if moved:\n # Update the game state only if a move was successful\n self.render()\n return True\n ```\n2. Implement function B\n\n## Code Review Result\nLBTM\n\n# Format example 2\n## Code Review: game.py\n1. Yes.\n2. Yes.\n3. Yes.\n4. Yes.\n5. Yes.\n6. Yes.\n\n## Actions\npass\n\n## Code Review Result\nLGTM\n\n\n\n# Instruction: Based on the actual code situation, follow one of the \"Format example\". Return only 1 file under review.\n\n## Code Review: Ordered List. Based on the \"Code to be Reviewed\", provide key, clear, concise, and specific answer. If any answer is no, explain how to fix it step by step.\n1. Is the code implemented as per the requirements? If not, how to achieve it? Analyse it step by step.\n2. Is the code logic completely correct? If there are errors, please indicate how to correct them.\n3. Does the existing code follow the \"Data structures and interfaces\"?\n4. Are all functions implemented? If there is no implementation, please indicate how to achieve it step by step.\n5. Have all necessary pre-dependencies been imported? If not, indicate which ones need to be imported\n6. Are methods from other files being reused correctly?\n\n## Actions: Ordered List. Things that should be done after CR, such as implementing class A and function B\n\n## Code Review Result: str. If the code doesn't have bugs, we don't need to rewrite it, so answer LGTM and stop. ONLY ANSWER LGTM/LBTM.\nLGTM/LBTM\n\n": "## Code Review: game.py\n1. No, the code is not implemented as per the requirements. The `handle_game_over` and `update_score` methods are missing, and the `handle_input` method needs to be implemented to handle user input.\n2. The code logic is not completely correct. The `Snake` class `__init__` method does not initialize the `body` attribute with the `start_pos` and `length` parameters.\n3. The existing code follows the \"Data structures and interfaces\" for the `Game` and `Snake` classes.\n4. The `handle_game_over` and `update_score` methods are not implemented. The `handle_input` method needs to be implemented to handle user input.\n5. The necessary pre-dependencies have been imported.\n6. The methods from other files are not being reused in the existing code.\n\n## Actions\n1. Implement the `handle_game_over` method to handle the game over condition.\n2. Implement the `update_score` method to update the scoring system.\n3. Implement the `handle_input` method to handle user input and update the game state accordingly.\n\n## Code Review Result\nLBTM", + "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Tasks\n{\"Required packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Code Files\n\n\n\n## Code to be Reviewed: game.py\n```Code\n## game.py\n\nclass Game:\n def __init__(self):\n self.snake = []\n self.food = (0, 0)\n self.score = 0\n\n def update(self):\n # Update game state\n pass\n\n def draw(self):\n # Draw game\n pass\n\n def handle_input(self):\n # Handle user input\n pass\n\n def restart(self):\n # Restart game\n pass\n\n def handle_game_over(self):\n # Handle game over condition\n pass\n\n def update_score(self):\n # Update scoring system\n pass\n\n\nclass Snake:\n def __init__(self, start_pos: tuple, length: int, direction: str):\n self.body = []\n self.direction = direction\n\n def move(self):\n # Move snake\n pass\n\n def change_direction(self, new_direction: str):\n # Change snake direction\n pass\n\n def grow(self):\n # Grow snake\n pass\n\n```\n\n## Code Review: game.py\n1. No, the code is not implemented as per the requirements. The `handle_game_over` and `update_score` methods are missing, and the `handle_input` method needs to be implemented to handle user input.\n2. The code logic is not completely correct. The `Snake` class `__init__` method does not initialize the `body` attribute with the `start_pos` and `length` parameters.\n3. The existing code follows the \"Data structures and interfaces\" for the `Game` and `Snake` classes.\n4. The `handle_game_over` and `update_score` methods are not implemented. The `handle_input` method needs to be implemented to handle user input.\n5. The necessary pre-dependencies have been imported.\n6. The methods from other files are not being reused in the existing code.\n\n## Actions\n1. Implement the `handle_game_over` method to handle the game over condition.\n2. Implement the `update_score` method to update the scoring system.\n3. Implement the `handle_input` method to handle user input and update the game state accordingly.\n\n## Code Review Result\nLBTM\n\n# Instruction: rewrite code based on the Code Review and Actions\n## Rewrite Code: CodeBlock. If it still has some bugs, rewrite game.py with triple quotes. Do your utmost to optimize THIS SINGLE FILE. Return all completed codes and prohibit the return of unfinished codes.\n```Code\n## game.py\n...\n```\n": "```Code\n## game.py\n\nclass Game:\n def __init__(self):\n self.snake = []\n self.food = (0, 0)\n self.score = 0\n\n def update(self):\n # Update game state\n pass\n\n def draw(self):\n # Draw game\n pass\n\n def handle_input(self):\n # Handle user input\n pass\n\n def restart(self):\n # Restart game\n pass\n\n def handle_game_over(self):\n # Handle game over condition\n pass\n\n def update_score(self):\n # Update scoring system\n pass\n\n\nclass Snake:\n def __init__(self, start_pos: tuple, length: int, direction: str):\n self.body = [start_pos] # Initialize body with start_pos\n self.direction = direction\n\n def move(self):\n # Move snake\n pass\n\n def change_direction(self, new_direction: str):\n # Change snake direction\n pass\n\n def grow(self):\n # Grow snake\n pass\n```", + "\nNOTICE\nRole: You are a professional engineer; the main goal is to write google-style, elegant, modular, easy to read and maintain code\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Tasks\n{\"Required packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Legacy Code\n```Code\n----- game.py\n## game.py\n\nclass Game:\n def __init__(self):\n self.snake = []\n self.food = (0, 0)\n self.score = 0\n\n def update(self):\n # Update game state\n pass\n\n def draw(self):\n # Draw game\n pass\n\n def handle_input(self):\n # Handle user input\n pass\n\n def restart(self):\n # Restart game\n pass\n\n def handle_game_over(self):\n # Handle game over condition\n pass\n\n def update_score(self):\n # Update scoring system\n pass\n\n\nclass Snake:\n def __init__(self, start_pos: tuple, length: int, direction: str):\n self.body = [start_pos] # Initialize body with start_pos\n self.direction = direction\n\n def move(self):\n # Move snake\n pass\n\n def change_direction(self, new_direction: str):\n # Change snake direction\n pass\n\n def grow(self):\n # Grow snake\n pass\n\n```\n\n## Debug logs\n```text\n\n\n\n```\n\n## Bug Feedback logs\n```text\n\n```\n\n# Format example\n## Code: main.py\n```python\n## main.py\n...\n```\n\n# Instruction: Based on the context, follow \"Format example\", write code.\n\n## Code: main.py. Write code with triple quoto, based on the following attentions and context.\n1. Only One file: do your best to implement THIS ONLY ONE FILE.\n2. COMPLETE CODE: Your code will be part of the entire project, so please implement complete, reliable, reusable code snippets.\n3. Set default value: If there is any setting, ALWAYS SET A DEFAULT VALUE, ALWAYS USE STRONG TYPE AND EXPLICIT VARIABLE. AVOID circular import.\n4. Follow design: YOU MUST FOLLOW \"Data structures and interfaces\". DONT CHANGE ANY DESIGN. Do not use public member functions that do not exist in your design.\n5. CAREFULLY CHECK THAT YOU DONT MISS ANY NECESSARY CLASS/FUNCTION IN THIS FILE.\n6. Before using a external variable/module, make sure you import it first.\n7. Write out EVERY CODE DETAIL, DON'T LEAVE TODO.\n\n": "```python\n## main.py\n\nfrom game import Game\n\ndef main():\n game = Game()\n running = True\n\n while running:\n game.handle_input()\n game.update()\n game.draw()\n\n if game.handle_game_over():\n game.restart()\n\nif __name__ == \"__main__\":\n main()\n```", + "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Tasks\n{\"Required packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Code Files\n----- game.py\n## game.py\n\nclass Game:\n def __init__(self):\n self.snake = []\n self.food = (0, 0)\n self.score = 0\n\n def update(self):\n # Update game state\n pass\n\n def draw(self):\n # Draw game\n pass\n\n def handle_input(self):\n # Handle user input\n pass\n\n def restart(self):\n # Restart game\n pass\n\n def handle_game_over(self):\n # Handle game over condition\n pass\n\n def update_score(self):\n # Update scoring system\n pass\n\n\nclass Snake:\n def __init__(self, start_pos: tuple, length: int, direction: str):\n self.body = [start_pos] # Initialize body with start_pos\n self.direction = direction\n\n def move(self):\n # Move snake\n pass\n\n def change_direction(self, new_direction: str):\n # Change snake direction\n pass\n\n def grow(self):\n # Grow snake\n pass\n\n\n\n## Code to be Reviewed: main.py\n```Code\n## main.py\n\nfrom game import Game\n\ndef main():\n game = Game()\n running = True\n\n while running:\n game.handle_input()\n game.update()\n game.draw()\n\n if game.handle_game_over():\n game.restart()\n\nif __name__ == \"__main__\":\n main()\n\n```\n\n\n\n# Format example 1\n## Code Review: main.py\n1. No, we should fix the logic of class A due to ...\n2. ...\n3. ...\n4. No, function B is not implemented, ...\n5. ...\n6. ...\n\n## Actions\n1. Fix the `handle_events` method to update the game state only if a move is successful.\n ```python\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n return False\n if event.type == pygame.KEYDOWN:\n moved = False\n if event.key == pygame.K_UP:\n moved = self.game.move('UP')\n elif event.key == pygame.K_DOWN:\n moved = self.game.move('DOWN')\n elif event.key == pygame.K_LEFT:\n moved = self.game.move('LEFT')\n elif event.key == pygame.K_RIGHT:\n moved = self.game.move('RIGHT')\n if moved:\n # Update the game state only if a move was successful\n self.render()\n return True\n ```\n2. Implement function B\n\n## Code Review Result\nLBTM\n\n# Format example 2\n## Code Review: main.py\n1. Yes.\n2. Yes.\n3. Yes.\n4. Yes.\n5. Yes.\n6. Yes.\n\n## Actions\npass\n\n## Code Review Result\nLGTM\n\n\n\n# Instruction: Based on the actual code situation, follow one of the \"Format example\". Return only 1 file under review.\n\n## Code Review: Ordered List. Based on the \"Code to be Reviewed\", provide key, clear, concise, and specific answer. If any answer is no, explain how to fix it step by step.\n1. Is the code implemented as per the requirements? If not, how to achieve it? Analyse it step by step.\n2. Is the code logic completely correct? If there are errors, please indicate how to correct them.\n3. Does the existing code follow the \"Data structures and interfaces\"?\n4. Are all functions implemented? If there is no implementation, please indicate how to achieve it step by step.\n5. Have all necessary pre-dependencies been imported? If not, indicate which ones need to be imported\n6. Are methods from other files being reused correctly?\n\n## Actions: Ordered List. Things that should be done after CR, such as implementing class A and function B\n\n## Code Review Result: str. If the code doesn't have bugs, we don't need to rewrite it, so answer LGTM and stop. ONLY ANSWER LGTM/LBTM.\nLGTM/LBTM\n\n": "## Code Review: main.py\n1. The code is implemented as per the requirements, but the game over condition and scoring system need to be clarified and implemented.\n \n## Actions\n1. Clarify and implement the game over condition and scoring system in the `Game` class.\n\n## Code Review Result\nLBTM", + "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Tasks\n{\"Required packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Code Files\n----- game.py\n## game.py\n\nclass Game:\n def __init__(self):\n self.snake = []\n self.food = (0, 0)\n self.score = 0\n\n def update(self):\n # Update game state\n pass\n\n def draw(self):\n # Draw game\n pass\n\n def handle_input(self):\n # Handle user input\n pass\n\n def restart(self):\n # Restart game\n pass\n\n def handle_game_over(self):\n # Handle game over condition\n pass\n\n def update_score(self):\n # Update scoring system\n pass\n\n\nclass Snake:\n def __init__(self, start_pos: tuple, length: int, direction: str):\n self.body = [start_pos] # Initialize body with start_pos\n self.direction = direction\n\n def move(self):\n # Move snake\n pass\n\n def change_direction(self, new_direction: str):\n # Change snake direction\n pass\n\n def grow(self):\n # Grow snake\n pass\n\n\n\n## Code to be Reviewed: main.py\n```Code\n## main.py\n\nfrom game import Game\n\ndef main():\n game = Game()\n running = True\n\n while running:\n game.handle_input()\n game.update()\n game.draw()\n\n if game.handle_game_over():\n game.restart()\n\nif __name__ == \"__main__\":\n main()\n\n```\n\n## Code Review: main.py\n1. The code is implemented as per the requirements, but the game over condition and scoring system need to be clarified and implemented.\n \n## Actions\n1. Clarify and implement the game over condition and scoring system in the `Game` class.\n\n## Code Review Result\nLBTM\n\n# Instruction: rewrite code based on the Code Review and Actions\n## Rewrite Code: CodeBlock. If it still has some bugs, rewrite main.py with triple quotes. Do your utmost to optimize THIS SINGLE FILE. Return all completed codes and prohibit the return of unfinished codes.\n```Code\n## main.py\n...\n```\n": "```python\n## main.py\n\nfrom game import Game\n\ndef main():\n game = Game()\n running = True\n\n while running:\n game.handle_input()\n game.update()\n game.draw()\n\n if game.is_game_over():\n game.restart()\n\nif __name__ == \"__main__\":\n main()\n```", + "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Tasks\n{\"Required packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Code Files\n----- game.py\n## game.py\n\nclass Game:\n def __init__(self):\n self.snake = []\n self.food = (0, 0)\n self.score = 0\n\n def update(self):\n # Update game state\n pass\n\n def draw(self):\n # Draw game\n pass\n\n def handle_input(self):\n # Handle user input\n pass\n\n def restart(self):\n # Restart game\n pass\n\n def handle_game_over(self):\n # Handle game over condition\n pass\n\n def update_score(self):\n # Update scoring system\n pass\n\n\nclass Snake:\n def __init__(self, start_pos: tuple, length: int, direction: str):\n self.body = [start_pos] # Initialize body with start_pos\n self.direction = direction\n\n def move(self):\n # Move snake\n pass\n\n def change_direction(self, new_direction: str):\n # Change snake direction\n pass\n\n def grow(self):\n # Grow snake\n pass\n\n\n\n## Code to be Reviewed: main.py\n```Code\n## main.py\n\nfrom game import Game\n\ndef main():\n game = Game()\n running = True\n\n while running:\n game.handle_input()\n game.update()\n game.draw()\n\n if game.is_game_over():\n game.restart()\n\nif __name__ == \"__main__\":\n main()\n\n```\n\n\n\n# Format example 1\n## Code Review: main.py\n1. No, we should fix the logic of class A due to ...\n2. ...\n3. ...\n4. No, function B is not implemented, ...\n5. ...\n6. ...\n\n## Actions\n1. Fix the `handle_events` method to update the game state only if a move is successful.\n ```python\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n return False\n if event.type == pygame.KEYDOWN:\n moved = False\n if event.key == pygame.K_UP:\n moved = self.game.move('UP')\n elif event.key == pygame.K_DOWN:\n moved = self.game.move('DOWN')\n elif event.key == pygame.K_LEFT:\n moved = self.game.move('LEFT')\n elif event.key == pygame.K_RIGHT:\n moved = self.game.move('RIGHT')\n if moved:\n # Update the game state only if a move was successful\n self.render()\n return True\n ```\n2. Implement function B\n\n## Code Review Result\nLBTM\n\n# Format example 2\n## Code Review: main.py\n1. Yes.\n2. Yes.\n3. Yes.\n4. Yes.\n5. Yes.\n6. Yes.\n\n## Actions\npass\n\n## Code Review Result\nLGTM\n\n\n\n# Instruction: Based on the actual code situation, follow one of the \"Format example\". Return only 1 file under review.\n\n## Code Review: Ordered List. Based on the \"Code to be Reviewed\", provide key, clear, concise, and specific answer. If any answer is no, explain how to fix it step by step.\n1. Is the code implemented as per the requirements? If not, how to achieve it? Analyse it step by step.\n2. Is the code logic completely correct? If there are errors, please indicate how to correct them.\n3. Does the existing code follow the \"Data structures and interfaces\"?\n4. Are all functions implemented? If there is no implementation, please indicate how to achieve it step by step.\n5. Have all necessary pre-dependencies been imported? If not, indicate which ones need to be imported\n6. Are methods from other files being reused correctly?\n\n## Actions: Ordered List. Things that should be done after CR, such as implementing class A and function B\n\n## Code Review Result: str. If the code doesn't have bugs, we don't need to rewrite it, so answer LGTM and stop. ONLY ANSWER LGTM/LBTM.\nLGTM/LBTM\n\n": "## Code Review: main.py\n1. The code is implemented as per the requirements, but the `is_game_over` method is missing. To achieve this, we need to implement the `is_game_over` method in the Game class to check for the game over condition.\n2. The code logic is correct, but the missing `is_game_over` method needs to be added to handle the game over condition.\n3. The existing code follows the \"Data structures and interfaces\" as per the provided class diagram.\n4. All functions are implemented, but the `is_game_over` method is missing in the Game class. To achieve this, we need to implement the `is_game_over` method to handle the game over condition.\n5. All necessary pre-dependencies have been imported.\n6. Methods from other files are not being reused in the current code.\n\n## Actions\n1. Implement the `is_game_over` method in the Game class to handle the game over condition.\n\n## Code Review Result\nLBTM", + "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Tasks\n{\"Required packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"'game.py' contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Code Files\n----- game.py\n## game.py\n\nclass Game:\n def __init__(self):\n self.snake = []\n self.food = (0, 0)\n self.score = 0\n\n def update(self):\n # Update game state\n pass\n\n def draw(self):\n # Draw game\n pass\n\n def handle_input(self):\n # Handle user input\n pass\n\n def restart(self):\n # Restart game\n pass\n\n def handle_game_over(self):\n # Handle game over condition\n pass\n\n def update_score(self):\n # Update scoring system\n pass\n\n\nclass Snake:\n def __init__(self, start_pos: tuple, length: int, direction: str):\n self.body = [start_pos] # Initialize body with start_pos\n self.direction = direction\n\n def move(self):\n # Move snake\n pass\n\n def change_direction(self, new_direction: str):\n # Change snake direction\n pass\n\n def grow(self):\n # Grow snake\n pass\n\n\n\n## Code to be Reviewed: main.py\n```Code\n## main.py\n\nfrom game import Game\n\ndef main():\n game = Game()\n running = True\n\n while running:\n game.handle_input()\n game.update()\n game.draw()\n\n if game.is_game_over():\n game.restart()\n\nif __name__ == \"__main__\":\n main()\n\n```\n\n## Code Review: main.py\n1. The code is implemented as per the requirements, but the `is_game_over` method is missing. To achieve this, we need to implement the `is_game_over` method in the Game class to check for the game over condition.\n2. The code logic is correct, but the missing `is_game_over` method needs to be added to handle the game over condition.\n3. The existing code follows the \"Data structures and interfaces\" as per the provided class diagram.\n4. All functions are implemented, but the `is_game_over` method is missing in the Game class. To achieve this, we need to implement the `is_game_over` method to handle the game over condition.\n5. All necessary pre-dependencies have been imported.\n6. Methods from other files are not being reused in the current code.\n\n## Actions\n1. Implement the `is_game_over` method in the Game class to handle the game over condition.\n\n## Code Review Result\nLBTM\n\n# Instruction: rewrite code based on the Code Review and Actions\n## Rewrite Code: CodeBlock. If it still has some bugs, rewrite main.py with triple quotes. Do your utmost to optimize THIS SINGLE FILE. Return all completed codes and prohibit the return of unfinished codes.\n```Code\n## main.py\n...\n```\n": "```python\n## main.py\n\nfrom game import Game\n\ndef main():\n game = Game()\n running = True\n\n while running:\n game.handle_input()\n game.update()\n game.draw()\n\n if game.is_game_over(): # Check for game over condition\n game.restart()\n\nif __name__ == \"__main__\":\n main()\n```", + "You are a python code to Mermaid Sequence Diagram translator in function detail#SYSTEM_MSG_END#```python\n#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\"\"\"\n@Author : alexanderwu\n@File : write_review.py\n\"\"\"\nimport asyncio\nfrom typing import List, Literal\n\nfrom metagpt.actions import Action\nfrom metagpt.actions.action_node import ActionNode\n\nREVIEW = ActionNode(\n key=\"Review\",\n expected_type=List[str],\n instruction=\"Act as an experienced reviewer and critically assess the given output. Provide specific and\"\n \" constructive feedback, highlighting areas for improvement and suggesting changes.\",\n example=[\n \"The logic in the function `calculate_total` seems flawed. Shouldn't it consider the discount rate as well?\",\n \"The TODO function is not implemented yet? Should we implement it before commit?\",\n ],\n)\n\nREVIEW_RESULT = ActionNode(\n key=\"ReviewResult\",\n expected_type=Literal[\"LGTM\", \"LBTM\"],\n instruction=\"LGTM/LBTM. If the code is fully implemented, \" \"give a LGTM, otherwise provide a LBTM.\",\n example=\"LBTM\",\n)\n\nNEXT_STEPS = ActionNode(\n key=\"NextSteps\",\n expected_type=str,\n instruction=\"Based on the code review outcome, suggest actionable steps. This can include code changes, \"\n \"refactoring suggestions, or any follow-up tasks.\",\n example=\"\"\"1. Refactor the `process_data` method to improve readability and efficiency.\n2. Cover edge cases in the `validate_user` function.\n3. Implement a the TODO in the `calculate_total` function.\n4. Fix the `handle_events` method to update the game state only if a move is successful.\n ```python\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n return False\n if event.type == pygame.KEYDOWN:\n moved = False\n if event.key == pygame.K_UP:\n moved = self.game.move('UP')\n elif event.key == pygame.K_DOWN:\n moved = self.game.move('DOWN')\n elif event.key == pygame.K_LEFT:\n moved = self.game.move('LEFT')\n elif event.key == pygame.K_RIGHT:\n moved = self.game.move('RIGHT')\n if moved:\n # Update the game state only if a move was successful\n self.render()\n return True\n ```\n\"\"\",\n)\n\nWRITE_DRAFT = ActionNode(\n key=\"WriteDraft\",\n expected_type=str,\n instruction=\"Could you write draft code for move function in order to implement it?\",\n example=\"Draft: ...\",\n)\n\n\nWRITE_FUNCTION = ActionNode(\n key=\"WriteFunction\",\n expected_type=str,\n instruction=\"write code for the function not implemented.\",\n example=\"\"\"\n```Code\n...\n```\n\"\"\",\n)\n\n\nREWRITE_CODE = ActionNode(\n key=\"RewriteCode\",\n expected_type=str,\n instruction=\"\"\"rewrite code based on the Review and Actions\"\"\",\n example=\"\"\"\n```python\n## example.py\ndef calculate_total(price, quantity):\n total = price * quantity\n```\n\"\"\",\n)\n\n\nCODE_REVIEW_CONTEXT = \"\"\"\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\n\n# Context\n## System Design\n{\"Implementation approach\": \"我们将使用HTML、CSS和JavaScript来实现这个单机的响应式2048游戏。为了确保游戏性能流畅和响应式设计,我们会选择使用Vue.js框架,因为它易于上手且适合构建交互式界面。我们还将使用localStorage来记录玩家的最高分。\", \"File list\": [\"index.html\", \"styles.css\", \"main.js\", \"game.js\", \"storage.js\"], \"Data structures and interfaces\": \"classDiagram\\\n class Game {\\\n -board Array\\\n -score Number\\\n -bestScore Number\\\n +constructor()\\\n +startGame()\\\n +move(direction: String)\\\n +getBoard() Array\\\n +getScore() Number\\\n +getBestScore() Number\\\n +setBestScore(score: Number)\\\n }\\\n class Storage {\\\n +getBestScore() Number\\\n +setBestScore(score: Number)\\\n }\\\n class Main {\\\n +init()\\\n +bindEvents()\\\n }\\\n Game --> Storage : uses\\\n Main --> Game : uses\", \"Program call flow\": \"sequenceDiagram\\\n participant M as Main\\\n participant G as Game\\\n participant S as Storage\\\n M->>G: init()\\\n G->>S: getBestScore()\\\n S-->>G: return bestScore\\\n M->>G: bindEvents()\\\n M->>G: startGame()\\\n loop Game Loop\\\n M->>G: move(direction)\\\n G->>S: setBestScore(score)\\\n S-->>G: return\\\n end\", \"Anything UNCLEAR\": \"目前项目要求明确,没有不清楚的地方。\"}\n\n## Tasks\n{\"Required packages\": [\"无需Python包\"], \"Required Other language third-party packages\": [\"vue.js\"], \"Logic Analysis\": [[\"index.html\", \"作为游戏的入口文件和主要的HTML结构\"], [\"styles.css\", \"包含所有的CSS样式,确保游戏界面美观\"], [\"main.js\", \"包含Main类,负责初始化游戏和绑定事件\"], [\"game.js\", \"包含Game类,负责游戏逻辑,如开始游戏、移动方块等\"], [\"storage.js\", \"包含Storage类,用于获取和设置玩家的最高分\"]], \"Task list\": [\"index.html\", \"styles.css\", \"storage.js\", \"game.js\", \"main.js\"], \"Full API spec\": \"\", \"Shared Knowledge\": \"\\'game.js\\' 包含游戏逻辑相关的函数,被 \\'main.js\\' 调用。\", \"Anything UNCLEAR\": \"目前项目要求明确,没有不清楚的地方。\"}\n\n## Code Files\n----- index.html\n\n\n\n \n \n 2048游戏\n \n \n\n\n
\n

2048

\n
\n
\n
分数
\n
{{ score }}
\n
\n
\n
最高分
\n
{{ bestScore }}
\n
\n
\n
\n
\n
\n {{ cell !== 0 ? cell : \\'\\' }}\n
\n
\n
\n \n
\n\n \n \n \n \n\n\n\n----- styles.css\n/* styles.css */\nbody, html {\n margin: 0;\n padding: 0;\n font-family: \\'Arial\\', sans-serif;\n}\n\n#app {\n text-align: center;\n font-size: 18px;\n color: #776e65;\n}\n\nh1 {\n color: #776e65;\n font-size: 72px;\n font-weight: bold;\n margin: 20px 0;\n}\n\n.scores-container {\n display: flex;\n justify-content: center;\n margin-bottom: 20px;\n}\n\n.score-container, .best-container {\n background: #bbada0;\n padding: 10px;\n border-radius: 5px;\n margin: 0 10px;\n min-width: 100px;\n text-align: center;\n}\n\n.score-header, .best-header {\n color: #eee4da;\n font-size: 18px;\n margin-bottom: 5px;\n}\n\n.game-container {\n max-width: 500px;\n margin: 0 auto 20px;\n background: #bbada0;\n padding: 15px;\n border-radius: 10px;\n position: relative;\n}\n\n.grid-row {\n display: flex;\n}\n\n.grid-cell {\n background: #cdc1b4;\n width: 100px;\n height: 100px;\n margin: 5px;\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: 35px;\n font-weight: bold;\n color: #776e65;\n border-radius: 3px;\n}\n\n/* Dynamic classes for different number cells */\n.number-cell-2 {\n background: #eee4da;\n}\n\n.number-cell-4 {\n background: #ede0c8;\n}\n\n.number-cell-8 {\n background: #f2b179;\n color: #f9f6f2;\n}\n\n.number-cell-16 {\n background: #f59563;\n color: #f9f6f2;\n}\n\n.number-cell-32 {\n background: #f67c5f;\n color: #f9f6f2;\n}\n\n.number-cell-64 {\n background: #f65e3b;\n color: #f9f6f2;\n}\n\n.number-cell-128 {\n background: #edcf72;\n color: #f9f6f2;\n}\n\n.number-cell-256 {\n background: #edcc61;\n color: #f9f6f2;\n}\n\n.number-cell-512 {\n background: #edc850;\n color: #f9f6f2;\n}\n\n.number-cell-1024 {\n background: #edc53f;\n color: #f9f6f2;\n}\n\n.number-cell-2048 {\n background: #edc22e;\n color: #f9f6f2;\n}\n\n/* Larger numbers need smaller font sizes */\n.number-cell-1024, .number-cell-2048 {\n font-size: 30px;\n}\n\nbutton {\n background-color: #8f7a66;\n color: #f9f6f2;\n border: none;\n border-radius: 3px;\n padding: 10px 20px;\n font-size: 18px;\n cursor: pointer;\n outline: none;\n}\n\nbutton:hover {\n background-color: #9f8b76;\n}\n\n----- storage.js\n## storage.js\nclass Storage {\n // 获取最高分\n getBestScore() {\n // 尝试从localStorage中获取最高分,如果不存在则默认为0\n const bestScore = localStorage.getItem(\\'bestScore\\');\n return bestScore ? Number(bestScore) : 0;\n }\n\n // 设置最高分\n setBestScore(score) {\n // 将最高分设置到localStorage中\n localStorage.setItem(\\'bestScore\\', score.toString());\n }\n}\n\n\n\n## Code to be Reviewed: game.js\n```Code\n## game.js\nclass Game {\n constructor() {\n this.board = this.createEmptyBoard();\n this.score = 0;\n this.bestScore = 0;\n }\n\n createEmptyBoard() {\n const board = [];\n for (let i = 0; i < 4; i++) {\n board[i] = [0, 0, 0, 0];\n }\n return board;\n }\n\n startGame() {\n this.board = this.createEmptyBoard();\n this.score = 0;\n this.addRandomTile();\n this.addRandomTile();\n }\n\n addRandomTile() {\n let emptyCells = [];\n for (let r = 0; r < 4; r++) {\n for (let c = 0; c < 4; c++) {\n if (this.board[r][c] === 0) {\n emptyCells.push({ r, c });\n }\n }\n }\n if (emptyCells.length > 0) {\n let randomCell = emptyCells[Math.floor(Math.random() * emptyCells.length)];\n this.board[randomCell.r][randomCell.c] = Math.random() < 0.9 ? 2 : 4;\n }\n }\n\n move(direction) {\n // This function will handle the logic for moving tiles\n // in the specified direction and merging them\n // It will also update the score and add a new random tile if the move is successful\n // The actual implementation of this function is complex and would require\n // a significant amount of code to handle all the cases for moving and merging tiles\n // For the purposes of this example, we will not implement the full logic\n // Instead, we will just call addRandomTile to simulate a move\n this.addRandomTile();\n }\n\n getBoard() {\n return this.board;\n }\n\n getScore() {\n return this.score;\n }\n\n getBestScore() {\n return this.bestScore;\n }\n\n setBestScore(score) {\n this.bestScore = score;\n }\n}\n\n```\n\"\"\"\n\n\nCODE_REVIEW_SMALLEST_CONTEXT = \"\"\"\n## Code to be Reviewed: game.js\n```Code\n// game.js\nclass Game {\n constructor() {\n this.board = this.createEmptyBoard();\n this.score = 0;\n this.bestScore = 0;\n }\n\n createEmptyBoard() {\n const board = [];\n for (let i = 0; i < 4; i++) {\n board[i] = [0, 0, 0, 0];\n }\n return board;\n }\n\n startGame() {\n this.board = this.createEmptyBoard();\n this.score = 0;\n this.addRandomTile();\n this.addRandomTile();\n }\n\n addRandomTile() {\n let emptyCells = [];\n for (let r = 0; r < 4; r++) {\n for (let c = 0; c < 4; c++) {\n if (this.board[r][c] === 0) {\n emptyCells.push({ r, c });\n }\n }\n }\n if (emptyCells.length > 0) {\n let randomCell = emptyCells[Math.floor(Math.random() * emptyCells.length)];\n this.board[randomCell.r][randomCell.c] = Math.random() < 0.9 ? 2 : 4;\n }\n }\n\n move(direction) {\n // This function will handle the logic for moving tiles\n // in the specified direction and merging them\n // It will also update the score and add a new random tile if the move is successful\n // The actual implementation of this function is complex and would require\n // a significant amount of code to handle all the cases for moving and merging tiles\n // For the purposes of this example, we will not implement the full logic\n // Instead, we will just call addRandomTile to simulate a move\n this.addRandomTile();\n }\n\n getBoard() {\n return this.board;\n }\n\n getScore() {\n return this.score;\n }\n\n getBestScore() {\n return this.bestScore;\n }\n\n setBestScore(score) {\n this.bestScore = score;\n }\n}\n\n```\n\"\"\"\n\n\nCODE_REVIEW_SAMPLE = \"\"\"\n## Code Review: game.js\n1. The code partially implements the requirements. The `Game` class is missing the full implementation of the `move` method, which is crucial for the game\\'s functionality.\n2. The code logic is not completely correct. The `move` method is not implemented, which means the game cannot process player moves.\n3. The existing code follows the \"Data structures and interfaces\" in terms of class structure but lacks full method implementations.\n4. Not all functions are implemented. The `move` method is incomplete and does not handle the logic for moving and merging tiles.\n5. All necessary pre-dependencies seem to be imported since the code does not indicate the need for additional imports.\n6. The methods from other files (such as `Storage`) are not being used in the provided code snippet, but the class structure suggests that they will be used correctly.\n\n## Actions\n1. Implement the `move` method to handle tile movements and merging. This is a complex task that requires careful consideration of the game\\'s rules and logic. Here is a simplified version of how one might begin to implement the `move` method:\n ```javascript\n move(direction) {\n // Simplified logic for moving tiles up\n if (direction === \\'up\\') {\n for (let col = 0; col < 4; col++) {\n let tiles = this.board.map(row => row[col]).filter(val => val !== 0);\n let merged = [];\n for (let i = 0; i < tiles.length; i++) {\n if (tiles[i] === tiles[i + 1]) {\n tiles[i] *= 2;\n this.score += tiles[i];\n tiles[i + 1] = 0;\n merged.push(i);\n }\n }\n tiles = tiles.filter(val => val !== 0);\n while (tiles.length < 4) {\n tiles.push(0);\n }\n for (let row = 0; row < 4; row++) {\n this.board[row][col] = tiles[row];\n }\n }\n }\n // Additional logic needed for \\'down\\', \\'left\\', \\'right\\'\n // ...\n this.addRandomTile();\n }\n ```\n2. Integrate the `Storage` class methods to handle the best score. This means updating the `startGame` and `setBestScore` methods to use `Storage` for retrieving and setting the best score:\n ```javascript\n startGame() {\n this.board = this.createEmptyBoard();\n this.score = 0;\n this.bestScore = new Storage().getBestScore(); // Retrieve the best score from storage\n this.addRandomTile();\n this.addRandomTile();\n }\n\n setBestScore(score) {\n if (score > this.bestScore) {\n this.bestScore = score;\n new Storage().setBestScore(score); // Set the new best score in storage\n }\n }\n ```\n\n## Code Review Result\nLBTM\n\n```\n\"\"\"\n\n\nWRITE_CODE_NODE = ActionNode.from_children(\"WRITE_REVIEW_NODE\", [REVIEW, REVIEW_RESULT, NEXT_STEPS])\nWRITE_MOVE_NODE = ActionNode.from_children(\"WRITE_MOVE_NODE\", [WRITE_DRAFT, WRITE_FUNCTION])\n\n\nCR_FOR_MOVE_FUNCTION_BY_3 = \"\"\"\nThe move function implementation provided appears to be well-structured and follows a clear logic for moving and merging tiles in the specified direction. However, there are a few potential improvements that could be made to enhance the code:\n\n1. Encapsulation: The logic for moving and merging tiles could be encapsulated into smaller, reusable functions to improve readability and maintainability.\n\n2. Magic Numbers: There are some magic numbers (e.g., 4, 3) used in the loops that could be replaced with named constants for improved readability and easier maintenance.\n\n3. Comments: Adding comments to explain the logic and purpose of each section of the code can improve understanding for future developers who may need to work on or maintain the code.\n\n4. Error Handling: It's important to consider error handling for unexpected input or edge cases to ensure the function behaves as expected in all scenarios.\n\nOverall, the code could benefit from refactoring to improve readability, maintainability, and extensibility. If you would like, I can provide a refactored version of the move function that addresses these considerations.\n\"\"\"\n\n\nclass WriteCodeAN(Action):\n \"\"\"Write a code review for the context.\"\"\"\n\n async def run(self, context):\n self.llm.system_prompt = \"You are an outstanding engineer and can implement any code\"\n return await WRITE_MOVE_NODE.fill(context=context, llm=self.llm, schema=\"json\")\n\n\nasync def main():\n await WriteCodeAN().run(CODE_REVIEW_SMALLEST_CONTEXT)\n\n\nif __name__ == \"__main__\":\n asyncio.run(main())\n\n```\n\n---\nTranslate the code above into Mermaid Sequence Diagram.": "```mermaid\nsequenceDiagram\n participant User\n participant WriteCodeAN\n participant WRITE_MOVE_NODE\n\n User->>WriteCodeAN: Run\n WriteCodeAN->>WRITE_MOVE_NODE: Fill\n WRITE_MOVE_NODE->>WriteCodeAN: Filled\n WriteCodeAN->>User: Return Filled Context\n```", "You are a function parser.#MSG_SEP#You can convert spoken words into function parameters.#SYSTEM_MSG_END#text_to_image function parameters description:\nparameter `text`: The text used for image conversion.\nparameter `size_type`: size type\n\n---\nExamples:\nIf want you to do `Draw a girl`, return `text_to_image(text=\"Draw a girl\", size_type=\"512x512\")` brief and clear.\nIf want you to do `Draw an apple`, return `text_to_image(text=\"Draw an apple\", size_type=\"512x512\")` brief and clear.\n\n---\n\nRefer to the `text_to_image` function description, and fill in the function parameters according to the example \"I want you to do xx\" in the Examples section.\nNow I want you to do `Draw an apple`, return function parameters in Examples format above, brief and clear.": "`text_to_image(text=\"Draw an apple\", size_type=\"512x512\")`", - "\nNOTICE\nRole: You are a professional engineer; the main goal is to write google-style, elegant, modular, easy to read and maintain code\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## Design\n{\"Implementation approach\": \"We will use the Pygame library to create the game interface and handle user input. The game logic will be implemented using Python classes and data structures.\", \"File list\": [\"main.py\", \"game.py\"], \"Data structures and interfaces\": \"classDiagram\\n class Game {\\n -grid: List[List[int]]\\n -score: int\\n -game_over: bool\\n +__init__()\\n +reset_game()\\n +move(direction: str)\\n +is_game_over() bool\\n +get_empty_cells() List[Tuple[int, int]]\\n +add_new_tile()\\n +get_score() int\\n }\\n class UI {\\n -game: Game\\n +__init__(game: Game)\\n +draw_grid()\\n +draw_score()\\n +draw_game_over()\\n +handle_input()\\n }\\n Game --> UI\", \"Program call flow\": \"sequenceDiagram\\n participant M as Main\\n participant G as Game\\n participant U as UI\\n M->>G: reset_game()\\n M->>U: draw_grid()\\n M->>U: draw_score()\\n M->>U: handle_input()\\n U->>G: move(direction)\\n G->>G: add_new_tile()\\n G->>U: draw_grid()\\n G->>U: draw_score()\\n G->>U: draw_game_over()\\n G->>G: is_game_over()\\n G->>G: get_empty_cells()\\n G->>G: get_score()\", \"Anything UNCLEAR\": \"...\"}\n\n## Tasks\n{\"Required Python packages\": [\"pygame==2.0.1\"], \"Required Other language third-party packages\": [\"No third-party dependencies required\"], \"Logic Analysis\": [[\"game.py\", \"Contains Game class and related functions for game logic\"], [\"main.py\", \"Contains main function, initializes the game and UI\"]], \"Task list\": [\"game.py\", \"main.py\"], \"Full API spec\": \"\", \"Shared Knowledge\": \"The game logic will be implemented using Python classes and data structures. The Pygame library will be used to create the game interface and handle user input.\", \"Anything UNCLEAR\": \"...\"}\n\n## Legacy Code\n```Code\n----- main.py\nif __name__ == \"__main__\":\nmain()\n```\n\n## Debug logs\n```text\n\n\n\n```\n\n## Bug Feedback logs\n```text\n\n```\n\n# Format example\n## Code: game.py\n```python\n## game.py\n...\n```\n\n# Instruction: Based on the context, follow \"Format example\", write code.\n\n## Code: game.py. Write code with triple quoto, based on the following attentions and context.\n1. Only One file: do your best to implement THIS ONLY ONE FILE.\n2. COMPLETE CODE: Your code will be part of the entire project, so please implement complete, reliable, reusable code snippets.\n3. Set default value: If there is any setting, ALWAYS SET A DEFAULT VALUE, ALWAYS USE STRONG TYPE AND EXPLICIT VARIABLE. AVOID circular import.\n4. Follow design: YOU MUST FOLLOW \"Data structures and interfaces\". DONT CHANGE ANY DESIGN. Do not use public member functions that do not exist in your design.\n5. CAREFULLY CHECK THAT YOU DONT MISS ANY NECESSARY CLASS/FUNCTION IN THIS FILE.\n6. Before using a external variable/module, make sure you import it first.\n7. Write out EVERY CODE DETAIL, DON'T LEAVE TODO.\n\n": "```python\n## game.py\n\nfrom typing import List, Tuple\nimport random\n\nclass Game:\n def __init__(self):\n self.grid: List[List[int]] = [[0 for _ in range(4)] for _ in range(4)]\n self.score: int = 0\n self.game_over: bool = False\n\n def reset_game(self):\n self.grid = [[0 for _ in range(4)] for _ in range(4)]\n self.score = 0\n self.game_over = False\n self.add_new_tile()\n self.add_new_tile()\n\n def move(self, direction: str):\n # Implement the logic to move the tiles in the specified direction\n pass\n\n def is_game_over(self) -> bool:\n # Implement the logic to check if the game is over\n pass\n\n def get_empty_cells(self) -> List[Tuple[int, int]]:\n # Implement the logic to get the coordinates of empty cells in the grid\n pass\n\n def add_new_tile(self):\n empty_cells = self.get_empty_cells()\n if empty_cells:\n row, col = random.choice(empty_cells)\n self.grid[row][col] = 2 if random.random() < 0.9 else 4\n\n def get_score(self) -> int:\n return self.score\n```", + "\nNOTICE\nRole: You are a professional engineer; the main goal is to write google-style, elegant, modular, easy to read and maintain code\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## Design\n{\"Implementation approach\": \"We will use the Pygame library to create the game interface and handle user input. The game logic will be implemented using Python classes and data structures.\", \"File list\": [\"main.py\", \"game.py\"], \"Data structures and interfaces\": \"classDiagram\\n class Game {\\n -grid: List[List[int]]\\n -score: int\\n -game_over: bool\\n +__init__()\\n +reset_game()\\n +move(direction: str)\\n +is_game_over() bool\\n +get_empty_cells() List[Tuple[int, int]]\\n +add_new_tile()\\n +get_score() int\\n }\\n class UI {\\n -game: Game\\n +__init__(game: Game)\\n +draw_grid()\\n +draw_score()\\n +draw_game_over()\\n +handle_input()\\n }\\n Game --> UI\", \"Program call flow\": \"sequenceDiagram\\n participant M as Main\\n participant G as Game\\n participant U as UI\\n M->>G: reset_game()\\n M->>U: draw_grid()\\n M->>U: draw_score()\\n M->>U: handle_input()\\n U->>G: move(direction)\\n G->>G: add_new_tile()\\n G->>U: draw_grid()\\n G->>U: draw_score()\\n G->>U: draw_game_over()\\n G->>G: is_game_over()\\n G->>G: get_empty_cells()\\n G->>G: get_score()\", \"Anything UNCLEAR\": \"...\"}\n\n## Tasks\n{\"Required packages\": [\"pygame==2.0.1\"], \"Required Other language third-party packages\": [\"No third-party dependencies required\"], \"Logic Analysis\": [[\"game.py\", \"Contains Game class and related functions for game logic\"], [\"main.py\", \"Contains main function, initializes the game and UI\"]], \"Task list\": [\"game.py\", \"main.py\"], \"Full API spec\": \"\", \"Shared Knowledge\": \"The game logic will be implemented using Python classes and data structures. The Pygame library will be used to create the game interface and handle user input.\", \"Anything UNCLEAR\": \"...\"}\n\n## Legacy Code\n```Code\n----- main.py\nif __name__ == \"__main__\":\nmain()\n```\n\n## Debug logs\n```text\n\n\n\n```\n\n## Bug Feedback logs\n```text\n\n```\n\n# Format example\n## Code: game.py\n```python\n## game.py\n...\n```\n\n# Instruction: Based on the context, follow \"Format example\", write code.\n\n## Code: game.py. Write code with triple quoto, based on the following attentions and context.\n1. Only One file: do your best to implement THIS ONLY ONE FILE.\n2. COMPLETE CODE: Your code will be part of the entire project, so please implement complete, reliable, reusable code snippets.\n3. Set default value: If there is any setting, ALWAYS SET A DEFAULT VALUE, ALWAYS USE STRONG TYPE AND EXPLICIT VARIABLE. AVOID circular import.\n4. Follow design: YOU MUST FOLLOW \"Data structures and interfaces\". DONT CHANGE ANY DESIGN. Do not use public member functions that do not exist in your design.\n5. CAREFULLY CHECK THAT YOU DONT MISS ANY NECESSARY CLASS/FUNCTION IN THIS FILE.\n6. Before using a external variable/module, make sure you import it first.\n7. Write out EVERY CODE DETAIL, DON'T LEAVE TODO.\n\n": "```python\n## game.py\n\nfrom typing import List, Tuple\nimport random\n\nclass Game:\n def __init__(self):\n self.grid: List[List[int]] = [[0 for _ in range(4)] for _ in range(4)]\n self.score: int = 0\n self.game_over: bool = False\n\n def reset_game(self):\n self.grid = [[0 for _ in range(4)] for _ in range(4)]\n self.score = 0\n self.game_over = False\n self.add_new_tile()\n self.add_new_tile()\n\n def move(self, direction: str):\n # Implement the logic to move the tiles in the specified direction\n pass\n\n def is_game_over(self) -> bool:\n # Implement the logic to check if the game is over\n pass\n\n def get_empty_cells(self) -> List[Tuple[int, int]]:\n # Implement the logic to get the coordinates of empty cells in the grid\n pass\n\n def add_new_tile(self):\n empty_cells = self.get_empty_cells()\n if empty_cells:\n row, col = random.choice(empty_cells)\n self.grid[row][col] = 2 if random.random() < 0.9 else 4\n\n def get_score(self) -> int:\n return self.score\n```", "\n## context\n\n### Project Name\n\n\n### Original Requirements\n开发一个基于大语言模型与私有知识库的搜索引擎,希望可以基于大语言模型进行搜索总结\n\n### Search Information\n-\n\n\n-----\n\n## format example\n[CONTENT]\n{\n \"Language\": \"en_us\",\n \"Programming Language\": \"Python\",\n \"Original Requirements\": \"Create a 2048 game\",\n \"Project Name\": \"game_2048\",\n \"Product Goals\": [\n \"Create an engaging user experience\",\n \"Improve accessibility, be responsive\",\n \"More beautiful UI\"\n ],\n \"User Stories\": [\n \"As a player, I want to be able to choose difficulty levels\",\n \"As a player, I want to see my score after each game\",\n \"As a player, I want to get restart button when I lose\",\n \"As a player, I want to see beautiful UI that make me feel good\",\n \"As a player, I want to play game via mobile phone\"\n ],\n \"Competitive Analysis\": [\n \"2048 Game A: Simple interface, lacks responsive features\",\n \"play2048.co: Beautiful and responsive UI with my best score shown\",\n \"2048game.com: Responsive UI with my best score shown, but many ads\"\n ],\n \"Competitive Quadrant Chart\": \"quadrantChart\\n title \\\"Reach and engagement of campaigns\\\"\\n x-axis \\\"Low Reach\\\" --> \\\"High Reach\\\"\\n y-axis \\\"Low Engagement\\\" --> \\\"High Engagement\\\"\\n quadrant-1 \\\"We should expand\\\"\\n quadrant-2 \\\"Need to promote\\\"\\n quadrant-3 \\\"Re-evaluate\\\"\\n quadrant-4 \\\"May be improved\\\"\\n \\\"Campaign A\\\": [0.3, 0.6]\\n \\\"Campaign B\\\": [0.45, 0.23]\\n \\\"Campaign C\\\": [0.57, 0.69]\\n \\\"Campaign D\\\": [0.78, 0.34]\\n \\\"Campaign E\\\": [0.40, 0.34]\\n \\\"Campaign F\\\": [0.35, 0.78]\\n \\\"Our Target Product\\\": [0.5, 0.6]\",\n \"Requirement Analysis\": \"\",\n \"Requirement Pool\": [\n [\n \"P0\",\n \"The main code ...\"\n ],\n [\n \"P0\",\n \"The game algorithm ...\"\n ]\n ],\n \"UI Design draft\": \"Basic function description with a simple style and layout.\",\n \"Anything UNCLEAR\": \"\"\n}\n[/CONTENT]\n\n## nodes: \": # \"\n- Language: # Provide the language used in the project, typically matching the user's requirement language.\n- Programming Language: # Python/JavaScript or other mainstream programming language.\n- Original Requirements: # Place the original user's requirements here.\n- Project Name: # According to the content of \"Original Requirements,\" name the project using snake case style , like 'game_2048' or 'simple_crm.\n- Product Goals: typing.List[str] # Provide up to three clear, orthogonal product goals.\n- User Stories: typing.List[str] # Provide up to 3 to 5 scenario-based user stories.\n- Competitive Analysis: typing.List[str] # Provide 5 to 7 competitive products.\n- Competitive Quadrant Chart: # Use mermaid quadrantChart syntax. Distribute scores evenly between 0 and 1\n- Requirement Analysis: # Provide a detailed analysis of the requirements.\n- Requirement Pool: typing.List[typing.List[str]] # List down the top-5 requirements with their priority (P0, P1, P2).\n- UI Design draft: # Provide a simple description of UI elements, functions, style, and layout.\n- Anything UNCLEAR: # Mention any aspects of the project that are unclear and try to clarify them.\n\n\n## constraint\nLanguage: Please use the same language as Human INPUT.\nFormat: output wrapped inside [CONTENT][/CONTENT] like format example, nothing else.\n\n## action\nFollow instructions of nodes, generate output and make sure it follows the format example.\n": "[CONTENT]\n{\n \"Language\": \"zh_cn\",\n \"Programming Language\": \"Python\",\n \"Original Requirements\": \"开发一个基于大语言模型与私有知识库的搜索引擎,希望可以基于大语言模型进行搜索总结\",\n \"Project Name\": \"language_model_search\",\n \"Product Goals\": [\n \"提供基于大语言模型的高效搜索功能\",\n \"整合私有知识库,实现个性化搜索结果\",\n \"实现搜索结果的自动总结功能\"\n ],\n \"User Stories\": [\n \"作为用户,我希望能够快速找到我需要的信息\",\n \"作为用户,我希望搜索结果能够根据我的偏好进行个性化排序\",\n \"作为用户,我希望搜索结果能够自动总结,方便我快速了解内容\"\n ],\n \"Competitive Analysis\": [\n \"搜索引擎A: 提供基于大语言模型的搜索功能,但个性化程度较低\",\n \"知识库B: 整合私有知识库,但搜索速度较慢\",\n \"语言模型搜索C: 提供搜索结果自动总结功能,但搜索准确度有待提高\"\n ],\n \"Competitive Quadrant Chart\": \"quadrantChart\\n title \\\"搜索引擎竞争分析\\\"\\n x-axis \\\"低搜索准确度\\\" --> \\\"高搜索准确度\\\"\\n y-axis \\\"低个性化程度\\\" --> \\\"高个性化程度\\\"\\n quadrant-1 \\\"需改进\\\"\\n quadrant-2 \\\"需提升\\\"\\n quadrant-3 \\\"重新评估\\\"\\n quadrant-4 \\\"扩展发展\\\"\\n \\\"搜索引擎A\\\": [0.6, 0.3]\\n \\\"知识库B\\\": [0.4, 0.2]\\n \\\"语言模型搜索C\\\": [0.7, 0.5]\\n \\\"我们的目标产品\\\": [0.8, 0.7]\",\n \"Requirement Analysis\": \"\",\n \"Requirement Pool\": [\n [\n \"P0\",\n \"基于大语言模型的高效搜索功能\"\n ],\n [\n \"P1\",\n \"整合私有知识库,实现个性化搜索结果\"\n ],\n [\n \"P2\",\n \"实现搜索结果的自动总结功能\"\n ]\n ],\n \"UI Design draft\": \"搜索页面简洁明了,搜索结果清晰展示,提供个性化排序和自动总结功能。\",\n \"Anything UNCLEAR\": \"\"\n}\n[/CONTENT]", "\n## context\nNone\n\n-----\n\n## format example\n[CONTENT]\n{\n \"Project Name\": \"game_2048\"\n}\n[/CONTENT]\n\n## nodes: \": # \"\n- Project Name: # According to the content of \"Original Requirements,\" name the project using snake case style with underline, like 'game_2048' or 'simple_crm.\n\n\n## constraint\nLanguage: Please use the same language as Human INPUT.\nFormat: output wrapped inside [CONTENT][/CONTENT] like format example, nothing else.\n\n## action\nFollow instructions of nodes, generate output and make sure it follows the format example.\n": "[CONTENT]\n{\n \"Project Name\": \"game_2048\"\n}\n[/CONTENT]", "\n## context\nCompare the key's value of nodes_output and the corresponding requirements one by one. If a key's value that does not match the requirement is found, provide the comment content on how to modify it. No output is required for matching keys.\n\n### nodes_output\n{\"Project Name\": {\"value\": \"game snake\", \"requirement\": \"According to the content of \\\"Original Requirements,\\\" name the project using snake case style with underline, like 'game_2048' or 'simple_crm.\"}}\n\n-----\n\n## format example\n[CONTENT]\n{\n \"key1\": \"comment1\",\n \"key2\": \"comment2\",\n \"keyn\": \"commentn\"\n}\n[/CONTENT]\n\n## nodes: \": # \"\n- key1: # the first key name of mismatch key\n- key2: # the second key name of mismatch key\n- keyn: # the last key name of mismatch key\n\n## constraint\nFormat: output wrapped inside [CONTENT][/CONTENT] like format example, nothing else.\n\n## action\nFollow format example's json format, generate output and make sure it follows the format example.\n": "[CONTENT]\n{\n \"Project Name\": \"Use snake case style with underline, like 'game_2048' or 'simple_crm.'\"\n}\n[/CONTENT]", @@ -278,17 +278,17 @@ "Given an instruction and several choices, decide which choice is most promising. Analyze each choice in detail, then conclude in the last line \"The best choice is {s}\", where s the integer id of the choice.\nChoice 2:\nConsider a flat and stable surface, such as a grassy field or a gym mat.\n": "Choice 2: Considering a flat and stable surface, such as a grassy field or a gym mat, is the most promising option. This choice provides a safe and secure environment for the activity, reducing the risk of injury. A grassy field offers a natural and soft surface, while a gym mat provides cushioning and stability. Both options allow for comfortable movement and can accommodate various physical activities.\n\nThe best choice is 2.", "Given an instruction and several choices, decide which choice is most promising. Analyze each choice in detail, then conclude in the last line \"The best choice is {s}\", where s the integer id of the choice.\nChoice 4:\nPractice near a wall or with a spotter for safety.\n": "Choice 4: \n\nPractice near a wall or with a spotter for safety.\n\nAnalyzing this choice, practicing near a wall or with a spotter provides a safety measure to prevent accidents or injuries. When practicing a new skill or exercise, having a wall nearby can provide support and stability, reducing the risk of falling or losing balance. Similarly, having a spotter can offer assistance and guidance, ensuring that the practice is done safely and effectively.\n\nThe best choice is 4.", "### Requirements\n1. Please summarize the latest dialogue based on the reference information (secondary) and dialogue history (primary). Do not include text that is irrelevant to the conversation.\n- The context is for reference only. If it is irrelevant to the user's search request history, please reduce its reference and usage.\n2. If there are citable links in the context, annotate them in the main text in the format [main text](citation link). If there are none in the context, do not write links.\n3. The reply should be graceful, clear, non-repetitive, smoothly written, and of moderate length, in {LANG}.\n\n### Dialogue History (For example)\nA: MLOps competitors\n\n### Current Question (For example)\nA: MLOps competitors\n\n### Current Reply (For example)\n1. Alteryx Designer: etc. if any\n2. Matlab: ditto\n3. IBM SPSS Statistics\n4. RapidMiner Studio\n5. DataRobot AI Platform\n6. Databricks Lakehouse Platform\n7. Amazon SageMaker\n8. Dataiku\n#SYSTEM_MSG_END#\n### Reference Information\nABC cleanser is preferred by many with oily skin.\nL'Oreal is a popular brand with many positive reviews.\n\n### Dialogue History\n\nuser: Which facial cleanser is good for oily skin?\n\n### Current Question\nuser: Which facial cleanser is good for oily skin?\n\n### Current Reply: Based on the information, please write the reply to the Question\n\n\n": "Based on the information provided, ABC cleanser is preferred by many with oily skin. It is a popular choice for individuals with oily skin due to its effectiveness. Additionally, L'Oreal is a well-known brand with many positive reviews, and they offer a range of products suitable for oily skin. Both of these options could be good choices for individuals with oily skin.", - "\n## context\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n-----\n\n## format example\n[CONTENT]\n{\n \"Required Python packages\": [\n \"flask==1.1.2\",\n \"bcrypt==3.2.0\"\n ],\n \"Required Other language third-party packages\": [\n \"No third-party dependencies required\"\n ],\n \"Logic Analysis\": [\n [\n \"game.py\",\n \"Contains Game class and ... functions\"\n ],\n [\n \"main.py\",\n \"Contains main function, from game import Game\"\n ]\n ],\n \"Task list\": [\n \"game.py\",\n \"main.py\"\n ],\n \"Full API spec\": \"openapi: 3.0.0 ...\",\n \"Shared Knowledge\": \"`game.py` contains functions shared across the project.\",\n \"Anything UNCLEAR\": \"Clarification needed on how to start and initialize third-party libraries.\"\n}\n[/CONTENT]\n\n## nodes: \": # \"\n- Required Python packages: typing.List[str] # Provide required Python packages in requirements.txt format.\n- Required Other language third-party packages: typing.List[str] # List down the required packages for languages other than Python.\n- Logic Analysis: typing.List[typing.List[str]] # Provide a list of files with the classes/methods/functions to be implemented, including dependency analysis and imports.\n- Task list: typing.List[str] # Break down the tasks into a list of filenames, prioritized by dependency order.\n- Full API spec: # Describe all APIs using OpenAPI 3.0 spec that may be used by both frontend and backend. If front-end and back-end communication is not required, leave it blank.\n- Shared Knowledge: # Detail any shared knowledge, like common utility functions or configuration variables.\n- Anything UNCLEAR: # Mention any unclear aspects in the project management context and try to clarify them.\n\n\n## constraint\nLanguage: Please use the same language as Human INPUT.\nFormat: output wrapped inside [CONTENT][/CONTENT] like format example, nothing else.\n\n## action\nFollow instructions of nodes, generate output and make sure it follows the format example.\n": "[CONTENT]\n{\n \"Required Python packages\": [\n \"pygame==2.0.1\"\n ],\n \"Required Other language third-party packages\": [\n \"No third-party dependencies required\"\n ],\n \"Logic Analysis\": [\n [\n \"game.py\",\n \"Contains Game class and ... functions\"\n ],\n [\n \"main.py\",\n \"Contains main function, from game import Game\"\n ]\n ],\n \"Task list\": [\n \"game.py\",\n \"main.py\"\n ],\n \"Full API spec\": \"\",\n \"Shared Knowledge\": \"`game.py` contains functions shared across the project.\",\n \"Anything UNCLEAR\": \"Clarification needed on the scoring system and how the game over condition will be handled.\"\n}\n[/CONTENT]", - "\nNOTICE\nRole: You are a professional engineer; the main goal is to write google-style, elegant, modular, easy to read and maintain code\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Task\n{\"Required Python packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"`game.py` contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Legacy Code\n```Code\n\n```\n\n## Debug logs\n```text\n\n\n\n```\n\n## Bug Feedback logs\n```text\n\n```\n\n# Format example\n## Code: game.py\n```python\n## game.py\n...\n```\n\n# Instruction: Based on the context, follow \"Format example\", write code.\n\n## Code: game.py. Write code with triple quoto, based on the following attentions and context.\n1. Only One file: do your best to implement THIS ONLY ONE FILE.\n2. COMPLETE CODE: Your code will be part of the entire project, so please implement complete, reliable, reusable code snippets.\n3. Set default value: If there is any setting, ALWAYS SET A DEFAULT VALUE, ALWAYS USE STRONG TYPE AND EXPLICIT VARIABLE. AVOID circular import.\n4. Follow design: YOU MUST FOLLOW \"Data structures and interfaces\". DONT CHANGE ANY DESIGN. Do not use public member functions that do not exist in your design.\n5. CAREFULLY CHECK THAT YOU DONT MISS ANY NECESSARY CLASS/FUNCTION IN THIS FILE.\n6. Before using a external variable/module, make sure you import it first.\n7. Write out EVERY CODE DETAIL, DON'T LEAVE TODO.\n\n": "```python\n## game.py\n\nimport pygame\nimport random\n\nclass Snake:\n def __init__(self, start_pos: tuple, length: int, direction: str):\n self.body = [start_pos]\n self.direction = direction\n self.length = length\n\n def move(self):\n head = self.body[0]\n x, y = head\n if self.direction == 'UP':\n new_head = (x, y - 10)\n elif self.direction == 'DOWN':\n new_head = (x, y + 10)\n elif self.direction == 'LEFT':\n new_head = (x - 10, y)\n elif self.direction == 'RIGHT':\n new_head = (x + 10, y)\n self.body = [new_head] + self.body[:-1]\n\n def change_direction(self, new_direction: str):\n if new_direction in ['UP', 'DOWN', 'LEFT', 'RIGHT']:\n self.direction = new_direction\n\n def grow(self):\n self.length += 1\n self.body.append((0, 0)) # Set default value\n\nclass Game:\n def __init__(self):\n self.snake = Snake((100, 50), 1, 'RIGHT') # Set default value\n self.food = (200, 200) # Set default value\n self.score = 0 # Set default value\n\n def update(self):\n self.snake.move()\n if self.snake.body[0] == self.food:\n self.snake.grow()\n self.food = (random.randrange(0, 400, 10), random.randrange(0, 400, 10)) # Set default value\n\n def draw(self):\n pass # Set default value\n\n def handle_input(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n pygame.quit()\n quit()\n if event.type == pygame.KEYDOWN:\n if event.key == pygame.K_UP:\n self.snake.change_direction('UP')\n elif event.key == pygame.K_DOWN:\n self.snake.change_direction('DOWN')\n elif event.key == pygame.K_LEFT:\n self.snake.change_direction('LEFT')\n elif event.key == pygame.K_RIGHT:\n self.snake.change_direction('RIGHT')\n\n def restart(self):\n self.snake = Snake((100, 50), 1, 'RIGHT') # Set default value\n self.food = (200, 200) # Set default value\n self.score = 0 # Set default value\n```", - "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Task\n{\"Required Python packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"`game.py` contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Code Files\n\n\n\n## Code to be Reviewed: game.py\n```Code\n## game.py\n\nimport pygame\nimport random\n\nclass Snake:\n def __init__(self, start_pos: tuple, length: int, direction: str):\n self.body = [start_pos]\n self.direction = direction\n self.length = length\n\n def move(self):\n head = self.body[0]\n x, y = head\n if self.direction == 'UP':\n new_head = (x, y - 10)\n elif self.direction == 'DOWN':\n new_head = (x, y + 10)\n elif self.direction == 'LEFT':\n new_head = (x - 10, y)\n elif self.direction == 'RIGHT':\n new_head = (x + 10, y)\n self.body = [new_head] + self.body[:-1]\n\n def change_direction(self, new_direction: str):\n if new_direction in ['UP', 'DOWN', 'LEFT', 'RIGHT']:\n self.direction = new_direction\n\n def grow(self):\n self.length += 1\n self.body.append((0, 0)) # Set default value\n\nclass Game:\n def __init__(self):\n self.snake = Snake((100, 50), 1, 'RIGHT') # Set default value\n self.food = (200, 200) # Set default value\n self.score = 0 # Set default value\n\n def update(self):\n self.snake.move()\n if self.snake.body[0] == self.food:\n self.snake.grow()\n self.food = (random.randrange(0, 400, 10), random.randrange(0, 400, 10)) # Set default value\n\n def draw(self):\n pass # Set default value\n\n def handle_input(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n pygame.quit()\n quit()\n if event.type == pygame.KEYDOWN:\n if event.key == pygame.K_UP:\n self.snake.change_direction('UP')\n elif event.key == pygame.K_DOWN:\n self.snake.change_direction('DOWN')\n elif event.key == pygame.K_LEFT:\n self.snake.change_direction('LEFT')\n elif event.key == pygame.K_RIGHT:\n self.snake.change_direction('RIGHT')\n\n def restart(self):\n self.snake = Snake((100, 50), 1, 'RIGHT') # Set default value\n self.food = (200, 200) # Set default value\n self.score = 0 # Set default value\n\n```\n\n\n\n# Format example 1\n## Code Review: game.py\n1. No, we should fix the logic of class A due to ...\n2. ...\n3. ...\n4. No, function B is not implemented, ...\n5. ...\n6. ...\n\n## Actions\n1. Fix the `handle_events` method to update the game state only if a move is successful.\n ```python\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n return False\n if event.type == pygame.KEYDOWN:\n moved = False\n if event.key == pygame.K_UP:\n moved = self.game.move('UP')\n elif event.key == pygame.K_DOWN:\n moved = self.game.move('DOWN')\n elif event.key == pygame.K_LEFT:\n moved = self.game.move('LEFT')\n elif event.key == pygame.K_RIGHT:\n moved = self.game.move('RIGHT')\n if moved:\n # Update the game state only if a move was successful\n self.render()\n return True\n ```\n2. Implement function B\n\n## Code Review Result\nLBTM\n\n# Format example 2\n## Code Review: game.py\n1. Yes.\n2. Yes.\n3. Yes.\n4. Yes.\n5. Yes.\n6. Yes.\n\n## Actions\npass\n\n## Code Review Result\nLGTM\n\n\n\n# Instruction: Based on the actual code situation, follow one of the \"Format example\". Return only 1 file under review.\n\n## Code Review: Ordered List. Based on the \"Code to be Reviewed\", provide key, clear, concise, and specific answer. If any answer is no, explain how to fix it step by step.\n1. Is the code implemented as per the requirements? If not, how to achieve it? Analyse it step by step.\n2. Is the code logic completely correct? If there are errors, please indicate how to correct them.\n3. Does the existing code follow the \"Data structures and interfaces\"?\n4. Are all functions implemented? If there is no implementation, please indicate how to achieve it step by step.\n5. Have all necessary pre-dependencies been imported? If not, indicate which ones need to be imported\n6. Are methods from other files being reused correctly?\n\n## Actions: Ordered List. Things that should be done after CR, such as implementing class A and function B\n\n## Code Review Result: str. If the code doesn't have bugs, we don't need to rewrite it, so answer LGTM and stop. ONLY ANSWER LGTM/LBTM.\nLGTM/LBTM\n\n": "## Code Review: game.py\n1. The code is implemented as per the requirements. The Snake and Game classes are defined, and the necessary methods for updating, drawing, handling input, and restarting the game are implemented.\n2. The code logic is correct. The Snake class methods for moving, changing direction, and growing the snake are implemented properly. The Game class methods for updating the game state, handling input, and restarting the game are also correctly implemented.\n3. The existing code follows the defined \"Data structures and interfaces\" with the Snake and Game classes and their respective methods.\n4. All necessary functions are implemented as per the requirements.\n5. The necessary pre-dependencies, including the pygame package, are imported.\n6. The methods from other files are not being reused in the current code.\n\n## Actions\nNo actions required.\n\n## Code Review Result\nLGTM", - "\nNOTICE\nRole: You are a professional engineer; the main goal is to write google-style, elegant, modular, easy to read and maintain code\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Task\n{\"Required Python packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"`game.py` contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Legacy Code\n```Code\n\n```\n\n## Debug logs\n```text\n\n\n\n```\n\n## Bug Feedback logs\n```text\n\n```\n\n# Format example\n## Code: main.py\n```python\n## main.py\n...\n```\n\n# Instruction: Based on the context, follow \"Format example\", write code.\n\n## Code: main.py. Write code with triple quoto, based on the following attentions and context.\n1. Only One file: do your best to implement THIS ONLY ONE FILE.\n2. COMPLETE CODE: Your code will be part of the entire project, so please implement complete, reliable, reusable code snippets.\n3. Set default value: If there is any setting, ALWAYS SET A DEFAULT VALUE, ALWAYS USE STRONG TYPE AND EXPLICIT VARIABLE. AVOID circular import.\n4. Follow design: YOU MUST FOLLOW \"Data structures and interfaces\". DONT CHANGE ANY DESIGN. Do not use public member functions that do not exist in your design.\n5. CAREFULLY CHECK THAT YOU DONT MISS ANY NECESSARY CLASS/FUNCTION IN THIS FILE.\n6. Before using a external variable/module, make sure you import it first.\n7. Write out EVERY CODE DETAIL, DON'T LEAVE TODO.\n\n": "```python\n## main.py\n\nfrom game import Game\n\ndef main():\n game = Game()\n running = True\n\n while running:\n game.update()\n game.draw()\n game.handle_input()\n\n if game.game_over:\n game.restart()\n\nif __name__ == \"__main__\":\n main()\n```", - "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Task\n{\"Required Python packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"`game.py` contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Code Files\n\n\n\n## Code to be Reviewed: main.py\n```Code\n## main.py\n\nfrom game import Game\n\ndef main():\n game = Game()\n running = True\n\n while running:\n game.update()\n game.draw()\n game.handle_input()\n\n if game.game_over:\n game.restart()\n\nif __name__ == \"__main__\":\n main()\n\n```\n\n\n\n# Format example 1\n## Code Review: main.py\n1. No, we should fix the logic of class A due to ...\n2. ...\n3. ...\n4. No, function B is not implemented, ...\n5. ...\n6. ...\n\n## Actions\n1. Fix the `handle_events` method to update the game state only if a move is successful.\n ```python\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n return False\n if event.type == pygame.KEYDOWN:\n moved = False\n if event.key == pygame.K_UP:\n moved = self.game.move('UP')\n elif event.key == pygame.K_DOWN:\n moved = self.game.move('DOWN')\n elif event.key == pygame.K_LEFT:\n moved = self.game.move('LEFT')\n elif event.key == pygame.K_RIGHT:\n moved = self.game.move('RIGHT')\n if moved:\n # Update the game state only if a move was successful\n self.render()\n return True\n ```\n2. Implement function B\n\n## Code Review Result\nLBTM\n\n# Format example 2\n## Code Review: main.py\n1. Yes.\n2. Yes.\n3. Yes.\n4. Yes.\n5. Yes.\n6. Yes.\n\n## Actions\npass\n\n## Code Review Result\nLGTM\n\n\n\n# Instruction: Based on the actual code situation, follow one of the \"Format example\". Return only 1 file under review.\n\n## Code Review: Ordered List. Based on the \"Code to be Reviewed\", provide key, clear, concise, and specific answer. If any answer is no, explain how to fix it step by step.\n1. Is the code implemented as per the requirements? If not, how to achieve it? Analyse it step by step.\n2. Is the code logic completely correct? If there are errors, please indicate how to correct them.\n3. Does the existing code follow the \"Data structures and interfaces\"?\n4. Are all functions implemented? If there is no implementation, please indicate how to achieve it step by step.\n5. Have all necessary pre-dependencies been imported? If not, indicate which ones need to be imported\n6. Are methods from other files being reused correctly?\n\n## Actions: Ordered List. Things that should be done after CR, such as implementing class A and function B\n\n## Code Review Result: str. If the code doesn't have bugs, we don't need to rewrite it, so answer LGTM and stop. ONLY ANSWER LGTM/LBTM.\nLGTM/LBTM\n\n": "## Code Review: main.py\n1. Yes, the code is implemented as per the requirements.\n2. Yes, the code logic is completely correct.\n3. Yes, the existing code follows the \"Data structures and interfaces\".\n4. No, the `game_over` condition is not handled in the code. To achieve it, we need to add the implementation of the `game_over` condition in the `Game` class.\n5. Yes, all necessary pre-dependencies have been imported.\n6. Yes, methods from other files are being reused correctly.\n\n## Actions\n4. Implement the `game_over` condition in the `Game` class to handle the game over scenario.\n\n## Code Review Result\nLBTM", - "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Task\n{\"Required Python packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"`game.py` contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Code Files\n\n\n\n## Code to be Reviewed: main.py\n```Code\n## main.py\n\nfrom game import Game\n\ndef main():\n game = Game()\n running = True\n\n while running:\n game.update()\n game.draw()\n game.handle_input()\n\n if game.game_over:\n game.restart()\n\nif __name__ == \"__main__\":\n main()\n\n```\n\n## Code Review: main.py\n1. Yes, the code is implemented as per the requirements.\n2. Yes, the code logic is completely correct.\n3. Yes, the existing code follows the \"Data structures and interfaces\".\n4. No, the `game_over` condition is not handled in the code. To achieve it, we need to add the implementation of the `game_over` condition in the `Game` class.\n5. Yes, all necessary pre-dependencies have been imported.\n6. Yes, methods from other files are being reused correctly.\n\n## Actions\n4. Implement the `game_over` condition in the `Game` class to handle the game over scenario.\n\n## Code Review Result\nLBTM\n\n# Instruction: rewrite code based on the Code Review and Actions\n## Rewrite Code: CodeBlock. If it still has some bugs, rewrite main.py with triple quotes. Do your utmost to optimize THIS SINGLE FILE. Return all completed codes and prohibit the return of unfinished codes.\n```Code\n## main.py\n...\n```\n": "```Code\n## main.py\n\nfrom game import Game\n\ndef main():\n game = Game()\n running = True\n\n while running:\n game.update()\n game.draw()\n game.handle_input()\n\n if game.game_over():\n game.restart()\n\nif __name__ == \"__main__\":\n main()\n```", - "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Task\n{\"Required Python packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"`game.py` contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Code Files\n\n\n\n## Code to be Reviewed: main.py\n```Code\n## main.py\n\nfrom game import Game\n\ndef main():\n game = Game()\n running = True\n\n while running:\n game.update()\n game.draw()\n game.handle_input()\n\n if game.game_over():\n game.restart()\n\nif __name__ == \"__main__\":\n main()\n\n```\n\n\n\n# Format example 1\n## Code Review: main.py\n1. No, we should fix the logic of class A due to ...\n2. ...\n3. ...\n4. No, function B is not implemented, ...\n5. ...\n6. ...\n\n## Actions\n1. Fix the `handle_events` method to update the game state only if a move is successful.\n ```python\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n return False\n if event.type == pygame.KEYDOWN:\n moved = False\n if event.key == pygame.K_UP:\n moved = self.game.move('UP')\n elif event.key == pygame.K_DOWN:\n moved = self.game.move('DOWN')\n elif event.key == pygame.K_LEFT:\n moved = self.game.move('LEFT')\n elif event.key == pygame.K_RIGHT:\n moved = self.game.move('RIGHT')\n if moved:\n # Update the game state only if a move was successful\n self.render()\n return True\n ```\n2. Implement function B\n\n## Code Review Result\nLBTM\n\n# Format example 2\n## Code Review: main.py\n1. Yes.\n2. Yes.\n3. Yes.\n4. Yes.\n5. Yes.\n6. Yes.\n\n## Actions\npass\n\n## Code Review Result\nLGTM\n\n\n\n# Instruction: Based on the actual code situation, follow one of the \"Format example\". Return only 1 file under review.\n\n## Code Review: Ordered List. Based on the \"Code to be Reviewed\", provide key, clear, concise, and specific answer. If any answer is no, explain how to fix it step by step.\n1. Is the code implemented as per the requirements? If not, how to achieve it? Analyse it step by step.\n2. Is the code logic completely correct? If there are errors, please indicate how to correct them.\n3. Does the existing code follow the \"Data structures and interfaces\"?\n4. Are all functions implemented? If there is no implementation, please indicate how to achieve it step by step.\n5. Have all necessary pre-dependencies been imported? If not, indicate which ones need to be imported\n6. Are methods from other files being reused correctly?\n\n## Actions: Ordered List. Things that should be done after CR, such as implementing class A and function B\n\n## Code Review Result: str. If the code doesn't have bugs, we don't need to rewrite it, so answer LGTM and stop. ONLY ANSWER LGTM/LBTM.\nLGTM/LBTM\n\n": "## Code Review: main.py\n1. The code is implemented as per the requirements. It initializes the game, updates the game state, draws the game, handles user input, and restarts the game when it's over.\n2. The code logic is correct, and it follows the expected flow of the game.\n3. The existing code follows the \"Data structures and interfaces\" as it uses classes and methods as described in the class diagram.\n4. All necessary functions are implemented as per the requirements.\n5. The necessary pre-dependencies have been imported, as the `pygame` package is imported.\n6. The methods from other files are being reused correctly.\n\n## Actions\npass\n\n## Code Review Result\nLGTM", - "\n## context\n{'Implementation approach': '我们将使用Python编程语言,并选择合适的开源框架来实现贪吃蛇游戏。我们将分析需求中的难点,并选择合适的开源框架来简化开发流程。', 'File list': ['main.py', 'game.py'], 'Data structures and interfaces': '\\nclassDiagram\\n class Game {\\n -int width\\n -int height\\n -int score\\n -int speed\\n -List snake\\n -Point food\\n +__init__(width: int, height: int, speed: int)\\n +start_game()\\n +change_direction(direction: str)\\n +game_over()\\n +update_snake()\\n +update_food()\\n +check_collision()\\n }\\n class Point {\\n -int x\\n -int y\\n +__init__(x: int, y: int)\\n }\\n Game --> Point\\n', 'Program call flow': '\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: start_game()\\n M->>G: change_direction(direction)\\n G->>G: update_snake()\\n G->>G: update_food()\\n G->>G: check_collision()\\n G-->>G: game_over()\\n', 'Anything UNCLEAR': ''}\n\n-----\n\n## format example\n[CONTENT]\n{\n \"Required Python packages\": [\n \"flask==1.1.2\",\n \"bcrypt==3.2.0\"\n ],\n \"Required Other language third-party packages\": [\n \"No third-party dependencies required\"\n ],\n \"Logic Analysis\": [\n [\n \"game.py\",\n \"Contains Game class and ... functions\"\n ],\n [\n \"main.py\",\n \"Contains main function, from game import Game\"\n ]\n ],\n \"Task list\": [\n \"game.py\",\n \"main.py\"\n ],\n \"Full API spec\": \"openapi: 3.0.0 ...\",\n \"Shared Knowledge\": \"`game.py` contains functions shared across the project.\",\n \"Anything UNCLEAR\": \"Clarification needed on how to start and initialize third-party libraries.\"\n}\n[/CONTENT]\n\n## nodes: \": # \"\n- Required Python packages: typing.List[str] # Provide required Python packages in requirements.txt format.\n- Required Other language third-party packages: typing.List[str] # List down the required packages for languages other than Python.\n- Logic Analysis: typing.List[typing.List[str]] # Provide a list of files with the classes/methods/functions to be implemented, including dependency analysis and imports.\n- Task list: typing.List[str] # Break down the tasks into a list of filenames, prioritized by dependency order.\n- Full API spec: # Describe all APIs using OpenAPI 3.0 spec that may be used by both frontend and backend. If front-end and back-end communication is not required, leave it blank.\n- Shared Knowledge: # Detail any shared knowledge, like common utility functions or configuration variables.\n- Anything UNCLEAR: # Mention any unclear aspects in the project management context and try to clarify them.\n\n\n## constraint\nLanguage: Please use the same language as Human INPUT.\nFormat: output wrapped inside [CONTENT][/CONTENT] like format example, nothing else.\n\n## action\nFollow instructions of nodes, generate output and make sure it follows the format example.\n": "[CONTENT]\n{\n \"Required Python packages\": [\n \"pygame==2.0.1\"\n ],\n \"Required Other language third-party packages\": [\n \"No third-party dependencies required\"\n ],\n \"Logic Analysis\": [\n [\n \"game.py\",\n \"Contains Game class and related functions\"\n ],\n [\n \"main.py\",\n \"Contains the main function and imports Game from game.py\"\n ]\n ],\n \"Task list\": [\n \"game.py\",\n \"main.py\"\n ],\n \"Full API spec\": \"\",\n \"Shared Knowledge\": \"`game.py` contains functions shared across the project.\",\n \"Anything UNCLEAR\": \"\"\n}\n[/CONTENT]", + "\n## context\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n-----\n\n## format example\n[CONTENT]\n{\n \"Required packages\": [\n \"flask==1.1.2\",\n \"bcrypt==3.2.0\"\n ],\n \"Required Other language third-party packages\": [\n \"No third-party dependencies required\"\n ],\n \"Logic Analysis\": [\n [\n \"game.py\",\n \"Contains Game class and ... functions\"\n ],\n [\n \"main.py\",\n \"Contains main function, from game import Game\"\n ]\n ],\n \"Task list\": [\n \"game.py\",\n \"main.py\"\n ],\n \"Full API spec\": \"openapi: 3.0.0 ...\",\n \"Shared Knowledge\": \"`game.py` contains functions shared across the project.\",\n \"Anything UNCLEAR\": \"Clarification needed on how to start and initialize third-party libraries.\"\n}\n[/CONTENT]\n\n## nodes: \": # \"\n- Required packages: typing.List[str] # Provide Required packages in requirements.txt format.\n- Required Other language third-party packages: typing.List[str] # List down the required packages for languages other than Python.\n- Logic Analysis: typing.List[typing.List[str]] # Provide a list of files with the classes/methods/functions to be implemented, including dependency analysis and imports.\n- Task list: typing.List[str] # Break down the tasks into a list of filenames, prioritized by dependency order.\n- Full API spec: # Describe all APIs using OpenAPI 3.0 spec that may be used by both frontend and backend. If front-end and back-end communication is not required, leave it blank.\n- Shared Knowledge: # Detail any shared knowledge, like common utility functions or configuration variables.\n- Anything UNCLEAR: # Mention any unclear aspects in the project management context and try to clarify them.\n\n\n## constraint\nLanguage: Please use the same language as Human INPUT.\nFormat: output wrapped inside [CONTENT][/CONTENT] like format example, nothing else.\n\n## action\nFollow instructions of nodes, generate output and make sure it follows the format example.\n": "[CONTENT]\n{\n \"Required packages\": [\n \"pygame==2.0.1\"\n ],\n \"Required Other language third-party packages\": [\n \"No third-party dependencies required\"\n ],\n \"Logic Analysis\": [\n [\n \"game.py\",\n \"Contains Game class and ... functions\"\n ],\n [\n \"main.py\",\n \"Contains main function, from game import Game\"\n ]\n ],\n \"Task list\": [\n \"game.py\",\n \"main.py\"\n ],\n \"Full API spec\": \"\",\n \"Shared Knowledge\": \"`game.py` contains functions shared across the project.\",\n \"Anything UNCLEAR\": \"Clarification needed on the scoring system and how the game over condition will be handled.\"\n}\n[/CONTENT]", + "\nNOTICE\nRole: You are a professional engineer; the main goal is to write google-style, elegant, modular, easy to read and maintain code\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Task\n{\"Required packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"`game.py` contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Legacy Code\n```Code\n\n```\n\n## Debug logs\n```text\n\n\n\n```\n\n## Bug Feedback logs\n```text\n\n```\n\n# Format example\n## Code: game.py\n```python\n## game.py\n...\n```\n\n# Instruction: Based on the context, follow \"Format example\", write code.\n\n## Code: game.py. Write code with triple quoto, based on the following attentions and context.\n1. Only One file: do your best to implement THIS ONLY ONE FILE.\n2. COMPLETE CODE: Your code will be part of the entire project, so please implement complete, reliable, reusable code snippets.\n3. Set default value: If there is any setting, ALWAYS SET A DEFAULT VALUE, ALWAYS USE STRONG TYPE AND EXPLICIT VARIABLE. AVOID circular import.\n4. Follow design: YOU MUST FOLLOW \"Data structures and interfaces\". DONT CHANGE ANY DESIGN. Do not use public member functions that do not exist in your design.\n5. CAREFULLY CHECK THAT YOU DONT MISS ANY NECESSARY CLASS/FUNCTION IN THIS FILE.\n6. Before using a external variable/module, make sure you import it first.\n7. Write out EVERY CODE DETAIL, DON'T LEAVE TODO.\n\n": "```python\n## game.py\n\nimport pygame\nimport random\n\nclass Snake:\n def __init__(self, start_pos: tuple, length: int, direction: str):\n self.body = [start_pos]\n self.direction = direction\n self.length = length\n\n def move(self):\n head = self.body[0]\n x, y = head\n if self.direction == 'UP':\n new_head = (x, y - 10)\n elif self.direction == 'DOWN':\n new_head = (x, y + 10)\n elif self.direction == 'LEFT':\n new_head = (x - 10, y)\n elif self.direction == 'RIGHT':\n new_head = (x + 10, y)\n self.body = [new_head] + self.body[:-1]\n\n def change_direction(self, new_direction: str):\n if new_direction in ['UP', 'DOWN', 'LEFT', 'RIGHT']:\n self.direction = new_direction\n\n def grow(self):\n self.length += 1\n self.body.append((0, 0)) # Set default value\n\nclass Game:\n def __init__(self):\n self.snake = Snake((100, 50), 1, 'RIGHT') # Set default value\n self.food = (200, 200) # Set default value\n self.score = 0 # Set default value\n\n def update(self):\n self.snake.move()\n if self.snake.body[0] == self.food:\n self.snake.grow()\n self.food = (random.randrange(0, 400, 10), random.randrange(0, 400, 10)) # Set default value\n\n def draw(self):\n pass # Set default value\n\n def handle_input(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n pygame.quit()\n quit()\n if event.type == pygame.KEYDOWN:\n if event.key == pygame.K_UP:\n self.snake.change_direction('UP')\n elif event.key == pygame.K_DOWN:\n self.snake.change_direction('DOWN')\n elif event.key == pygame.K_LEFT:\n self.snake.change_direction('LEFT')\n elif event.key == pygame.K_RIGHT:\n self.snake.change_direction('RIGHT')\n\n def restart(self):\n self.snake = Snake((100, 50), 1, 'RIGHT') # Set default value\n self.food = (200, 200) # Set default value\n self.score = 0 # Set default value\n```", + "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Task\n{\"Required packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"`game.py` contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Code Files\n\n\n\n## Code to be Reviewed: game.py\n```Code\n## game.py\n\nimport pygame\nimport random\n\nclass Snake:\n def __init__(self, start_pos: tuple, length: int, direction: str):\n self.body = [start_pos]\n self.direction = direction\n self.length = length\n\n def move(self):\n head = self.body[0]\n x, y = head\n if self.direction == 'UP':\n new_head = (x, y - 10)\n elif self.direction == 'DOWN':\n new_head = (x, y + 10)\n elif self.direction == 'LEFT':\n new_head = (x - 10, y)\n elif self.direction == 'RIGHT':\n new_head = (x + 10, y)\n self.body = [new_head] + self.body[:-1]\n\n def change_direction(self, new_direction: str):\n if new_direction in ['UP', 'DOWN', 'LEFT', 'RIGHT']:\n self.direction = new_direction\n\n def grow(self):\n self.length += 1\n self.body.append((0, 0)) # Set default value\n\nclass Game:\n def __init__(self):\n self.snake = Snake((100, 50), 1, 'RIGHT') # Set default value\n self.food = (200, 200) # Set default value\n self.score = 0 # Set default value\n\n def update(self):\n self.snake.move()\n if self.snake.body[0] == self.food:\n self.snake.grow()\n self.food = (random.randrange(0, 400, 10), random.randrange(0, 400, 10)) # Set default value\n\n def draw(self):\n pass # Set default value\n\n def handle_input(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n pygame.quit()\n quit()\n if event.type == pygame.KEYDOWN:\n if event.key == pygame.K_UP:\n self.snake.change_direction('UP')\n elif event.key == pygame.K_DOWN:\n self.snake.change_direction('DOWN')\n elif event.key == pygame.K_LEFT:\n self.snake.change_direction('LEFT')\n elif event.key == pygame.K_RIGHT:\n self.snake.change_direction('RIGHT')\n\n def restart(self):\n self.snake = Snake((100, 50), 1, 'RIGHT') # Set default value\n self.food = (200, 200) # Set default value\n self.score = 0 # Set default value\n\n```\n\n\n\n# Format example 1\n## Code Review: game.py\n1. No, we should fix the logic of class A due to ...\n2. ...\n3. ...\n4. No, function B is not implemented, ...\n5. ...\n6. ...\n\n## Actions\n1. Fix the `handle_events` method to update the game state only if a move is successful.\n ```python\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n return False\n if event.type == pygame.KEYDOWN:\n moved = False\n if event.key == pygame.K_UP:\n moved = self.game.move('UP')\n elif event.key == pygame.K_DOWN:\n moved = self.game.move('DOWN')\n elif event.key == pygame.K_LEFT:\n moved = self.game.move('LEFT')\n elif event.key == pygame.K_RIGHT:\n moved = self.game.move('RIGHT')\n if moved:\n # Update the game state only if a move was successful\n self.render()\n return True\n ```\n2. Implement function B\n\n## Code Review Result\nLBTM\n\n# Format example 2\n## Code Review: game.py\n1. Yes.\n2. Yes.\n3. Yes.\n4. Yes.\n5. Yes.\n6. Yes.\n\n## Actions\npass\n\n## Code Review Result\nLGTM\n\n\n\n# Instruction: Based on the actual code situation, follow one of the \"Format example\". Return only 1 file under review.\n\n## Code Review: Ordered List. Based on the \"Code to be Reviewed\", provide key, clear, concise, and specific answer. If any answer is no, explain how to fix it step by step.\n1. Is the code implemented as per the requirements? If not, how to achieve it? Analyse it step by step.\n2. Is the code logic completely correct? If there are errors, please indicate how to correct them.\n3. Does the existing code follow the \"Data structures and interfaces\"?\n4. Are all functions implemented? If there is no implementation, please indicate how to achieve it step by step.\n5. Have all necessary pre-dependencies been imported? If not, indicate which ones need to be imported\n6. Are methods from other files being reused correctly?\n\n## Actions: Ordered List. Things that should be done after CR, such as implementing class A and function B\n\n## Code Review Result: str. If the code doesn't have bugs, we don't need to rewrite it, so answer LGTM and stop. ONLY ANSWER LGTM/LBTM.\nLGTM/LBTM\n\n": "## Code Review: game.py\n1. The code is implemented as per the requirements. The Snake and Game classes are defined, and the necessary methods for updating, drawing, handling input, and restarting the game are implemented.\n2. The code logic is correct. The Snake class methods for moving, changing direction, and growing the snake are implemented properly. The Game class methods for updating the game state, handling input, and restarting the game are also correctly implemented.\n3. The existing code follows the defined \"Data structures and interfaces\" with the Snake and Game classes and their respective methods.\n4. All necessary functions are implemented as per the requirements.\n5. The necessary pre-dependencies, including the pygame package, are imported.\n6. The methods from other files are not being reused in the current code.\n\n## Actions\nNo actions required.\n\n## Code Review Result\nLGTM", + "\nNOTICE\nRole: You are a professional engineer; the main goal is to write google-style, elegant, modular, easy to read and maintain code\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Task\n{\"Required packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"`game.py` contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Legacy Code\n```Code\n\n```\n\n## Debug logs\n```text\n\n\n\n```\n\n## Bug Feedback logs\n```text\n\n```\n\n# Format example\n## Code: main.py\n```python\n## main.py\n...\n```\n\n# Instruction: Based on the context, follow \"Format example\", write code.\n\n## Code: main.py. Write code with triple quoto, based on the following attentions and context.\n1. Only One file: do your best to implement THIS ONLY ONE FILE.\n2. COMPLETE CODE: Your code will be part of the entire project, so please implement complete, reliable, reusable code snippets.\n3. Set default value: If there is any setting, ALWAYS SET A DEFAULT VALUE, ALWAYS USE STRONG TYPE AND EXPLICIT VARIABLE. AVOID circular import.\n4. Follow design: YOU MUST FOLLOW \"Data structures and interfaces\". DONT CHANGE ANY DESIGN. Do not use public member functions that do not exist in your design.\n5. CAREFULLY CHECK THAT YOU DONT MISS ANY NECESSARY CLASS/FUNCTION IN THIS FILE.\n6. Before using a external variable/module, make sure you import it first.\n7. Write out EVERY CODE DETAIL, DON'T LEAVE TODO.\n\n": "```python\n## main.py\n\nfrom game import Game\n\ndef main():\n game = Game()\n running = True\n\n while running:\n game.update()\n game.draw()\n game.handle_input()\n\n if game.game_over:\n game.restart()\n\nif __name__ == \"__main__\":\n main()\n```", + "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Task\n{\"Required packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"`game.py` contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Code Files\n\n\n\n## Code to be Reviewed: main.py\n```Code\n## main.py\n\nfrom game import Game\n\ndef main():\n game = Game()\n running = True\n\n while running:\n game.update()\n game.draw()\n game.handle_input()\n\n if game.game_over:\n game.restart()\n\nif __name__ == \"__main__\":\n main()\n\n```\n\n\n\n# Format example 1\n## Code Review: main.py\n1. No, we should fix the logic of class A due to ...\n2. ...\n3. ...\n4. No, function B is not implemented, ...\n5. ...\n6. ...\n\n## Actions\n1. Fix the `handle_events` method to update the game state only if a move is successful.\n ```python\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n return False\n if event.type == pygame.KEYDOWN:\n moved = False\n if event.key == pygame.K_UP:\n moved = self.game.move('UP')\n elif event.key == pygame.K_DOWN:\n moved = self.game.move('DOWN')\n elif event.key == pygame.K_LEFT:\n moved = self.game.move('LEFT')\n elif event.key == pygame.K_RIGHT:\n moved = self.game.move('RIGHT')\n if moved:\n # Update the game state only if a move was successful\n self.render()\n return True\n ```\n2. Implement function B\n\n## Code Review Result\nLBTM\n\n# Format example 2\n## Code Review: main.py\n1. Yes.\n2. Yes.\n3. Yes.\n4. Yes.\n5. Yes.\n6. Yes.\n\n## Actions\npass\n\n## Code Review Result\nLGTM\n\n\n\n# Instruction: Based on the actual code situation, follow one of the \"Format example\". Return only 1 file under review.\n\n## Code Review: Ordered List. Based on the \"Code to be Reviewed\", provide key, clear, concise, and specific answer. If any answer is no, explain how to fix it step by step.\n1. Is the code implemented as per the requirements? If not, how to achieve it? Analyse it step by step.\n2. Is the code logic completely correct? If there are errors, please indicate how to correct them.\n3. Does the existing code follow the \"Data structures and interfaces\"?\n4. Are all functions implemented? If there is no implementation, please indicate how to achieve it step by step.\n5. Have all necessary pre-dependencies been imported? If not, indicate which ones need to be imported\n6. Are methods from other files being reused correctly?\n\n## Actions: Ordered List. Things that should be done after CR, such as implementing class A and function B\n\n## Code Review Result: str. If the code doesn't have bugs, we don't need to rewrite it, so answer LGTM and stop. ONLY ANSWER LGTM/LBTM.\nLGTM/LBTM\n\n": "## Code Review: main.py\n1. Yes, the code is implemented as per the requirements.\n2. Yes, the code logic is completely correct.\n3. Yes, the existing code follows the \"Data structures and interfaces\".\n4. No, the `game_over` condition is not handled in the code. To achieve it, we need to add the implementation of the `game_over` condition in the `Game` class.\n5. Yes, all necessary pre-dependencies have been imported.\n6. Yes, methods from other files are being reused correctly.\n\n## Actions\n4. Implement the `game_over` condition in the `Game` class to handle the game over scenario.\n\n## Code Review Result\nLBTM", + "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Task\n{\"Required packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"`game.py` contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Code Files\n\n\n\n## Code to be Reviewed: main.py\n```Code\n## main.py\n\nfrom game import Game\n\ndef main():\n game = Game()\n running = True\n\n while running:\n game.update()\n game.draw()\n game.handle_input()\n\n if game.game_over:\n game.restart()\n\nif __name__ == \"__main__\":\n main()\n\n```\n\n## Code Review: main.py\n1. Yes, the code is implemented as per the requirements.\n2. Yes, the code logic is completely correct.\n3. Yes, the existing code follows the \"Data structures and interfaces\".\n4. No, the `game_over` condition is not handled in the code. To achieve it, we need to add the implementation of the `game_over` condition in the `Game` class.\n5. Yes, all necessary pre-dependencies have been imported.\n6. Yes, methods from other files are being reused correctly.\n\n## Actions\n4. Implement the `game_over` condition in the `Game` class to handle the game over scenario.\n\n## Code Review Result\nLBTM\n\n# Instruction: rewrite code based on the Code Review and Actions\n## Rewrite Code: CodeBlock. If it still has some bugs, rewrite main.py with triple quotes. Do your utmost to optimize THIS SINGLE FILE. Return all completed codes and prohibit the return of unfinished codes.\n```Code\n## main.py\n...\n```\n": "```Code\n## main.py\n\nfrom game import Game\n\ndef main():\n game = Game()\n running = True\n\n while running:\n game.update()\n game.draw()\n game.handle_input()\n\n if game.game_over():\n game.restart()\n\nif __name__ == \"__main__\":\n main()\n```", + "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n{\"Implementation approach\":\"We will use the Pygame library to create the game and handle user input. The game logic will be implemented using Python classes and functions.\",\"File list\":[\"main.py\",\"game.py\"],\"Data structures and interfaces\":\"\\nclassDiagram\\n class Game {\\n -snake: list\\n -food: tuple\\n -score: int\\n +__init__()\\n +update()\\n +draw()\\n +handle_input()\\n +restart()\\n }\\n class Snake {\\n -body: list\\n -direction: str\\n +__init__(start_pos: tuple, length: int, direction: str)\\n +move()\\n +change_direction(new_direction: str)\\n +grow()\\n }\\n Game --> Snake\\n\",\"Program call flow\":\"\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: initialize game\\n G->>G: update game state\\n G->>G: draw game\\n G->>G: handle user input\\n G->>G: restart game\\n\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Task\n{\"Required packages\":[\"pygame==2.0.1\"],\"Required Other language third-party packages\":[\"No third-party dependencies required\"],\"Logic Analysis\":[[\"game.py\",\"Contains Game class and ... functions\"],[\"main.py\",\"Contains main function, from game import Game\"]],\"Task list\":[\"game.py\",\"main.py\"],\"Full API spec\":\"\",\"Shared Knowledge\":\"`game.py` contains functions shared across the project.\",\"Anything UNCLEAR\":\"Clarification needed on the scoring system and how the game over condition will be handled.\"}\n\n## Code Files\n\n\n\n## Code to be Reviewed: main.py\n```Code\n## main.py\n\nfrom game import Game\n\ndef main():\n game = Game()\n running = True\n\n while running:\n game.update()\n game.draw()\n game.handle_input()\n\n if game.game_over():\n game.restart()\n\nif __name__ == \"__main__\":\n main()\n\n```\n\n\n\n# Format example 1\n## Code Review: main.py\n1. No, we should fix the logic of class A due to ...\n2. ...\n3. ...\n4. No, function B is not implemented, ...\n5. ...\n6. ...\n\n## Actions\n1. Fix the `handle_events` method to update the game state only if a move is successful.\n ```python\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n return False\n if event.type == pygame.KEYDOWN:\n moved = False\n if event.key == pygame.K_UP:\n moved = self.game.move('UP')\n elif event.key == pygame.K_DOWN:\n moved = self.game.move('DOWN')\n elif event.key == pygame.K_LEFT:\n moved = self.game.move('LEFT')\n elif event.key == pygame.K_RIGHT:\n moved = self.game.move('RIGHT')\n if moved:\n # Update the game state only if a move was successful\n self.render()\n return True\n ```\n2. Implement function B\n\n## Code Review Result\nLBTM\n\n# Format example 2\n## Code Review: main.py\n1. Yes.\n2. Yes.\n3. Yes.\n4. Yes.\n5. Yes.\n6. Yes.\n\n## Actions\npass\n\n## Code Review Result\nLGTM\n\n\n\n# Instruction: Based on the actual code situation, follow one of the \"Format example\". Return only 1 file under review.\n\n## Code Review: Ordered List. Based on the \"Code to be Reviewed\", provide key, clear, concise, and specific answer. If any answer is no, explain how to fix it step by step.\n1. Is the code implemented as per the requirements? If not, how to achieve it? Analyse it step by step.\n2. Is the code logic completely correct? If there are errors, please indicate how to correct them.\n3. Does the existing code follow the \"Data structures and interfaces\"?\n4. Are all functions implemented? If there is no implementation, please indicate how to achieve it step by step.\n5. Have all necessary pre-dependencies been imported? If not, indicate which ones need to be imported\n6. Are methods from other files being reused correctly?\n\n## Actions: Ordered List. Things that should be done after CR, such as implementing class A and function B\n\n## Code Review Result: str. If the code doesn't have bugs, we don't need to rewrite it, so answer LGTM and stop. ONLY ANSWER LGTM/LBTM.\nLGTM/LBTM\n\n": "## Code Review: main.py\n1. The code is implemented as per the requirements. It initializes the game, updates the game state, draws the game, handles user input, and restarts the game when it's over.\n2. The code logic is correct, and it follows the expected flow of the game.\n3. The existing code follows the \"Data structures and interfaces\" as it uses classes and methods as described in the class diagram.\n4. All necessary functions are implemented as per the requirements.\n5. The necessary pre-dependencies have been imported, as the `pygame` package is imported.\n6. The methods from other files are being reused correctly.\n\n## Actions\npass\n\n## Code Review Result\nLGTM", + "\n## context\n{'Implementation approach': '我们将使用Python编程语言,并选择合适的开源框架来实现贪吃蛇游戏。我们将分析需求中的难点,并选择合适的开源框架来简化开发流程。', 'File list': ['main.py', 'game.py'], 'Data structures and interfaces': '\\nclassDiagram\\n class Game {\\n -int width\\n -int height\\n -int score\\n -int speed\\n -List snake\\n -Point food\\n +__init__(width: int, height: int, speed: int)\\n +start_game()\\n +change_direction(direction: str)\\n +game_over()\\n +update_snake()\\n +update_food()\\n +check_collision()\\n }\\n class Point {\\n -int x\\n -int y\\n +__init__(x: int, y: int)\\n }\\n Game --> Point\\n', 'Program call flow': '\\nsequenceDiagram\\n participant M as Main\\n participant G as Game\\n M->>G: start_game()\\n M->>G: change_direction(direction)\\n G->>G: update_snake()\\n G->>G: update_food()\\n G->>G: check_collision()\\n G-->>G: game_over()\\n', 'Anything UNCLEAR': ''}\n\n-----\n\n## format example\n[CONTENT]\n{\n \"Required packages\": [\n \"flask==1.1.2\",\n \"bcrypt==3.2.0\"\n ],\n \"Required Other language third-party packages\": [\n \"No third-party dependencies required\"\n ],\n \"Logic Analysis\": [\n [\n \"game.py\",\n \"Contains Game class and ... functions\"\n ],\n [\n \"main.py\",\n \"Contains main function, from game import Game\"\n ]\n ],\n \"Task list\": [\n \"game.py\",\n \"main.py\"\n ],\n \"Full API spec\": \"openapi: 3.0.0 ...\",\n \"Shared Knowledge\": \"`game.py` contains functions shared across the project.\",\n \"Anything UNCLEAR\": \"Clarification needed on how to start and initialize third-party libraries.\"\n}\n[/CONTENT]\n\n## nodes: \": # \"\n- Required packages: typing.List[str] # Provide Required packages in requirements.txt format.\n- Required Other language third-party packages: typing.List[str] # List down the required packages for languages other than Python.\n- Logic Analysis: typing.List[typing.List[str]] # Provide a list of files with the classes/methods/functions to be implemented, including dependency analysis and imports.\n- Task list: typing.List[str] # Break down the tasks into a list of filenames, prioritized by dependency order.\n- Full API spec: # Describe all APIs using OpenAPI 3.0 spec that may be used by both frontend and backend. If front-end and back-end communication is not required, leave it blank.\n- Shared Knowledge: # Detail any shared knowledge, like common utility functions or configuration variables.\n- Anything UNCLEAR: # Mention any unclear aspects in the project management context and try to clarify them.\n\n\n## constraint\nLanguage: Please use the same language as Human INPUT.\nFormat: output wrapped inside [CONTENT][/CONTENT] like format example, nothing else.\n\n## action\nFollow instructions of nodes, generate output and make sure it follows the format example.\n": "[CONTENT]\n{\n \"Required packages\": [\n \"pygame==2.0.1\"\n ],\n \"Required Other language third-party packages\": [\n \"No third-party dependencies required\"\n ],\n \"Logic Analysis\": [\n [\n \"game.py\",\n \"Contains Game class and related functions\"\n ],\n [\n \"main.py\",\n \"Contains the main function and imports Game from game.py\"\n ]\n ],\n \"Task list\": [\n \"game.py\",\n \"main.py\"\n ],\n \"Full API spec\": \"\",\n \"Shared Knowledge\": \"`game.py` contains functions shared across the project.\",\n \"Anything UNCLEAR\": \"\"\n}\n[/CONTENT]", "\nNOTICE\nRole: You are a professional software engineer, and your main task is to review the code.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n-----\n# System Design\n```text\n\n{\"Implementation approach\": \"To develop this snake game, we will use the Python language and choose the Pygame library. Pygame is an open-source Python module collection specifically designed for writing video games. It provides functionalities such as displaying images and playing sounds, making it suitable for creating intuitive and responsive user interfaces. We will ensure efficient game logic to prevent any delays during gameplay. The scoring system will be simple, with the snake gaining points for each food it eats. We will use Pygame's event handling system to implement pause and resume functionality, as well as high-score tracking. The difficulty will increase by speeding up the snake's movement. In the initial version, we will focus on single-player mode and consider adding multiplayer mode and customizable skins in future updates. Based on the new requirement, we will also add a moving obstacle that appears randomly. If the snake eats this obstacle, the game will end. If the snake does not eat the obstacle, it will disappear after 5 seconds. For this, we need to add mechanisms for obstacle generation, movement, and disappearance in the game logic.\", \"Project_name\": \"snake_game\", \"File list\": [\"main.py\", \"game.py\", \"snake.py\", \"food.py\", \"obstacle.py\", \"scoreboard.py\", \"constants.py\", \"assets/styles.css\", \"assets/index.html\"], \"Data structures and interfaces\": \"```mermaid\n classDiagram\n class Game{\n +int score\n +int speed\n +bool game_over\n +bool paused\n +Snake snake\n +Food food\n +Obstacle obstacle\n +Scoreboard scoreboard\n +start_game() void\n +pause_game() void\n +resume_game() void\n +end_game() void\n +increase_difficulty() void\n +update() void\n +render() void\n Game()\n }\n class Snake{\n +list body_parts\n +str direction\n +bool grow\n +move() void\n +grow() void\n +check_collision() bool\n Snake()\n }\n class Food{\n +tuple position\n +spawn() void\n Food()\n }\n class Obstacle{\n +tuple position\n +int lifetime\n +bool active\n +spawn() void\n +move() void\n +check_collision() bool\n +disappear() void\n Obstacle()\n }\n class Scoreboard{\n +int high_score\n +update_score(int) void\n +reset_score() void\n +load_high_score() void\n +save_high_score() void\n Scoreboard()\n }\n class Constants{\n }\n Game \"1\" -- \"1\" Snake: has\n Game \"1\" -- \"1\" Food: has\n Game \"1\" -- \"1\" Obstacle: has\n Game \"1\" -- \"1\" Scoreboard: has\n ```\", \"Program call flow\": \"```sequenceDiagram\n participant M as Main\n participant G as Game\n participant S as Snake\n participant F as Food\n participant O as Obstacle\n participant SB as Scoreboard\n M->>G: start_game()\n loop game loop\n G->>S: move()\n G->>S: check_collision()\n G->>F: spawn()\n G->>O: spawn()\n G->>O: move()\n G->>O: check_collision()\n G->>O: disappear()\n G->>SB: update_score(score)\n G->>G: update()\n G->>G: render()\n alt if paused\n M->>G: pause_game()\n M->>G: resume_game()\n end\n alt if game_over\n G->>M: end_game()\n end\n end\n```\", \"Anything UNCLEAR\": \"There is no need for further clarification as the requirements are already clear.\"}\n\n```\n-----\n# Task\n```text\n\n{\"Required Python third-party packages\": [\"pygame==2.0.1\"], \"Required Other language third-party packages\": [\"No third-party packages required for other languages.\"], \"Full API spec\": \"\n openapi: 3.0.0\n info:\n title: Snake Game API\n version: \"1.0.0\"\n paths:\n /start:\n get:\n summary: Start the game\n responses:\n '200':\n description: Game started successfully\n /pause:\n get:\n summary: Pause the game\n responses:\n '200':\n description: Game paused successfully\n /resume:\n get:\n summary: Resume the game\n responses:\n '200':\n description: Game resumed successfully\n /end:\n get:\n summary: End the game\n responses:\n '200':\n description: Game ended successfully\n /score:\n get:\n summary: Get the current score\n responses:\n '200':\n description: Current score retrieved successfully\n /highscore:\n get:\n summary: Get the high score\n responses:\n '200':\n description: High score retrieved successfully\n components: {}\n \", \"Logic Analysis\": [[\"constants.py\", \"Contains all the constant values like screen size, colors, game speeds, etc. This should be implemented first as it provides the base values for other components.\"], [\"snake.py\", \"Contains the Snake class with methods for movement, growth, and collision detection. It is dependent on constants.py for configuration values.\"], [\"food.py\", \"Contains the Food class responsible for spawning food items on the screen. It is dependent on constants.py for configuration values.\"], [\"obstacle.py\", \"Contains the Obstacle class with methods for spawning, moving, and disappearing of obstacles, as well as collision detection with the snake. It is dependent on constants.py for configuration values.\"], [\"scoreboard.py\", \"Contains the Scoreboard class for updating, resetting, loading, and saving high scores. It may use constants.py for configuration values and depends on the game's scoring logic.\"], [\"game.py\", \"Contains the main Game class which includes the game loop and methods for starting, pausing, resuming, and ending the game. It is dependent on snake.py, food.py, obstacle.py, and scoreboard.py.\"], [\"main.py\", \"The entry point of the game that initializes the game and starts the game loop. It is dependent on game.py.\"]], \"Task list\": [\"constants.py\", \"snake.py\", \"food.py\", \"obstacle.py\", \"scoreboard.py\", \"game.py\", \"main.py\"], \"Shared Knowledge\": \"\n 'constants.py' should contain all the necessary configurations for the game, such as screen dimensions, color definitions, and speed settings. These constants will be used across multiple files, ensuring consistency and ease of updates. Ensure that the Pygame library is initialized correctly in 'main.py' before starting the game loop. Also, make sure that the game's state is managed properly when pausing and resuming the game.\n \", \"Anything UNCLEAR\": \"The interaction between the 'obstacle.py' and the game loop needs to be clearly defined to ensure obstacles appear and disappear correctly. The lifetime of the obstacle and its random movement should be implemented in a way that does not interfere with the game's performance.\"}\n\n```\n-----\n```python\n\n## game.py\nimport pygame\nfrom snake import Snake\nfrom food import Food\n\nclass Game:\n def __init__(self):\n self.score = 0\n self.level = 1\n self.snake = Snake()\n self.food = Food()\n\n def start_game(self):\n pygame.init()\n self.initialize_game()\n self.game_loop()\n\n def initialize_game(self):\n self.score = 0\n self.level = 1\n self.snake.reset()\n self.food.generate()\n\n def game_loop(self):\n game_over = False\n\n while not game_over:\n self.update()\n self.draw()\n self.handle_events()\n self.check_collision()\n self.increase_score()\n self.increase_level()\n\n if self.snake.is_collision():\n game_over = True\n self.game_over()\n\n def update(self):\n self.snake.move()\n\n def draw(self):\n self.snake.draw()\n self.food.draw()\n\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n pygame.quit()\n quit()\n elif event.type == pygame.KEYDOWN:\n if event.key == pygame.K_UP:\n self.snake.change_direction(\"UP\")\n elif event.key == pygame.K_DOWN:\n self.snake.change_direction(\"DOWN\")\n elif event.key == pygame.K_LEFT:\n self.snake.change_direction(\"LEFT\")\n elif event.key == pygame.K_RIGHT:\n self.snake.change_direction(\"RIGHT\")\n\n def check_collision(self):\n if self.snake.get_head() == self.food.get_position():\n self.snake.grow()\n self.food.generate()\n\n def increase_score(self):\n self.score += 1\n\n def increase_level(self):\n if self.score % 10 == 0:\n self.level += 1\n\n def game_over(self):\n print(\"Game Over\")\n self.initialize_game()\n\n\n```\n-----\n```python\n\n## snake.py\nimport pygame\n\nclass Snake:\n def __init__(self):\n self.body = [(0, 0)]\n self.direction = (1, 0)\n\n def move(self):\n head = self.body[0]\n dx, dy = self.direction\n new_head = (head[0] + dx, head[1] + dy)\n self.body.insert(0, new_head)\n self.body.pop()\n\n def change_direction(self, direction):\n if direction == \"UP\":\n self.direction = (0, -1)\n elif direction == \"DOWN\":\n self.direction = (0, 1)\n elif direction == \"LEFT\":\n self.direction = (-1, 0)\n elif direction == \"RIGHT\":\n self.direction = (1, 0)\n\n def grow(self):\n tail = self.body[-1]\n dx, dy = self.direction\n new_tail = (tail[0] - dx, tail[1] - dy)\n self.body.append(new_tail)\n\n def get_head(self):\n return self.body[0]\n\n def get_body(self):\n return self.body[1:]\n\n\n```\n-----\n```python\n\n## main.py\nimport pygame\nfrom game import Game\n\ndef main():\n pygame.init()\n game = Game()\n game.start_game()\n\nif __name__ == \"__main__\":\n main()\n\n\n```\n-----\n```python\n\n## food.py\nimport random\n\nclass Food:\n def __init__(self):\n self.position = (0, 0)\n\n def generate(self):\n x = random.randint(0, 9)\n y = random.randint(0, 9)\n self.position = (x, y)\n\n def get_position(self):\n return self.position\n\n\n```\n-----\n\n## Code Review All: Please read all historical files and find possible bugs in the files, such as unimplemented functions, calling errors, unreferences, etc.\n\n## Call flow: mermaid code, based on the implemented function, use mermaid to draw a complete call chain\n\n## Summary: Summary based on the implementation of historical files\n\n## TODOs: Python dict[str, str], write down the list of files that need to be modified and the reasons. We will modify them later.\n\n": "```mermaid\nclassDiagram\n class Game{\n +int score\n +int level\n +Snake snake\n +Food food\n +start_game() void\n +initialize_game() void\n +game_loop() void\n +update() void\n +draw() void\n +handle_events() void\n +check_collision() void\n +increase_score() void\n +increase_level() void\n +game_over() void\n Game()\n }\n class Snake{\n +list body\n +tuple direction\n +move() void\n +change_direction(direction: str) void\n +grow() void\n +get_head() tuple\n +get_body() list\n Snake()\n }\n class Food{\n +tuple position\n +generate() void\n +get_position() tuple\n Food()\n }\n Game \"1\" -- \"1\" Snake: has\n Game \"1\" -- \"1\" Food: has\n```\n\n```sequenceDiagram\nparticipant M as Main\nparticipant G as Game\nparticipant S as Snake\nparticipant F as Food\nM->>G: start_game()\nG->>G: initialize_game()\nG->>G: game_loop()\nG->>S: move()\nG->>S: change_direction()\nG->>S: grow()\nG->>F: generate()\nS->>S: move()\nS->>S: change_direction()\nS->>S: grow()\nF->>F: generate()\n```\n\n## Summary\nThe code consists of the main game logic, including the Game, Snake, and Food classes. The game loop is responsible for updating and drawing the game elements, handling events, checking collisions, and managing the game state. The Snake class handles the movement, growth, and direction changes of the snake, while the Food class is responsible for generating and tracking the position of food items.\n\n## TODOs\n- Modify 'game.py' to add the implementation of obstacle handling and interaction with the game loop.\n- Implement 'obstacle.py' to include the methods for spawning, moving, and disappearing of obstacles, as well as collision detection with the snake.\n- Update 'main.py' to initialize the obstacle and incorporate it into the game loop.\n- Update the mermaid call flow diagram to include the interaction with the obstacle.\n\n```python\n{\n \"files_to_modify\": {\n \"game.py\": \"Add obstacle handling and interaction with the game loop\",\n \"obstacle.py\": \"Implement obstacle class with necessary methods\",\n \"main.py\": \"Initialize the obstacle and incorporate it into the game loop\"\n }\n}\n```", "\nNOTICE\nRole: You are a professional engineer; the main goal is to write google-style, elegant, modular, easy to read and maintain code\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## Design\n设计一个名为'add'的函数,该函数接受两个整数作为输入,并返回它们的和。\n\n## Task\n\n\n## Legacy Code\n```Code\n\n```\n\n## Debug logs\n```text\n\n\n\n```\n\n## Bug Feedback logs\n```text\n\n```\n\n# Format example\n## Code: \n```python\n## \n...\n```\n\n# Instruction: Based on the context, follow \"Format example\", write code.\n\n## Code: . Write code with triple quoto, based on the following attentions and context.\n1. Only One file: do your best to implement THIS ONLY ONE FILE.\n2. COMPLETE CODE: Your code will be part of the entire project, so please implement complete, reliable, reusable code snippets.\n3. Set default value: If there is any setting, ALWAYS SET A DEFAULT VALUE, ALWAYS USE STRONG TYPE AND EXPLICIT VARIABLE. AVOID circular import.\n4. Follow design: YOU MUST FOLLOW \"Data structures and interfaces\". DONT CHANGE ANY DESIGN. Do not use public member functions that do not exist in your design.\n5. CAREFULLY CHECK THAT YOU DONT MISS ANY NECESSARY CLASS/FUNCTION IN THIS FILE.\n6. Before using a external variable/module, make sure you import it first.\n7. Write out EVERY CODE DETAIL, DON'T LEAVE TODO.\n\n": "## Code: \n```python\n## Design a function called 'add' that takes two integers as input and returns their sum.\n\ndef add(num1: int, num2: int) -> int:\n \"\"\"\n Add two integers and return the sum.\n \n Args:\n num1: An integer.\n num2: An integer.\n \n Returns:\n The sum of num1 and num2 as an integer.\n \"\"\"\n return num1 + num2\n```", - "\nNOTICE\nRole: You are a professional engineer; the main goal is to write google-style, elegant, modular, easy to read and maintain code\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## Design\n{\"Implementation approach\": \"We will use the Pygame library to create the game interface and handle user input. The game logic will be implemented using Python classes and data structures.\", \"File list\": [\"main.py\", \"game.py\"], \"Data structures and interfaces\": \"classDiagram\\n class Game {\\n -grid: List[List[int]]\\n -score: int\\n -game_over: bool\\n +__init__()\\n +reset_game()\\n +move(direction: str)\\n +is_game_over() bool\\n +get_empty_cells() List[Tuple[int, int]]\\n +add_new_tile()\\n +get_score() int\\n }\\n class UI {\\n -game: Game\\n +__init__(game: Game)\\n +draw_grid()\\n +draw_score()\\n +draw_game_over()\\n +handle_input()\\n }\\n Game --> UI\", \"Program call flow\": \"sequenceDiagram\\n participant M as Main\\n participant G as Game\\n participant U as UI\\n M->>G: reset_game()\\n M->>U: draw_grid()\\n M->>U: draw_score()\\n M->>U: handle_input()\\n U->>G: move(direction)\\n G->>G: add_new_tile()\\n G->>U: draw_grid()\\n G->>U: draw_score()\\n G->>U: draw_game_over()\\n G->>G: is_game_over()\\n G->>G: get_empty_cells()\\n G->>G: get_score()\", \"Anything UNCLEAR\": \"...\"}\n\n## Task\n{\"Required Python packages\": [\"pygame==2.0.1\"], \"Required Other language third-party packages\": [\"No third-party dependencies required\"], \"Logic Analysis\": [[\"game.py\", \"Contains Game class and related functions for game logic\"], [\"main.py\", \"Contains main function, initializes the game and UI\"]], \"Task list\": [\"game.py\", \"main.py\"], \"Full API spec\": \"\", \"Shared Knowledge\": \"The game logic will be implemented using Python classes and data structures. The Pygame library will be used to create the game interface and handle user input.\", \"Anything UNCLEAR\": \"...\"}\n\n## Legacy Code\n```Code\n\n```\n\n## Debug logs\n```text\nE.......F\n======================================================================\nERROR: test_add_new_tile (__main__.TestGame)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/Users/xx/tests/test_game.py\", line 104, in test_add_new_tile\n self.assertIn(self.game.grid[empty_cells[0][0]][empty_cells[0][1]], [2, 4])\nIndexError: list index out of range\n\n======================================================================\nFAIL: test_reset_game (__main__.TestGame)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/Users/xx/tests/test_game.py\", line 13, in test_reset_game\n self.assertEqual(self.game.grid, [[0 for _ in range(4)] for _ in range(4)])\nAssertionError: Lists differ: [[0, 0, 0, 0], [0, 2, 0, 0], [0, 0, 0, 2], [0, 0, 0, 0]] != [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]\n\nFirst differing element 1:\n[0, 2, 0, 0]\n[0, 0, 0, 0]\n\n- [[0, 0, 0, 0], [0, 2, 0, 0], [0, 0, 0, 2], [0, 0, 0, 0]]\n? --- ^\n\n+ [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]\n? +++ ^\n\n\n----------------------------------------------------------------------\nRan 9 tests in 0.002s\n\nFAILED (failures=1, errors=1)\n\n\n{\"design_filename\": \"docs/system_design/20231221155954.json\", \"task_filename\": \"docs/tasks/20231221155954.json\", \"codes_filenames\": [\"game.py\", \"main.py\"], \"reason\": \"```json\\n{\\n \\\"game.py\\\": \\\"Add handling for no empty cells in add_new_tile function, Update score in move function\\\",\\n \\\"main.py\\\": \\\"Handle game over condition in the game loop\\\"\\n}\\n```\"}\n```\n\n## Bug Feedback logs\n```text\n\n```\n\n# Format example\n## Code: game.py\n```python\n## game.py\n...\n```\n\n# Instruction: Based on the context, follow \"Format example\", write code.\n\n## Code: game.py. Write code with triple quoto, based on the following attentions and context.\n1. Only One file: do your best to implement THIS ONLY ONE FILE.\n2. COMPLETE CODE: Your code will be part of the entire project, so please implement complete, reliable, reusable code snippets.\n3. Set default value: If there is any setting, ALWAYS SET A DEFAULT VALUE, ALWAYS USE STRONG TYPE AND EXPLICIT VARIABLE. AVOID circular import.\n4. Follow design: YOU MUST FOLLOW \"Data structures and interfaces\". DONT CHANGE ANY DESIGN. Do not use public member functions that do not exist in your design.\n5. CAREFULLY CHECK THAT YOU DONT MISS ANY NECESSARY CLASS/FUNCTION IN THIS FILE.\n6. Before using a external variable/module, make sure you import it first.\n7. Write out EVERY CODE DETAIL, DON'T LEAVE TODO.\n\n": "## Code: game.py\n```python\n## game.py\n\nfrom typing import List, Tuple\nimport random\n\nclass Game:\n def __init__(self):\n self.grid: List[List[int]] = [[0 for _ in range(4)] for _ in range(4)]\n self.score: int = 0\n self.game_over: bool = False\n\n def reset_game(self):\n self.grid = [[0 for _ in range(4)] for _ in range(4)]\n self.score = 0\n self.game_over = False\n\n def move(self, direction: str):\n # Implement the move logic based on the direction\n pass\n\n def is_game_over(self) -> bool:\n # Check if the game is over\n return self.game_over\n\n def get_empty_cells(self) -> List[Tuple[int, int]]:\n empty_cells = []\n for i in range(4):\n for j in range(4):\n if self.grid[i][j] == 0:\n empty_cells.append((i, j))\n return empty_cells\n\n def add_new_tile(self):\n empty_cells = self.get_empty_cells()\n if empty_cells:\n cell = random.choice(empty_cells)\n self.grid[cell[0]][cell[1]] = random.choice([2, 4])\n else:\n # Handle the case when there are no empty cells\n pass\n\n def get_score(self) -> int:\n return self.score\n```", + "\nNOTICE\nRole: You are a professional engineer; the main goal is to write google-style, elegant, modular, easy to read and maintain code\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## Design\n{\"Implementation approach\": \"We will use the Pygame library to create the game interface and handle user input. The game logic will be implemented using Python classes and data structures.\", \"File list\": [\"main.py\", \"game.py\"], \"Data structures and interfaces\": \"classDiagram\\n class Game {\\n -grid: List[List[int]]\\n -score: int\\n -game_over: bool\\n +__init__()\\n +reset_game()\\n +move(direction: str)\\n +is_game_over() bool\\n +get_empty_cells() List[Tuple[int, int]]\\n +add_new_tile()\\n +get_score() int\\n }\\n class UI {\\n -game: Game\\n +__init__(game: Game)\\n +draw_grid()\\n +draw_score()\\n +draw_game_over()\\n +handle_input()\\n }\\n Game --> UI\", \"Program call flow\": \"sequenceDiagram\\n participant M as Main\\n participant G as Game\\n participant U as UI\\n M->>G: reset_game()\\n M->>U: draw_grid()\\n M->>U: draw_score()\\n M->>U: handle_input()\\n U->>G: move(direction)\\n G->>G: add_new_tile()\\n G->>U: draw_grid()\\n G->>U: draw_score()\\n G->>U: draw_game_over()\\n G->>G: is_game_over()\\n G->>G: get_empty_cells()\\n G->>G: get_score()\", \"Anything UNCLEAR\": \"...\"}\n\n## Task\n{\"Required packages\": [\"pygame==2.0.1\"], \"Required Other language third-party packages\": [\"No third-party dependencies required\"], \"Logic Analysis\": [[\"game.py\", \"Contains Game class and related functions for game logic\"], [\"main.py\", \"Contains main function, initializes the game and UI\"]], \"Task list\": [\"game.py\", \"main.py\"], \"Full API spec\": \"\", \"Shared Knowledge\": \"The game logic will be implemented using Python classes and data structures. The Pygame library will be used to create the game interface and handle user input.\", \"Anything UNCLEAR\": \"...\"}\n\n## Legacy Code\n```Code\n\n```\n\n## Debug logs\n```text\nE.......F\n======================================================================\nERROR: test_add_new_tile (__main__.TestGame)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/Users/xx/tests/test_game.py\", line 104, in test_add_new_tile\n self.assertIn(self.game.grid[empty_cells[0][0]][empty_cells[0][1]], [2, 4])\nIndexError: list index out of range\n\n======================================================================\nFAIL: test_reset_game (__main__.TestGame)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/Users/xx/tests/test_game.py\", line 13, in test_reset_game\n self.assertEqual(self.game.grid, [[0 for _ in range(4)] for _ in range(4)])\nAssertionError: Lists differ: [[0, 0, 0, 0], [0, 2, 0, 0], [0, 0, 0, 2], [0, 0, 0, 0]] != [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]\n\nFirst differing element 1:\n[0, 2, 0, 0]\n[0, 0, 0, 0]\n\n- [[0, 0, 0, 0], [0, 2, 0, 0], [0, 0, 0, 2], [0, 0, 0, 0]]\n? --- ^\n\n+ [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]\n? +++ ^\n\n\n----------------------------------------------------------------------\nRan 9 tests in 0.002s\n\nFAILED (failures=1, errors=1)\n\n\n{\"design_filename\": \"docs/system_design/20231221155954.json\", \"task_filename\": \"docs/tasks/20231221155954.json\", \"codes_filenames\": [\"game.py\", \"main.py\"], \"reason\": \"```json\\n{\\n \\\"game.py\\\": \\\"Add handling for no empty cells in add_new_tile function, Update score in move function\\\",\\n \\\"main.py\\\": \\\"Handle game over condition in the game loop\\\"\\n}\\n```\"}\n```\n\n## Bug Feedback logs\n```text\n\n```\n\n# Format example\n## Code: game.py\n```python\n## game.py\n...\n```\n\n# Instruction: Based on the context, follow \"Format example\", write code.\n\n## Code: game.py. Write code with triple quoto, based on the following attentions and context.\n1. Only One file: do your best to implement THIS ONLY ONE FILE.\n2. COMPLETE CODE: Your code will be part of the entire project, so please implement complete, reliable, reusable code snippets.\n3. Set default value: If there is any setting, ALWAYS SET A DEFAULT VALUE, ALWAYS USE STRONG TYPE AND EXPLICIT VARIABLE. AVOID circular import.\n4. Follow design: YOU MUST FOLLOW \"Data structures and interfaces\". DONT CHANGE ANY DESIGN. Do not use public member functions that do not exist in your design.\n5. CAREFULLY CHECK THAT YOU DONT MISS ANY NECESSARY CLASS/FUNCTION IN THIS FILE.\n6. Before using a external variable/module, make sure you import it first.\n7. Write out EVERY CODE DETAIL, DON'T LEAVE TODO.\n\n": "## Code: game.py\n```python\n## game.py\n\nfrom typing import List, Tuple\nimport random\n\nclass Game:\n def __init__(self):\n self.grid: List[List[int]] = [[0 for _ in range(4)] for _ in range(4)]\n self.score: int = 0\n self.game_over: bool = False\n\n def reset_game(self):\n self.grid = [[0 for _ in range(4)] for _ in range(4)]\n self.score = 0\n self.game_over = False\n\n def move(self, direction: str):\n # Implement the move logic based on the direction\n pass\n\n def is_game_over(self) -> bool:\n # Check if the game is over\n return self.game_over\n\n def get_empty_cells(self) -> List[Tuple[int, int]]:\n empty_cells = []\n for i in range(4):\n for j in range(4):\n if self.grid[i][j] == 0:\n empty_cells.append((i, j))\n return empty_cells\n\n def add_new_tile(self):\n empty_cells = self.get_empty_cells()\n if empty_cells:\n cell = random.choice(empty_cells)\n self.grid[cell[0]][cell[1]] = random.choice([2, 4])\n else:\n # Handle the case when there are no empty cells\n pass\n\n def get_score(self) -> int:\n return self.score\n```", "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n编写一个从a加b的函数,返回a+b\n\n## Task\n\n\n## Code Files\n\n\n\n## Code to be Reviewed: \n```Code\n\ndef add(a, b):\n return a + \n\n```\n\n\n\n# Format example 1\n## Code Review: \n1. No, we should fix the logic of class A due to ...\n2. ...\n3. ...\n4. No, function B is not implemented, ...\n5. ...\n6. ...\n\n## Actions\n1. Fix the `handle_events` method to update the game state only if a move is successful.\n ```python\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n return False\n if event.type == pygame.KEYDOWN:\n moved = False\n if event.key == pygame.K_UP:\n moved = self.game.move('UP')\n elif event.key == pygame.K_DOWN:\n moved = self.game.move('DOWN')\n elif event.key == pygame.K_LEFT:\n moved = self.game.move('LEFT')\n elif event.key == pygame.K_RIGHT:\n moved = self.game.move('RIGHT')\n if moved:\n # Update the game state only if a move was successful\n self.render()\n return True\n ```\n2. Implement function B\n\n## Code Review Result\nLBTM\n\n# Format example 2\n## Code Review: \n1. Yes.\n2. Yes.\n3. Yes.\n4. Yes.\n5. Yes.\n6. Yes.\n\n## Actions\npass\n\n## Code Review Result\nLGTM\n\n\n\n# Instruction: Based on the actual code situation, follow one of the \"Format example\". Return only 1 file under review.\n\n## Code Review: Ordered List. Based on the \"Code to be Reviewed\", provide key, clear, concise, and specific answer. If any answer is no, explain how to fix it step by step.\n1. Is the code implemented as per the requirements? If not, how to achieve it? Analyse it step by step.\n2. Is the code logic completely correct? If there are errors, please indicate how to correct them.\n3. Does the existing code follow the \"Data structures and interfaces\"?\n4. Are all functions implemented? If there is no implementation, please indicate how to achieve it step by step.\n5. Have all necessary pre-dependencies been imported? If not, indicate which ones need to be imported\n6. Are methods from other files being reused correctly?\n\n## Actions: Ordered List. Things that should be done after CR, such as implementing class A and function B\n\n## Code Review Result: str. If the code doesn't have bugs, we don't need to rewrite it, so answer LGTM and stop. ONLY ANSWER LGTM/LBTM.\nLGTM/LBTM\n\n": "## Code Review: \n1. No, the code is not implemented as per the requirements. The function 'add' is incomplete and does not return the sum of 'a' and 'b'.\n2. No, the code logic is not completely correct. The return statement in the 'add' function is incomplete.\n3. N/A\n4. N/A\n5. N/A\n6. N/A\n\n## Actions\n1. Complete the 'add' function to return the sum of 'a' and 'b'.\n ```python\n def add(a, b):\n return a + b\n ```\n\n## Code Review Result\nLBTM", "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n编写一个从a加b的函数,返回a+b\n\n## Task\n\n\n## Code Files\n\n\n\n## Code to be Reviewed: \n```Code\n\ndef add(a, b):\n return a + \n\n```\n\n## Code Review: \n1. No, the code is not implemented as per the requirements. The function 'add' is incomplete and does not return the sum of 'a' and 'b'.\n2. No, the code logic is not completely correct. The return statement in the 'add' function is incomplete.\n3. N/A\n4. N/A\n5. N/A\n6. N/A\n\n## Actions\n1. Complete the 'add' function to return the sum of 'a' and 'b'.\n ```python\n def add(a, b):\n return a + b\n ```\n\n## Code Review Result\nLBTM\n\n# Instruction: rewrite code based on the Code Review and Actions\n## Rewrite Code: CodeBlock. If it still has some bugs, rewrite with triple quotes. Do your utmost to optimize THIS SINGLE FILE. Return all completed codes and prohibit the return of unfinished codes.\n```Code\n## \n...\n```\n": "```python\ndef add(a, b):\n return a + b\n```", "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## System Design\n编写一个从a加b的函数,返回a+b\n\n## Task\n\n\n## Code Files\n\n\n\n## Code to be Reviewed: \n```Code\ndef add(a, b):\n return a + b\n\n```\n\n\n\n# Format example 1\n## Code Review: \n1. No, we should fix the logic of class A due to ...\n2. ...\n3. ...\n4. No, function B is not implemented, ...\n5. ...\n6. ...\n\n## Actions\n1. Fix the `handle_events` method to update the game state only if a move is successful.\n ```python\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n return False\n if event.type == pygame.KEYDOWN:\n moved = False\n if event.key == pygame.K_UP:\n moved = self.game.move('UP')\n elif event.key == pygame.K_DOWN:\n moved = self.game.move('DOWN')\n elif event.key == pygame.K_LEFT:\n moved = self.game.move('LEFT')\n elif event.key == pygame.K_RIGHT:\n moved = self.game.move('RIGHT')\n if moved:\n # Update the game state only if a move was successful\n self.render()\n return True\n ```\n2. Implement function B\n\n## Code Review Result\nLBTM\n\n# Format example 2\n## Code Review: \n1. Yes.\n2. Yes.\n3. Yes.\n4. Yes.\n5. Yes.\n6. Yes.\n\n## Actions\npass\n\n## Code Review Result\nLGTM\n\n\n\n# Instruction: Based on the actual code situation, follow one of the \"Format example\". Return only 1 file under review.\n\n## Code Review: Ordered List. Based on the \"Code to be Reviewed\", provide key, clear, concise, and specific answer. If any answer is no, explain how to fix it step by step.\n1. Is the code implemented as per the requirements? If not, how to achieve it? Analyse it step by step.\n2. Is the code logic completely correct? If there are errors, please indicate how to correct them.\n3. Does the existing code follow the \"Data structures and interfaces\"?\n4. Are all functions implemented? If there is no implementation, please indicate how to achieve it step by step.\n5. Have all necessary pre-dependencies been imported? If not, indicate which ones need to be imported\n6. Are methods from other files being reused correctly?\n\n## Actions: Ordered List. Things that should be done after CR, such as implementing class A and function B\n\n## Code Review Result: str. If the code doesn't have bugs, we don't need to rewrite it, so answer LGTM and stop. ONLY ANSWER LGTM/LBTM.\nLGTM/LBTM\n\n": "## Code Review: \n1. Yes, the code is implemented as per the requirements.\n2. Yes, the code logic is completely correct.\n3. Yes, the existing code follows the \"Data structures and interfaces\".\n4. Yes, the function is implemented.\n5. Yes, all necessary pre-dependencies have been imported.\n6. N/A\n\n## Code Review Result\nLGTM", @@ -394,8 +394,8 @@ }, "\n## context\n\n\n-----\n\n## format example\n[CONTENT]\n{\n \"invoice\": \"False\"\n}\n[/CONTENT]\n\n## nodes: \": # \"\n- invoice: # if it's a invoice file, return True else False\n\n\n## constraint\nLanguage: Please use the same language as Human INPUT.\nFormat: output wrapped inside [CONTENT][/CONTENT] like format example, nothing else.\n\n## action\nFollow instructions of nodes, generate output and make sure it follows the format example.\n": "[CONTENT]\n{\n \"invoice\": \"True\"\n}\n[/CONTENT]", "\n## context\n\n### Legacy Content\n\n## Implementation approach\n\nWe will create a Python-based number guessing game with a simple command-line interface. For the user interface, we will use the built-in 'input' and 'print' functions for interaction. The random library will be used for generating random numbers. We will structure the code to be modular and easily extendable, separating the game logic from the user interface.\n\n## File list\n\n- main.py\n- game.py\n- ui.py\n\n## Data structures and interfaces\n\n\nclassDiagram\n class Game {\n -int secret_number\n -int min_range\n -int max_range\n -list attempts\n +__init__(difficulty: str)\n +start_game()\n +check_guess(guess: int) str\n +get_attempts() int\n +get_history() list\n }\n class UI {\n +start()\n +display_message(message: str)\n +get_user_input(prompt: str) str\n +show_attempts(attempts: int)\n +show_history(history: list)\n +select_difficulty() str\n }\n class Main {\n +main()\n }\n Main --> UI\n UI --> Game\n\n\n## Program call flow\n\n\nsequenceDiagram\n participant M as Main\n participant UI as UI\n participant G as Game\n M->>UI: start()\n UI->>UI: select_difficulty()\n UI-->>G: __init__(difficulty)\n G->>G: start_game()\n loop Game Loop\n UI->>UI: get_user_input(\"Enter your guess:\")\n UI-->>G: check_guess(guess)\n G->>UI: display_message(feedback)\n G->>UI: show_attempts(attempts)\n G->>UI: show_history(history)\n end\n G->>UI: display_message(\"Correct! Game over.\")\n UI->>M: main() # Game session ends\n\n\n## Anything UNCLEAR\n\nThe requirement analysis suggests the need for a clean and intuitive interface. Since we are using a command-line interface, we need to ensure that the text-based UI is as user-friendly as possible. Further clarification on whether a graphical user interface (GUI) is expected in the future would be helpful for planning the extendability of the game.\n\n### New Requirements\n{'Language': 'en_us', 'Programming Language': 'Python', 'Refined Requirements': 'Adding graphical interface functionality to enhance the user experience in the number-guessing game.', 'Project Name': 'number_guessing_game', 'Refined Product Goals': ['Ensure a user-friendly interface for the game with the new graphical interface', 'Provide a challenging yet enjoyable game experience with visual enhancements', 'Design the game to be easily extendable for future features, including graphical elements'], 'Refined User Stories': ['As a player, I want to interact with a graphical interface to guess numbers and receive visual feedback on my guesses', 'As a player, I want to easily select the difficulty level through the graphical interface', 'As a player, I want to visually track my previous guesses and the number of attempts in the graphical interface', 'As a player, I want to be congratulated with a visually appealing message when I guess the number correctly'], 'Competitive Analysis': ['Guess The Number Game A: Basic text interface, no difficulty levels', 'Number Master B: Has difficulty levels, but cluttered interface', 'Quick Guess C: Sleek design, but lacks performance tracking', 'NumGuess D: Good performance tracking, but not mobile-friendly', 'GuessIt E: Mobile-friendly, but too many ads', 'Perfect Guess F: Offers hints, but the hints are not very helpful', 'SmartGuesser G: Has a learning mode, but lacks a competitive edge', 'Graphical Guess H: Graphical interface, but poor user experience due to complex design'], 'Competitive Quadrant Chart': 'quadrantChart\\n title \"User Engagement and Game Complexity with Graphical Interface\"\\n x-axis \"Low Complexity\" --> \"High Complexity\"\\n y-axis \"Low Engagement\" --> \"High Engagement\"\\n quadrant-1 \"Too Simple\"\\n quadrant-2 \"Niche Appeal\"\\n quadrant-3 \"Complex & Unengaging\"\\n quadrant-4 \"Sweet Spot\"\\n \"Guess The Number Game A\": [0.2, 0.4]\\n \"Number Master B\": [0.5, 0.3]\\n \"Quick Guess C\": [0.6, 0.7]\\n \"NumGuess D\": [0.4, 0.6]\\n \"GuessIt E\": [0.7, 0.5]\\n \"Perfect Guess F\": [0.6, 0.4]\\n \"SmartGuesser G\": [0.8, 0.6]\\n \"Graphical Guess H\": [0.7, 0.3]\\n \"Our Target Product\": [0.5, 0.9]', 'Refined Requirement Analysis': ['The game should maintain its simplicity while integrating a graphical interface for enhanced engagement.', 'Immediate visual feedback is crucial for user satisfaction in the graphical interface.', 'The interface must be intuitive, allowing for easy navigation and selection of game options.', \"The graphical design should be clean and not detract from the game's core guessing mechanic.\"], 'Refined Requirement Pool': [['P0', 'Implement a graphical user interface (GUI) to replace the command-line interaction'], ['P0', 'Design a user interface that displays the game status, results, and feedback clearly with graphical elements'], ['P1', 'Incorporate interactive elements for selecting difficulty levels'], ['P1', \"Visualize the history of the player's guesses and the number of attempts within the game session\"], ['P2', 'Create animations for correct or incorrect guesses to enhance user feedback'], ['P2', 'Ensure the GUI is responsive and compatible with various screen sizes'], ['P2', \"Store and show the history of the player's guesses during a game session\"]], 'UI Design draft': 'The UI will feature a modern and minimalist design with a graphical number input field, a submit button with animations, and a dedicated area for visual feedback. It will include interactive elements to select the difficulty level and a visual display for the number of attempts and history of past guesses.', 'Anything UNCLEAR': ''}\n\n\n-----\n\n## format example\n[CONTENT]\n{\n \"Refined Implementation Approach\": \"We will refine ...\",\n \"Refined File list\": [\n \"main.py\",\n \"game.py\",\n \"new_feature.py\"\n ],\n \"Refined Data structures and interfaces\": \"\\nclassDiagram\\n class Main {\\n -SearchEngine search_engine\\n +main() str\\n }\\n class SearchEngine {\\n -Index index\\n -Ranking ranking\\n -Summary summary\\n +search(query: str) str\\n }\\n class Index {\\n -KnowledgeBase knowledge_base\\n +create_index(data: dict)\\n +query_index(query: str) list\\n }\\n class Ranking {\\n +rank_results(results: list) list\\n }\\n class Summary {\\n +summarize_results(results: list) str\\n }\\n class KnowledgeBase {\\n +update(data: dict)\\n +fetch_data(query: str) dict\\n }\\n Main --> SearchEngine\\n SearchEngine --> Index\\n SearchEngine --> Ranking\\n SearchEngine --> Summary\\n Index --> KnowledgeBase\\n\",\n \"Refined Program call flow\": \"\\nsequenceDiagram\\n participant M as Main\\n participant SE as SearchEngine\\n participant I as Index\\n participant R as Ranking\\n participant S as Summary\\n participant KB as KnowledgeBase\\n M->>SE: search(query)\\n SE->>I: query_index(query)\\n I->>KB: fetch_data(query)\\n KB-->>I: return data\\n I-->>SE: return results\\n SE->>R: rank_results(results)\\n R-->>SE: return ranked_results\\n SE->>S: summarize_results(ranked_results)\\n S-->>SE: return summary\\n SE-->>M: return summary\\n\",\n \"Anything UNCLEAR\": \"Clarification needed on third-party API integration, ...\"\n}\n[/CONTENT]\n\n## nodes: \": # \"\n- Refined Implementation Approach: # Update and extend the original implementation approach to reflect the evolving challenges and requirements due to incremental development. Outline the steps involved in the implementation process with the detailed strategies.\n- Refined File list: typing.List[str] # Update and expand the original file list including only relative paths. Up to 2 files can be added.Ensure that the refined file list reflects the evolving structure of the project.\n- Refined Data structures and interfaces: # Update and extend the existing mermaid classDiagram code syntax to incorporate new classes, methods (including __init__), and functions with precise type annotations. Delineate additional relationships between classes, ensuring clarity and adherence to PEP8 standards.Retain content that is not related to incremental development but important for consistency and clarity.\n- Refined Program call flow: # Extend the existing sequenceDiagram code syntax with detailed information, accurately covering theCRUD and initialization of each object. Ensure correct syntax usage and reflect the incremental changes introducedin the classes and API defined above. Retain content that is not related to incremental development but important for consistency and clarity.\n- Anything UNCLEAR: # Mention unclear project aspects, then try to clarify it.\n\n\n## constraint\nLanguage: Please use the same language as Human INPUT.\nFormat: output wrapped inside [CONTENT][/CONTENT] like format example, nothing else.\n\n## action\nFollow instructions of nodes, generate output and make sure it follows the format example.\n": "[CONTENT]\n{\n \"Refined Implementation Approach\": \"To accommodate the new graphical interface requirements, we will integrate the Tkinter library for Python to develop the GUI components. The implementation will involve designing the layout, creating interactive widgets for user input, and displaying visual feedback. We will also implement event-driven programming to handle user actions. The game logic will be encapsulated within the Game class, and the UI class will be responsible for rendering the game state graphically.\",\n \"Refined File list\": [\n \"main.py\",\n \"game.py\",\n \"ui.py\",\n \"gui.py\"\n ],\n \"Refined Data structures and interfaces\": \"\\nclassDiagram\\n class Game {\\n -int secret_number\\n -int min_range\\n -int max_range\\n -list attempts\\n +__init__(difficulty: str)\\n +start_game()\\n +check_guess(guess: int) str\\n +get_attempts() int\\n +get_history() list\\n }\\n class UI {\\n +start()\\n +display_message(message: str)\\n +get_user_input(prompt: str) str\\n +show_attempts(attempts: int)\\n +show_history(history: list)\\n +select_difficulty() str\\n }\\n class GUI {\\n +__init__(game: Game)\\n +render_main_window()\\n +update_feedback(message: str)\\n +update_attempts(attempts: int)\\n +update_history(history: list)\\n +get_difficulty_selection() str\\n +get_guess_from_user() int\\n }\\n class Main {\\n +main()\\n }\\n Main --> UI\\n UI --> Game\\n UI --> GUI\\n GUI --> Game\\n\",\n \"Refined Program call flow\": \"\\nsequenceDiagram\\n participant M as Main\\n participant UI as UI\\n participant G as Game\\n participant GUI as GUI\\n M->>UI: start()\\n UI->>GUI: render_main_window()\\n GUI->>GUI: get_difficulty_selection()\\n GUI-->>G: __init__(difficulty)\\n G->>G: start_game()\\n loop Game Loop\\n GUI->>GUI: get_guess_from_user()\\n GUI-->>G: check_guess(guess)\\n G->>GUI: update_feedback(feedback)\\n G->>GUI: update_attempts(attempts)\\n G->>GUI: update_history(history)\\n end\\n G->>GUI: update_feedback(\\\"Correct! Game over.\\\")\\n GUI->>M: main() # Game session ends\\n\",\n \"Anything UNCLEAR\": \"Clarification needed on whether the GUI should support touch input for devices with touch screens, and if so, what gestures need to be supported.\"\n}\n[/CONTENT]", - "\n## context\n\n### Legacy Content\n\n## Required Python packages\n\n- random==2.2.1\n\n## Required Other language third-party packages\n\n- No third-party dependencies required\n\n## Logic Analysis\n\n- ['game.py', 'Contains Game class with methods __init__, start_game, check_guess, get_attempts, get_history and uses random library for generating secret_number']\n- ['ui.py', 'Contains UI class with methods start, display_message, get_user_input, show_attempts, show_history, select_difficulty and interacts with Game class']\n- ['main.py', 'Contains Main class with method main that initializes UI class and starts the game loop']\n\n## Task list\n\n- game.py\n- ui.py\n- main.py\n\n## Full API spec\n\n\n\n## Shared Knowledge\n\n`game.py` contains the core game logic and is used by `ui.py` to interact with the user. `main.py` serves as the entry point to start the game.\n\n## Anything UNCLEAR\n\nThe requirement analysis suggests the need for a clean and intuitive interface. Since we are using a command-line interface, we need to ensure that the text-based UI is as user-friendly as possible. Further clarification on whether a graphical user interface (GUI) is expected in the future would be helpful for planning the extendability of the game.\n\n### New Requirements\n{'Refined Implementation Approach': 'To accommodate the new graphical user interface (GUI) requirements, we will leverage the Tkinter library, which is included with Python and supports the creation of a user-friendly GUI. The game logic will remain in Python, with Tkinter handling the rendering of the interface. We will ensure that the GUI is responsive and provides immediate visual feedback. The main game loop will be event-driven, responding to user inputs such as button clicks and difficulty selection.', 'Refined File list': ['main.py', 'game.py', 'ui.py', 'gui.py'], 'Refined Data structures and interfaces': '\\nclassDiagram\\n class Game {\\n -int secret_number\\n -int min_range\\n -int max_range\\n -list attempts\\n +__init__(difficulty: str)\\n +start_game()\\n +check_guess(guess: int) str\\n +get_attempts() int\\n +get_history() list\\n }\\n class UI {\\n +start()\\n +display_message(message: str)\\n +get_user_input(prompt: str) str\\n +show_attempts(attempts: int)\\n +show_history(history: list)\\n +select_difficulty() str\\n }\\n class GUI {\\n +__init__()\\n +setup_window()\\n +bind_events()\\n +update_feedback(message: str)\\n +update_attempts(attempts: int)\\n +update_history(history: list)\\n +show_difficulty_selector()\\n +animate_guess_result(correct: bool)\\n }\\n class Main {\\n +main()\\n }\\n Main --> UI\\n UI --> Game\\n UI --> GUI\\n GUI --> Game\\n', 'Refined Program call flow': '\\nsequenceDiagram\\n participant M as Main\\n participant UI as UI\\n participant G as Game\\n participant GU as GUI\\n M->>UI: start()\\n UI->>GU: setup_window()\\n GU->>GU: bind_events()\\n GU->>UI: select_difficulty()\\n UI-->>G: __init__(difficulty)\\n G->>G: start_game()\\n loop Game Loop\\n GU->>GU: show_difficulty_selector()\\n GU->>UI: get_user_input(\"Enter your guess:\")\\n UI-->>G: check_guess(guess)\\n G->>GU: update_feedback(feedback)\\n G->>GU: update_attempts(attempts)\\n G->>GU: update_history(history)\\n GU->>GU: animate_guess_result(correct)\\n end\\n G->>GU: update_feedback(\"Correct! Game over.\")\\n GU->>M: main() # Game session ends\\n', 'Anything UNCLEAR': ''}\n\n\n-----\n\n## format example\n[CONTENT]\n{\n \"Required Python packages\": [\n \"flask==1.1.2\",\n \"bcrypt==3.2.0\"\n ],\n \"Required Other language third-party packages\": [\n \"No third-party dependencies required\"\n ],\n \"Refined Logic Analysis\": [\n [\n \"game.py\",\n \"Contains Game class and ... functions\"\n ],\n [\n \"main.py\",\n \"Contains main function, from game import Game\"\n ],\n [\n \"new_feature.py\",\n \"Introduces NewFeature class and related functions\"\n ],\n [\n \"utils.py\",\n \"Modifies existing utility functions to support incremental changes\"\n ]\n ],\n \"Refined Task list\": [\n \"new_feature.py\",\n \"utils\",\n \"game.py\",\n \"main.py\"\n ],\n \"Full API spec\": \"openapi: 3.0.0 ...\",\n \"Refined Shared Knowledge\": \"`new_module.py` enhances shared utility functions for improved code reusability and collaboration.\",\n \"Anything UNCLEAR\": \"Clarification needed on how to start and initialize third-party libraries.\"\n}\n[/CONTENT]\n\n## nodes: \": # \"\n- Required Python packages: typing.List[str] # Provide required Python packages in requirements.txt format.\n- Required Other language third-party packages: typing.List[str] # List down the required packages for languages other than Python.\n- Refined Logic Analysis: typing.List[typing.List[str]] # Review and refine the logic analysis by merging the Legacy Content and Incremental Content. Provide a comprehensive list of files with classes/methods/functions to be implemented or modified incrementally. Include dependency analysis, consider potential impacts on existing code, and document necessary imports.\n- Refined Task list: typing.List[str] # Review and refine the combined task list after the merger of Legacy Content and Incremental Content, and consistent with Refined File List. Ensure that tasks are organized in a logical and prioritized order, considering dependencies for a streamlined and efficient development process. \n- Full API spec: # Describe all APIs using OpenAPI 3.0 spec that may be used by both frontend and backend. If front-end and back-end communication is not required, leave it blank.\n- Refined Shared Knowledge: # Update and expand shared knowledge to reflect any new elements introduced. This includes common utility functions, configuration variables for team collaboration. Retain content that is not related to incremental development but important for consistency and clarity.\n- Anything UNCLEAR: # Mention any unclear aspects in the project management context and try to clarify them.\n\n\n## constraint\nLanguage: Please use the same language as Human INPUT.\nFormat: output wrapped inside [CONTENT][/CONTENT] like format example, nothing else.\n\n## action\nFollow instructions of nodes, generate output and make sure it follows the format example.\n": "[CONTENT]\n{\n \"Required Python packages\": [\n \"random==2.2.1\",\n \"tkinter==8.6\"\n ],\n \"Required Other language third-party packages\": [\n \"No third-party dependencies required\"\n ],\n \"Refined Logic Analysis\": [\n [\n \"game.py\",\n \"Contains Game class with methods __init__, start_game, check_guess, get_attempts, get_history and uses random library for generating secret_number\"\n ],\n [\n \"ui.py\",\n \"Contains UI class with methods start, display_message, get_user_input, show_attempts, show_history, select_difficulty and interacts with Game class\"\n ],\n [\n \"gui.py\",\n \"Contains GUI class with methods __init__, setup_window, bind_events, update_feedback, update_attempts, update_history, show_difficulty_selector, animate_guess_result and interacts with Game class\"\n ],\n [\n \"main.py\",\n \"Contains Main class with method main that initializes UI class and starts the game loop\"\n ]\n ],\n \"Refined Task list\": [\n \"game.py\",\n \"ui.py\",\n \"gui.py\",\n \"main.py\"\n ],\n \"Full API spec\": \"\",\n \"Refined Shared Knowledge\": \"`game.py` contains the core game logic and is used by `ui.py` to interact with the user. `main.py` serves as the entry point to start the game. `gui.py` will handle the graphical user interface using the Tkinter library, providing a responsive and user-friendly interface for the game.\",\n \"Anything UNCLEAR\": \"\"\n}\n[/CONTENT]", - "\nNOTICE\nRole: You are a professional engineer; The main goal is to complete incremental development by combining legacy code and plan and Incremental Change, ensuring the integration of new features.\n\n# Context\n## User New Requirements\n\n\n## Code Plan And Change\n{\"Development Plan\": [\"Develop the GUI using Tkinter to replace the command-line interface. Start by setting up the main window and event handling. Then, add widgets for displaying the game status, results, and feedback. Implement interactive elements for difficulty selection and visualize the guess history. Finally, create animations for guess feedback and ensure responsiveness across different screen sizes.\", \"Modify the main.py to initialize the GUI and start the event-driven game loop. Ensure that the GUI is the primary interface for user interaction.\"], \"Incremental Change\": [\"```diff\\nclass GUI:\\n- pass\\n+ def __init__(self):\\n+ self.setup_window()\\n+\\n+ def setup_window(self):\\n+ # Initialize the main window using Tkinter\\n+ pass\\n+\\n+ def bind_events(self):\\n+ # Bind button clicks and other events\\n+ pass\\n+\\n+ def update_feedback(self, message: str):\\n+ # Update the feedback label with the given message\\n+ pass\\n+\\n+ def update_attempts(self, attempts: int):\\n+ # Update the attempts label with the number of attempts\\n+ pass\\n+\\n+ def update_history(self, history: list):\\n+ # Update the history view with the list of past guesses\\n+ pass\\n+\\n+ def show_difficulty_selector(self):\\n+ # Show buttons or a dropdown for difficulty selection\\n+ pass\\n+\\n+ def animate_guess_result(self, correct: bool):\\n+ # Trigger an animation for correct or incorrect guesses\\n+ pass\\n```\", \"```diff\\nclass Main:\\n def main(self):\\n- user_interface = UI()\\n- user_interface.start()\\n+ graphical_user_interface = GUI()\\n+ graphical_user_interface.setup_window()\\n+ graphical_user_interface.bind_events()\\n+ # Start the Tkinter main loop\\n+ pass\\n\\n if __name__ == \\\"__main__\\\":\\n main_instance = Main()\\n main_instance.main()\\n```\\n\\n3. Plan for ui.py: Refactor ui.py to work with the new GUI class. Remove command-line interactions and delegate display and input tasks to the GUI.\\n```python\\nclass UI:\\n- def display_message(self, message: str):\\n- print(message)\\n+\\n+ def display_message(self, message: str):\\n+ # This method will now pass the message to the GUI to display\\n+ pass\\n\\n- def get_user_input(self, prompt: str) -> str:\\n- return input(prompt)\\n+\\n+ def get_user_input(self, prompt: str) -> str:\\n+ # This method will now trigger the GUI to get user input\\n+ pass\\n\\n- def show_attempts(self, attempts: int):\\n- print(f\\\"Number of attempts: {attempts}\\\")\\n+\\n+ def show_attempts(self, attempts: int):\\n+ # This method will now update the GUI with the number of attempts\\n+ pass\\n\\n- def show_history(self, history: list):\\n- print(\\\"Guess history:\\\")\\n- for guess in history:\\n- print(guess)\\n+\\n+ def show_history(self, history: list):\\n+ # This method will now update the GUI with the guess history\\n+ pass\\n```\\n\\n4. Plan for game.py: Ensure game.py remains mostly unchanged as it contains the core game logic. However, make minor adjustments if necessary to integrate with the new GUI.\\n```python\\nclass Game:\\n # No changes required for now\\n```\\n\"]}\n\n## Design\n{\"Refined Implementation Approach\": \"To accommodate the new graphical user interface (GUI) requirements, we will leverage the Tkinter library, which is included with Python and supports the creation of a user-friendly GUI. The game logic will remain in Python, with Tkinter handling the rendering of the interface. We will ensure that the GUI is responsive and provides immediate visual feedback. The main game loop will be event-driven, responding to user inputs such as button clicks and difficulty selection.\", \"Refined File list\": [\"main.py\", \"game.py\", \"ui.py\", \"gui.py\"], \"Refined Data structures and interfaces\": \"\\nclassDiagram\\n class Game {\\n -int secret_number\\n -int min_range\\n -int max_range\\n -list attempts\\n +__init__(difficulty: str)\\n +start_game()\\n +check_guess(guess: int) str\\n +get_attempts() int\\n +get_history() list\\n }\\n class UI {\\n +start()\\n +display_message(message: str)\\n +get_user_input(prompt: str) str\\n +show_attempts(attempts: int)\\n +show_history(history: list)\\n +select_difficulty() str\\n }\\n class GUI {\\n +__init__()\\n +setup_window()\\n +bind_events()\\n +update_feedback(message: str)\\n +update_attempts(attempts: int)\\n +update_history(history: list)\\n +show_difficulty_selector()\\n +animate_guess_result(correct: bool)\\n }\\n class Main {\\n +main()\\n }\\n Main --> UI\\n UI --> Game\\n UI --> GUI\\n GUI --> Game\\n\", \"Refined Program call flow\": \"\\nsequenceDiagram\\n participant M as Main\\n participant UI as UI\\n participant G as Game\\n participant GU as GUI\\n M->>UI: start()\\n UI->>GU: setup_window()\\n GU->>GU: bind_events()\\n GU->>UI: select_difficulty()\\n UI-->>G: __init__(difficulty)\\n G->>G: start_game()\\n loop Game Loop\\n GU->>GU: show_difficulty_selector()\\n GU->>UI: get_user_input(\\\"Enter your guess:\\\")\\n UI-->>G: check_guess(guess)\\n G->>GU: update_feedback(feedback)\\n G->>GU: update_attempts(attempts)\\n G->>GU: update_history(history)\\n GU->>GU: animate_guess_result(correct)\\n end\\n G->>GU: update_feedback(\\\"Correct! Game over.\\\")\\n GU->>M: main() # Game session ends\\n\", \"Anything UNCLEAR\": \"\"}\n\n## Task\n{\"Required Python packages\": [\"random==2.2.1\", \"Tkinter==8.6\"], \"Required Other language third-party packages\": [\"No third-party dependencies required\"], \"Refined Logic Analysis\": [[\"game.py\", \"Contains Game class with methods __init__, start_game, check_guess, get_attempts, get_history and uses random library for generating secret_number\"], [\"ui.py\", \"Contains UI class with methods start, display_message, get_user_input, show_attempts, show_history, select_difficulty and interacts with Game class\"], [\"gui.py\", \"Contains GUI class with methods __init__, setup_window, bind_events, update_feedback, update_attempts, update_history, show_difficulty_selector, animate_guess_result and interacts with Game class for GUI rendering\"], [\"main.py\", \"Contains Main class with method main that initializes UI class and starts the event-driven game loop\"]], \"Refined Task list\": [\"game.py\", \"ui.py\", \"gui.py\", \"main.py\"], \"Full API spec\": \"\", \"Refined Shared Knowledge\": \"`game.py` contains the core game logic and is used by `ui.py` to interact with the user. `main.py` serves as the entry point to start the game. `gui.py` is introduced to handle the graphical user interface using Tkinter, which will interact with both `game.py` and `ui.py` for a responsive and user-friendly experience.\", \"Anything UNCLEAR\": \"\"}\n\n## Legacy Code\n```Code\n-----Now, game.py to be rewritten\n```game.py\n\nimport random\n\nclass Game:\n def __init__(self, difficulty: str = 'medium'):\n self.min_range, self.max_range = self._set_difficulty(difficulty)\n self.secret_number = random.randint(self.min_range, self.max_range)\n self.attempts = []\n\n def _set_difficulty(self, difficulty: str):\n difficulties = {\n 'easy': (1, 10),\n 'medium': (1, 100),\n 'hard': (1, 1000)\n }\n return difficulties.get(difficulty, (1, 100))\n\n def start_game(self):\n self.secret_number = random.randint(self.min_range, self.max_range)\n self.attempts = []\n\n def check_guess(self, guess: int) -> str:\n self.attempts.append(guess)\n if guess < self.secret_number:\n return \"It's higher.\"\n elif guess > self.secret_number:\n return \"It's lower.\"\n else:\n return \"Correct! Game over.\"\n\n def get_attempts(self) -> int:\n return len(self.attempts)\n\n def get_history(self) -> list:\n return self.attempts```\n=====\n```\n\n## Debug logs\n```text\n\n\n\n```\n\n## Bug Feedback logs\n```text\n\n```\n\n# Format example\n## Code: game.py\n```python\n## game.py\n...\n```\n\n# Instruction: Based on the context, follow \"Format example\", write or rewrite code.\n## Write/Rewrite Code: Only write one file game.py, write or rewrite complete code using triple quotes based on the following attentions and context.\n1. Only One file: do your best to implement THIS ONLY ONE FILE.\n2. COMPLETE CODE: Your code will be part of the entire project, so please implement complete, reliable, reusable code snippets.\n3. Set default value: If there is any setting, ALWAYS SET A DEFAULT VALUE, ALWAYS USE STRONG TYPE AND EXPLICIT VARIABLE. AVOID circular import.\n4. Follow design: YOU MUST FOLLOW \"Data structures and interfaces\". DONT CHANGE ANY DESIGN. Do not use public member functions that do not exist in your design.\n5. Follow Code Plan And Change: If there is any \"Incremental Change\" that is marked by the git diff format with '+' and '-' symbols, or Legacy Code files contain \"game.py to be rewritten\", you must merge it into the code file according to the \"Development Plan\". \n6. CAREFULLY CHECK THAT YOU DONT MISS ANY NECESSARY CLASS/FUNCTION IN THIS FILE.\n7. Before using a external variable/module, make sure you import it first.\n8. Write out EVERY CODE DETAIL, DON'T LEAVE TODO.\n9. Attention: Retain details that are not related to incremental development but are important for maintaining the consistency and clarity of the old code.\n": "```python\n## game.py\n\nimport random\n\nclass Game:\n def __init__(self, difficulty: str = 'medium'):\n self._min_range, self._max_range = self._set_difficulty(difficulty)\n self._secret_number = random.randint(self._min_range, self._max_range)\n self._attempts = []\n\n def _set_difficulty(self, difficulty: str):\n difficulties = {\n 'easy': (1, 10),\n 'medium': (1, 100),\n 'hard': (1, 1000)\n }\n return difficulties.get(difficulty, (1, 100))\n\n def start_game(self):\n self._secret_number = random.randint(self._min_range, self._max_range)\n self._attempts = []\n\n def check_guess(self, guess: int) -> str:\n self._attempts.append(guess)\n if guess < self._secret_number:\n return \"It's higher.\"\n elif guess > self._secret_number:\n return \"It's lower.\"\n else:\n return \"Correct! Game over.\"\n\n def get_attempts(self) -> int:\n return len(self._attempts)\n\n def get_history(self) -> list:\n return self._attempts\n```", + "\n## context\n\n### Legacy Content\n\n## Required packages\n\n- random==2.2.1\n\n## Required Other language third-party packages\n\n- No third-party dependencies required\n\n## Logic Analysis\n\n- ['game.py', 'Contains Game class with methods __init__, start_game, check_guess, get_attempts, get_history and uses random library for generating secret_number']\n- ['ui.py', 'Contains UI class with methods start, display_message, get_user_input, show_attempts, show_history, select_difficulty and interacts with Game class']\n- ['main.py', 'Contains Main class with method main that initializes UI class and starts the game loop']\n\n## Task list\n\n- game.py\n- ui.py\n- main.py\n\n## Full API spec\n\n\n\n## Shared Knowledge\n\n`game.py` contains the core game logic and is used by `ui.py` to interact with the user. `main.py` serves as the entry point to start the game.\n\n## Anything UNCLEAR\n\nThe requirement analysis suggests the need for a clean and intuitive interface. Since we are using a command-line interface, we need to ensure that the text-based UI is as user-friendly as possible. Further clarification on whether a graphical user interface (GUI) is expected in the future would be helpful for planning the extendability of the game.\n\n### New Requirements\n{'Refined Implementation Approach': 'To accommodate the new graphical user interface (GUI) requirements, we will leverage the Tkinter library, which is included with Python and supports the creation of a user-friendly GUI. The game logic will remain in Python, with Tkinter handling the rendering of the interface. We will ensure that the GUI is responsive and provides immediate visual feedback. The main game loop will be event-driven, responding to user inputs such as button clicks and difficulty selection.', 'Refined File list': ['main.py', 'game.py', 'ui.py', 'gui.py'], 'Refined Data structures and interfaces': '\\nclassDiagram\\n class Game {\\n -int secret_number\\n -int min_range\\n -int max_range\\n -list attempts\\n +__init__(difficulty: str)\\n +start_game()\\n +check_guess(guess: int) str\\n +get_attempts() int\\n +get_history() list\\n }\\n class UI {\\n +start()\\n +display_message(message: str)\\n +get_user_input(prompt: str) str\\n +show_attempts(attempts: int)\\n +show_history(history: list)\\n +select_difficulty() str\\n }\\n class GUI {\\n +__init__()\\n +setup_window()\\n +bind_events()\\n +update_feedback(message: str)\\n +update_attempts(attempts: int)\\n +update_history(history: list)\\n +show_difficulty_selector()\\n +animate_guess_result(correct: bool)\\n }\\n class Main {\\n +main()\\n }\\n Main --> UI\\n UI --> Game\\n UI --> GUI\\n GUI --> Game\\n', 'Refined Program call flow': '\\nsequenceDiagram\\n participant M as Main\\n participant UI as UI\\n participant G as Game\\n participant GU as GUI\\n M->>UI: start()\\n UI->>GU: setup_window()\\n GU->>GU: bind_events()\\n GU->>UI: select_difficulty()\\n UI-->>G: __init__(difficulty)\\n G->>G: start_game()\\n loop Game Loop\\n GU->>GU: show_difficulty_selector()\\n GU->>UI: get_user_input(\"Enter your guess:\")\\n UI-->>G: check_guess(guess)\\n G->>GU: update_feedback(feedback)\\n G->>GU: update_attempts(attempts)\\n G->>GU: update_history(history)\\n GU->>GU: animate_guess_result(correct)\\n end\\n G->>GU: update_feedback(\"Correct! Game over.\")\\n GU->>M: main() # Game session ends\\n', 'Anything UNCLEAR': ''}\n\n\n-----\n\n## format example\n[CONTENT]\n{\n \"Required packages\": [\n \"flask==1.1.2\",\n \"bcrypt==3.2.0\"\n ],\n \"Required Other language third-party packages\": [\n \"No third-party dependencies required\"\n ],\n \"Refined Logic Analysis\": [\n [\n \"game.py\",\n \"Contains Game class and ... functions\"\n ],\n [\n \"main.py\",\n \"Contains main function, from game import Game\"\n ],\n [\n \"new_feature.py\",\n \"Introduces NewFeature class and related functions\"\n ],\n [\n \"utils.py\",\n \"Modifies existing utility functions to support incremental changes\"\n ]\n ],\n \"Refined Task list\": [\n \"new_feature.py\",\n \"utils\",\n \"game.py\",\n \"main.py\"\n ],\n \"Full API spec\": \"openapi: 3.0.0 ...\",\n \"Refined Shared Knowledge\": \"`new_module.py` enhances shared utility functions for improved code reusability and collaboration.\",\n \"Anything UNCLEAR\": \"Clarification needed on how to start and initialize third-party libraries.\"\n}\n[/CONTENT]\n\n## nodes: \": # \"\n- Required packages: typing.List[str] # Provide Required packages in requirements.txt format.\n- Required Other language third-party packages: typing.List[str] # List down the required packages for languages other than Python.\n- Refined Logic Analysis: typing.List[typing.List[str]] # Review and refine the logic analysis by merging the Legacy Content and Incremental Content. Provide a comprehensive list of files with classes/methods/functions to be implemented or modified incrementally. Include dependency analysis, consider potential impacts on existing code, and document necessary imports.\n- Refined Task list: typing.List[str] # Review and refine the combined task list after the merger of Legacy Content and Incremental Content, and consistent with Refined File List. Ensure that tasks are organized in a logical and prioritized order, considering dependencies for a streamlined and efficient development process. \n- Full API spec: # Describe all APIs using OpenAPI 3.0 spec that may be used by both frontend and backend. If front-end and back-end communication is not required, leave it blank.\n- Refined Shared Knowledge: # Update and expand shared knowledge to reflect any new elements introduced. This includes common utility functions, configuration variables for team collaboration. Retain content that is not related to incremental development but important for consistency and clarity.\n- Anything UNCLEAR: # Mention any unclear aspects in the project management context and try to clarify them.\n\n\n## constraint\nLanguage: Please use the same language as Human INPUT.\nFormat: output wrapped inside [CONTENT][/CONTENT] like format example, nothing else.\n\n## action\nFollow instructions of nodes, generate output and make sure it follows the format example.\n": "[CONTENT]\n{\n \"Required packages\": [\n \"random==2.2.1\",\n \"tkinter==8.6\"\n ],\n \"Required Other language third-party packages\": [\n \"No third-party dependencies required\"\n ],\n \"Refined Logic Analysis\": [\n [\n \"game.py\",\n \"Contains Game class with methods __init__, start_game, check_guess, get_attempts, get_history and uses random library for generating secret_number\"\n ],\n [\n \"ui.py\",\n \"Contains UI class with methods start, display_message, get_user_input, show_attempts, show_history, select_difficulty and interacts with Game class\"\n ],\n [\n \"gui.py\",\n \"Contains GUI class with methods __init__, setup_window, bind_events, update_feedback, update_attempts, update_history, show_difficulty_selector, animate_guess_result and interacts with Game class\"\n ],\n [\n \"main.py\",\n \"Contains Main class with method main that initializes UI class and starts the game loop\"\n ]\n ],\n \"Refined Task list\": [\n \"game.py\",\n \"ui.py\",\n \"gui.py\",\n \"main.py\"\n ],\n \"Full API spec\": \"\",\n \"Refined Shared Knowledge\": \"`game.py` contains the core game logic and is used by `ui.py` to interact with the user. `main.py` serves as the entry point to start the game. `gui.py` will handle the graphical user interface using the Tkinter library, providing a responsive and user-friendly interface for the game.\",\n \"Anything UNCLEAR\": \"\"\n}\n[/CONTENT]", + "\nNOTICE\nRole: You are a professional engineer; The main goal is to complete incremental development by combining legacy code and plan and Incremental Change, ensuring the integration of new features.\n\n# Context\n## User New Requirements\n\n\n## Code Plan And Change\n{\"Development Plan\": [\"Develop the GUI using Tkinter to replace the command-line interface. Start by setting up the main window and event handling. Then, add widgets for displaying the game status, results, and feedback. Implement interactive elements for difficulty selection and visualize the guess history. Finally, create animations for guess feedback and ensure responsiveness across different screen sizes.\", \"Modify the main.py to initialize the GUI and start the event-driven game loop. Ensure that the GUI is the primary interface for user interaction.\"], \"Incremental Change\": [\"```diff\\nclass GUI:\\n- pass\\n+ def __init__(self):\\n+ self.setup_window()\\n+\\n+ def setup_window(self):\\n+ # Initialize the main window using Tkinter\\n+ pass\\n+\\n+ def bind_events(self):\\n+ # Bind button clicks and other events\\n+ pass\\n+\\n+ def update_feedback(self, message: str):\\n+ # Update the feedback label with the given message\\n+ pass\\n+\\n+ def update_attempts(self, attempts: int):\\n+ # Update the attempts label with the number of attempts\\n+ pass\\n+\\n+ def update_history(self, history: list):\\n+ # Update the history view with the list of past guesses\\n+ pass\\n+\\n+ def show_difficulty_selector(self):\\n+ # Show buttons or a dropdown for difficulty selection\\n+ pass\\n+\\n+ def animate_guess_result(self, correct: bool):\\n+ # Trigger an animation for correct or incorrect guesses\\n+ pass\\n```\", \"```diff\\nclass Main:\\n def main(self):\\n- user_interface = UI()\\n- user_interface.start()\\n+ graphical_user_interface = GUI()\\n+ graphical_user_interface.setup_window()\\n+ graphical_user_interface.bind_events()\\n+ # Start the Tkinter main loop\\n+ pass\\n\\n if __name__ == \\\"__main__\\\":\\n main_instance = Main()\\n main_instance.main()\\n```\\n\\n3. Plan for ui.py: Refactor ui.py to work with the new GUI class. Remove command-line interactions and delegate display and input tasks to the GUI.\\n```python\\nclass UI:\\n- def display_message(self, message: str):\\n- print(message)\\n+\\n+ def display_message(self, message: str):\\n+ # This method will now pass the message to the GUI to display\\n+ pass\\n\\n- def get_user_input(self, prompt: str) -> str:\\n- return input(prompt)\\n+\\n+ def get_user_input(self, prompt: str) -> str:\\n+ # This method will now trigger the GUI to get user input\\n+ pass\\n\\n- def show_attempts(self, attempts: int):\\n- print(f\\\"Number of attempts: {attempts}\\\")\\n+\\n+ def show_attempts(self, attempts: int):\\n+ # This method will now update the GUI with the number of attempts\\n+ pass\\n\\n- def show_history(self, history: list):\\n- print(\\\"Guess history:\\\")\\n- for guess in history:\\n- print(guess)\\n+\\n+ def show_history(self, history: list):\\n+ # This method will now update the GUI with the guess history\\n+ pass\\n```\\n\\n4. Plan for game.py: Ensure game.py remains mostly unchanged as it contains the core game logic. However, make minor adjustments if necessary to integrate with the new GUI.\\n```python\\nclass Game:\\n # No changes required for now\\n```\\n\"]}\n\n## Design\n{\"Refined Implementation Approach\": \"To accommodate the new graphical user interface (GUI) requirements, we will leverage the Tkinter library, which is included with Python and supports the creation of a user-friendly GUI. The game logic will remain in Python, with Tkinter handling the rendering of the interface. We will ensure that the GUI is responsive and provides immediate visual feedback. The main game loop will be event-driven, responding to user inputs such as button clicks and difficulty selection.\", \"Refined File list\": [\"main.py\", \"game.py\", \"ui.py\", \"gui.py\"], \"Refined Data structures and interfaces\": \"\\nclassDiagram\\n class Game {\\n -int secret_number\\n -int min_range\\n -int max_range\\n -list attempts\\n +__init__(difficulty: str)\\n +start_game()\\n +check_guess(guess: int) str\\n +get_attempts() int\\n +get_history() list\\n }\\n class UI {\\n +start()\\n +display_message(message: str)\\n +get_user_input(prompt: str) str\\n +show_attempts(attempts: int)\\n +show_history(history: list)\\n +select_difficulty() str\\n }\\n class GUI {\\n +__init__()\\n +setup_window()\\n +bind_events()\\n +update_feedback(message: str)\\n +update_attempts(attempts: int)\\n +update_history(history: list)\\n +show_difficulty_selector()\\n +animate_guess_result(correct: bool)\\n }\\n class Main {\\n +main()\\n }\\n Main --> UI\\n UI --> Game\\n UI --> GUI\\n GUI --> Game\\n\", \"Refined Program call flow\": \"\\nsequenceDiagram\\n participant M as Main\\n participant UI as UI\\n participant G as Game\\n participant GU as GUI\\n M->>UI: start()\\n UI->>GU: setup_window()\\n GU->>GU: bind_events()\\n GU->>UI: select_difficulty()\\n UI-->>G: __init__(difficulty)\\n G->>G: start_game()\\n loop Game Loop\\n GU->>GU: show_difficulty_selector()\\n GU->>UI: get_user_input(\\\"Enter your guess:\\\")\\n UI-->>G: check_guess(guess)\\n G->>GU: update_feedback(feedback)\\n G->>GU: update_attempts(attempts)\\n G->>GU: update_history(history)\\n GU->>GU: animate_guess_result(correct)\\n end\\n G->>GU: update_feedback(\\\"Correct! Game over.\\\")\\n GU->>M: main() # Game session ends\\n\", \"Anything UNCLEAR\": \"\"}\n\n## Task\n{\"Required packages\": [\"random==2.2.1\", \"Tkinter==8.6\"], \"Required Other language third-party packages\": [\"No third-party dependencies required\"], \"Refined Logic Analysis\": [[\"game.py\", \"Contains Game class with methods __init__, start_game, check_guess, get_attempts, get_history and uses random library for generating secret_number\"], [\"ui.py\", \"Contains UI class with methods start, display_message, get_user_input, show_attempts, show_history, select_difficulty and interacts with Game class\"], [\"gui.py\", \"Contains GUI class with methods __init__, setup_window, bind_events, update_feedback, update_attempts, update_history, show_difficulty_selector, animate_guess_result and interacts with Game class for GUI rendering\"], [\"main.py\", \"Contains Main class with method main that initializes UI class and starts the event-driven game loop\"]], \"Refined Task list\": [\"game.py\", \"ui.py\", \"gui.py\", \"main.py\"], \"Full API spec\": \"\", \"Refined Shared Knowledge\": \"`game.py` contains the core game logic and is used by `ui.py` to interact with the user. `main.py` serves as the entry point to start the game. `gui.py` is introduced to handle the graphical user interface using Tkinter, which will interact with both `game.py` and `ui.py` for a responsive and user-friendly experience.\", \"Anything UNCLEAR\": \"\"}\n\n## Legacy Code\n```Code\n-----Now, game.py to be rewritten\n```game.py\n\nimport random\n\nclass Game:\n def __init__(self, difficulty: str = 'medium'):\n self.min_range, self.max_range = self._set_difficulty(difficulty)\n self.secret_number = random.randint(self.min_range, self.max_range)\n self.attempts = []\n\n def _set_difficulty(self, difficulty: str):\n difficulties = {\n 'easy': (1, 10),\n 'medium': (1, 100),\n 'hard': (1, 1000)\n }\n return difficulties.get(difficulty, (1, 100))\n\n def start_game(self):\n self.secret_number = random.randint(self.min_range, self.max_range)\n self.attempts = []\n\n def check_guess(self, guess: int) -> str:\n self.attempts.append(guess)\n if guess < self.secret_number:\n return \"It's higher.\"\n elif guess > self.secret_number:\n return \"It's lower.\"\n else:\n return \"Correct! Game over.\"\n\n def get_attempts(self) -> int:\n return len(self.attempts)\n\n def get_history(self) -> list:\n return self.attempts```\n=====\n```\n\n## Debug logs\n```text\n\n\n\n```\n\n## Bug Feedback logs\n```text\n\n```\n\n# Format example\n## Code: game.py\n```python\n## game.py\n...\n```\n\n# Instruction: Based on the context, follow \"Format example\", write or rewrite code.\n## Write/Rewrite Code: Only write one file game.py, write or rewrite complete code using triple quotes based on the following attentions and context.\n1. Only One file: do your best to implement THIS ONLY ONE FILE.\n2. COMPLETE CODE: Your code will be part of the entire project, so please implement complete, reliable, reusable code snippets.\n3. Set default value: If there is any setting, ALWAYS SET A DEFAULT VALUE, ALWAYS USE STRONG TYPE AND EXPLICIT VARIABLE. AVOID circular import.\n4. Follow design: YOU MUST FOLLOW \"Data structures and interfaces\". DONT CHANGE ANY DESIGN. Do not use public member functions that do not exist in your design.\n5. Follow Code Plan And Change: If there is any \"Incremental Change\" that is marked by the git diff format with '+' and '-' symbols, or Legacy Code files contain \"game.py to be rewritten\", you must merge it into the code file according to the \"Development Plan\". \n6. CAREFULLY CHECK THAT YOU DONT MISS ANY NECESSARY CLASS/FUNCTION IN THIS FILE.\n7. Before using a external variable/module, make sure you import it first.\n8. Write out EVERY CODE DETAIL, DON'T LEAVE TODO.\n9. Attention: Retain details that are not related to incremental development but are important for maintaining the consistency and clarity of the old code.\n": "```python\n## game.py\n\nimport random\n\nclass Game:\n def __init__(self, difficulty: str = 'medium'):\n self._min_range, self._max_range = self._set_difficulty(difficulty)\n self._secret_number = random.randint(self._min_range, self._max_range)\n self._attempts = []\n\n def _set_difficulty(self, difficulty: str):\n difficulties = {\n 'easy': (1, 10),\n 'medium': (1, 100),\n 'hard': (1, 1000)\n }\n return difficulties.get(difficulty, (1, 100))\n\n def start_game(self):\n self._secret_number = random.randint(self._min_range, self._max_range)\n self._attempts = []\n\n def check_guess(self, guess: int) -> str:\n self._attempts.append(guess)\n if guess < self._secret_number:\n return \"It's higher.\"\n elif guess > self._secret_number:\n return \"It's lower.\"\n else:\n return \"Correct! Game over.\"\n\n def get_attempts(self) -> int:\n return len(self._attempts)\n\n def get_history(self) -> list:\n return self._attempts\n```", "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## User New Requirements\nNone\n\n## Code Plan And Change\n\n def add(a, b):\n- return a + \n+ return a + b\n \n\n## System Design\n编写一个从a加b的函数,返回a+b\n\n## Task\n\n\n## Code Files\n\n\n\n## Code to be Reviewed: \n```Code\n\n def add(a, b):\n return a + \n \n```\n\n\n\n# Format example 1\n## Code Review: \n1. No, we should fix the logic of class A due to ...\n2. ...\n3. ...\n4. No, function B is not implemented, ...\n5. ...\n6. ...\n\n## Actions\n1. Fix the `handle_events` method to update the game state only if a move is successful.\n ```python\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n return False\n if event.type == pygame.KEYDOWN:\n moved = False\n if event.key == pygame.K_UP:\n moved = self.game.move('UP')\n elif event.key == pygame.K_DOWN:\n moved = self.game.move('DOWN')\n elif event.key == pygame.K_LEFT:\n moved = self.game.move('LEFT')\n elif event.key == pygame.K_RIGHT:\n moved = self.game.move('RIGHT')\n if moved:\n # Update the game state only if a move was successful\n self.render()\n return True\n ```\n2. Implement function B\n\n## Code Review Result\nLBTM\n\n# Format example 2\n## Code Review: \n1. Yes.\n2. Yes.\n3. Yes.\n4. Yes.\n5. Yes.\n6. Yes.\n\n## Actions\npass\n\n## Code Review Result\nLGTM\n\n\n\n# Instruction: Based on the actual code situation, follow one of the \"Format example\". Return only 1 file under review.\n\n## Code Review: Ordered List. Based on the \"Code to be Reviewed\", provide key, clear, concise, and specific answer. If any answer is no, explain how to fix it step by step.\n1. Is the code implemented as per the requirements? If not, how to achieve it? Analyse it step by step.\n2. Is the code logic completely correct? If there are errors, please indicate how to correct them.\n3. Does the existing code follow the \"Data structures and interfaces\"?\n4. Are all functions implemented? If there is no implementation, please indicate how to achieve it step by step.\n5. Have all necessary pre-dependencies been imported? If not, indicate which ones need to be imported\n6. Are methods from other files being reused correctly?\n\n## Actions: Ordered List. Things that should be done after CR, such as implementing class A and function B\n\n## Code Review Result: str. If the code doesn't have bugs, we don't need to rewrite it, so answer LGTM and stop. ONLY ANSWER LGTM/LBTM.\nLGTM/LBTM\n\n": "## Code Review:\n1. 是的,代码实现了按照要求从a加b的功能。\n2. 不完全正确,代码逻辑存在错误。在`add`函数中,`return`语句没有完整地返回a和b的和,缺少了变量b。\n3. 是的,现有代码遵循了\"数据结构和接口\"的原则。\n4. 所有函数都已实现,但`add`函数的实现不完整。\n5. 由于这是一个简单的加法函数,不需要导入额外的依赖。\n6. 代码中没有使用其他文件的方法。\n\n## Actions:\n1. 修正`add`函数,确保它可以正确返回a和b的和。\n ```python\n def add(a, b):\n return a + b\n ```\n\n## Code Review Result:\nLBTM", "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## User New Requirements\nNone\n\n## Code Plan And Change\n\n def add(a, b):\n- return a + \n+ return a + b\n \n\n## System Design\n编写一个从a加b的函数,返回a+b\n\n## Task\n\n\n## Code Files\n\n\n\n## Code to be Reviewed: \n```Code\n\n def add(a, b):\n return a + \n \n```\n\n## Code Review:\n1. 是的,代码实现了按照要求从a加b的功能。\n2. 不完全正确,代码逻辑存在错误。在`add`函数中,`return`语句没有完整地返回a和b的和,缺少了变量b。\n3. 是的,现有代码遵循了\"数据结构和接口\"的原则。\n4. 所有函数都已实现,但`add`函数的实现不完整。\n5. 由于这是一个简单的加法函数,不需要导入额外的依赖。\n6. 代码中没有使用其他文件的方法。\n\n## Actions:\n1. 修正`add`函数,确保它可以正确返回a和b的和。\n ```python\n def add(a, b):\n return a + b\n ```\n\n## Code Review Result:\nLBTM\n\n# Instruction: rewrite code based on the Code Review and Actions\n## Rewrite Code: CodeBlock. If it still has some bugs, rewrite with triple quotes. Do your utmost to optimize THIS SINGLE FILE. Return all completed codes and prohibit the return of unfinished codes.\n```Code\n## \n...\n```\n": "## 重写代码:代码块\n```python\ndef add(a, b):\n return a + b\n```", "\n# System\nRole: You are a professional software engineer, and your main task is to review and revise the code. You need to ensure that the code conforms to the google-style standards, is elegantly designed and modularized, easy to read and maintain.\nLanguage: Please use the same language as the user requirement, but the title and code should be still in English. For example, if the user speaks Chinese, the specific text of your answer should also be in Chinese.\nATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced \"Format example\".\n\n# Context\n## User New Requirements\nNone\n\n## Code Plan And Change\n\n def add(a, b):\n- return a + \n+ return a + b\n \n\n## System Design\n编写一个从a加b的函数,返回a+b\n\n## Task\n\n\n## Code Files\n\n\n\n## Code to be Reviewed: \n```Code\ndef add(a, b):\n return a + b\n\n```\n\n\n\n# Format example 1\n## Code Review: \n1. No, we should fix the logic of class A due to ...\n2. ...\n3. ...\n4. No, function B is not implemented, ...\n5. ...\n6. ...\n\n## Actions\n1. Fix the `handle_events` method to update the game state only if a move is successful.\n ```python\n def handle_events(self):\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n return False\n if event.type == pygame.KEYDOWN:\n moved = False\n if event.key == pygame.K_UP:\n moved = self.game.move('UP')\n elif event.key == pygame.K_DOWN:\n moved = self.game.move('DOWN')\n elif event.key == pygame.K_LEFT:\n moved = self.game.move('LEFT')\n elif event.key == pygame.K_RIGHT:\n moved = self.game.move('RIGHT')\n if moved:\n # Update the game state only if a move was successful\n self.render()\n return True\n ```\n2. Implement function B\n\n## Code Review Result\nLBTM\n\n# Format example 2\n## Code Review: \n1. Yes.\n2. Yes.\n3. Yes.\n4. Yes.\n5. Yes.\n6. Yes.\n\n## Actions\npass\n\n## Code Review Result\nLGTM\n\n\n\n# Instruction: Based on the actual code situation, follow one of the \"Format example\". Return only 1 file under review.\n\n## Code Review: Ordered List. Based on the \"Code to be Reviewed\", provide key, clear, concise, and specific answer. If any answer is no, explain how to fix it step by step.\n1. Is the code implemented as per the requirements? If not, how to achieve it? Analyse it step by step.\n2. Is the code logic completely correct? If there are errors, please indicate how to correct them.\n3. Does the existing code follow the \"Data structures and interfaces\"?\n4. Are all functions implemented? If there is no implementation, please indicate how to achieve it step by step.\n5. Have all necessary pre-dependencies been imported? If not, indicate which ones need to be imported\n6. Are methods from other files being reused correctly?\n\n## Actions: Ordered List. Things that should be done after CR, such as implementing class A and function B\n\n## Code Review Result: str. If the code doesn't have bugs, we don't need to rewrite it, so answer LGTM and stop. ONLY ANSWER LGTM/LBTM.\nLGTM/LBTM\n\n": "## Code Review: \n1. 是的,代码按照要求实现了从a加b的功能。\n2. 是的,代码逻辑完全正确。\n3. 是的,现有代码遵循了“数据结构和接口”原则。\n4. 是的,所有功能都已实现。\n5. 是的,此代码片段不需要额外的依赖导入,因为它使用的是Python的内置操作。\n6. 是的,此代码片段没有从其他文件重用方法,因此不适用。\n\n## Actions\npass\n\n## Code Review Result\nLGTM", @@ -427,5 +427,23 @@ "As a data scientist, you need to help user to achieve their goal step by step in a continuous Jupyter notebook. Since it is a notebook environment, don't use asyncio.run. Instead, use await if you need to call an async function.#SYSTEM_MSG_END#\n# User Requirement\nRun data analysis on sklearn Wine recognition dataset, include a plot, and train a model to predict wine class (20% as validation), and show validation accuracy.\n\n# Plan Status\n\n## Finished Tasks\n### code\n```python\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nfrom sklearn.datasets import load_wine\nwine = load_wine()\nwine_df = pd.DataFrame(data=np.c_[wine['data'], wine['target']],\n columns=wine['feature_names'] + ['target'])\nnumerical_summary = wine_df.describe()\ncategorical_summary = wine_df.select_dtypes(include=['object', 'category']).describe()\ncorrelation_matrix = wine_df.corr()\nwine_df.hist(bins=15, figsize=(15, 10), layout=(4, 4))\nplt.tight_layout()\nplt.show()\nprint(\"Numerical Summary:\\n\", numerical_summary)\nprint(\"\\nCategorical Summary:\\n\", categorical_summary)\nprint(\"\\nCorrelation Matrix:\\n\", correlation_matrix)\n\nfrom sklearn.model_selection import train_test_split\nX_train, X_val, y_train, y_val = train_test_split(\n wine_df.drop('target', axis=1),\n wine_df['target'],\n test_size=0.2,\n random_state=42\n)\nprint(f\"Training set shape: {X_train.shape}\")\nprint(f\"Validation set shape: {X_val.shape}\")\nprint(f\"Training target shape: {y_train.shape}\")\nprint(f\"Validation target shape: {y_val.shape}\")\n\nfrom sklearn.ensemble import RandomForestClassifier\nfrom sklearn.metrics import accuracy_score\nmodel = RandomForestClassifier(n_estimators=100, random_state=42)\nmodel.fit(X_train, y_train)\ny_val_pred = model.predict(X_val)\nval_accuracy = accuracy_score(y_val, y_val_pred)\nprint(f\"Validation Accuracy: {val_accuracy:.4f}\")\n```\n\n### execution result\na successful run\n\na successful run\n\na successful run\n\n## Current Task\nEvaluate the model on the validation set and show the validation accuracy.\n\n## Task Guidance\nWrite complete code for 'Current Task'. And avoid duplicating code from 'Finished Tasks', such as repeated import of packages, reading data, etc.\nSpecifically, \nThe current task is about evaluating a model, please note the following:\n- Ensure that the evaluated data is same processed as the training data. If not, remember use object in 'Done Tasks' to transform the data.\n- Use trained model from previous task result directly, do not mock or reload model yourself.\n\n\n\n# Tool Info\n\n\n# Constraints\n- Take on Current Task if it is in Plan Status, otherwise, tackle User Requirement directly.\n- Ensure the output new code is executable in the same Jupyter notebook as the previous executed code.\n- Always prioritize using pre-defined tools for the same functionality.\n\n# Output\nWhile some concise thoughts are helpful, code is absolutely required. Always output one and only one code block in your response. Output code in the following format:\n```python\nyour code\n```\n": "```python\n# Evaluate the model on the validation set and show the validation accuracy\nval_accuracy = accuracy_score(y_val, y_val_pred)\nprint(f\"Validation Accuracy: {val_accuracy:.4f}\")\n```", "user: \n## User Requirement\nRun data analysis on sklearn Wine recognition dataset, include a plot, and train a model to predict wine class (20% as validation), and show validation accuracy.\n## Context\n\n## Current Plan\n[\n {\n \"task_id\": \"1\",\n \"dependent_task_ids\": [],\n \"instruction\": \"Perform exploratory data analysis on the sklearn Wine recognition dataset including summary statistics and a plot.\",\n \"task_type\": \"eda\",\n \"code\": \"import numpy as np\\nimport pandas as pd\\nimport matplotlib.pyplot as plt\\nfrom sklearn.datasets import load_wine\\n\\n# Load the wine dataset\\nwine = load_wine()\\nwine_df = pd.DataFrame(data=np.c_[wine['data'], wine['target']],\\n columns=wine['feature_names'] + ['target'])\\n\\n# Summary statistics for numerical features\\nnumerical_summary = wine_df.describe()\\n\\n# Summary statistics for categorical features\\ncategorical_summary = wine_df.select_dtypes(include=['object', 'category']).describe()\\n\\n# Correlation matrix for numerical features\\ncorrelation_matrix = wine_df.corr()\\n\\n# Plotting a histogram for each numerical feature\\nwine_df.hist(bins=15, figsize=(15, 10), layout=(4, 4))\\nplt.tight_layout()\\nplt.show()\\n\\n# Displaying the summary statistics\\nprint(\\\"Numerical Summary:\\\\n\\\", numerical_summary)\\nprint(\\\"\\\\nCategorical Summary:\\\\n\\\", categorical_summary)\\nprint(\\\"\\\\nCorrelation Matrix:\\\\n\\\", correlation_matrix)\\n\",\n \"result\": \"a successful run\",\n \"is_success\": true,\n \"is_finished\": true\n },\n {\n \"task_id\": \"2\",\n \"dependent_task_ids\": [\n \"1\"\n ],\n \"instruction\": \"Preprocess the dataset by splitting it into training and validation sets with a 80-20 split.\",\n \"task_type\": \"data preprocessing\",\n \"code\": \"\",\n \"result\": \"\",\n \"is_success\": false,\n \"is_finished\": false\n },\n {\n \"task_id\": \"3\",\n \"dependent_task_ids\": [\n \"2\"\n ],\n \"instruction\": \"Train a model using the training set to predict wine class.\",\n \"task_type\": \"model train\",\n \"code\": \"\",\n \"result\": \"\",\n \"is_success\": false,\n \"is_finished\": false\n },\n {\n \"task_id\": \"4\",\n \"dependent_task_ids\": [\n \"3\"\n ],\n \"instruction\": \"Evaluate the model on the validation set and show the validation accuracy.\",\n \"task_type\": \"model evaluate\",\n \"code\": \"\",\n \"result\": \"\",\n \"is_success\": false,\n \"is_finished\": false\n }\n]\n## Current Task\n{\"task_id\":\"2\",\"dependent_task_ids\":[\"1\"],\"instruction\":\"Preprocess the dataset by splitting it into training and validation sets with a 80-20 split.\",\"task_type\":\"data preprocessing\",\"code\":\"\",\"result\":\"\",\"is_success\":false,\"is_finished\":false}\n\nuser: \n# Latest Data Info\nLatest data info after previous tasks:\na successful run\n\nassistant: from sklearn.model_selection import train_test_split\n\n# Split the data into training and validation sets (80-20 split)\nX_train, X_val, y_train, y_val = train_test_split(\n wine_df.drop('target', axis=1), # features\n wine_df['target'], # target variable\n test_size=0.2, # 20% for validation\n random_state=42 # seed for reproducibility\n)\n\n# Output the shapes of the resulting data splits\nprint(f\"Training set shape: {X_train.shape}\")\nprint(f\"Validation set shape: {X_val.shape}\")\nprint(f\"Training target shape: {y_train.shape}\")\nprint(f\"Validation target shape: {y_val.shape}\")\n\nuser: a successful runThis is a review. Please review output from metagpt.actions.di.execute_nb_code.ExecuteNbCode\nIf you want to change, add, delete a task or merge tasks in the plan, say 'change task task_id or current task, ... (things to change)' If you confirm the output from the current task and wish to continue, type: confirmIf you think user requirement has been fulfilled completedly, you can finish the process by typing: finish\nIf you want to terminate the process, type: exit\nPlease type your review below:\n": "confirm", "user: \n## User Requirement\nRun data analysis on sklearn Wine recognition dataset, include a plot, and train a model to predict wine class (20% as validation), and show validation accuracy.\n## Context\n\n## Current Plan\n[\n {\n \"task_id\": \"1\",\n \"dependent_task_ids\": [],\n \"instruction\": \"Perform exploratory data analysis on the sklearn Wine recognition dataset including summary statistics and a plot.\",\n \"task_type\": \"eda\",\n \"code\": \"import numpy as np\\nimport pandas as pd\\nimport matplotlib.pyplot as plt\\nfrom sklearn.datasets import load_wine\\n\\n# Load the wine dataset\\nwine = load_wine()\\nwine_df = pd.DataFrame(data=np.c_[wine['data'], wine['target']],\\n columns=wine['feature_names'] + ['target'])\\n\\n# Summary statistics for numerical features\\nnumerical_summary = wine_df.describe()\\n\\n# Summary statistics for categorical features\\ncategorical_summary = wine_df.select_dtypes(include=['object', 'category']).describe()\\n\\n# Correlation matrix for numerical features\\ncorrelation_matrix = wine_df.corr()\\n\\n# Plotting a histogram for each numerical feature\\nwine_df.hist(bins=15, figsize=(15, 10), layout=(4, 4))\\nplt.tight_layout()\\nplt.show()\\n\\n# Displaying the summary statistics\\nprint(\\\"Numerical Summary:\\\\n\\\", numerical_summary)\\nprint(\\\"\\\\nCategorical Summary:\\\\n\\\", categorical_summary)\\nprint(\\\"\\\\nCorrelation Matrix:\\\\n\\\", correlation_matrix)\\n\",\n \"result\": \"a successful run\",\n \"is_success\": true,\n \"is_finished\": true\n },\n {\n \"task_id\": \"2\",\n \"dependent_task_ids\": [\n \"1\"\n ],\n \"instruction\": \"Preprocess the dataset by splitting it into training and validation sets with a 80-20 split.\",\n \"task_type\": \"data preprocessing\",\n \"code\": \"from sklearn.model_selection import train_test_split\\n\\n# Split the data into training and validation sets (80-20 split)\\nX_train, X_val, y_train, y_val = train_test_split(\\n wine_df.drop('target', axis=1), # features\\n wine_df['target'], # target variable\\n test_size=0.2, # 20% for validation\\n random_state=42 # seed for reproducibility\\n)\\n\\n# Output the shapes of the resulting data splits\\nprint(f\\\"Training set shape: {X_train.shape}\\\")\\nprint(f\\\"Validation set shape: {X_val.shape}\\\")\\nprint(f\\\"Training target shape: {y_train.shape}\\\")\\nprint(f\\\"Validation target shape: {y_val.shape}\\\")\\n\",\n \"result\": \"a successful run\",\n \"is_success\": true,\n \"is_finished\": true\n },\n {\n \"task_id\": \"3\",\n \"dependent_task_ids\": [\n \"2\"\n ],\n \"instruction\": \"Train a model using the training set to predict wine class.\",\n \"task_type\": \"model train\",\n \"code\": \"\",\n \"result\": \"\",\n \"is_success\": false,\n \"is_finished\": false\n },\n {\n \"task_id\": \"4\",\n \"dependent_task_ids\": [\n \"3\"\n ],\n \"instruction\": \"Evaluate the model on the validation set and show the validation accuracy.\",\n \"task_type\": \"model evaluate\",\n \"code\": \"\",\n \"result\": \"\",\n \"is_success\": false,\n \"is_finished\": false\n }\n]\n## Current Task\n{\"task_id\":\"3\",\"dependent_task_ids\":[\"2\"],\"instruction\":\"Train a model using the training set to predict wine class.\",\"task_type\":\"model train\",\"code\":\"\",\"result\":\"\",\"is_success\":false,\"is_finished\":false}\n\nuser: \n# Latest Data Info\nLatest data info after previous tasks:\na successful run\n\nassistant: from sklearn.ensemble import RandomForestClassifier\nfrom sklearn.metrics import accuracy_score\n\n# Initialize the RandomForestClassifier\nmodel = RandomForestClassifier(n_estimators=100, random_state=42)\n\n# Train the model on the training data\nmodel.fit(X_train, y_train)\n\n# Predict the wine classes on the validation set\ny_val_pred = model.predict(X_val)\n\n# Calculate the accuracy on the validation set\nval_accuracy = accuracy_score(y_val, y_val_pred)\n\nprint(f\"Validation Accuracy: {val_accuracy:.4f}\")\n\nuser: a successful runThis is a review. Please review output from metagpt.actions.di.execute_nb_code.ExecuteNbCode\nIf you want to change, add, delete a task or merge tasks in the plan, say 'change task task_id or current task, ... (things to change)' If you confirm the output from the current task and wish to continue, type: confirmIf you think user requirement has been fulfilled completedly, you can finish the process by typing: finish\nIf you want to terminate the process, type: exit\nPlease type your review below:\n": "confirm", - "user: \n## User Requirement\nRun data analysis on sklearn Wine recognition dataset, include a plot, and train a model to predict wine class (20% as validation), and show validation accuracy.\n## Context\n\n## Current Plan\n[\n {\n \"task_id\": \"1\",\n \"dependent_task_ids\": [],\n \"instruction\": \"Perform exploratory data analysis on the sklearn Wine recognition dataset including summary statistics and a plot.\",\n \"task_type\": \"eda\",\n \"code\": \"import numpy as np\\nimport pandas as pd\\nimport matplotlib.pyplot as plt\\nfrom sklearn.datasets import load_wine\\n\\n# Load the wine dataset\\nwine = load_wine()\\nwine_df = pd.DataFrame(data=np.c_[wine['data'], wine['target']],\\n columns=wine['feature_names'] + ['target'])\\n\\n# Summary statistics for numerical features\\nnumerical_summary = wine_df.describe()\\n\\n# Summary statistics for categorical features\\ncategorical_summary = wine_df.select_dtypes(include=['object', 'category']).describe()\\n\\n# Correlation matrix for numerical features\\ncorrelation_matrix = wine_df.corr()\\n\\n# Plotting a histogram for each numerical feature\\nwine_df.hist(bins=15, figsize=(15, 10), layout=(4, 4))\\nplt.tight_layout()\\nplt.show()\\n\\n# Displaying the summary statistics\\nprint(\\\"Numerical Summary:\\\\n\\\", numerical_summary)\\nprint(\\\"\\\\nCategorical Summary:\\\\n\\\", categorical_summary)\\nprint(\\\"\\\\nCorrelation Matrix:\\\\n\\\", correlation_matrix)\\n\",\n \"result\": \"a successful run\",\n \"is_success\": true,\n \"is_finished\": true\n },\n {\n \"task_id\": \"2\",\n \"dependent_task_ids\": [\n \"1\"\n ],\n \"instruction\": \"Preprocess the dataset by splitting it into training and validation sets with a 80-20 split.\",\n \"task_type\": \"data preprocessing\",\n \"code\": \"from sklearn.model_selection import train_test_split\\n\\n# Split the data into training and validation sets (80-20 split)\\nX_train, X_val, y_train, y_val = train_test_split(\\n wine_df.drop('target', axis=1), # features\\n wine_df['target'], # target variable\\n test_size=0.2, # 20% for validation\\n random_state=42 # seed for reproducibility\\n)\\n\\n# Output the shapes of the resulting data splits\\nprint(f\\\"Training set shape: {X_train.shape}\\\")\\nprint(f\\\"Validation set shape: {X_val.shape}\\\")\\nprint(f\\\"Training target shape: {y_train.shape}\\\")\\nprint(f\\\"Validation target shape: {y_val.shape}\\\")\\n\",\n \"result\": \"a successful run\",\n \"is_success\": true,\n \"is_finished\": true\n },\n {\n \"task_id\": \"3\",\n \"dependent_task_ids\": [\n \"2\"\n ],\n \"instruction\": \"Train a model using the training set to predict wine class.\",\n \"task_type\": \"model train\",\n \"code\": \"from sklearn.ensemble import RandomForestClassifier\\nfrom sklearn.metrics import accuracy_score\\n\\n# Initialize the RandomForestClassifier\\nmodel = RandomForestClassifier(n_estimators=100, random_state=42)\\n\\n# Train the model on the training data\\nmodel.fit(X_train, y_train)\\n\\n# Predict the wine classes on the validation set\\ny_val_pred = model.predict(X_val)\\n\\n# Calculate the accuracy on the validation set\\nval_accuracy = accuracy_score(y_val, y_val_pred)\\n\\nprint(f\\\"Validation Accuracy: {val_accuracy:.4f}\\\")\\n\",\n \"result\": \"a successful run\",\n \"is_success\": true,\n \"is_finished\": true\n },\n {\n \"task_id\": \"4\",\n \"dependent_task_ids\": [\n \"3\"\n ],\n \"instruction\": \"Evaluate the model on the validation set and show the validation accuracy.\",\n \"task_type\": \"model evaluate\",\n \"code\": \"\",\n \"result\": \"\",\n \"is_success\": false,\n \"is_finished\": false\n }\n]\n## Current Task\n{\"task_id\":\"4\",\"dependent_task_ids\":[\"3\"],\"instruction\":\"Evaluate the model on the validation set and show the validation accuracy.\",\"task_type\":\"model evaluate\",\"code\":\"\",\"result\":\"\",\"is_success\":false,\"is_finished\":false}\n\nassistant: # Evaluate the model on the validation set and show the validation accuracy\nval_accuracy = accuracy_score(y_val, y_val_pred)\nprint(f\"Validation Accuracy: {val_accuracy:.4f}\")\n\nuser: a successful runThis is a review. Please review output from metagpt.actions.di.execute_nb_code.ExecuteNbCode\nIf you want to change, add, delete a task or merge tasks in the plan, say 'change task task_id or current task, ... (things to change)' If you confirm the output from the current task and wish to continue, type: confirmIf you think user requirement has been fulfilled completedly, you can finish the process by typing: finish\nIf you want to terminate the process, type: exit\nPlease type your review below:\n": "confirm" + "user: \n## User Requirement\nRun data analysis on sklearn Wine recognition dataset, include a plot, and train a model to predict wine class (20% as validation), and show validation accuracy.\n## Context\n\n## Current Plan\n[\n {\n \"task_id\": \"1\",\n \"dependent_task_ids\": [],\n \"instruction\": \"Perform exploratory data analysis on the sklearn Wine recognition dataset including summary statistics and a plot.\",\n \"task_type\": \"eda\",\n \"code\": \"import numpy as np\\nimport pandas as pd\\nimport matplotlib.pyplot as plt\\nfrom sklearn.datasets import load_wine\\n\\n# Load the wine dataset\\nwine = load_wine()\\nwine_df = pd.DataFrame(data=np.c_[wine['data'], wine['target']],\\n columns=wine['feature_names'] + ['target'])\\n\\n# Summary statistics for numerical features\\nnumerical_summary = wine_df.describe()\\n\\n# Summary statistics for categorical features\\ncategorical_summary = wine_df.select_dtypes(include=['object', 'category']).describe()\\n\\n# Correlation matrix for numerical features\\ncorrelation_matrix = wine_df.corr()\\n\\n# Plotting a histogram for each numerical feature\\nwine_df.hist(bins=15, figsize=(15, 10), layout=(4, 4))\\nplt.tight_layout()\\nplt.show()\\n\\n# Displaying the summary statistics\\nprint(\\\"Numerical Summary:\\\\n\\\", numerical_summary)\\nprint(\\\"\\\\nCategorical Summary:\\\\n\\\", categorical_summary)\\nprint(\\\"\\\\nCorrelation Matrix:\\\\n\\\", correlation_matrix)\\n\",\n \"result\": \"a successful run\",\n \"is_success\": true,\n \"is_finished\": true\n },\n {\n \"task_id\": \"2\",\n \"dependent_task_ids\": [\n \"1\"\n ],\n \"instruction\": \"Preprocess the dataset by splitting it into training and validation sets with a 80-20 split.\",\n \"task_type\": \"data preprocessing\",\n \"code\": \"from sklearn.model_selection import train_test_split\\n\\n# Split the data into training and validation sets (80-20 split)\\nX_train, X_val, y_train, y_val = train_test_split(\\n wine_df.drop('target', axis=1), # features\\n wine_df['target'], # target variable\\n test_size=0.2, # 20% for validation\\n random_state=42 # seed for reproducibility\\n)\\n\\n# Output the shapes of the resulting data splits\\nprint(f\\\"Training set shape: {X_train.shape}\\\")\\nprint(f\\\"Validation set shape: {X_val.shape}\\\")\\nprint(f\\\"Training target shape: {y_train.shape}\\\")\\nprint(f\\\"Validation target shape: {y_val.shape}\\\")\\n\",\n \"result\": \"a successful run\",\n \"is_success\": true,\n \"is_finished\": true\n },\n {\n \"task_id\": \"3\",\n \"dependent_task_ids\": [\n \"2\"\n ],\n \"instruction\": \"Train a model using the training set to predict wine class.\",\n \"task_type\": \"model train\",\n \"code\": \"from sklearn.ensemble import RandomForestClassifier\\nfrom sklearn.metrics import accuracy_score\\n\\n# Initialize the RandomForestClassifier\\nmodel = RandomForestClassifier(n_estimators=100, random_state=42)\\n\\n# Train the model on the training data\\nmodel.fit(X_train, y_train)\\n\\n# Predict the wine classes on the validation set\\ny_val_pred = model.predict(X_val)\\n\\n# Calculate the accuracy on the validation set\\nval_accuracy = accuracy_score(y_val, y_val_pred)\\n\\nprint(f\\\"Validation Accuracy: {val_accuracy:.4f}\\\")\\n\",\n \"result\": \"a successful run\",\n \"is_success\": true,\n \"is_finished\": true\n },\n {\n \"task_id\": \"4\",\n \"dependent_task_ids\": [\n \"3\"\n ],\n \"instruction\": \"Evaluate the model on the validation set and show the validation accuracy.\",\n \"task_type\": \"model evaluate\",\n \"code\": \"\",\n \"result\": \"\",\n \"is_success\": false,\n \"is_finished\": false\n }\n]\n## Current Task\n{\"task_id\":\"4\",\"dependent_task_ids\":[\"3\"],\"instruction\":\"Evaluate the model on the validation set and show the validation accuracy.\",\"task_type\":\"model evaluate\",\"code\":\"\",\"result\":\"\",\"is_success\":false,\"is_finished\":false}\n\nassistant: # Evaluate the model on the validation set and show the validation accuracy\nval_accuracy = accuracy_score(y_val, y_val_pred)\nprint(f\"Validation Accuracy: {val_accuracy:.4f}\")\n\nuser: a successful runThis is a review. Please review output from metagpt.actions.di.execute_nb_code.ExecuteNbCode\nIf you want to change, add, delete a task or merge tasks in the plan, say 'change task task_id or current task, ... (things to change)' If you confirm the output from the current task and wish to continue, type: confirmIf you think user requirement has been fulfilled completedly, you can finish the process by typing: finish\nIf you want to terminate the process, type: exit\nPlease type your review below:\n": "confirm", + "\"\"\"\nGiven only the information above, what are 3 most salient high-level questions we can answer about the subjects grounded in the statements?\n1)\n\"\"\"\nOutput the response to the prompt above in json. Output must be a list of str.\nExample output json:\n{\"output\": \"[\"What should Jane do for lunch\", \"Does Jane like strawberry\", \"Who is Jane\"]\"}": "{\n \"output\": [\n \"What is the significance of the information provided?\",\n \"What are the implications of Jane's preferences?\",\n \"How does the information relate to the subject's identity?\"\n ]\n}", + "Input:\n[user: Klaus Mueller has a close relationship with Maria Lopez, user:s Mueller and Maria Lopez have a close relationship, user: Klaus Mueller has a close relationship with Maria Lopez, user: Klaus Mueller has a close relationship with Maria Lopez, user: Klaus Mueller and Maria Lopez have a strong relationship, user: Klaus Mueller is a dormmate of Maria Lopez., user: Klaus Mueller and Maria Lopez have a strong bond, user: Klaus Mueller has a crush on Maria Lopez, user: Klaus Mueller and Maria Lopez have been friends for more than 2 years., user: Klaus Mueller has a close relationship with Maria Lopez, user: Klaus Mueller Maria Lopez is heading off to college., user: Klaus Mueller and Maria Lopez have a close relationship, user: Klaus Mueller is actively researching a topic, user: Klaus Mueller is close friends and classmates with Maria Lopez., user: Klaus Mueller is socially active, user: Klaus Mueller has a crush on Maria Lopez., user: Klaus Mueller and Maria Lopez have been friends for a long time, user: Klaus Mueller is academically inclined, user: For Klaus Mueller's planning: should remember to ask Maria Lopez about her research paper, as she found it interesting that he mentioned it., user: Klaus Mueller is acquainted with Isabella Rodriguez, user: Klaus Mueller is organized and prepared, user: Maria Lopez is conversing about conversing about Maria's research paper mentioned by Klaus, user: Klaus Mueller is conversing about conversing about Maria's research paper mentioned by Klaus, user: Klaus Mueller is a student, user: Klaus Mueller is a student, user: Klaus Mueller is conversing about two friends named Klaus Mueller and Maria Lopez discussing their morning plans and progress on a research paper before Maria heads off to college., user: Klaus Mueller is socially active, user: Klaus Mueller is socially active, user: Klaus Mueller is socially active and acquainted with Isabella Rodriguez, user: Klaus Mueller has a crush on Maria Lopez]\n\nWhat 5 high-level insights can you infer from the above statements? Please ensure it includes 'because of' and generates according to the example format.(example format: insight (because of 1, 5, 3)) .\n1.": "It seems that Klaus Mueller has a strong and close relationship with Maria Lopez because they have been friends for more than 2 years, are dormmates, and have a strong bond.\n2. Klaus Mueller is academically inclined and actively researching a topic because he is conversing about Maria's research paper and is organized and prepared.\n3. Klaus Mueller has a crush on Maria Lopez, which is evident from his repeated mention of their close relationship and his interest in her research paper.\n4. Klaus Mueller is socially active and acquainted with Isabella Rodriguez, as he is conversing about two friends discussing their morning plans and progress on a research paper before Maria heads off to college.\n5. Maria Lopez and Klaus Mueller are conversing about their morning plans and", + "Task: Turn the input into (subject, predicate, object). \n\nInput: Sam Johnson is eating breakfast. \nOutput: (Dolores Murphy, eat, breakfast) \n--- \nInput: Joon Park is brewing coffee.\nOutput: (Joon Park, brew, coffee)\n---\nInput: Jane Cook is sleeping. \nOutput: (Jane Cook, is, sleep)\n---\nInput: Michael Bernstein is writing email on a computer. \nOutput: (Michael Bernstein, write, email)\n---\nInput: Percy Liang is teaching students in a classroom. \nOutput: (Percy Liang, teach, students)\n---\nInput: Merrie Morris is running on a treadmill. \nOutput: (Merrie Morris, run, treadmill)\n---\nInput: Klaus Mueller is Klaus Mueller is academically inclined. \nOutput: (Klaus Mueller,": "I'm sorry, but the input \"Klaus Mueller is Klaus Mueller is academically inclined.\" seems to be incomplete or incorrect. Could you please", + "\"\"\"\nConversation: \nRole_A: \"what's the weather today?\"\nRole_B: \"It looks pretty good, and I will take a walk then.\"\n\n\nSummarize the conversation above in one sentence:\nThis is a conversation about\n\"\"\"\nOutput the response to the prompt above in json. The output must continue the sentence above by filling in the tag. Don't start with 'this is a conversation about...' Just finish the sentence but do not miss any important details (including who are chatting).\nExample output json:\n{\"output\": \"conversing about what to eat for lunch\"}": "{\"output\": \"the weather and plans for a walk\"}", + "\"\"\"\n[Statements]\n\n\nBased on the statements above, summarize Isabella Rodriguez and Klaus Mueller's relationship. What do they feel or know about each other?\n\n\n\"\n\"\"\"\nOutput the response to the prompt above in json. The output should be a string that responds to the question.\nExample output json:\n{\"output\": \"Jane Doe is working on a project\"}": "{\"output\": \"Isabella Rodriguez and Klaus Mueller have a close working relationship and seem to have a good understanding of each other's strengths and weaknesses. They trust each other and are comfortable sharing their thoughts and ideas.\"}", + "Context for the task: \n\nPART 1. \nHere is Here is a brief description of Isabella Rodriguez.\nName: Isabella Rodriguez\nAge: 34\nInnate traits: friendly, outgoing, hospitable\nLearned traits: Isabella Rodriguez is a cafe owner of Hobbs Cafe who loves to make people feel welcome. She is always looking for ways to make the cafe a place where people can come to relax and enjoy themselves.\nCurrently: Isabella Rodriguez is planning on having a Valentine's Day party at Hobbs Cafe with her customers on February 14th, 2023 at 5pm. She is gathering party material, and is telling everyone to join the party at Hobbs Cafe on February 14th, 2023, from 5pm to 7pm.\nLifestyle: Isabella Rodriguez goes to bed around 11pm, awakes up around 6am.\nDaily plan requirement: Isabella Rodriguez opens Hobbs Cafe at 8am everyday, and works at the counter until 8pm, at which point she closes the cafe.\nCurrent Date: \n\n\nHere is the memory that is in Isabella Rodriguez's head: \n\n\nPART 2. \nPast Context: \n\n\nCurrent Location: main room in Isabella Rodriguez's apartment\n\nCurrent Context: \nIsabella Rodriguez was None when Isabella Rodriguez saw Klaus Mueller in the middle of None.\nIsabella Rodriguez is initiating a conversation with Klaus Mueller.\n\nIsabella Rodriguez and Klaus Mueller are chatting. Here is their conversation so far: \n[The conversation has not started yet -- start it!]\n\n---\nTask: Given the above, what should Isabella Rodriguez say to Klaus Mueller next in the conversation? And did it end the conversation?\n\nOutput format: Output a json of the following format: \n{\n\"Isabella Rodriguez\": \"\",\n\"Did the conversation end with Isabella Rodriguez's utterance?\": \"\"\n}": "{\n \"Isabella Rodriguez\": \"Hey Klaus, I'm so glad you stopped by! I'm getting everything ready for our Valentine's Day party at Hobbs Cafe. I hope you can make it on February 14th at 5pm. It's going to be a great time with music, food, and fun activities. I'd love to see you there!\",\n \"Did the conversation end with Isabella Rodriguez's utterance?\": \"false\"\n}", + "\"\"\"\n[Statements]\n\n\nBased on the statements above, summarize Klaus Mueller and Isabella Rodriguez's relationship. What do they feel or know about each other?\n\n\n\"\n\"\"\"\nOutput the response to the prompt above in json. The output should be a string that responds to the question.\nExample output json:\n{\"output\": \"Jane Doe is working on a project\"}": "{\"output\": \"Klaus Mueller and Isabella Rodriguez have a professional relationship, and they seem to have mutual respect for each other's work. They have collaborated on several projects and have a good understanding of each other's expertise.\"}", + "Context for the task: \n\nPART 1. \nHere is Here is a brief description of Klaus Mueller.\nName: Klaus Mueller\nAge: 20\nInnate traits: kind, inquisitive, passionate\nLearned traits: Klaus Mueller is a student at Oak Hill College studying sociology. He is passionate about social justice and loves to explore different perspectives.\nCurrently: Klaus Mueller is writing a research paper on the effects of gentrification in low-income communities.\nLifestyle: Klaus Mueller goes to bed around 11pm, awakes up around 7am, eats dinner around 5pm.\nDaily plan requirement: Klaus Mueller goes to the library at Oak Hill College early in the morning, spends his days writing, and eats at Hobbs Cafe.\nCurrent Date: \n\n\nHere is the memory that is in Klaus Mueller's head: \n\n\nPART 2. \nPast Context: \n\n\nCurrent Location: Klaus Mueller's room in Dorm for Oak Hill College\n\nCurrent Context: \nKlaus Mueller was None when Klaus Mueller saw Isabella Rodriguez in the middle of None.\nKlaus Mueller is initiating a conversation with Isabella Rodriguez.\n\nKlaus Mueller and Isabella Rodriguez are chatting. Here is their conversation so far: \nIsabella Rodriguez: Hey Klaus, I'm so glad you stopped by! I'm getting everything ready for our Valentine's Day party at Hobbs Cafe. I hope you can make it on February 14th at 5pm. It's going to be a great time with music, food, and fun activities. I'd love to see you there!\n\n\n---\nTask: Given the above, what should Klaus Mueller say to Isabella Rodriguez next in the conversation? And did it end the conversation?\n\nOutput format: Output a json of the following format: \n{\n\"Klaus Mueller\": \"\",\n\"Did the conversation end with Klaus Mueller's utterance?\": \"\"\n}": "{\n \"Klaus Mueller\": \"Hey Isabella, that sounds like a fantastic event! I'll definitely be there on February 14th at 5pm. Thanks for inviting me!\",\n \"Did the conversation end with Klaus Mueller's utterance?\": \"false\"\n}", + "Context for the task: \n\nPART 1. \nHere is Here is a brief description of Isabella Rodriguez.\nName: Isabella Rodriguez\nAge: 34\nInnate traits: friendly, outgoing, hospitable\nLearned traits: Isabella Rodriguez is a cafe owner of Hobbs Cafe who loves to make people feel welcome. She is always looking for ways to make the cafe a place where people can come to relax and enjoy themselves.\nCurrently: Isabella Rodriguez is planning on having a Valentine's Day party at Hobbs Cafe with her customers on February 14th, 2023 at 5pm. She is gathering party material, and is telling everyone to join the party at Hobbs Cafe on February 14th, 2023, from 5pm to 7pm.\nLifestyle: Isabella Rodriguez goes to bed around 11pm, awakes up around 6am.\nDaily plan requirement: Isabella Rodriguez opens Hobbs Cafe at 8am everyday, and works at the counter until 8pm, at which point she closes the cafe.\nCurrent Date: \n\n\nHere is the memory that is in Isabella Rodriguez's head: \n\n\nPART 2. \nPast Context: \n\n\nCurrent Location: main room in Isabella Rodriguez's apartment\n\nCurrent Context: \nIsabella Rodriguez was None when Isabella Rodriguez saw Klaus Mueller in the middle of None.\nIsabella Rodriguez is initiating a conversation with Klaus Mueller.\n\nIsabella Rodriguez and Klaus Mueller are chatting. Here is their conversation so far: \nIsabella Rodriguez: Hey Klaus, I'm so glad you stopped by! I'm getting everything ready for our Valentine's Day party at Hobbs Cafe. I hope you can make it on February 14th at 5pm. It's going to be a great time with music, food, and fun activities. I'd love to see you there!\nKlaus Mueller: Hey Isabella, that sounds like a fantastic event! I'll definitely be there on February 14th at 5pm. Thanks for inviting me!\n\n\n---\nTask: Given the above, what should Isabella Rodriguez say to Klaus Mueller next in the conversation? And did it end the conversation?\n\nOutput format: Output a json of the following format: \n{\n\"Isabella Rodriguez\": \"\",\n\"Did the conversation end with Isabella Rodriguez's utterance?\": \"\"\n}": "{\n \"Isabella Rodriguez\": \"Great! I'm looking forward to seeing you there. I'll make sure to save you a seat. Thanks for stopping by, Klaus!\",\n \"Did the conversation end with Isabella Rodriguez's utterance?\": \"false\"\n}", + "Context for the task: \n\nPART 1. \nHere is Here is a brief description of Klaus Mueller.\nName: Klaus Mueller\nAge: 20\nInnate traits: kind, inquisitive, passionate\nLearned traits: Klaus Mueller is a student at Oak Hill College studying sociology. He is passionate about social justice and loves to explore different perspectives.\nCurrently: Klaus Mueller is writing a research paper on the effects of gentrification in low-income communities.\nLifestyle: Klaus Mueller goes to bed around 11pm, awakes up around 7am, eats dinner around 5pm.\nDaily plan requirement: Klaus Mueller goes to the library at Oak Hill College early in the morning, spends his days writing, and eats at Hobbs Cafe.\nCurrent Date: \n\n\nHere is the memory that is in Klaus Mueller's head: \n\n\nPART 2. \nPast Context: \n\n\nCurrent Location: Klaus Mueller's room in Dorm for Oak Hill College\n\nCurrent Context: \nKlaus Mueller was None when Klaus Mueller saw Isabella Rodriguez in the middle of None.\nKlaus Mueller is initiating a conversation with Isabella Rodriguez.\n\nKlaus Mueller and Isabella Rodriguez are chatting. Here is their conversation so far: \nIsabella Rodriguez: Hey Klaus, I'm so glad you stopped by! I'm getting everything ready for our Valentine's Day party at Hobbs Cafe. I hope you can make it on February 14th at 5pm. It's going to be a great time with music, food, and fun activities. I'd love to see you there!\nKlaus Mueller: Hey Isabella, that sounds like a fantastic event! I'll definitely be there on February 14th at 5pm. Thanks for inviting me!\nIsabella Rodriguez: Great! I'm looking forward to seeing you there. I'll make sure to save you a seat. Thanks for stopping by, Klaus!\n\n\n---\nTask: Given the above, what should Klaus Mueller say to Isabella Rodriguez next in the conversation? And did it end the conversation?\n\nOutput format: Output a json of the following format: \n{\n\"Klaus Mueller\": \"\",\n\"Did the conversation end with Klaus Mueller's utterance?\": \"\"\n}": "{\n \"Klaus Mueller\": \"Isabella, I'm really interested in your work with the community. I'd love to hear more about it sometime.\",\n \"Did the conversation end with Klaus Mueller's utterance?\": \"false\"\n}", + "Task -- choose an appropriate area from the area options for a task at hand. \n\nSam Kim lives in {Sam Kim's house} that has Sam Kim's room, bathroom, kitchen.\nSam Kim is currently in {Sam Kim's house} that has Sam Kim's room, bathroom, kitchen. \nArea options: {Sam Kim's house, The Rose and Crown Pub, Hobbs Cafe, Oak Hill College, Johnson Park, Harvey Oak Supply Store, The Willows Market and Pharmacy}.\n* Stay in the current area if the activity can be done there. Only go out if the activity needs to take place in another place.\n* Must be one of the \"Area options,\" verbatim.\nFor taking a walk, Sam Kim should go to the following area: {Johnson Park}\n---\nJane Anderson lives in {Oak Hill College Student Dormatory} that has Jane Anderson's room.\nJane Anderson is currently in {Oak Hill College} that has a classroom, library\nArea options: {Oak Hill College Student Dormatory, The Rose and Crown Pub, Hobbs Cafe, Oak Hill College, Johnson Park, Harvey Oak Supply Store, The Willows Market and Pharmacy}. \n* Stay in the current area if the activity can be done there. Only go out if the activity needs to take place in another place.\n* Must be one of the \"Area options,\" verbatim.\nFor eating dinner, Jane Anderson should go to the following area: {Hobbs Cafe}\n---\nHobbs Cafe lives in {Klaus Mueller} that has sleeping.\nsleeping is currently in {Klaus Mueller} that has !!. !!\nArea options: {!!}. \n* Stay in the current area if the activity can be done there. Only go out if the activity needs to take place in another place.\n* Must be one of the \"Area options,\" verbatim.\n!! is !!. For !!, !! should go to the following area: {": "For sleeping, Hobbs Cafe should go to the following area: {K", + "Jane Anderson is in kitchen in Jane Anderson's house.\nJane Anderson is going to Jane Anderson's house that has the following areas: {kitchen, bedroom, bathroom}\nStay in the current area if the activity can be done there. Never go into other people's rooms unless necessary.\nFor cooking, Jane Anderson should go to the following area in Jane Anderson's house:\nAnswer: {kitchen}\n---\nTom Watson is in common room in Tom Watson's apartment. \nTom Watson is going to Hobbs Cafe that has the following areas: {cafe}\nStay in the current area if the activity can be done there. Never go into other people's rooms unless necessary.\nFor getting coffee, Tom Watson should go to the following area in Hobbs Cafe:\nAnswer: {cafe}\n---\n\nKlaus Mueller is going to Dorm for Oak Hill College that has the following areas: {garden, Klaus Mueller's room, woman's bathroom, common room, man's bathroom}\n* Stay in the current area if the activity can be done there. \n* NEVER go into other people's rooms unless necessary.\nKlaus Mueller is sleeping. For sleeping, Klaus Mueller should go to the following area in Dorm for Oak Hill College (MUST pick one of {garden, Klaus Mueller's room, woman's bathroom, common room, man's bathroom}):\nAnswer: {": "Klaus Mueller's room}", + "Current activity: sleep in bed\nObjects available: {bed, easel, closet, painting}\nPick ONE most relevant object from the objects available: bed\n---\nCurrent activity: painting\nObjects available: {easel, closet, sink, microwave}\nPick ONE most relevant object from the objects available: easel\n---\nCurrent activity: cooking\nObjects available: {stove, sink, fridge, counter}\nPick ONE most relevant object from the objects available: stove\n---\nCurrent activity: watch TV\nObjects available: {couch, TV, remote, coffee table}\nPick ONE most relevant object from the objects available: TV\n---\nCurrent activity: study\nObjects available: {desk, computer, chair, bookshelf}\nPick ONE most relevant object from the objects available: desk\n---\nCurrent activity: talk on the phone\nObjects available: {phone, charger, bed, nightstand}\nPick ONE most relevant object from the objects available: phone\n---\nCurrent activity: sleeping\nObjects available: {bed, game console, closet, desk}\nPick ONE most relevant object from the objects available:": "bed", + "\"\"\"\nTask: We want to understand the state of an object that is being used by someone. \n\nLet's think step by step. \nWe want to know about bed's state. \nStep 1. Klaus Mueller is at/using the sleeping.\nStep 2. Describe the bed's state: bed is\n\"\"\"\nOutput the response to the prompt above in json. The output should ONLY contain the phrase that should go in .\nExample output json:\n{\"output\": \"being fixed\"}": "{\n \"output\": \"being used\"\n}", + "\"\"\"\nConvert an action description to an emoji (important: use two or less emojis).\n\nAction description: sleeping\nEmoji:\n\"\"\"\nOutput the response to the prompt above in json. The value for the output must ONLY contain the emojis.\nExample output json:\n{\"output\": \"🛁🧖‍♀️\"}": "{\n \"output\": \"😴\"\n}", + "Task: Turn the input into (subject, predicate, object). \n\nInput: Sam Johnson is eating breakfast. \nOutput: (Dolores Murphy, eat, breakfast) \n--- \nInput: Joon Park is brewing coffee.\nOutput: (Joon Park, brew, coffee)\n---\nInput: Jane Cook is sleeping. \nOutput: (Jane Cook, is, sleep)\n---\nInput: Michael Bernstein is writing email on a computer. \nOutput: (Michael Bernstein, write, email)\n---\nInput: Percy Liang is teaching students in a classroom. \nOutput: (Percy Liang, teach, students)\n---\nInput: Merrie Morris is running on a treadmill. \nOutput: (Merrie Morris, run, treadmill)\n---\nInput: Klaus Mueller is sleeping. \nOutput: (Klaus Mueller,": "I'm sorry, but it seems like the input was cut off. Could you please provide the complete input so I can help you with the output?", + "\"\"\"\nConvert an action description to an emoji (important: use two or less emojis).\n\nAction description: being used\nEmoji:\n\"\"\"\nOutput the response to the prompt above in json. The value for the output must ONLY contain the emojis.\nExample output json:\n{\"output\": \"🛁🧖‍♀️\"}": "{\n \"output\": \"🔨\"\n}", + "Task: Turn the input into (subject, predicate, object). \n\nInput: Sam Johnson is eating breakfast. \nOutput: (Dolores Murphy, eat, breakfast) \n--- \nInput: Joon Park is brewing coffee.\nOutput: (Joon Park, brew, coffee)\n---\nInput: Jane Cook is sleeping. \nOutput: (Jane Cook, is, sleep)\n---\nInput: Michael Bernstein is writing email on a computer. \nOutput: (Michael Bernstein, write, email)\n---\nInput: Percy Liang is teaching students in a classroom. \nOutput: (Percy Liang, teach, students)\n---\nInput: Merrie Morris is running on a treadmill. \nOutput: (Merrie Morris, run, treadmill)\n---\nInput: bed is being used. \nOutput: (bed,": "I'm sorry, but the input \"bed is being used\" does not follow the format of the previous examples where a subject, predicate, and object" } \ No newline at end of file diff --git a/tests/metagpt/actions/mock_json.py b/tests/metagpt/actions/mock_json.py index 2b354ca6f..326c24c57 100644 --- a/tests/metagpt/actions/mock_json.py +++ b/tests/metagpt/actions/mock_json.py @@ -38,7 +38,7 @@ DESIGN = { TASK = { - "Required Python packages": ["pygame==2.0.1"], + "Required packages": ["pygame==2.0.1"], "Required Other language third-party packages": ["No third-party dependencies required"], "Logic Analysis": [ ["game.py", "Contains Game class and related functions for game logic"], diff --git a/tests/metagpt/configs/__init__.py b/tests/metagpt/configs/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/metagpt/configs/test_models_config.py b/tests/metagpt/configs/test_models_config.py new file mode 100644 index 000000000..cfbf1f96b --- /dev/null +++ b/tests/metagpt/configs/test_models_config.py @@ -0,0 +1,34 @@ +import pytest + +from metagpt.actions.talk_action import TalkAction +from metagpt.configs.models_config import ModelsConfig +from metagpt.const import METAGPT_ROOT, TEST_DATA_PATH +from metagpt.utils.common import aread, awrite + + +@pytest.mark.asyncio +async def test_models_configs(context): + default_model = ModelsConfig.default() + assert default_model is not None + + models = ModelsConfig.from_yaml_file(TEST_DATA_PATH / "config/config2.yaml") + assert models + + default_models = ModelsConfig.default() + backup = "" + if not default_models.models: + backup = await aread(filename=METAGPT_ROOT / "config/config2.yaml") + test_data = await aread(filename=TEST_DATA_PATH / "config/config2.yaml") + await awrite(filename=METAGPT_ROOT / "config/config2.yaml", data=test_data) + + try: + action = TalkAction(context=context, i_context="who are you?", llm_name_or_type="YOUR_MODEL_NAME_1") + assert action.private_llm.config.model == "YOUR_MODEL_NAME_1" + assert context.config.llm.model != "YOUR_MODEL_NAME_1" + finally: + if backup: + await awrite(filename=METAGPT_ROOT / "config/config2.yaml", data=backup) + + +if __name__ == "__main__": + pytest.main([__file__, "-s"]) diff --git a/tests/metagpt/environment/android_env/test_android_ext_env.py b/tests/metagpt/environment/android_env/test_android_ext_env.py index c9dfc718b..937cf5f6e 100644 --- a/tests/metagpt/environment/android_env/test_android_ext_env.py +++ b/tests/metagpt/environment/android_env/test_android_ext_env.py @@ -4,8 +4,8 @@ from pathlib import Path -from metagpt.environment.android_env.android_ext_env import AndroidExtEnv -from metagpt.environment.android_env.const import ADB_EXEC_FAIL +from metagpt.environment.android.android_ext_env import AndroidExtEnv +from metagpt.environment.android.const import ADB_EXEC_FAIL def mock_device_shape(self, adb_cmd: str) -> str: @@ -16,8 +16,8 @@ def mock_device_shape_invalid(self, adb_cmd: str) -> str: return ADB_EXEC_FAIL -def mock_list_devices(self, adb_cmd: str) -> str: - return "devices\nemulator-5554" +def mock_list_devices(self) -> str: + return ["emulator-5554"] def mock_get_screenshot(self, adb_cmd: str) -> str: @@ -34,9 +34,8 @@ def mock_write_read_operation(self, adb_cmd: str) -> str: def test_android_ext_env(mocker): device_id = "emulator-5554" - mocker.patch( - "metagpt.environment.android_env.android_ext_env.AndroidExtEnv.execute_adb_with_cmd", mock_device_shape - ) + mocker.patch("metagpt.environment.android.android_ext_env.AndroidExtEnv.execute_adb_with_cmd", mock_device_shape) + mocker.patch("metagpt.environment.android.android_ext_env.AndroidExtEnv.list_devices", mock_list_devices) ext_env = AndroidExtEnv(device_id=device_id, screenshot_dir="/data2/", xml_dir="/data2/") assert ext_env.adb_prefix == f"adb -s {device_id} " @@ -46,25 +45,20 @@ def test_android_ext_env(mocker): assert ext_env.device_shape == (720, 1080) mocker.patch( - "metagpt.environment.android_env.android_ext_env.AndroidExtEnv.execute_adb_with_cmd", mock_device_shape_invalid + "metagpt.environment.android.android_ext_env.AndroidExtEnv.execute_adb_with_cmd", mock_device_shape_invalid ) assert ext_env.device_shape == (0, 0) - mocker.patch( - "metagpt.environment.android_env.android_ext_env.AndroidExtEnv.execute_adb_with_cmd", mock_list_devices - ) assert ext_env.list_devices() == [device_id] - mocker.patch( - "metagpt.environment.android_env.android_ext_env.AndroidExtEnv.execute_adb_with_cmd", mock_get_screenshot - ) + mocker.patch("metagpt.environment.android.android_ext_env.AndroidExtEnv.execute_adb_with_cmd", mock_get_screenshot) assert ext_env.get_screenshot("screenshot_xxxx-xx-xx", "/data/") == Path("/data/screenshot_xxxx-xx-xx.png") - mocker.patch("metagpt.environment.android_env.android_ext_env.AndroidExtEnv.execute_adb_with_cmd", mock_get_xml) + mocker.patch("metagpt.environment.android.android_ext_env.AndroidExtEnv.execute_adb_with_cmd", mock_get_xml) assert ext_env.get_xml("xml_xxxx-xx-xx", "/data/") == Path("/data/xml_xxxx-xx-xx.xml") mocker.patch( - "metagpt.environment.android_env.android_ext_env.AndroidExtEnv.execute_adb_with_cmd", mock_write_read_operation + "metagpt.environment.android.android_ext_env.AndroidExtEnv.execute_adb_with_cmd", mock_write_read_operation ) res = "OK" assert ext_env.system_back() == res diff --git a/tests/metagpt/environment/minecraft_env/test_minecraft_ext_env.py b/tests/metagpt/environment/minecraft_env/test_minecraft_ext_env.py index ed08b719f..0ebff22eb 100644 --- a/tests/metagpt/environment/minecraft_env/test_minecraft_ext_env.py +++ b/tests/metagpt/environment/minecraft_env/test_minecraft_ext_env.py @@ -3,8 +3,8 @@ # @Desc : the unittest of MinecraftExtEnv -from metagpt.environment.minecraft_env.const import MC_CKPT_DIR -from metagpt.environment.minecraft_env.minecraft_ext_env import MinecraftExtEnv +from metagpt.environment.minecraft.const import MC_CKPT_DIR +from metagpt.environment.minecraft.minecraft_ext_env import MinecraftExtEnv def test_minecraft_ext_env(): diff --git a/tests/metagpt/environment/stanford_town_env/test_stanford_town_ext_env.py b/tests/metagpt/environment/stanford_town_env/test_stanford_town_ext_env.py index 3071f9deb..282a45dfa 100644 --- a/tests/metagpt/environment/stanford_town_env/test_stanford_town_ext_env.py +++ b/tests/metagpt/environment/stanford_town_env/test_stanford_town_ext_env.py @@ -4,12 +4,18 @@ from pathlib import Path -from metagpt.environment.stanford_town_env.stanford_town_ext_env import ( - StanfordTownExtEnv, +from metagpt.environment.stanford_town.env_space import ( + EnvAction, + EnvActionType, + EnvObsParams, + EnvObsType, ) +from metagpt.environment.stanford_town.stanford_town_ext_env import StanfordTownExtEnv maze_asset_path = ( - Path(__file__).absolute().parent.joinpath("..", "..", "..", "data", "environment", "stanford_town", "the_ville") + Path(__file__) + .absolute() + .parent.joinpath("..", "..", "..", "..", "metagpt/ext/stanford_town/static_dirs/assets/the_ville") ) @@ -27,7 +33,6 @@ def test_stanford_town_ext_env(): assert len(ext_env.get_nearby_tiles(tile=tile, vision_r=5)) == 121 event = ("double studio:double studio:bedroom 2:bed", None, None, None) - ext_env.add_tiles_event(tile[1], tile[0], event=event) ext_env.add_event_from_tile(event, tile) assert len(ext_env.tiles[tile[1]][tile[0]]["events"]) == 1 @@ -38,3 +43,22 @@ def test_stanford_town_ext_env(): ext_env.remove_subject_events_from_tile(subject=event[0], tile=tile) assert len(ext_env.tiles[tile[1]][tile[0]]["events"]) == 0 + + +def test_stanford_town_ext_env_observe_step(): + ext_env = StanfordTownExtEnv(maze_asset_path=maze_asset_path) + obs, info = ext_env.reset() + assert len(info) == 0 + assert len(obs["address_tiles"]) == 306 + + tile = (58, 9) + obs = ext_env.observe(obs_params=EnvObsParams(obs_type=EnvObsType.TILE_PATH, coord=tile, level="world")) + assert obs == "the Ville" + + action = ext_env.action_space.sample() + assert len(action) == 4 + assert len(action["event"]) == 4 + + event = ("double studio:double studio:bedroom 2:bed", None, None, None) + obs, _, _, _, _ = ext_env.step(action=EnvAction(action_type=EnvActionType.ADD_TILE_EVENT, coord=tile, event=event)) + assert len(ext_env.tiles[tile[1]][tile[0]]["events"]) == 1 diff --git a/tests/metagpt/environment/test_base_env.py b/tests/metagpt/environment/test_base_env.py index fd73679d8..c4f881748 100644 --- a/tests/metagpt/environment/test_base_env.py +++ b/tests/metagpt/environment/test_base_env.py @@ -2,6 +2,8 @@ # -*- coding: utf-8 -*- # @Desc : the unittest of ExtEnv&Env +from typing import Any, Optional + import pytest from metagpt.environment.api.env_api import EnvAPIAbstract @@ -12,11 +14,26 @@ from metagpt.environment.base_env import ( mark_as_readable, mark_as_writeable, ) +from metagpt.environment.base_env_space import BaseEnvAction, BaseEnvObsParams class ForTestEnv(Environment): value: int = 0 + def reset( + self, + *, + seed: Optional[int] = None, + options: Optional[dict[str, Any]] = None, + ) -> tuple[dict[str, Any], dict[str, Any]]: + pass + + def observe(self, obs_params: Optional[BaseEnvObsParams] = None) -> Any: + pass + + def step(self, action: BaseEnvAction) -> tuple[dict[str, Any], float, bool, bool, dict[str, Any]]: + pass + @mark_as_readable def read_api_no_param(self): return self.value @@ -44,11 +61,11 @@ async def test_ext_env(): assert len(apis) > 0 assert len(apis["read_api"]) == 3 - _ = await env.step(EnvAPIAbstract(api_name="write_api", kwargs={"a": 5, "b": 10})) + _ = await env.write_thru_api(EnvAPIAbstract(api_name="write_api", kwargs={"a": 5, "b": 10})) assert env.value == 15 - with pytest.raises(ValueError): - await env.observe("not_exist_api") + with pytest.raises(KeyError): + await env.read_from_api("not_exist_api") - assert await env.observe("read_api_no_param") == 15 - assert await env.observe(EnvAPIAbstract(api_name="read_api", kwargs={"a": 5, "b": 5})) == 10 + assert await env.read_from_api("read_api_no_param") == 15 + assert await env.read_from_api(EnvAPIAbstract(api_name="read_api", kwargs={"a": 5, "b": 5})) == 10 diff --git a/tests/metagpt/environment/werewolf_env/test_werewolf_ext_env.py b/tests/metagpt/environment/werewolf_env/test_werewolf_ext_env.py index 0694c5c3d..986d55e1a 100644 --- a/tests/metagpt/environment/werewolf_env/test_werewolf_ext_env.py +++ b/tests/metagpt/environment/werewolf_env/test_werewolf_ext_env.py @@ -2,33 +2,34 @@ # -*- coding: utf-8 -*- # @Desc : the unittest of WerewolfExtEnv -from metagpt.environment.werewolf_env.werewolf_ext_env import RoleState, WerewolfExtEnv +from metagpt.environment.werewolf.const import RoleState, RoleType +from metagpt.environment.werewolf.werewolf_ext_env import WerewolfExtEnv from metagpt.roles.role import Role class Werewolf(Role): - profile: str = "Werewolf" + profile: str = RoleType.WEREWOLF.value class Villager(Role): - profile: str = "Villager" + profile: str = RoleType.VILLAGER.value class Witch(Role): - profile: str = "Witch" + profile: str = RoleType.WITCH.value class Guard(Role): - profile: str = "Guard" + profile: str = RoleType.GUARD.value def test_werewolf_ext_env(): players_state = { - "Player0": ("Werewolf", RoleState.ALIVE), - "Player1": ("Werewolf", RoleState.ALIVE), - "Player2": ("Villager", RoleState.ALIVE), - "Player3": ("Witch", RoleState.ALIVE), - "Player4": ("Guard", RoleState.ALIVE), + "Player0": (RoleType.WEREWOLF.value, RoleState.ALIVE), + "Player1": (RoleType.WEREWOLF.value, RoleState.ALIVE), + "Player2": (RoleType.VILLAGER.value, RoleState.ALIVE), + "Player3": (RoleType.WITCH.value, RoleState.ALIVE), + "Player4": (RoleType.GUARD.value, RoleState.ALIVE), } ext_env = WerewolfExtEnv(players_state=players_state, step_idx=4, special_role_players=["Player3", "Player4"]) @@ -41,9 +42,9 @@ def test_werewolf_ext_env(): assert "Werewolves, please open your eyes" in curr_instr["content"] # current step_idx = 5 - ext_env.wolf_kill_someone(wolf=Role(name="Player10"), player_name="Player4") - ext_env.wolf_kill_someone(wolf=Werewolf(name="Player0"), player_name="Player4") - ext_env.wolf_kill_someone(wolf=Werewolf(name="Player1"), player_name="Player4") + ext_env.wolf_kill_someone(wolf_name="Player10", player_name="Player4") + ext_env.wolf_kill_someone(wolf_name="Player0", player_name="Player4") + ext_env.wolf_kill_someone(wolf_name="Player1", player_name="Player4") assert ext_env.player_hunted == "Player4" assert len(ext_env.living_players) == 5 # hunted but can be saved by witch @@ -52,11 +53,11 @@ def test_werewolf_ext_env(): # current step_idx = 18 assert ext_env.step_idx == 18 - ext_env.vote_kill_someone(voteer=Werewolf(name="Player0"), player_name="Player2") - ext_env.vote_kill_someone(voteer=Werewolf(name="Player1"), player_name="Player3") - ext_env.vote_kill_someone(voteer=Villager(name="Player2"), player_name="Player3") - ext_env.vote_kill_someone(voteer=Witch(name="Player3"), player_name="Player4") - ext_env.vote_kill_someone(voteer=Guard(name="Player4"), player_name="Player2") + ext_env.vote_kill_someone(voter_name="Player0", player_name="Player2") + ext_env.vote_kill_someone(voter_name="Player1", player_name="Player3") + ext_env.vote_kill_someone(voter_name="Player2", player_name="Player3") + ext_env.vote_kill_someone(voter_name="Player3", player_name="Player4") + ext_env.vote_kill_someone(voter_name="Player4", player_name="Player2") assert ext_env.player_current_dead == "Player2" assert len(ext_env.living_players) == 4 diff --git a/tests/metagpt/ext/__init__.py b/tests/metagpt/ext/__init__.py new file mode 100644 index 000000000..2bcf8efd0 --- /dev/null +++ b/tests/metagpt/ext/__init__.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : diff --git a/tests/metagpt/ext/android_assistant/__init__.py b/tests/metagpt/ext/android_assistant/__init__.py new file mode 100644 index 000000000..2bcf8efd0 --- /dev/null +++ b/tests/metagpt/ext/android_assistant/__init__.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : diff --git a/tests/metagpt/ext/android_assistant/test_an.py b/tests/metagpt/ext/android_assistant/test_an.py new file mode 100644 index 000000000..ea3e9ccb1 --- /dev/null +++ b/tests/metagpt/ext/android_assistant/test_an.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : test on android emulator action. After Modify Role Test, this script is discarded. + +import asyncio +import time +from pathlib import Path + +import metagpt +from metagpt.const import TEST_DATA_PATH +from metagpt.environment.android.android_env import AndroidEnv +from metagpt.ext.android_assistant.actions.manual_record import ManualRecord +from metagpt.ext.android_assistant.actions.parse_record import ParseRecord +from metagpt.ext.android_assistant.actions.screenshot_parse import ScreenshotParse +from metagpt.ext.android_assistant.actions.self_learn_and_reflect import ( + SelfLearnAndReflect, +) +from tests.metagpt.environment.android_env.test_android_ext_env import ( + mock_device_shape, + mock_list_devices, +) + +TASK_PATH = TEST_DATA_PATH.joinpath("andriod_assistant/unitest_Contacts") +TASK_PATH.mkdir(parents=True, exist_ok=True) +DEMO_NAME = str(time.time()) +SELF_EXPLORE_DOC_PATH = TASK_PATH.joinpath("auto_docs") +PARSE_RECORD_DOC_PATH = TASK_PATH.joinpath("demo_docs") + +device_id = "emulator-5554" +xml_dir = Path("/sdcard") +screenshot_dir = Path("/sdcard/Pictures/Screenshots") + + +metagpt.environment.android.android_ext_env.AndroidExtEnv.execute_adb_with_cmd = mock_device_shape +metagpt.environment.android.android_ext_env.AndroidExtEnv.list_devices = mock_list_devices + + +test_env_self_learn_android = AndroidEnv( + device_id=device_id, + xml_dir=xml_dir, + screenshot_dir=screenshot_dir, +) +test_self_learning = SelfLearnAndReflect() + +test_env_manual_learn_android = AndroidEnv( + device_id=device_id, + xml_dir=xml_dir, + screenshot_dir=screenshot_dir, +) +test_manual_record = ManualRecord() +test_manual_parse = ParseRecord() + +test_env_screenshot_parse_android = AndroidEnv( + device_id=device_id, + xml_dir=xml_dir, + screenshot_dir=screenshot_dir, +) +test_screenshot_parse = ScreenshotParse() + + +if __name__ == "__main__": + loop = asyncio.get_event_loop() + + test_action_list = [ + test_self_learning.run( + round_count=20, + task_desc="Create a contact in Contacts App named zjy with a phone number +86 18831933368 ", + last_act="", + task_dir=TASK_PATH / "demos" / f"self_learning_{DEMO_NAME}", + docs_dir=SELF_EXPLORE_DOC_PATH, + env=test_env_self_learn_android, + ), + test_manual_record.run( + task_dir=TASK_PATH / "demos" / f"manual_record_{DEMO_NAME}", + task_desc="Create a contact in Contacts App named zjy with a phone number +86 18831933368 ", + env=test_env_manual_learn_android, + ), + test_manual_parse.run( + task_dir=TASK_PATH / "demos" / f"manual_record_{DEMO_NAME}", # 修要修改 + docs_dir=PARSE_RECORD_DOC_PATH, # 需要修改 + env=test_env_manual_learn_android, + ), + test_screenshot_parse.run( + round_count=20, + task_desc="Create a contact in Contacts App named zjy with a phone number +86 18831933368 ", + last_act="", + task_dir=TASK_PATH / f"act_{DEMO_NAME}", + docs_dir=PARSE_RECORD_DOC_PATH, + env=test_env_screenshot_parse_android, + grid_on=False, + ), + ] + + loop.run_until_complete(asyncio.gather(*test_action_list)) + loop.close() diff --git a/tests/metagpt/ext/android_assistant/test_parse_record.py b/tests/metagpt/ext/android_assistant/test_parse_record.py new file mode 100644 index 000000000..5299d30a2 --- /dev/null +++ b/tests/metagpt/ext/android_assistant/test_parse_record.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : test case (imgs from appagent's) + +import asyncio + +from metagpt.actions.action import Action +from metagpt.const import TEST_DATA_PATH +from metagpt.ext.android_assistant.actions.parse_record import ParseRecord + +TASK_PATH = TEST_DATA_PATH.joinpath("andriod_assistant/demo_Contacts") +TEST_BEFORE_PATH = TASK_PATH.joinpath("labeled_screenshots/0_labeled.png") +TEST_AFTER_PATH = TASK_PATH.joinpath("labeled_screenshots/1_labeled.png") +RECORD_PATH = TASK_PATH.joinpath("record.txt") +TASK_DESC_PATH = TASK_PATH.joinpath("task_desc.txt") +DOCS_DIR = TASK_PATH.joinpath("storage") + +test_action = Action(name="test") + + +async def manual_learn_test(): + parse_record = ParseRecord() + await parse_record.run(app_name="demo_Contacts", task_dir=TASK_PATH, docs_dir=DOCS_DIR) + + +if __name__ == "__main__": + loop = asyncio.get_event_loop() + loop.run_until_complete(manual_learn_test()) + loop.close() diff --git a/tests/metagpt/ext/stanford_town/__init__.py b/tests/metagpt/ext/stanford_town/__init__.py new file mode 100644 index 000000000..2bcf8efd0 --- /dev/null +++ b/tests/metagpt/ext/stanford_town/__init__.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : diff --git a/tests/metagpt/ext/stanford_town/actions/__init__.py b/tests/metagpt/ext/stanford_town/actions/__init__.py new file mode 100644 index 000000000..2bcf8efd0 --- /dev/null +++ b/tests/metagpt/ext/stanford_town/actions/__init__.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : diff --git a/tests/metagpt/ext/stanford_town/actions/test_gen_action_details.py b/tests/metagpt/ext/stanford_town/actions/test_gen_action_details.py new file mode 100644 index 000000000..616c03f33 --- /dev/null +++ b/tests/metagpt/ext/stanford_town/actions/test_gen_action_details.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : unittest of actions/gen_action_details.py + +import pytest + +from metagpt.environment import StanfordTownEnv +from metagpt.environment.api.env_api import EnvAPIAbstract +from metagpt.ext.stanford_town.actions.gen_action_details import ( + GenActionArena, + GenActionDetails, + GenActionObject, + GenActionSector, + GenActObjDescription, +) +from metagpt.ext.stanford_town.roles.st_role import STRole +from metagpt.ext.stanford_town.utils.const import MAZE_ASSET_PATH + + +@pytest.mark.asyncio +async def test_gen_action_details(): + role = STRole( + name="Klaus Mueller", + start_time="February 13, 2023", + curr_time="February 13, 2023, 00:00:00", + sim_code="base_the_ville_isabella_maria_klaus", + ) + role.set_env(StanfordTownEnv(maze_asset_path=MAZE_ASSET_PATH)) + await role.init_curr_tile() + + act_desp = "sleeping" + act_dura = "120" + + access_tile = await role.rc.env.read_from_api( + EnvAPIAbstract(api_name="access_tile", kwargs={"tile": role.scratch.curr_tile}) + ) + act_world = access_tile["world"] + assert act_world == "the Ville" + + sector = await GenActionSector().run(role, access_tile, act_desp) + arena = await GenActionArena().run(role, act_desp, act_world, sector) + temp_address = f"{act_world}:{sector}:{arena}" + obj = await GenActionObject().run(role, act_desp, temp_address) + + act_obj_desp = await GenActObjDescription().run(role, obj, act_desp) + + result_dict = await GenActionDetails().run(role, act_desp, act_dura) + + # gen_action_sector + assert isinstance(sector, str) + assert sector in role.s_mem.get_str_accessible_sectors(act_world) + + # gen_action_arena + assert isinstance(arena, str) + assert arena in role.s_mem.get_str_accessible_sector_arenas(f"{act_world}:{sector}") + + # gen_action_obj + assert isinstance(obj, str) + assert obj in role.s_mem.get_str_accessible_arena_game_objects(temp_address) + + if result_dict: + for key in [ + "action_address", + "action_duration", + "action_description", + "action_pronunciatio", + "action_event", + "chatting_with", + "chat", + "chatting_with_buffer", + "chatting_end_time", + "act_obj_description", + "act_obj_pronunciatio", + "act_obj_event", + ]: + assert key in result_dict + assert result_dict["action_address"] == f"{temp_address}:{obj}" + assert result_dict["action_duration"] == int(act_dura) + assert result_dict["act_obj_description"] == act_obj_desp diff --git a/tests/metagpt/ext/stanford_town/actions/test_summarize_conv.py b/tests/metagpt/ext/stanford_town/actions/test_summarize_conv.py new file mode 100644 index 000000000..5dfabcab9 --- /dev/null +++ b/tests/metagpt/ext/stanford_town/actions/test_summarize_conv.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : unittest of actions/summarize_conv + +import pytest + +from metagpt.ext.stanford_town.actions.summarize_conv import SummarizeConv + + +@pytest.mark.asyncio +async def test_summarize_conv(): + conv = [("Role_A", "what's the weather today?"), ("Role_B", "It looks pretty good, and I will take a walk then.")] + + output = await SummarizeConv().run(conv) + assert "weather" in output diff --git a/tests/metagpt/ext/stanford_town/memory/__init__.py b/tests/metagpt/ext/stanford_town/memory/__init__.py new file mode 100644 index 000000000..2bcf8efd0 --- /dev/null +++ b/tests/metagpt/ext/stanford_town/memory/__init__.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : diff --git a/tests/metagpt/ext/stanford_town/memory/test_agent_memory.py b/tests/metagpt/ext/stanford_town/memory/test_agent_memory.py new file mode 100644 index 000000000..db7ca3212 --- /dev/null +++ b/tests/metagpt/ext/stanford_town/memory/test_agent_memory.py @@ -0,0 +1,89 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : the unittest of AgentMemory + +from datetime import datetime, timedelta + +import pytest + +from metagpt.ext.stanford_town.memory.agent_memory import AgentMemory +from metagpt.ext.stanford_town.memory.retrieve import agent_retrieve +from metagpt.ext.stanford_town.utils.const import STORAGE_PATH +from metagpt.logs import logger + +""" +memory测试思路 +1. Basic Memory测试 +2. Agent Memory测试 + 2.1 Load & Save方法测试; Load方法中使用了add方法,验证Load即可验证所有add + 2.2 Get方法测试 +""" +memory_easy_storage_path = STORAGE_PATH.joinpath( + "base_the_ville_isabella_maria_klaus/personas/Isabella Rodriguez/bootstrap_memory/associative_memory", +) +memroy_chat_storage_path = STORAGE_PATH.joinpath( + "base_the_ville_isabella_maria_klaus/personas/Isabella Rodriguez/bootstrap_memory/associative_memory", +) +memory_save_easy_test_path = STORAGE_PATH.joinpath( + "base_the_ville_isabella_maria_klaus/personas/Isabella Rodriguez/bootstrap_memory/test_memory", +) +memory_save_chat_test_path = STORAGE_PATH.joinpath( + "base_the_ville_isabella_maria_klaus/personas/Isabella Rodriguez/bootstrap_memory/test_memory", +) + + +class TestAgentMemory: + @pytest.fixture + def agent_memory(self): + # 创建一个AgentMemory实例并返回,可以在所有测试用例中共享 + test_agent_memory = AgentMemory() + test_agent_memory.set_mem_path(memroy_chat_storage_path) + return test_agent_memory + + def test_load(self, agent_memory): + logger.info(f"存储路径为:{agent_memory.memory_saved}") + logger.info(f"存储记忆条数为:{len(agent_memory.storage)}") + logger.info(f"kw_strength为{agent_memory.kw_strength_event},{agent_memory.kw_strength_thought}") + logger.info(f"embeeding.json条数为{len(agent_memory.embeddings)}") + + assert agent_memory.embeddings is not None + + def test_save(self, agent_memory): + try: + agent_memory.save(memory_save_chat_test_path) + logger.info("成功存储") + except: + pass + + def test_summary_function(self, agent_memory): + logger.info(f"event长度为{len(agent_memory.event_list)}") + logger.info(f"thought长度为{len(agent_memory.thought_list)}") + logger.info(f"chat长度为{len(agent_memory.chat_list)}") + result1 = agent_memory.get_summarized_latest_events(4) + logger.info(f"总结最近事件结果为:{result1}") + + def test_get_last_chat_function(self, agent_memory): + result2 = agent_memory.get_last_chat("customers") + logger.info(f"上一次对话是{result2}") + + def test_retrieve_function(self, agent_memory): + focus_points = ["who i love?"] + retrieved = dict() + for focal_pt in focus_points: + nodes = [ + [i.last_accessed, i] + for i in agent_memory.event_list + agent_memory.thought_list + if "idle" not in i.embedding_key + ] + nodes = sorted(nodes, key=lambda x: x[0]) + nodes = [i for created, i in nodes] + results = agent_retrieve(agent_memory, datetime.now() - timedelta(days=120), 0.99, focal_pt, nodes, 5) + final_result = [] + for n in results: + for i in agent_memory.storage: + if i.memory_id == n: + i.last_accessed = datetime.now() - timedelta(days=120) + final_result.append(i) + + retrieved[focal_pt] = final_result + logger.info(f"检索结果为{retrieved}") diff --git a/tests/metagpt/ext/stanford_town/memory/test_basic_memory.py b/tests/metagpt/ext/stanford_town/memory/test_basic_memory.py new file mode 100644 index 000000000..36a9b2f99 --- /dev/null +++ b/tests/metagpt/ext/stanford_town/memory/test_basic_memory.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : the unittest of BasicMemory + +from datetime import datetime, timedelta + +import pytest + +from metagpt.ext.stanford_town.memory.agent_memory import BasicMemory +from metagpt.logs import logger + +""" +memory测试思路 +1. Basic Memory测试 +2. Agent Memory测试 + 2.1 Load & Save方法测试 + 2.2 Add方法测试 + 2.3 Get方法测试 +""" + +# Create some sample BasicMemory instances +memory1 = BasicMemory( + memory_id="1", + memory_count=1, + type_count=1, + memory_type="event", + depth=1, + created=datetime.now(), + expiration=datetime.now() + timedelta(days=30), + subject="Subject1", + predicate="Predicate1", + object="Object1", + content="This is content 1", + embedding_key="embedding_key_1", + poignancy=1, + keywords=["keyword1", "keyword2"], + filling=["memory_id_2"], +) +memory2 = BasicMemory( + memory_id="2", + memory_count=2, + type_count=2, + memory_type="thought", + depth=2, + created=datetime.now(), + expiration=datetime.now() + timedelta(days=30), + subject="Subject2", + predicate="Predicate2", + object="Object2", + content="This is content 2", + embedding_key="embedding_key_2", + poignancy=2, + keywords=["keyword3", "keyword4"], + filling=[], +) + + +@pytest.fixture +def basic_mem_set(): + basic_mem2 = memory2 + yield basic_mem2 + + +def test_basic_mem_function(basic_mem_set): + a, b, c = basic_mem_set.summary() + logger.info(f"{a}{b}{c}") + assert a == "Subject2" + + +def test_basic_mem_save(basic_mem_set): + result = basic_mem_set.save_to_dict() + logger.info(f"save结果为{result}") + + +if __name__ == "__main__": + pytest.main() diff --git a/tests/metagpt/ext/stanford_town/memory/test_spatial_memory.py b/tests/metagpt/ext/stanford_town/memory/test_spatial_memory.py new file mode 100644 index 000000000..e05b273fd --- /dev/null +++ b/tests/metagpt/ext/stanford_town/memory/test_spatial_memory.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : the unittest of MemoryTree + +from metagpt.ext.stanford_town.memory.spatial_memory import MemoryTree +from metagpt.ext.stanford_town.utils.const import STORAGE_PATH + + +def test_spatial_memory(): + f_path = STORAGE_PATH.joinpath( + "base_the_ville_isabella_maria_klaus/personas/Isabella Rodriguez/bootstrap_memory/spatial_memory.json" + ) + x = MemoryTree() + x.set_mem_path(f_path) + assert x.tree + assert "the Ville" in x.tree + assert "Isabella Rodriguez's apartment" in x.get_str_accessible_sectors("the Ville") diff --git a/tests/metagpt/ext/stanford_town/plan/__init__.py b/tests/metagpt/ext/stanford_town/plan/__init__.py new file mode 100644 index 000000000..2bcf8efd0 --- /dev/null +++ b/tests/metagpt/ext/stanford_town/plan/__init__.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : diff --git a/tests/metagpt/ext/stanford_town/plan/test_conversation.py b/tests/metagpt/ext/stanford_town/plan/test_conversation.py new file mode 100644 index 000000000..35dd216f9 --- /dev/null +++ b/tests/metagpt/ext/stanford_town/plan/test_conversation.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : unittest of roles conversation + +from typing import Tuple + +import pytest + +from metagpt.environment import StanfordTownEnv +from metagpt.ext.stanford_town.plan.converse import agent_conversation +from metagpt.ext.stanford_town.roles.st_role import STRole +from metagpt.ext.stanford_town.utils.const import MAZE_ASSET_PATH, STORAGE_PATH +from metagpt.ext.stanford_town.utils.mg_ga_transform import get_reverie_meta +from metagpt.ext.stanford_town.utils.utils import copy_folder + + +async def init_two_roles(fork_sim_code: str = "base_the_ville_isabella_maria_klaus") -> Tuple["STRole"]: + sim_code = "unittest_sim" + + copy_folder(str(STORAGE_PATH.joinpath(fork_sim_code)), str(STORAGE_PATH.joinpath(sim_code))) + + reverie_meta = get_reverie_meta(fork_sim_code) + role_ir_name = "Isabella Rodriguez" + role_km_name = "Klaus Mueller" + + env = StanfordTownEnv(maze_asset_path=MAZE_ASSET_PATH) + + role_ir = STRole( + name=role_ir_name, + sim_code=sim_code, + profile=role_ir_name, + step=reverie_meta.get("step"), + start_time=reverie_meta.get("start_date"), + curr_time=reverie_meta.get("curr_time"), + sec_per_step=reverie_meta.get("sec_per_step"), + ) + role_ir.set_env(env) + await role_ir.init_curr_tile() + + role_km = STRole( + name=role_km_name, + sim_code=sim_code, + profile=role_km_name, + step=reverie_meta.get("step"), + start_time=reverie_meta.get("start_date"), + curr_time=reverie_meta.get("curr_time"), + sec_per_step=reverie_meta.get("sec_per_step"), + ) + role_km.set_env(env) + await role_km.init_curr_tile() + + return role_ir, role_km + + +@pytest.mark.asyncio +async def test_agent_conversation(): + role_ir, role_km = await init_two_roles() + + curr_chat = await agent_conversation(role_ir, role_km, conv_rounds=2) + assert len(curr_chat) % 2 == 0 + + meet = False + for conv in curr_chat: + if "Valentine's Day party" in conv[1]: + # conv[0] speaker, conv[1] utterance + meet = True + assert meet diff --git a/tests/metagpt/ext/stanford_town/plan/test_st_plan.py b/tests/metagpt/ext/stanford_town/plan/test_st_plan.py new file mode 100644 index 000000000..f7f395040 --- /dev/null +++ b/tests/metagpt/ext/stanford_town/plan/test_st_plan.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : unittest of st_plan + + +import pytest + +from metagpt.ext.stanford_town.plan.st_plan import _choose_retrieved, _should_react +from tests.metagpt.ext.stanford_town.plan.test_conversation import init_two_roles + + +@pytest.mark.asyncio +async def test_should_react(): + role_ir, role_km = await init_two_roles() + roles = {role_ir.name: role_ir, role_km.name: role_km} + role_ir.scratch.act_address = "mock data" + + observed = await role_ir.observe() + retrieved = role_ir.retrieve(observed) + + focused_event = _choose_retrieved(role_ir.name, retrieved) + + if focused_event: + reaction_mode = await _should_react(role_ir, focused_event, roles) # chat with Isabella Rodriguez + assert not reaction_mode diff --git a/tests/metagpt/ext/stanford_town/roles/__init__.py b/tests/metagpt/ext/stanford_town/roles/__init__.py new file mode 100644 index 000000000..2bcf8efd0 --- /dev/null +++ b/tests/metagpt/ext/stanford_town/roles/__init__.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : diff --git a/tests/metagpt/ext/stanford_town/roles/test_st_role.py b/tests/metagpt/ext/stanford_town/roles/test_st_role.py new file mode 100644 index 000000000..affa6e87f --- /dev/null +++ b/tests/metagpt/ext/stanford_town/roles/test_st_role.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : the unittest of STRole + +import pytest + +from metagpt.environment import StanfordTownEnv +from metagpt.ext.stanford_town.memory.agent_memory import BasicMemory +from metagpt.ext.stanford_town.roles.st_role import STRole +from metagpt.ext.stanford_town.utils.const import MAZE_ASSET_PATH + + +@pytest.mark.asyncio +async def test_observe(): + role = STRole( + sim_code="base_the_ville_isabella_maria_klaus", + start_time="February 13, 2023", + curr_time="February 13, 2023, 00:00:00", + ) + role.set_env(StanfordTownEnv(maze_asset_path=MAZE_ASSET_PATH)) + await role.init_curr_tile() + + ret_events = await role.observe() + assert ret_events + for event in ret_events: + assert isinstance(event, BasicMemory) diff --git a/tests/metagpt/ext/stanford_town/test_reflect.py b/tests/metagpt/ext/stanford_town/test_reflect.py new file mode 100644 index 000000000..0be23166c --- /dev/null +++ b/tests/metagpt/ext/stanford_town/test_reflect.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : the unittest of reflection + +import pytest + +from metagpt.environment import StanfordTownEnv +from metagpt.ext.stanford_town.actions.run_reflect_action import ( + AgentEventTriple, + AgentFocusPt, + AgentInsightAndGuidance, +) +from metagpt.ext.stanford_town.roles.st_role import STRole +from metagpt.ext.stanford_town.utils.const import MAZE_ASSET_PATH + + +@pytest.mark.asyncio +async def test_reflect(): + """ + init STRole form local json, set sim_code(path),curr_time & start_time + """ + role = STRole( + sim_code="base_the_ville_isabella_maria_klaus", + start_time="February 13, 2023", + curr_time="February 13, 2023, 00:00:00", + ) + role.set_env(StanfordTownEnv(maze_asset_path=MAZE_ASSET_PATH)) + role.init_curr_tile() + + run_focus = AgentFocusPt() + statements = "" + await run_focus.run(role, statements, n=3) + + """ + 这里有通过测试的结果,但是更多时候LLM生成的结果缺少了because of;考虑修改一下prompt + result = {'Klaus Mueller and Maria Lopez have a close relationship because they have been friends for a long time and have a strong bond': [1, 2, 5, 9, 11, 14], 'Klaus Mueller has a crush on Maria Lopez': [8, 15, 24], 'Klaus Mueller is academically inclined and actively researching a topic': [13, 20], 'Klaus Mueller is socially active and acquainted with Isabella Rodriguez': [17, 21, 22], 'Klaus Mueller is organized and prepared': [19]} + """ + run_insight = AgentInsightAndGuidance() + statements = "[user: Klaus Mueller has a close relationship with Maria Lopez, user:s Mueller and Maria Lopez have a close relationship, user: Klaus Mueller has a close relationship with Maria Lopez, user: Klaus Mueller has a close relationship with Maria Lopez, user: Klaus Mueller and Maria Lopez have a strong relationship, user: Klaus Mueller is a dormmate of Maria Lopez., user: Klaus Mueller and Maria Lopez have a strong bond, user: Klaus Mueller has a crush on Maria Lopez, user: Klaus Mueller and Maria Lopez have been friends for more than 2 years., user: Klaus Mueller has a close relationship with Maria Lopez, user: Klaus Mueller Maria Lopez is heading off to college., user: Klaus Mueller and Maria Lopez have a close relationship, user: Klaus Mueller is actively researching a topic, user: Klaus Mueller is close friends and classmates with Maria Lopez., user: Klaus Mueller is socially active, user: Klaus Mueller has a crush on Maria Lopez., user: Klaus Mueller and Maria Lopez have been friends for a long time, user: Klaus Mueller is academically inclined, user: For Klaus Mueller's planning: should remember to ask Maria Lopez about her research paper, as she found it interesting that he mentioned it., user: Klaus Mueller is acquainted with Isabella Rodriguez, user: Klaus Mueller is organized and prepared, user: Maria Lopez is conversing about conversing about Maria's research paper mentioned by Klaus, user: Klaus Mueller is conversing about conversing about Maria's research paper mentioned by Klaus, user: Klaus Mueller is a student, user: Klaus Mueller is a student, user: Klaus Mueller is conversing about two friends named Klaus Mueller and Maria Lopez discussing their morning plans and progress on a research paper before Maria heads off to college., user: Klaus Mueller is socially active, user: Klaus Mueller is socially active, user: Klaus Mueller is socially active and acquainted with Isabella Rodriguez, user: Klaus Mueller has a crush on Maria Lopez]" + await run_insight.run(role, statements, n=5) + + run_triple = AgentEventTriple() + statements = "(Klaus Mueller is academically inclined)" + await run_triple.run(statements, role) + + role.scratch.importance_trigger_curr = -1 + role.reflect() diff --git a/tests/metagpt/ext/werewolf/__init__.py b/tests/metagpt/ext/werewolf/__init__.py new file mode 100644 index 000000000..2bcf8efd0 --- /dev/null +++ b/tests/metagpt/ext/werewolf/__init__.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : diff --git a/tests/metagpt/ext/werewolf/actions/__init__.py b/tests/metagpt/ext/werewolf/actions/__init__.py new file mode 100644 index 000000000..2bcf8efd0 --- /dev/null +++ b/tests/metagpt/ext/werewolf/actions/__init__.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : diff --git a/tests/metagpt/ext/werewolf/actions/test_experience_operation.py b/tests/metagpt/ext/werewolf/actions/test_experience_operation.py new file mode 100644 index 000000000..a31abc49a --- /dev/null +++ b/tests/metagpt/ext/werewolf/actions/test_experience_operation.py @@ -0,0 +1,164 @@ +import json + +import pytest + +from metagpt.const import DEFAULT_WORKSPACE_ROOT +from metagpt.ext.werewolf.actions import AddNewExperiences, RetrieveExperiences +from metagpt.ext.werewolf.schema import RoleExperience +from metagpt.logs import logger + + +class TestExperiencesOperation: + collection_name = "test" + test_round_id = "test_01" + version = "test" + samples_to_add = [ + RoleExperience( + profile="Witch", + reflection="The game is intense with two players claiming to be the Witch and one claiming to be the Seer. " + "Player4's behavior is suspicious.", + response="", + outcome="", + round_id=test_round_id, + version=version, + ), + RoleExperience( + profile="Witch", + reflection="The game is in a critical state with only three players left, " + "and I need to make a wise decision to save Player7 or not.", + response="", + outcome="", + round_id=test_round_id, + version=version, + ), + RoleExperience( + profile="Seer", + reflection="Player1, who is a werewolf, falsely claimed to be a Seer, and Player6, who might be a Witch, " + "sided with him. I, as the real Seer, am under suspicion.", + response="", + outcome="", + round_id=test_round_id, + version=version, + ), + RoleExperience( + profile="TestRole", + reflection="Some test reflection1", + response="", + outcome="", + round_id=test_round_id, + version=version + "_01-10", + ), + RoleExperience( + profile="TestRole", + reflection="Some test reflection2", + response="", + outcome="", + round_id=test_round_id, + version=version + "_11-20", + ), + RoleExperience( + profile="TestRole", + reflection="Some test reflection3", + response="", + outcome="", + round_id=test_round_id, + version=version + "_21-30", + ), + ] + + @pytest.mark.asyncio + async def test_add(self): + saved_file = DEFAULT_WORKSPACE_ROOT.joinpath( + f"werewolf_game/experiences/{self.version}/{self.test_round_id}.json" + ) + if saved_file.exists(): + saved_file.unlink() + + action = AddNewExperiences(collection_name=self.collection_name, delete_existing=True) + action.run(self.samples_to_add) + + # test insertion + inserted = action.engine.retriever._index._vector_store._collection.get() + assert len(inserted["documents"]) == len(self.samples_to_add) + + # test if we record the samples correctly to local file + # & test if we could recover a embedding db from the file + action = AddNewExperiences(collection_name=self.collection_name, delete_existing=True) + action.add_from_file(saved_file) + inserted = action.engine.retriever._index._vector_store._collection.get() + assert len(inserted["documents"]) == len(self.samples_to_add) + + @pytest.mark.asyncio + async def test_retrieve(self): + action = RetrieveExperiences(collection_name=self.collection_name) + + query = "one player claimed to be Seer and the other Witch" + results = action.run(query, profile="Witch") + results = json.loads(results) + + assert len(results) == 2, "Witch should have 2 experiences" + assert "The game is intense with two players" in results[0] + + @pytest.mark.asyncio + async def test_retrieve_filtering(self): + action = RetrieveExperiences(collection_name=self.collection_name) + + query = "some test query" + profile = "TestRole" + + excluded_version = "" + results = action.run(query, profile=profile, excluded_version=excluded_version) + results = json.loads(results) + assert len(results) == 3 + + excluded_version = self.version + "_21-30" + results = action.run(query, profile=profile, excluded_version=excluded_version) + results = json.loads(results) + assert len(results) == 2 + + +class TestActualRetrieve: + collection_name = "role_reflection" + + @pytest.mark.asyncio + async def test_check_experience_pool(self): + logger.info("check experience pool") + action = RetrieveExperiences(collection_name=self.collection_name) + if action.engine: + all_experiences = action.engine.retriever._index._vector_store._collection.get() + logger.info(f"{len(all_experiences['metadatas'])=}") + + @pytest.mark.asyncio + async def test_retrieve_werewolf_experience(self): + action = RetrieveExperiences(collection_name=self.collection_name) + + query = "there are conflicts" + + logger.info(f"test retrieval with {query=}") + action.run(query, "Werewolf") + + @pytest.mark.asyncio + async def test_retrieve_villager_experience(self): + action = RetrieveExperiences(collection_name=self.collection_name) + + query = "there are conflicts" + + logger.info(f"test retrieval with {query=}") + results = action.run(query, "Seer") + assert "conflict" not in results # 相似局面应该需要包含conflict关键词 + + @pytest.mark.asyncio + async def test_retrieve_villager_experience_filtering(self): + action = RetrieveExperiences(collection_name=self.collection_name) + + query = "there are conflicts" + + excluded_version = "01-10" + logger.info(f"test retrieval with {excluded_version=}") + results_01_10 = action.run(query, profile="Seer", excluded_version=excluded_version, verbose=True) + + excluded_version = "11-20" + logger.info(f"test retrieval with {excluded_version=}") + results_11_20 = action.run(query, profile="Seer", excluded_version=excluded_version, verbose=True) + + assert results_01_10 == results_11_20 diff --git a/tests/metagpt/provider/mock_llm_config.py b/tests/metagpt/provider/mock_llm_config.py index 0c56cc8ea..f563dccad 100644 --- a/tests/metagpt/provider/mock_llm_config.py +++ b/tests/metagpt/provider/mock_llm_config.py @@ -60,3 +60,14 @@ mock_llm_config_dashscope = LLMConfig(api_type="dashscope", api_key="xxx", model mock_llm_config_anthropic = LLMConfig( api_type="anthropic", api_key="xxx", base_url="https://api.anthropic.com", model="claude-3-opus-20240229" ) + +mock_llm_config_bedrock = LLMConfig( + api_type="bedrock", + model="gpt-100", + region_name="somewhere", + access_key="123abc", + secret_key="123abc", + max_token=10000, +) + +mock_llm_config_ark = LLMConfig(api_type="ark", api_key="eyxxx", base_url="xxx", model="ep-xxx") diff --git a/tests/metagpt/provider/req_resp_const.py b/tests/metagpt/provider/req_resp_const.py index 7e4c1a49c..111b57f91 100644 --- a/tests/metagpt/provider/req_resp_const.py +++ b/tests/metagpt/provider/req_resp_const.py @@ -183,3 +183,90 @@ async def llm_general_chat_funcs_test(llm: BaseLLM, prompt: str, messages: list[ resp = await llm.acompletion_text(messages, stream=True) assert resp == resp_cont + + +# For Amazon Bedrock +# Check the API documentation of each model +# https://docs.aws.amazon.com/bedrock/latest/userguide +BEDROCK_PROVIDER_REQUEST_BODY = { + "mistral": {"prompt": "", "max_tokens": 0, "stop": [], "temperature": 0.0, "top_p": 0.0, "top_k": 0}, + "meta": {"prompt": "", "temperature": 0.0, "top_p": 0.0, "max_gen_len": 0}, + "ai21": { + "prompt": "", + "temperature": 0.0, + "topP": 0.0, + "maxTokens": 0, + "stopSequences": [], + "countPenalty": {"scale": 0.0}, + "presencePenalty": {"scale": 0.0}, + "frequencyPenalty": {"scale": 0.0}, + }, + "cohere": { + "prompt": "", + "temperature": 0.0, + "p": 0.0, + "k": 0.0, + "max_tokens": 0, + "stop_sequences": [], + "return_likelihoods": "NONE", + "stream": False, + "num_generations": 0, + "logit_bias": {}, + "truncate": "NONE", + }, + "anthropic": { + "anthropic_version": "bedrock-2023-05-31", + "max_tokens": 0, + "system": "", + "messages": [{"role": "", "content": ""}], + "temperature": 0.0, + "top_p": 0.0, + "top_k": 0, + "stop_sequences": [], + }, + "amazon": { + "inputText": "", + "textGenerationConfig": {"temperature": 0.0, "topP": 0.0, "maxTokenCount": 0, "stopSequences": []}, + }, +} + +BEDROCK_PROVIDER_RESPONSE_BODY = { + "mistral": {"outputs": [{"text": "Hello World", "stop_reason": ""}]}, + "meta": {"generation": "Hello World", "prompt_token_count": 0, "generation_token_count": 0, "stop_reason": ""}, + "ai21": { + "id": "", + "prompt": {"text": "Hello World", "tokens": []}, + "completions": [ + {"data": {"text": "Hello World", "tokens": []}, "finishReason": {"reason": "length", "length": 2}} + ], + }, + "cohere": { + "generations": [ + { + "finish_reason": "", + "id": "", + "text": "Hello World", + "likelihood": 0.0, + "token_likelihoods": [{"token": 0.0}], + "is_finished": True, + "index": 0, + } + ], + "id": "", + "prompt": "", + }, + "anthropic": { + "id": "", + "model": "", + "type": "message", + "role": "assistant", + "content": [{"type": "text", "text": "Hello World"}], + "stop_reason": "", + "stop_sequence": "", + "usage": {"input_tokens": 0, "output_tokens": 0}, + }, + "amazon": { + "inputTextTokenCount": 0, + "results": [{"tokenCount": 0, "outputText": "Hello World", "completionReason": ""}], + }, +} diff --git a/tests/metagpt/provider/test_ark.py b/tests/metagpt/provider/test_ark.py new file mode 100644 index 000000000..c3fb25846 --- /dev/null +++ b/tests/metagpt/provider/test_ark.py @@ -0,0 +1,85 @@ +""" +用于火山方舟Python SDK V3的测试用例 +API文档:https://www.volcengine.com/docs/82379/1263482 +""" + +from typing import AsyncIterator, List, Union + +import pytest +from openai.types.chat import ChatCompletion, ChatCompletionChunk +from openai.types.chat.chat_completion_chunk import Choice, ChoiceDelta + +from metagpt.provider.ark_api import ArkLLM +from tests.metagpt.provider.mock_llm_config import mock_llm_config_ark +from tests.metagpt.provider.req_resp_const import ( + get_openai_chat_completion, + llm_general_chat_funcs_test, + messages, + prompt, + resp_cont_tmpl, +) + +name = "AI assistant" +resp_cont = resp_cont_tmpl.format(name=name) +USAGE = {"completion_tokens": 1000, "prompt_tokens": 1000, "total_tokens": 2000} +default_resp = get_openai_chat_completion(name) +default_resp.model = "doubao-pro-32k-240515" +default_resp.usage = USAGE + + +def create_chat_completion_chunk( + content: str, finish_reason: str = None, choices: List[Choice] = None +) -> ChatCompletionChunk: + if choices is None: + choices = [ + Choice( + delta=ChoiceDelta(content=content, function_call=None, role="assistant", tool_calls=None), + finish_reason=finish_reason, + index=0, + logprobs=None, + ) + ] + + return ChatCompletionChunk( + id="012", + choices=choices, + created=1716278586, + model="doubao-pro-32k-240515", + object="chat.completion.chunk", + system_fingerprint=None, + usage=None if choices else USAGE, + ) + + +ark_resp_chunk = create_chat_completion_chunk(content="") +ark_resp_chunk_finish = create_chat_completion_chunk(content=resp_cont, finish_reason="stop") +ark_resp_chunk_last = create_chat_completion_chunk(content="", choices=[]) + + +async def chunk_iterator(chunks: List[ChatCompletionChunk]) -> AsyncIterator[ChatCompletionChunk]: + for chunk in chunks: + yield chunk + + +async def mock_ark_acompletions_create( + self, stream: bool = False, **kwargs +) -> Union[ChatCompletionChunk, ChatCompletion]: + if stream: + chunks = [ark_resp_chunk, ark_resp_chunk_finish, ark_resp_chunk_last] + return chunk_iterator(chunks) + else: + return default_resp + + +@pytest.mark.asyncio +async def test_ark_acompletion(mocker): + mocker.patch("openai.resources.chat.completions.AsyncCompletions.create", mock_ark_acompletions_create) + + llm = ArkLLM(mock_llm_config_ark) + + resp = await llm.acompletion(messages) + assert resp.choices[0].finish_reason == "stop" + assert resp.choices[0].message.content == resp_cont + assert resp.usage == USAGE + + await llm_general_chat_funcs_test(llm, prompt, messages, resp_cont) diff --git a/tests/metagpt/provider/test_bedrock_api.py b/tests/metagpt/provider/test_bedrock_api.py new file mode 100644 index 000000000..b9c9e0f93 --- /dev/null +++ b/tests/metagpt/provider/test_bedrock_api.py @@ -0,0 +1,109 @@ +import json + +import pytest + +from metagpt.provider.bedrock.utils import ( + NOT_SUUPORT_STREAM_MODELS, + SUPPORT_STREAM_MODELS, +) +from metagpt.provider.bedrock_api import BedrockLLM +from tests.metagpt.provider.mock_llm_config import mock_llm_config_bedrock +from tests.metagpt.provider.req_resp_const import ( + BEDROCK_PROVIDER_REQUEST_BODY, + BEDROCK_PROVIDER_RESPONSE_BODY, +) + +# all available model from bedrock +models = SUPPORT_STREAM_MODELS | NOT_SUUPORT_STREAM_MODELS +messages = [{"role": "user", "content": "Hi!"}] +usage = { + "prompt_tokens": 1000000, + "completion_tokens": 1000000, +} + + +def mock_invoke_model(self: BedrockLLM, *args, **kwargs) -> dict: + provider = self.config.model.split(".")[0] + self._update_costs(usage, self.config.model) + return BEDROCK_PROVIDER_RESPONSE_BODY[provider] + + +def mock_invoke_model_stream(self: BedrockLLM, *args, **kwargs) -> dict: + # use json object to mock EventStream + def dict2bytes(x): + return json.dumps(x).encode("utf-8") + + provider = self.config.model.split(".")[0] + + if provider == "amazon": + response_body_bytes = dict2bytes({"outputText": "Hello World"}) + elif provider == "anthropic": + response_body_bytes = dict2bytes( + {"type": "content_block_delta", "index": 0, "delta": {"type": "text_delta", "text": "Hello World"}} + ) + elif provider == "cohere": + response_body_bytes = dict2bytes({"is_finished": False, "text": "Hello World"}) + else: + response_body_bytes = dict2bytes(BEDROCK_PROVIDER_RESPONSE_BODY[provider]) + + response_body_stream = {"body": [{"chunk": {"bytes": response_body_bytes}}]} + self._update_costs(usage, self.config.model) + return response_body_stream + + +def get_bedrock_request_body(model_id) -> dict: + provider = model_id.split(".")[0] + return BEDROCK_PROVIDER_REQUEST_BODY[provider] + + +def is_subset(subset, superset) -> bool: + """Ensure all fields in request body are allowed. + + ```python + subset = {"prompt": "hello","kwargs": {"temperature": 0.9,"p": 0.0}} + superset = {"prompt": "hello", "kwargs": {"temperature": 0.0, "top-p": 0.0}} + is_subset(subset, superset) + ``` + + """ + for key, value in subset.items(): + if key not in superset: + return False + if isinstance(value, dict): + if not isinstance(superset[key], dict): + return False + if not is_subset(value, superset[key]): + return False + return True + + +@pytest.fixture(scope="class", params=models) +def bedrock_api(request) -> BedrockLLM: + model_id = request.param + mock_llm_config_bedrock.model = model_id + api = BedrockLLM(mock_llm_config_bedrock) + return api + + +class TestBedrockAPI: + def _patch_invoke_model(self, mocker): + mocker.patch("metagpt.provider.bedrock_api.BedrockLLM.invoke_model", mock_invoke_model) + + def _patch_invoke_model_stream(self, mocker): + mocker.patch( + "metagpt.provider.bedrock_api.BedrockLLM.invoke_model_with_response_stream", + mock_invoke_model_stream, + ) + + def test_get_request_body(self, bedrock_api: BedrockLLM): + """Ensure request body has correct format""" + provider = bedrock_api.provider + request_body = json.loads(provider.get_request_body(messages, bedrock_api._const_kwargs)) + assert is_subset(request_body, get_bedrock_request_body(bedrock_api.config.model)) + + @pytest.mark.asyncio + async def test_aask(self, bedrock_api: BedrockLLM, mocker): + self._patch_invoke_model(mocker) + self._patch_invoke_model_stream(mocker) + assert await bedrock_api.aask(messages, stream=False) == "Hello World" + assert await bedrock_api.aask(messages, stream=True) == "Hello World" diff --git a/tests/metagpt/provider/test_spark_api.py b/tests/metagpt/provider/test_spark_api.py index 9c278267d..a73b3ff38 100644 --- a/tests/metagpt/provider/test_spark_api.py +++ b/tests/metagpt/provider/test_spark_api.py @@ -1,62 +1,55 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# @Desc : the unittest of spark api +""" +用于讯飞星火SDK的测试用例 +文档:https://www.xfyun.cn/doc/spark/Web.html +""" + + +from typing import AsyncIterator, List import pytest +from sparkai.core.messages.ai import AIMessage, AIMessageChunk +from sparkai.core.outputs.chat_generation import ChatGeneration +from sparkai.core.outputs.llm_result import LLMResult -from metagpt.provider.spark_api import GetMessageFromWeb, SparkLLM -from tests.metagpt.provider.mock_llm_config import ( - mock_llm_config, - mock_llm_config_spark, -) +from metagpt.provider.spark_api import SparkLLM +from tests.metagpt.provider.mock_llm_config import mock_llm_config_spark from tests.metagpt.provider.req_resp_const import ( llm_general_chat_funcs_test, + messages, prompt, resp_cont_tmpl, ) resp_cont = resp_cont_tmpl.format(name="Spark") +USAGE = { + "token_usage": {"question_tokens": 1000, "prompt_tokens": 1000, "completion_tokens": 1000, "total_tokens": 2000} +} +spark_agenerate_result = LLMResult( + generations=[[ChatGeneration(text=resp_cont, message=AIMessage(content=resp_cont, additional_kwargs=USAGE))]] +) + +chunks = [AIMessageChunk(content=resp_cont), AIMessageChunk(content="", additional_kwargs=USAGE)] -class MockWebSocketApp(object): - def __init__(self, ws_url, on_message=None, on_error=None, on_close=None, on_open=None): - pass - - def run_forever(self, sslopt=None): - pass +async def chunk_iterator(chunks: List[AIMessageChunk]) -> AsyncIterator[AIMessageChunk]: + for chunk in chunks: + yield chunk -def test_get_msg_from_web(mocker): - mocker.patch("websocket.WebSocketApp", MockWebSocketApp) - - get_msg_from_web = GetMessageFromWeb(prompt, mock_llm_config) - assert get_msg_from_web.gen_params()["parameter"]["chat"]["domain"] == "mock_domain" - - ret = get_msg_from_web.run() - assert ret == "" - - -def mock_spark_get_msg_from_web_run(self) -> str: - return resp_cont - - -@pytest.mark.asyncio -async def test_spark_aask(mocker): - mocker.patch("metagpt.provider.spark_api.GetMessageFromWeb.run", mock_spark_get_msg_from_web_run) - - llm = SparkLLM(mock_llm_config_spark) - - resp = await llm.aask("Hello!") - assert resp == resp_cont +async def mock_spark_acreate(self, messages, stream): + if stream: + return chunk_iterator(chunks) + else: + return spark_agenerate_result @pytest.mark.asyncio async def test_spark_acompletion(mocker): - mocker.patch("metagpt.provider.spark_api.GetMessageFromWeb.run", mock_spark_get_msg_from_web_run) + mocker.patch("metagpt.provider.spark_api.SparkLLM.acreate", mock_spark_acreate) - spark_llm = SparkLLM(mock_llm_config) + spark_llm = SparkLLM(mock_llm_config_spark) - resp = await spark_llm.acompletion([]) - assert resp == resp_cont + resp = await spark_llm.acompletion([messages]) + assert spark_llm.get_choice_text(resp) == resp_cont - await llm_general_chat_funcs_test(spark_llm, prompt, prompt, resp_cont) + await llm_general_chat_funcs_test(spark_llm, prompt, messages, resp_cont) diff --git a/tests/metagpt/rag/engines/test_simple.py b/tests/metagpt/rag/engines/test_simple.py index 9262ccb07..a10fcbe63 100644 --- a/tests/metagpt/rag/engines/test_simple.py +++ b/tests/metagpt/rag/engines/test_simple.py @@ -7,6 +7,7 @@ from llama_index.core.llms import MockLLM from llama_index.core.schema import Document, NodeWithScore, TextNode from metagpt.rag.engines import SimpleEngine +from metagpt.rag.parsers import OmniParse from metagpt.rag.retrievers import SimpleHybridRetriever from metagpt.rag.retrievers.base import ModifiableRAGRetriever, PersistableRAGRetriever from metagpt.rag.schema import BM25RetrieverConfig, ObjectNode @@ -25,10 +26,6 @@ class TestSimpleEngine: def mock_simple_directory_reader(self, mocker): return mocker.patch("metagpt.rag.engines.simple.SimpleDirectoryReader") - @pytest.fixture - def mock_vector_store_index(self, mocker): - return mocker.patch("metagpt.rag.engines.simple.VectorStoreIndex.from_documents") - @pytest.fixture def mock_get_retriever(self, mocker): return mocker.patch("metagpt.rag.engines.simple.get_retriever") @@ -41,14 +38,18 @@ class TestSimpleEngine: def mock_get_response_synthesizer(self, mocker): return mocker.patch("metagpt.rag.engines.simple.get_response_synthesizer") + @pytest.fixture + def mock_get_file_extractor(self, mocker): + return mocker.patch("metagpt.rag.engines.simple.SimpleEngine._get_file_extractor") + def test_from_docs( self, mocker, mock_simple_directory_reader, - mock_vector_store_index, mock_get_retriever, mock_get_rankers, mock_get_response_synthesizer, + mock_get_file_extractor, ): # Mock mock_simple_directory_reader.return_value.load_data.return_value = [ @@ -58,6 +59,8 @@ class TestSimpleEngine: mock_get_retriever.return_value = mocker.MagicMock() mock_get_rankers.return_value = [mocker.MagicMock()] mock_get_response_synthesizer.return_value = mocker.MagicMock() + file_extractor = mocker.MagicMock() + mock_get_file_extractor.return_value = file_extractor # Setup input_dir = "test_dir" @@ -80,12 +83,11 @@ class TestSimpleEngine: ) # Assert - mock_simple_directory_reader.assert_called_once_with(input_dir=input_dir, input_files=input_files) - mock_vector_store_index.assert_called_once() - mock_get_retriever.assert_called_once_with( - configs=retriever_configs, index=mock_vector_store_index.return_value + mock_simple_directory_reader.assert_called_once_with( + input_dir=input_dir, input_files=input_files, file_extractor=file_extractor ) - mock_get_rankers.assert_called_once_with(configs=ranker_configs, llm=llm) + mock_get_retriever.assert_called_once() + mock_get_rankers.assert_called_once() mock_get_response_synthesizer.assert_called_once_with(llm=llm) assert isinstance(engine, SimpleEngine) @@ -119,7 +121,7 @@ class TestSimpleEngine: # Assert assert isinstance(engine, SimpleEngine) - assert engine.index is not None + assert engine._transformations is not None def test_from_objs_with_bm25_config(self): # Setup @@ -137,6 +139,7 @@ class TestSimpleEngine: def test_from_index(self, mocker, mock_llm, mock_embedding): # Mock mock_index = mocker.MagicMock(spec=VectorStoreIndex) + mock_index.as_retriever.return_value = "retriever" mock_get_index = mocker.patch("metagpt.rag.engines.simple.get_index") mock_get_index.return_value = mock_index @@ -149,7 +152,7 @@ class TestSimpleEngine: # Assert assert isinstance(engine, SimpleEngine) - assert engine.index is mock_index + assert engine._retriever == "retriever" @pytest.mark.asyncio async def test_asearch(self, mocker): @@ -200,14 +203,11 @@ class TestSimpleEngine: mock_retriever = mocker.MagicMock(spec=ModifiableRAGRetriever) - mock_index = mocker.MagicMock(spec=VectorStoreIndex) - mock_index._transformations = mocker.MagicMock() - mock_run_transformations = mocker.patch("metagpt.rag.engines.simple.run_transformations") mock_run_transformations.return_value = ["node1", "node2"] # Setup - engine = SimpleEngine(retriever=mock_retriever, index=mock_index) + engine = SimpleEngine(retriever=mock_retriever) input_files = ["test_file1", "test_file2"] # Exec @@ -230,7 +230,7 @@ class TestSimpleEngine: return "" objs = [CustomTextNode(text=f"text_{i}", metadata={"obj": f"obj_{i}"}) for i in range(2)] - engine = SimpleEngine(retriever=mock_retriever, index=mocker.MagicMock()) + engine = SimpleEngine(retriever=mock_retriever) # Exec engine.add_objs(objs=objs) @@ -308,3 +308,17 @@ class TestSimpleEngine: # Assert assert "obj" in node.node.metadata assert node.node.metadata["obj"] == expected_obj + + def test_get_file_extractor(self, mocker): + # mock no omniparse config + mock_omniparse_config = mocker.patch("metagpt.rag.engines.simple.config.omniparse", autospec=True) + mock_omniparse_config.base_url = "" + + file_extractor = SimpleEngine._get_file_extractor() + assert file_extractor == {} + + # mock have omniparse config + mock_omniparse_config.base_url = "http://localhost:8000" + file_extractor = SimpleEngine._get_file_extractor() + assert ".pdf" in file_extractor + assert isinstance(file_extractor[".pdf"], OmniParse) diff --git a/tests/metagpt/rag/factories/test_base.py b/tests/metagpt/rag/factories/test_base.py index 1d41e1872..0b0a44976 100644 --- a/tests/metagpt/rag/factories/test_base.py +++ b/tests/metagpt/rag/factories/test_base.py @@ -97,6 +97,5 @@ class TestConfigBasedFactory: def test_val_from_config_or_kwargs_key_error(self): # Test KeyError when the key is not found in both config object and kwargs config = DummyConfig(name=None) - with pytest.raises(KeyError) as exc_info: - ConfigBasedFactory._val_from_config_or_kwargs("missing_key", config) - assert "The key 'missing_key' is required but not provided" in str(exc_info.value) + val = ConfigBasedFactory._val_from_config_or_kwargs("missing_key", config) + assert val is None diff --git a/tests/metagpt/rag/factories/test_embedding.py b/tests/metagpt/rag/factories/test_embedding.py index 1ded6b4a8..1a9e9b2c9 100644 --- a/tests/metagpt/rag/factories/test_embedding.py +++ b/tests/metagpt/rag/factories/test_embedding.py @@ -1,5 +1,6 @@ import pytest +from metagpt.configs.embedding_config import EmbeddingType from metagpt.configs.llm_config import LLMType from metagpt.rag.factories.embedding import RAGEmbeddingFactory @@ -10,30 +11,51 @@ class TestRAGEmbeddingFactory: self.embedding_factory = RAGEmbeddingFactory() @pytest.fixture - def mock_openai_embedding(self, mocker): + def mock_config(self, mocker): + return mocker.patch("metagpt.rag.factories.embedding.config") + + @staticmethod + def mock_openai_embedding(mocker): return mocker.patch("metagpt.rag.factories.embedding.OpenAIEmbedding") - @pytest.fixture - def mock_azure_embedding(self, mocker): + @staticmethod + def mock_azure_embedding(mocker): return mocker.patch("metagpt.rag.factories.embedding.AzureOpenAIEmbedding") - def test_get_rag_embedding_openai(self, mock_openai_embedding): - # Exec - self.embedding_factory.get_rag_embedding(LLMType.OPENAI) + @staticmethod + def mock_gemini_embedding(mocker): + return mocker.patch("metagpt.rag.factories.embedding.GeminiEmbedding") - # Assert - mock_openai_embedding.assert_called_once() + @staticmethod + def mock_ollama_embedding(mocker): + return mocker.patch("metagpt.rag.factories.embedding.OllamaEmbedding") - def test_get_rag_embedding_azure(self, mock_azure_embedding): - # Exec - self.embedding_factory.get_rag_embedding(LLMType.AZURE) - - # Assert - mock_azure_embedding.assert_called_once() - - def test_get_rag_embedding_default(self, mocker, mock_openai_embedding): + @pytest.mark.parametrize( + ("mock_func", "embedding_type"), + [ + (mock_openai_embedding, LLMType.OPENAI), + (mock_azure_embedding, LLMType.AZURE), + (mock_openai_embedding, EmbeddingType.OPENAI), + (mock_azure_embedding, EmbeddingType.AZURE), + (mock_gemini_embedding, EmbeddingType.GEMINI), + (mock_ollama_embedding, EmbeddingType.OLLAMA), + ], + ) + def test_get_rag_embedding(self, mock_func, embedding_type, mocker): # Mock - mock_config = mocker.patch("metagpt.rag.factories.embedding.config") + mock = mock_func(mocker) + + # Exec + self.embedding_factory.get_rag_embedding(embedding_type) + + # Assert + mock.assert_called_once() + + def test_get_rag_embedding_default(self, mocker, mock_config): + # Mock + mock_openai_embedding = self.mock_openai_embedding(mocker) + + mock_config.embedding.api_type = None mock_config.llm.api_type = LLMType.OPENAI # Exec @@ -41,3 +63,44 @@ class TestRAGEmbeddingFactory: # Assert mock_openai_embedding.assert_called_once() + + @pytest.mark.parametrize( + "model, embed_batch_size, expected_params", + [("test_model", 100, {"model_name": "test_model", "embed_batch_size": 100}), (None, None, {})], + ) + def test_try_set_model_and_batch_size(self, mock_config, model, embed_batch_size, expected_params): + # Mock + mock_config.embedding.model = model + mock_config.embedding.embed_batch_size = embed_batch_size + + # Setup + test_params = {} + + # Exec + self.embedding_factory._try_set_model_and_batch_size(test_params) + + # Assert + assert test_params == expected_params + + def test_resolve_embedding_type(self, mock_config): + # Mock + mock_config.embedding.api_type = EmbeddingType.OPENAI + + # Exec + embedding_type = self.embedding_factory._resolve_embedding_type() + + # Assert + assert embedding_type == EmbeddingType.OPENAI + + def test_resolve_embedding_type_exception(self, mock_config): + # Mock + mock_config.embedding.api_type = None + mock_config.llm.api_type = LLMType.GEMINI + + # Assert + with pytest.raises(TypeError): + self.embedding_factory._resolve_embedding_type() + + def test_raise_for_key(self): + with pytest.raises(ValueError): + self.embedding_factory._raise_for_key("key") diff --git a/tests/metagpt/rag/factories/test_retriever.py b/tests/metagpt/rag/factories/test_retriever.py index ef1cef7e0..cd55a32db 100644 --- a/tests/metagpt/rag/factories/test_retriever.py +++ b/tests/metagpt/rag/factories/test_retriever.py @@ -1,6 +1,8 @@ import faiss import pytest from llama_index.core import VectorStoreIndex +from llama_index.core.embeddings import MockEmbedding +from llama_index.core.schema import TextNode from llama_index.vector_stores.chroma import ChromaVectorStore from llama_index.vector_stores.elasticsearch import ElasticsearchStore @@ -43,6 +45,14 @@ class TestRetrieverFactory: def mock_es_vector_store(self, mocker): return mocker.MagicMock(spec=ElasticsearchStore) + @pytest.fixture + def mock_nodes(self, mocker): + return [TextNode(text="msg")] + + @pytest.fixture + def mock_embedding(self): + return MockEmbedding(embed_dim=1) + def test_get_retriever_with_faiss_config(self, mock_faiss_index, mocker, mock_vector_store_index): mock_config = FAISSRetrieverConfig(dimensions=128) mocker.patch("faiss.IndexFlatL2", return_value=mock_faiss_index) @@ -52,42 +62,40 @@ class TestRetrieverFactory: assert isinstance(retriever, FAISSRetriever) - def test_get_retriever_with_bm25_config(self, mocker, mock_vector_store_index): + def test_get_retriever_with_bm25_config(self, mocker, mock_nodes): mock_config = BM25RetrieverConfig() mocker.patch("rank_bm25.BM25Okapi.__init__", return_value=None) - mocker.patch.object(self.retriever_factory, "_extract_index", return_value=mock_vector_store_index) - retriever = self.retriever_factory.get_retriever(configs=[mock_config]) + retriever = self.retriever_factory.get_retriever(configs=[mock_config], nodes=mock_nodes) assert isinstance(retriever, DynamicBM25Retriever) - def test_get_retriever_with_multiple_configs_returns_hybrid(self, mocker, mock_vector_store_index): - mock_faiss_config = FAISSRetrieverConfig(dimensions=128) + def test_get_retriever_with_multiple_configs_returns_hybrid(self, mocker, mock_nodes, mock_embedding): + mock_faiss_config = FAISSRetrieverConfig(dimensions=1) mock_bm25_config = BM25RetrieverConfig() mocker.patch("rank_bm25.BM25Okapi.__init__", return_value=None) - mocker.patch.object(self.retriever_factory, "_extract_index", return_value=mock_vector_store_index) - retriever = self.retriever_factory.get_retriever(configs=[mock_faiss_config, mock_bm25_config]) + retriever = self.retriever_factory.get_retriever( + configs=[mock_faiss_config, mock_bm25_config], nodes=mock_nodes, embed_model=mock_embedding + ) assert isinstance(retriever, SimpleHybridRetriever) - def test_get_retriever_with_chroma_config(self, mocker, mock_vector_store_index, mock_chroma_vector_store): + def test_get_retriever_with_chroma_config(self, mocker, mock_chroma_vector_store, mock_embedding): mock_config = ChromaRetrieverConfig(persist_path="/path/to/chroma", collection_name="test_collection") mock_chromadb = mocker.patch("metagpt.rag.factories.retriever.chromadb.PersistentClient") mock_chromadb.get_or_create_collection.return_value = mocker.MagicMock() mocker.patch("metagpt.rag.factories.retriever.ChromaVectorStore", return_value=mock_chroma_vector_store) - mocker.patch.object(self.retriever_factory, "_extract_index", return_value=mock_vector_store_index) - retriever = self.retriever_factory.get_retriever(configs=[mock_config]) + retriever = self.retriever_factory.get_retriever(configs=[mock_config], nodes=[], embed_model=mock_embedding) assert isinstance(retriever, ChromaRetriever) - def test_get_retriever_with_es_config(self, mocker, mock_vector_store_index, mock_es_vector_store): + def test_get_retriever_with_es_config(self, mocker, mock_es_vector_store, mock_embedding): mock_config = ElasticsearchRetrieverConfig(store_config=ElasticsearchStoreConfig()) mocker.patch("metagpt.rag.factories.retriever.ElasticsearchStore", return_value=mock_es_vector_store) - mocker.patch.object(self.retriever_factory, "_extract_index", return_value=mock_vector_store_index) - retriever = self.retriever_factory.get_retriever(configs=[mock_config]) + retriever = self.retriever_factory.get_retriever(configs=[mock_config], nodes=[], embed_model=mock_embedding) assert isinstance(retriever, ElasticsearchRetriever) @@ -111,3 +119,19 @@ class TestRetrieverFactory: extracted_index = self.retriever_factory._extract_index(index=mock_vector_store_index) assert extracted_index == mock_vector_store_index + + def test_get_or_build_when_get(self, mocker): + want = "existing_index" + mocker.patch.object(self.retriever_factory, "_extract_index", return_value=want) + + got = self.retriever_factory._build_es_index(None) + + assert got == want + + def test_get_or_build_when_build(self, mocker): + want = "call_build_es_index" + mocker.patch.object(self.retriever_factory, "_build_es_index", return_value=want) + + got = self.retriever_factory._build_es_index(None) + + assert got == want diff --git a/tests/metagpt/rag/parser/test_omniparse.py b/tests/metagpt/rag/parser/test_omniparse.py new file mode 100644 index 000000000..d2b533d06 --- /dev/null +++ b/tests/metagpt/rag/parser/test_omniparse.py @@ -0,0 +1,118 @@ +import pytest +from llama_index.core import Document + +from metagpt.const import EXAMPLE_DATA_PATH +from metagpt.rag.parsers import OmniParse +from metagpt.rag.schema import ( + OmniParsedResult, + OmniParseOptions, + OmniParseType, + ParseResultType, +) +from metagpt.utils.omniparse_client import OmniParseClient + +# test data +TEST_DOCX = EXAMPLE_DATA_PATH / "omniparse/test01.docx" +TEST_PDF = EXAMPLE_DATA_PATH / "omniparse/test02.pdf" +TEST_VIDEO = EXAMPLE_DATA_PATH / "omniparse/test03.mp4" +TEST_AUDIO = EXAMPLE_DATA_PATH / "omniparse/test04.mp3" + + +class TestOmniParseClient: + parse_client = OmniParseClient() + + @pytest.fixture + def mock_request_parse(self, mocker): + return mocker.patch("metagpt.rag.parsers.omniparse.OmniParseClient._request_parse") + + @pytest.mark.asyncio + async def test_parse_pdf(self, mock_request_parse): + mock_content = "#test title\ntest content" + mock_parsed_ret = OmniParsedResult(text=mock_content, markdown=mock_content) + mock_request_parse.return_value = mock_parsed_ret.model_dump() + parse_ret = await self.parse_client.parse_pdf(TEST_PDF) + assert parse_ret == mock_parsed_ret + + @pytest.mark.asyncio + async def test_parse_document(self, mock_request_parse): + mock_content = "#test title\ntest_parse_document" + mock_parsed_ret = OmniParsedResult(text=mock_content, markdown=mock_content) + mock_request_parse.return_value = mock_parsed_ret.model_dump() + + with open(TEST_DOCX, "rb") as f: + file_bytes = f.read() + + with pytest.raises(ValueError): + # bytes data must provide bytes_filename + await self.parse_client.parse_document(file_bytes) + + parse_ret = await self.parse_client.parse_document(file_bytes, bytes_filename="test.docx") + assert parse_ret == mock_parsed_ret + + @pytest.mark.asyncio + async def test_parse_video(self, mock_request_parse): + mock_content = "#test title\ntest_parse_video" + mock_request_parse.return_value = { + "text": mock_content, + "metadata": {}, + } + with pytest.raises(ValueError): + # Wrong file extension test + await self.parse_client.parse_video(TEST_DOCX) + + parse_ret = await self.parse_client.parse_video(TEST_VIDEO) + assert "text" in parse_ret and "metadata" in parse_ret + assert parse_ret["text"] == mock_content + + @pytest.mark.asyncio + async def test_parse_audio(self, mock_request_parse): + mock_content = "#test title\ntest_parse_audio" + mock_request_parse.return_value = { + "text": mock_content, + "metadata": {}, + } + parse_ret = await self.parse_client.parse_audio(TEST_AUDIO) + assert "text" in parse_ret and "metadata" in parse_ret + assert parse_ret["text"] == mock_content + + +class TestOmniParse: + @pytest.fixture + def mock_omniparse(self): + parser = OmniParse( + parse_options=OmniParseOptions( + parse_type=OmniParseType.PDF, + result_type=ParseResultType.MD, + max_timeout=120, + num_workers=3, + ) + ) + return parser + + @pytest.fixture + def mock_request_parse(self, mocker): + return mocker.patch("metagpt.rag.parsers.omniparse.OmniParseClient._request_parse") + + @pytest.mark.asyncio + async def test_load_data(self, mock_omniparse, mock_request_parse): + # mock + mock_content = "#test title\ntest content" + mock_parsed_ret = OmniParsedResult(text=mock_content, markdown=mock_content) + mock_request_parse.return_value = mock_parsed_ret.model_dump() + + # single file + documents = mock_omniparse.load_data(file_path=TEST_PDF) + doc = documents[0] + assert isinstance(doc, Document) + assert doc.text == mock_parsed_ret.text == mock_parsed_ret.markdown + + # multi files + file_paths = [TEST_DOCX, TEST_PDF] + mock_omniparse.parse_type = OmniParseType.DOCUMENT + documents = await mock_omniparse.aload_data(file_path=file_paths) + doc = documents[0] + + # assert + assert isinstance(doc, Document) + assert len(documents) == len(file_paths) + assert doc.text == mock_parsed_ret.text == mock_parsed_ret.markdown diff --git a/tests/metagpt/roles/test_product_manager.py b/tests/metagpt/roles/test_product_manager.py index 59b5aa81a..143eef2f2 100644 --- a/tests/metagpt/roles/test_product_manager.py +++ b/tests/metagpt/roles/test_product_manager.py @@ -10,7 +10,6 @@ import json import pytest from metagpt.actions import WritePRD -from metagpt.actions.prepare_documents import PrepareDocuments from metagpt.const import REQUIREMENT_FILENAME from metagpt.context import Context from metagpt.logs import logger @@ -30,11 +29,7 @@ async def test_product_manager(new_filename): rsp = await product_manager.run(MockMessages.req) assert context.git_repo assert context.repo - assert rsp.cause_by == any_to_str(PrepareDocuments) assert REQUIREMENT_FILENAME in context.repo.docs.changed_files - - # write prd - rsp = await product_manager.run(rsp) assert rsp.cause_by == any_to_str(WritePRD) logger.info(rsp) assert len(rsp.content) > 0 diff --git a/tests/metagpt/serialize_deserialize/test_team.py b/tests/metagpt/serialize_deserialize/test_team.py index dbd38422d..6312e1fde 100644 --- a/tests/metagpt/serialize_deserialize/test_team.py +++ b/tests/metagpt/serialize_deserialize/test_team.py @@ -8,6 +8,7 @@ from pathlib import Path import pytest +from metagpt.context import Context from metagpt.logs import logger from metagpt.roles import Architect, ProductManager, ProjectManager from metagpt.team import Team @@ -146,5 +147,21 @@ async def test_team_recover_multi_roles_save(mocker, context): await new_company.run(n_round=4) +@pytest.mark.asyncio +async def test_context(context): + context.kwargs.set("a", "a") + context.cost_manager.max_budget = 9 + company = Team(context=context) + + save_to = context.repo.workdir / "serial" + company.serialize(save_to) + + company.deserialize(save_to, Context()) + assert company.env.context.repo + assert company.env.context.repo.workdir == context.repo.workdir + assert company.env.context.kwargs.a == "a" + assert company.env.context.cost_manager.max_budget == context.cost_manager.max_budget + + if __name__ == "__main__": pytest.main([__file__, "-s"]) diff --git a/tests/metagpt/test_context_mixin.py b/tests/metagpt/test_context_mixin.py index 4389dc251..e0b9d3e64 100644 --- a/tests/metagpt/test_context_mixin.py +++ b/tests/metagpt/test_context_mixin.py @@ -105,11 +105,11 @@ def test_config_mixin_4_multi_inheritance_override_config(): async def test_config_priority(): """If action's config is set, then its llm will be set, otherwise, it will use the role's llm""" home_dir = Path.home() / CONFIG_ROOT - gpt4t = Config.from_home("gpt-4-1106-preview.yaml") + gpt4t = Config.from_home("gpt-4-turbo.yaml") if not home_dir.exists(): assert gpt4t is None gpt35 = Config.default() - gpt35.llm.model = "gpt-3.5-turbo-1106" + gpt35.llm.model = "gpt-4-turbo" gpt4 = Config.default() gpt4.llm.model = "gpt-4-0613" @@ -127,8 +127,8 @@ async def test_config_priority(): env = Environment(desc="US election live broadcast") Team(investment=10.0, env=env, roles=[A, B, C]) - assert a1.llm.model == "gpt-4-1106-preview" if Path(home_dir / "gpt-4-1106-preview.yaml").exists() else "gpt-4-0613" + assert a1.llm.model == "gpt-4-turbo" if Path(home_dir / "gpt-4-turbo.yaml").exists() else "gpt-4-0613" assert a2.llm.model == "gpt-4-0613" - assert a3.llm.model == "gpt-3.5-turbo-1106" + assert a3.llm.model == "gpt-4-turbo" # history = await team.run(idea="Topic: climate change. Under 80 words per message.", send_to="a1", n_round=3) diff --git a/tests/metagpt/test_environment.py b/tests/metagpt/test_environment.py index 7559655d3..388e495b6 100644 --- a/tests/metagpt/test_environment.py +++ b/tests/metagpt/test_environment.py @@ -29,7 +29,7 @@ def test_add_role(env: Environment): name="Alice", profile="product manager", goal="create a new product", constraints="limited resources" ) env.add_role(role) - assert env.get_role(role.profile) == role + assert env.get_role(str(role._setting)) == role def test_get_roles(env: Environment): diff --git a/tests/metagpt/tools/test_search_engine.py b/tests/metagpt/tools/test_search_engine.py index 964ead02f..498d3974d 100644 --- a/tests/metagpt/tools/test_search_engine.py +++ b/tests/metagpt/tools/test_search_engine.py @@ -37,6 +37,7 @@ class MockSearchEnine: (SearchEngineType.SERPER_GOOGLE, None, 6, False), (SearchEngineType.DUCK_DUCK_GO, None, 8, True), (SearchEngineType.DUCK_DUCK_GO, None, 6, False), + (SearchEngineType.BING, None, 6, False), (SearchEngineType.CUSTOM_ENGINE, MockSearchEnine().run, 8, False), (SearchEngineType.CUSTOM_ENGINE, MockSearchEnine().run, 6, False), ], diff --git a/tests/metagpt/tools/test_tool_convert.py b/tests/metagpt/tools/test_tool_convert.py index 061a619ce..4798d32b0 100644 --- a/tests/metagpt/tools/test_tool_convert.py +++ b/tests/metagpt/tools/test_tool_convert.py @@ -2,7 +2,10 @@ from typing import Literal, Union import pandas as pd -from metagpt.tools.tool_convert import convert_code_to_tool_schema +from metagpt.tools.tool_convert import ( + convert_code_to_tool_schema, + convert_code_to_tool_schema_ast, +) class DummyClass: @@ -128,3 +131,91 @@ def test_convert_code_to_tool_schema_function(): def test_convert_code_to_tool_schema_async_function(): schema = convert_code_to_tool_schema(dummy_async_fn) assert schema.get("type") == "async_function" + + +TEST_CODE_FILE_TEXT = ''' +import pandas as pd # imported obj should not be parsed +from some_module1 import some_imported_function, SomeImportedClass # imported obj should not be parsed +from ..some_module2 import some_imported_function2 # relative import should not result in an error + +class MyClass: + """This is a MyClass docstring.""" + def __init__(self, arg1): + """This is the constructor docstring.""" + self.arg1 = arg1 + + def my_method(self, arg2: Union[list[str], str], arg3: pd.DataFrame, arg4: int = 1, arg5: Literal["a","b","c"] = "a") -> Tuple[int, str]: + """ + This is a method docstring. + + Args: + arg2 (Union[list[str], str]): A union of a list of strings and a string. + ... + + Returns: + Tuple[int, str]: A tuple of an integer and a string. + """ + return self.arg4 + arg5 + + async def my_async_method(self, some_arg) -> str: + return "hi" + + def _private_method(self): # private should not be parsed + return "private" + +def my_function(arg1, arg2) -> dict: + """This is a function docstring.""" + return arg1 + arg2 + +def my_async_function(arg1, arg2) -> dict: + return arg1 + arg2 + +def _private_function(): # private should not be parsed + return "private" +''' + + +def test_convert_code_to_tool_schema_ast(): + expected = { + "MyClass": { + "type": "class", + "description": "This is a MyClass docstring.", + "methods": { + "__init__": { + "type": "function", + "description": "This is the constructor docstring.", + "signature": "(self, arg1)", + "parameters": "", + }, + "my_method": { + "type": "function", + "description": "This is a method docstring. ", + "signature": "(self, arg2: Union[list[str], str], arg3: pd.DataFrame, arg4: int = 1, arg5: Literal['a', 'b', 'c'] = 'a') -> Tuple[int, str]", + "parameters": "Args: arg2 (Union[list[str], str]): A union of a list of strings and a string. ... Returns: Tuple[int, str]: A tuple of an integer and a string.", + }, + "my_async_method": { + "type": "async_function", + "description": "", + "signature": "(self, some_arg) -> str", + "parameters": "", + }, + }, + "code": 'class MyClass:\n """This is a MyClass docstring."""\n def __init__(self, arg1):\n """This is the constructor docstring."""\n self.arg1 = arg1\n\n def my_method(self, arg2: Union[list[str], str], arg3: pd.DataFrame, arg4: int = 1, arg5: Literal["a","b","c"] = "a") -> Tuple[int, str]:\n """\n This is a method docstring.\n \n Args:\n arg2 (Union[list[str], str]): A union of a list of strings and a string.\n ...\n \n Returns:\n Tuple[int, str]: A tuple of an integer and a string.\n """\n return self.arg4 + arg5\n \n async def my_async_method(self, some_arg) -> str:\n return "hi"\n \n def _private_method(self): # private should not be parsed\n return "private"', + }, + "my_function": { + "type": "function", + "description": "This is a function docstring.", + "signature": "(arg1, arg2) -> dict", + "parameters": "", + "code": 'def my_function(arg1, arg2) -> dict:\n """This is a function docstring."""\n return arg1 + arg2', + }, + "my_async_function": { + "type": "function", + "description": "", + "signature": "(arg1, arg2) -> dict", + "parameters": "", + "code": "def my_async_function(arg1, arg2) -> dict:\n return arg1 + arg2", + }, + } + schemas = convert_code_to_tool_schema_ast(TEST_CODE_FILE_TEXT) + assert schemas == expected diff --git a/tests/metagpt/tools/test_ut_writer.py b/tests/metagpt/tools/test_ut_writer.py index 3cc7e86bb..557067191 100644 --- a/tests/metagpt/tools/test_ut_writer.py +++ b/tests/metagpt/tools/test_ut_writer.py @@ -56,7 +56,7 @@ class TestUTWriter: ) ], created=1706710532, - model="gpt-3.5-turbo-1106", + model="gpt-4-turbo", object="chat.completion", system_fingerprint="fp_04f9a1eebf", usage=CompletionUsage(completion_tokens=35, prompt_tokens=1982, total_tokens=2017), diff --git a/tests/metagpt/utils/test_cost_manager.py b/tests/metagpt/utils/test_cost_manager.py index 559ae3bcf..9508c778f 100644 --- a/tests/metagpt/utils/test_cost_manager.py +++ b/tests/metagpt/utils/test_cost_manager.py @@ -12,11 +12,11 @@ from metagpt.utils.cost_manager import CostManager def test_cost_manager(): cm = CostManager(total_budget=20) - cm.update_cost(prompt_tokens=1000, completion_tokens=100, model="gpt-4-1106-preview") + cm.update_cost(prompt_tokens=1000, completion_tokens=100, model="gpt-4-turbo") assert cm.get_total_prompt_tokens() == 1000 assert cm.get_total_completion_tokens() == 100 assert cm.get_total_cost() == 0.013 - cm.update_cost(prompt_tokens=100, completion_tokens=10, model="gpt-4-1106-preview") + cm.update_cost(prompt_tokens=100, completion_tokens=10, model="gpt-4-turbo") assert cm.get_total_prompt_tokens() == 1100 assert cm.get_total_completion_tokens() == 110 assert cm.get_total_cost() == 0.0143 diff --git a/tests/metagpt/utils/test_mermaid.py b/tests/metagpt/utils/test_mermaid.py index 7367463dc..085c5cf02 100644 --- a/tests/metagpt/utils/test_mermaid.py +++ b/tests/metagpt/utils/test_mermaid.py @@ -13,7 +13,7 @@ from metagpt.utils.mermaid import MMC1, mermaid_to_file @pytest.mark.asyncio -@pytest.mark.parametrize("engine", ["nodejs", "ink"]) # TODO: playwright and pyppeteer +@pytest.mark.parametrize("engine", ["nodejs", "ink", "playwright", "pyppeteer"]) async def test_mermaid(engine, context, mermaid_mocker): # nodejs prerequisites: npm install -g @mermaid-js/mermaid-cli # ink prerequisites: connected to internet diff --git a/tests/metagpt/utils/test_text.py b/tests/metagpt/utils/test_text.py index 319a4ebe0..73c403eb8 100644 --- a/tests/metagpt/utils/test_text.py +++ b/tests/metagpt/utils/test_text.py @@ -20,7 +20,7 @@ def _paragraphs(n): @pytest.mark.parametrize( - "msgs, model_name, system_text, reserved, expected", + "msgs, model, system_text, reserved, expected", [ (_msgs(), "gpt-3.5-turbo-0613", "System", 1500, 1), (_msgs(), "gpt-3.5-turbo-16k", "System", 3000, 6), @@ -37,7 +37,7 @@ def test_reduce_message_length(msgs, model_name, system_text, reserved, expected @pytest.mark.parametrize( - "text, prompt_template, model_name, system_text, reserved, expected", + "text, prompt_template, model, system_text, reserved, expected", [ (" ".join("Hello World." for _ in range(1000)), "Prompt: {}", "gpt-3.5-turbo-0613", "System", 1500, 2), (" ".join("Hello World." for _ in range(1000)), "Prompt: {}", "gpt-3.5-turbo-16k", "System", 3000, 1), diff --git a/tests/metagpt/utils/test_token_counter.py b/tests/metagpt/utils/test_token_counter.py index acb99d717..5c8d5e15f 100644 --- a/tests/metagpt/utils/test_token_counter.py +++ b/tests/metagpt/utils/test_token_counter.py @@ -7,7 +7,7 @@ """ import pytest -from metagpt.utils.token_counter import count_message_tokens, count_string_tokens +from metagpt.utils.token_counter import count_input_tokens, count_output_tokens def test_count_message_tokens(): @@ -15,7 +15,7 @@ def test_count_message_tokens(): {"role": "user", "content": "Hello"}, {"role": "assistant", "content": "Hi there!"}, ] - assert count_message_tokens(messages) == 15 + assert count_input_tokens(messages) == 15 def test_count_message_tokens_with_name(): @@ -23,12 +23,12 @@ def test_count_message_tokens_with_name(): {"role": "user", "content": "Hello", "name": "John"}, {"role": "assistant", "content": "Hi there!"}, ] - assert count_message_tokens(messages) == 17 + assert count_input_tokens(messages) == 17 def test_count_message_tokens_empty_input(): """Empty input should return 3 tokens""" - assert count_message_tokens([]) == 3 + assert count_input_tokens([]) == 3 def test_count_message_tokens_invalid_model(): @@ -38,7 +38,7 @@ def test_count_message_tokens_invalid_model(): {"role": "assistant", "content": "Hi there!"}, ] with pytest.raises(NotImplementedError): - count_message_tokens(messages, model="invalid_model") + count_input_tokens(messages, model="invalid_model") def test_count_message_tokens_gpt_4(): @@ -46,27 +46,27 @@ def test_count_message_tokens_gpt_4(): {"role": "user", "content": "Hello"}, {"role": "assistant", "content": "Hi there!"}, ] - assert count_message_tokens(messages, model="gpt-4-0314") == 15 + assert count_input_tokens(messages, model="gpt-4-0314") == 15 def test_count_string_tokens(): """Test that the string tokens are counted correctly.""" string = "Hello, world!" - assert count_string_tokens(string, model_name="gpt-3.5-turbo-0301") == 4 + assert count_output_tokens(string, model="gpt-3.5-turbo-0301") == 4 def test_count_string_tokens_empty_input(): """Test that the string tokens are counted correctly.""" - assert count_string_tokens("", model_name="gpt-3.5-turbo-0301") == 0 + assert count_output_tokens("", model="gpt-3.5-turbo-0301") == 0 def test_count_string_tokens_gpt_4(): """Test that the string tokens are counted correctly.""" string = "Hello, world!" - assert count_string_tokens(string, model_name="gpt-4-0314") == 4 + assert count_output_tokens(string, model="gpt-4-0314") == 4 if __name__ == "__main__": diff --git a/tests/mock/mock_llm.py b/tests/mock/mock_llm.py index c4262e080..a6b0a43ef 100644 --- a/tests/mock/mock_llm.py +++ b/tests/mock/mock_llm.py @@ -114,7 +114,6 @@ class MockLLM(OriginalLLM): raise ValueError( "In current test setting, api call is not allowed, you should properly mock your tests, " "or add expected api response in tests/data/rsp_cache.json. " - f"The prompt you want for api call: {msg_key}" ) # Call the original unmocked method rsp = await ask_func(*args, **kwargs)