Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MetaGPT response: ValueError: Detected source code "docs/prd/20250119145241.json" from an unknown origin. #1672

Open
IshpreetSingh8264 opened this issue Jan 19, 2025 · 2 comments

Comments

@IshpreetSingh8264
Copy link

ValueError: Detected source code "docs/prd/20250119145241.json" from an unknown origin.

Environment information
Using Windows 11, installed using docker.

  • LLM type and model name: ollama llama3
  • System version: Windows 11
  • Python version:3.12.4
  • MetaGPT version or branch:latest

CONFIGURATION FILE:
(config2.yml)
llm:
api_type: "ollama" # Change this to 'ollama'
model: "llama3" # Use the name of the model you pulled
base_url: "http://192.168.1.102:11434/api" # Default URL for the Ollama API
api_key: "dummy_api_key_123456" # Leave this empty for Ollama, no API key needed
repair_llm_output: true

mermaid:
engine: "nodejs"
path: "mmdc"
puppeteer_config: "/app/metagpt/config/puppeteer-config.json"
pyppeteer_path: "/usr/bin/chromium"

My input in powershell:
docker run --rm -v D:\metagpt\config\config2.yaml:/app/metagpt/config/config2.yaml -v D:\metagpt\workspace:/app/metagpt/workspace metagpt/metagpt:latest metagpt "Write a cli snake game"

Output in powershell:-
PS D:\metagpt> docker run --rm -v D:\metagpt\config\config2.yaml:/app/metagpt/config/config2.yaml -v D:\metagpt\workspace:/app/metagpt/workspace metagpt/metagpt:latest metagpt "Write a cli snake game"
2025-01-19 14:58:54.539 | INFO | metagpt.const:get_metagpt_package_root:21 - Package root set to /app/metagpt
2025-01-19 14:58:56.983 | INFO | metagpt.team:invest:93 - Investment: $3.0.
2025-01-19 14:58:56.984 | INFO | metagpt.roles.role:_act:403 - Alice(Product Manager): to do PrepareDocuments(PrepareDocuments)
2025-01-19 14:58:57.739 | INFO | metagpt.utils.file_repository:save:57 - save to: /app/metagpt/workspace/20250119145856/docs/requirement.txt
2025-01-19 14:58:57.740 | INFO | metagpt.roles.role:_act:403 - Alice(Product Manager): to do WritePRD(WritePRD)
2025-01-19 14:58:57.745 | INFO | metagpt.actions.write_prd:run:86 - New requirement detected: Write a cli snake game
2025-01-19 15:00:06.783 | WARNING | metagpt.utils.cost_manager:update_cost:49 - Model llama3 not found in TOKEN_COSTS.
2025-01-19 15:00:06.802 | INFO | metagpt.utils.git_repository:rename_root:203 - Delete directory /app/metagpt/workspace/game_snake_cli
2025-01-19 15:00:07.111 | WARNING | metagpt.utils.git_repository:rename_root:217 - Failed to move /app/metagpt/workspace/20250119145856 to /app/metagpt/workspace/game_snake_cli
2025-01-19 15:00:07.156 | INFO | metagpt.utils.file_repository:save:57 - save to: /app/metagpt/workspace/20250119145856/docs/prd/20250119150007.json
2025-01-19 15:00:07.196 | INFO | metagpt.utils.file_repository:save:57 - save to: /app/metagpt/workspace/20250119145856/resources/prd/20250119150007.md
2025-01-19 15:00:07.199 | INFO | metagpt.roles.role:_act:403 - Bob(Architect): to do WriteDesign(WriteDesign)
2025-01-19 15:00:07.727 | INFO | metagpt.actions.design_api:run:67 - Nothing has changed.
2025-01-19 15:00:07.729 | INFO | metagpt.roles.role:_act:403 - Eve(Project Manager): to do WriteTasks(WriteTasks)
2025-01-19 15:00:08.068 | INFO | metagpt.actions.project_management:run:54 - Nothing has changed.
2025-01-19 15:00:09.325 | ERROR | metagpt.roles.engineer:_new_coding_context:280 - Detected source code "docs/prd/20250119150007.json" from an unknown origin.
2025-01-19 15:00:09.326 | WARNING | metagpt.utils.common:wrapper:673 - There is a exception in role's execution, in order to resume, we delete the newest role communication message in the role's memory.
2025-01-19 15:00:09.327 | ERROR | metagpt.utils.common:wrapper:655 - Exception occurs, start to serialize the project, exp:
Traceback (most recent call last):
File "/app/metagpt/metagpt/utils/common.py", line 664, in wrapper
return await func(self, *args, **kwargs)
File "/app/metagpt/metagpt/roles/role.py", line 551, in run
rsp = await self.react()
ValueError: Detected source code "docs/prd/20250119150007.json" from an unknown origin.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/app/metagpt/metagpt/utils/common.py", line 650, in wrapper
result = await func(self, *args, **kwargs)
File "/app/metagpt/metagpt/team.py", line 134, in run
await self.env.run()
Exception: Traceback (most recent call last):
File "/app/metagpt/metagpt/utils/common.py", line 664, in wrapper
return await func(self, *args, **kwargs)
File "/app/metagpt/metagpt/roles/role.py", line 551, in run
rsp = await self.react()
File "/app/metagpt/metagpt/roles/role.py", line 520, in react
rsp = await self._react()
File "/app/metagpt/metagpt/roles/role.py", line 470, in _react
todo = await self._think()
File "/app/metagpt/metagpt/roles/engineer.py", line 256, in _think
await self._new_code_actions()
File "/app/metagpt/metagpt/roles/engineer.py", line 347, in _new_code_actions
coding_doc = await self._new_coding_doc(filename=filename, dependency=dependency)
File "/app/metagpt/metagpt/roles/engineer.py", line 292, in _new_coding_doc
context = await self._new_coding_context(filename, dependency)
File "/app/metagpt/metagpt/roles/engineer.py", line 281, in _new_coding_context
raise ValueError(f'Detected source code "{filename}" from an unknown origin.')
ValueError: Detected source code "docs/prd/20250119150007.json" from an unknown origin.

[CONTENT]
{
"Language": "en_us",
"Programming Language": "Python",
"Original Requirements": "Create a CLI snake game",
"Project Name": "game_snake_cli",
"Product Goals": [
"Create an engaging user experience",
"Improve accessibility, be responsive",
"More beautiful UI"
],
"User Stories": [
"As a player, I want to be able to choose difficulty levels",
"As a player, I want to see my score after each game",
"As a player, I want to get restart button when I lose",
"As a player, I want to see beautiful UI that make me feel good",
"As a player, I want to play game via command line interface"
],
"Competitive Analysis": [
"Snake Game A: Simple interface, lacks responsive features",
"play2048.co: Beautiful and responsive UI with my best score shown",
"snakegame.com: Responsive UI with my best score shown, but many ads"
],
"Competitive Quadrant Chart": "",
"Requirement Analysis": "",
"Requirement Pool": [
[
"P0",
"The main code for snake game logic..."
]
],
"UI Design draft": "Basic function description with a simple style and layout.",
"Anything UNCLEAR": ""
}
[/CONTENT]

@iorisa
Copy link
Collaborator

iorisa commented Jan 20, 2025

According to the logs you provided, the LLaMA3 model you used did not successfully complete the design work for the PRD, which subsequently triggered the following issues. I suggest you try other llm.

My log from the design phase of the GPT-4O-Mini model is as follows:

2025-01-20 02:40:53.434 | INFO     | metagpt.roles.role:_act:403 - Bob(Architect): to do WriteDesign(WriteDesign)
2025-01-20 02:40:58.636 | INFO     | metagpt.utils.cost_manager:update_cost:57 - Total running cost: $0.001 | Max budget: $3.000 | Current cost: $0.001, prompt_tokens: 1255, completion_tokens: 538
2025-01-20 02:40:58.678 | INFO     | metagpt.utils.file_repository:save:57 - save to: /app/metagpt/workspace/snake_game/docs/system_design/20250120024047.json

And the log you provided is:

2025-01-19 15:00:07.199 | INFO | metagpt.roles.role:_act:403 - Bob(Architect): to do WriteDesign(WriteDesign)
2025-01-19 15:00:07.727 | INFO | metagpt.actions.design_api:run:67 - Nothing has changed.

This is mine intact log:

docker run --rm \
    --privileged \
    -v /Users/ix/github/bak/MetaGPT/config/config2.yaml:/app/metagpt/config/config2.yaml \
    -v /Users/ix/github/bak/MetaGPT/workspace:/app/metagpt/workspace \
    metagpt/metagpt:latest \
    metagpt "Write a cli snake game"
2025-01-20 02:40:26.365 | INFO     | metagpt.const:get_metagpt_package_root:21 - Package root set to /app/metagpt
2025-01-20 02:40:33.330 | INFO     | metagpt.team:invest:93 - Investment: $3.0.
2025-01-20 02:40:33.333 | INFO     | metagpt.roles.role:_act:403 - Alice(Product Manager): to do PrepareDocuments(PrepareDocuments)
2025-01-20 02:40:33.493 | INFO     | metagpt.utils.file_repository:save:57 - save to: /app/metagpt/workspace/20250120024033/docs/requirement.txt
2025-01-20 02:40:33.495 | INFO     | metagpt.roles.role:_act:403 - Alice(Product Manager): to do WritePRD(WritePRD)
2025-01-20 02:40:33.497 | INFO     | metagpt.actions.write_prd:run:86 - New requirement detected: Write a cli snake game
2025-01-20 02:40:46.979 | INFO     | metagpt.utils.cost_manager:update_cost:57 - Total running cost: $0.001 | Max budget: $3.000 | Current cost: $0.001, prompt_tokens: 943, completion_tokens: 630
2025-01-20 02:40:46.989 | INFO     | metagpt.utils.git_repository:rename_root:203 - Delete directory /app/metagpt/workspace/snake_game
2025-01-20 02:40:47.057 | INFO     | metagpt.utils.git_repository:rename_root:219 - Rename directory /app/metagpt/workspace/20250120024033 to /app/metagpt/workspace/snake_game
2025-01-20 02:40:47.065 | INFO     | metagpt.utils.file_repository:save:57 - save to: /app/metagpt/workspace/snake_game/docs/prd/20250120024047.json
2025-01-20 02:40:47.070 | INFO     | metagpt.utils.mermaid:mermaid_to_file:44 - Generating /app/metagpt/workspace/snake_game/resources/competitive_analysis/20250120024047.pdf..
2025-01-20 02:40:49.986 | INFO     | metagpt.utils.mermaid:mermaid_to_file:68 - Generating single mermaid chart

2025-01-20 02:40:49.998 | INFO     | metagpt.utils.mermaid:mermaid_to_file:44 - Generating /app/metagpt/workspace/snake_game/resources/competitive_analysis/20250120024047.svg..
2025-01-20 02:40:51.695 | INFO     | metagpt.utils.mermaid:mermaid_to_file:68 - Generating single mermaid chart

2025-01-20 02:40:51.696 | INFO     | metagpt.utils.mermaid:mermaid_to_file:44 - Generating /app/metagpt/workspace/snake_game/resources/competitive_analysis/20250120024047.png..
2025-01-20 02:40:53.333 | INFO     | metagpt.utils.mermaid:mermaid_to_file:68 - Generating single mermaid chart

2025-01-20 02:40:53.361 | INFO     | metagpt.utils.file_repository:save:57 - save to: /app/metagpt/workspace/snake_game/resources/prd/20250120024047.md
2025-01-20 02:40:53.434 | INFO     | metagpt.roles.role:_act:403 - Bob(Architect): to do WriteDesign(WriteDesign)
2025-01-20 02:40:58.636 | INFO     | metagpt.utils.cost_manager:update_cost:57 - Total running cost: $0.001 | Max budget: $3.000 | Current cost: $0.001, prompt_tokens: 1255, completion_tokens: 538
2025-01-20 02:40:58.678 | INFO     | metagpt.utils.file_repository:save:57 - save to: /app/metagpt/workspace/snake_game/docs/system_design/20250120024047.json
2025-01-20 02:40:58.680 | INFO     | metagpt.utils.file_repository:save:62 - update dependency: /app/metagpt/workspace/snake_game/docs/system_design/20250120024047.json:{'docs/prd/20250120024047.json'}
2025-01-20 02:40:58.684 | INFO     | metagpt.utils.mermaid:mermaid_to_file:44 - Generating /app/metagpt/workspace/snake_game/resources/data_api_design/20250120024047.pdf..
2025-01-20 02:41:00.378 | INFO     | metagpt.utils.mermaid:mermaid_to_file:68 - Generating single mermaid chart

2025-01-20 02:41:00.379 | INFO     | metagpt.utils.mermaid:mermaid_to_file:44 - Generating /app/metagpt/workspace/snake_game/resources/data_api_design/20250120024047.svg..
2025-01-20 02:41:02.052 | INFO     | metagpt.utils.mermaid:mermaid_to_file:68 - Generating single mermaid chart

2025-01-20 02:41:02.053 | INFO     | metagpt.utils.mermaid:mermaid_to_file:44 - Generating /app/metagpt/workspace/snake_game/resources/data_api_design/20250120024047.png..
2025-01-20 02:41:03.935 | INFO     | metagpt.utils.mermaid:mermaid_to_file:68 - Generating single mermaid chart

2025-01-20 02:41:03.936 | INFO     | metagpt.actions.design_api:_save_data_api_design:107 - Save class view to /app/metagpt/workspace/snake_game/resources/data_api_design/20250120024047
2025-01-20 02:41:03.941 | INFO     | metagpt.utils.mermaid:mermaid_to_file:44 - Generating /app/metagpt/workspace/snake_game/resources/seq_flow/20250120024047.pdf..
2025-01-20 02:41:05.894 | INFO     | metagpt.utils.mermaid:mermaid_to_file:68 - Generating single mermaid chart

2025-01-20 02:41:05.895 | INFO     | metagpt.utils.mermaid:mermaid_to_file:44 - Generating /app/metagpt/workspace/snake_game/resources/seq_flow/20250120024047.svg..
2025-01-20 02:41:07.607 | INFO     | metagpt.utils.mermaid:mermaid_to_file:68 - Generating single mermaid chart

2025-01-20 02:41:07.608 | INFO     | metagpt.utils.mermaid:mermaid_to_file:44 - Generating /app/metagpt/workspace/snake_game/resources/seq_flow/20250120024047.png..
2025-01-20 02:41:09.378 | INFO     | metagpt.utils.mermaid:mermaid_to_file:68 - Generating single mermaid chart

2025-01-20 02:41:09.380 | INFO     | metagpt.actions.design_api:_save_seq_flow:116 - Saving sequence flow to /app/metagpt/workspace/snake_game/resources/seq_flow/20250120024047
2025-01-20 02:41:09.383 | INFO     | metagpt.utils.file_repository:save:57 - save to: /app/metagpt/workspace/snake_game/resources/system_design/20250120024047.md
2025-01-20 02:41:09.389 | INFO     | metagpt.roles.role:_act:403 - Eve(Project Manager): to do WriteTasks(WriteTasks)
2025-01-20 02:41:14.380 | INFO     | metagpt.utils.cost_manager:update_cost:57 - Total running cost: $0.001 | Max budget: $3.000 | Current cost: $0.000, prompt_tokens: 1024, completion_tokens: 293
2025-01-20 02:41:14.391 | INFO     | metagpt.utils.file_repository:save:57 - save to: /app/metagpt/workspace/snake_game/docs/task/20250120024047.json
2025-01-20 02:41:14.399 | INFO     | metagpt.utils.file_repository:save:62 - update dependency: /app/metagpt/workspace/snake_game/docs/task/20250120024047.json:{'docs/system_design/20250120024047.json'}
2025-01-20 02:41:14.401 | INFO     | metagpt.utils.file_repository:save:57 - save to: /app/metagpt/workspace/snake_game/requirements.txt
2025-01-20 02:41:14.653 | INFO     | metagpt.actions.write_code:run:141 - Writing main.py..
2025-01-20 02:41:16.344 | INFO     | metagpt.utils.cost_manager:update_cost:57 - Total running cost: $0.002 | Max budget: $3.000 | Current cost: $0.000, prompt_tokens: 1133, completion_tokens: 172
2025-01-20 02:41:16.351 | INFO     | metagpt.actions.write_code_review:run:185 - Code review and rewrite main.py: 1/2 | len(iterative_code)=650, len(self.i_context.code_doc.content)=650
2025-01-20 02:41:18.127 | INFO     | metagpt.utils.cost_manager:update_cost:57 - Total running cost: $0.002 | Max budget: $3.000 | Current cost: $0.000, prompt_tokens: 1649, completion_tokens: 194
2025-01-20 02:41:18.134 | INFO     | metagpt.utils.file_repository:save:57 - save to: /app/metagpt/workspace/snake_game/snake_game/main.py
2025-01-20 02:41:18.137 | INFO     | metagpt.utils.file_repository:save:62 - update dependency: /app/metagpt/workspace/snake_game/snake_game/main.py:['docs/task/20250120024047.json', 'docs/system_design/20250120024047.json']
2025-01-20 02:41:18.142 | INFO     | metagpt.actions.write_code:run:141 - Writing game.py..
[CONTENT]
{
    "Language": "en_us",
    "Programming Language": "Python",
    "Original Requirements": "Write a cli snake game",
    "Project Name": "snake_game",
    "Product Goals": [
        "Create an engaging user experience",
        "Ensure smooth gameplay mechanics",
        "Implement scoring and level progression"
    ],
    "User Stories": [
        "As a player, I want to control the snake using keyboard arrows",
        "As a player, I want to see my score displayed on the screen",
        "As a player, I want to have the option to restart the game after losing",
        "As a player, I want to play the game at different speeds",
        "As a player, I want to have sound effects during the game"
    ],
    "Competitive Analysis": [
        "Snake Game A: Classic implementation, lacks modern features",
        "Snake.io: Multiplayer feature, but complex controls",
        "Slither.io: Engaging graphics, but more of a battle royale style",
        "Classic Snake: Simple and nostalgic, but no score tracking",
        "Snake Rewind: Offers unique gameplay but not CLI-based"
    ],
    "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    \"Classic Snake\": [0.4, 0.5]\n    \"Snake Game A\": [0.3, 0.7]\n    \"Snake.io\": [0.6, 0.8]\n    \"Slither.io\": [0.8, 0.6]\n    \"Snake Rewind\": [0.5, 0.4]",
    "Requirement Analysis": "The requirements focus on creating a CLI-based snake game that is engaging and offers a smooth user experience. The game should implement basic game mechanics such as movement, scoring, and game-over conditions while ensuring that the controls are intuitive.",
    "Requirement Pool": [
        [
            "P0",
            "Implement snake movement and controls"
        ],
        [
            "P0",
            "Display score and game status"
        ],
        [
            "P1",
            "Implement game-over condition"
        ],
        [
            "P1",
            "Allow game restart functionality"
        ],
        [
            "P2",
            "Add sound effects for actions"
        ]
    ],
    "UI Design draft": "The UI will be text-based, displaying the game area using characters. The score will be shown at the top. The layout will be simple, focusing on gameplay rather than aesthetics.",
    "Anything UNCLEAR": "Are there any specific features or enhancements you would like to see in the game beyond the basic requirements?"
}
[/CONTENT]
[CONTENT]
{
    "Implementation approach": "We will use the Pygame library for handling graphics and sound effects, as it provides a simple interface for creating games in Python. The main challenges include implementing smooth snake movement, collision detection, and managing game states (running, game over, and restart). Pygame will help us achieve these goals efficiently.",
    "File list": [
        "main.py",
        "game.py",
        "snake.py",
        "score.py",
        "sounds.py"
    ],
    "Data structures and interfaces": "\nclassDiagram\n    class Main {\n        -Game game\n        +main() -> None\n    }\n    class Game {\n        -Snake snake\n        -Score score\n        -Level level\n        -Sound sound\n        +start() -> None\n        +restart() -> None\n        +game_over() -> None\n    }\n    class Snake {\n        -position: list[int]\n        -direction: str\n        +move() -> None\n        +change_direction(new_direction: str) -> None\n        +check_collision() -> bool\n    }\n    class Score {\n        -current_score: int\n        +increment() -> None\n        +reset() -> None\n        +display() -> int\n    }\n    class Level {\n        -speed: float\n        +increase() -> None\n        +get_speed() -> float\n    }\n    class Sound {\n        +play_effect(effect_name: str) -> None\n    }\n    Main --> Game\n    Game --> Snake\n    Game --> Score\n    Game --> Level\n    Game --> Sound\n",
    "Program call flow": "\nsequenceDiagram\n    participant M as Main\n    participant G as Game\n    participant S as Snake\n    participant SC as Score\n    participant L as Level\n    participant SO as Sound\n    M->>G: start()\n    G->>S: move()\n    S->>S: check_collision()\n    alt collision\n        G->>G: game_over()\n    else no collision\n        G->>SC: increment()\n        G->>L: increase()\n        G->>SO: play_effect('move')\n    end\n    G->>G: restart()\n    G->>S: change_direction()\n    G->>SC: display()\n",
    "Anything UNCLEAR": "Are there any specific sound effects you would like to include during the game, or should we select generic ones?"
}
[/CONTENT]
[CONTENT]
{
    "Required packages": [
        "pygame==2.1.2"
    ],
    "Required Other language third-party packages": [
        "No third-party dependencies required"
    ],
    "Logic Analysis": [
        [
            "game.py",
            "Contains Game class and methods for starting, restarting, and handling game over states."
        ],
        [
            "main.py",
            "Contains main function to initialize and start the game."
        ],
        [
            "snake.py",
            "Contains Snake class for managing the snake's position, movement, and collision detection."
        ],
        [
            "score.py",
            "Contains Score class for managing the current score and displaying it."
        ],
        [
            "level.py",
            "Contains Level class for managing the game speed and level progression."
        ],
        [
            "sounds.py",
            "Contains Sound class for playing sound effects during the game."
        ]
    ],
    "Task list": [
        "main.py",
        "game.py",
        "snake.py",
        "score.py",
        "level.py",
        "sounds.py"
    ],
    "Full API spec": "",
    "Shared Knowledge": "`game.py` contains functions shared across the project like starting and restarting the game.",
    "Anything UNCLEAR": "Are there any specific sound effects you would like to include during the game, or should we select generic ones?"
}
[/CONTENT]
## Code: main.py
\`\`\`python
## main.py
import pygame
from game import Game

def main() -> None:
    """Initialize Pygame and start the game."""
    # Initialize Pygame
    pygame.init()
    
    # Set the dimensions of the window
    window_width: int = 800
    window_height: int = 600
    screen: pygame.Surface = pygame.display.set_mode((window_width, window_height))
    
    # Set the title of the window
    pygame.display.set_caption("Snake Game")
    
    # Create an instance of the Game class
    game: Game = Game(screen)
    
    # Start the game
    game.start()
    
    # Quit Pygame when the game is over
    pygame.quit()

if __name__ == "__main__":
    main()
\`\`\`
## Code Review: main.py
1. Yes, the code is implemented as per the requirements. It initializes Pygame, sets up the game window, and starts the game correctly.
2. Yes, the code logic is completely correct. It follows a straightforward flow for initializing and starting the game.
3. Yes, the existing code follows the "Data structures and interfaces" as outlined in the design, particularly with the use of the `Game` class.
4. Yes, all functions are implemented as expected. The `main` function initializes the game and calls the `start` method of the `Game` class.
5. Yes, all necessary pre-dependencies have been imported, specifically the `pygame` library and the `Game` class from `game.py`.
6. Yes, methods from other files are being reused correctly, particularly the instantiation and use of the `Game` class.

## Actions
pass

## Code Review Result
LGTM
## Code: game.py
\`\`\`python
## game.py
import pygame
from snake import Snake
from score import Score
from level import Level
from sounds import Sound

class Game:
    """Class to manage the game state and flow."""

    def __init__(self, screen: pygame.Surface) -> None:
        """Initialize the Game class with the provided screen."""
       2025-01-20 02:41:24.600 | INFO     | metagpt.utils.cost_manager:update_cost:57 - Total running cost: $0.003 | Max budget: $3.000 | Current cost: $0.001, prompt_tokens: 1302, completion_tokens: 566
2025-01-20 02:41:24.605 | INFO     | metagpt.actions.write_code_review:run:185 - Code review and rewrite game.py: 1/2 | len(iterative_code)=2612, len(self.i_context.code_doc.content)=2612
2025-01-20 02:41:27.281 | INFO     | metagpt.utils.cost_manager:update_cost:57 - Total running cost: $0.003 | Max budget: $3.000 | Current cost: $0.000, prompt_tokens: 2211, completion_tokens: 240
2025-01-20 02:41:27.292 | INFO     | metagpt.utils.file_repository:save:57 - save to: /app/metagpt/workspace/snake_game/snake_game/game.py
2025-01-20 02:41:27.295 | INFO     | metagpt.utils.file_repository:save:62 - update dependency: /app/metagpt/workspace/snake_game/snake_game/game.py:['docs/task/20250120024047.json', 'docs/system_design/20250120024047.json']
2025-01-20 02:41:27.299 | INFO     | metagpt.actions.write_code:run:141 - Writing snake.py..
2025-01-20 02:41:31.522 | INFO     | metagpt.utils.cost_manager:update_cost:57 - Total running cost: $0.004 | Max budget: $3.000 | Current cost: $0.001, prompt_tokens: 1864, completion_tokens: 510
2025-01-20 02:41:31.529 | INFO     | metagpt.actions.write_code_review:run:185 - Code review and rewrite snake.py: 1/2 | len(iterative_code)=2109, len(self.i_context.code_doc.content)=2109
2025-01-20 02:41:32.498 | INFO     | metagpt.utils.cost_manager:update_cost:57 - Total running cost: $0.004 | Max budget: $3.000 | Current cost: $0.000, prompt_tokens: 2717, completion_tokens: 43
2025-01-20 02:41:32.508 | INFO     | metagpt.utils.file_repository:save:57 - save to: /app/metagpt/workspace/snake_game/snake_game/snake.py
2025-01-20 02:41:32.511 | INFO     | metagpt.utils.file_repository:save:62 - update dependency: /app/metagpt/workspace/snake_game/snake_game/snake.py:['docs/task/20250120024047.json', 'docs/system_design/20250120024047.json']
2025-01-20 02:41:32.518 | INFO     | metagpt.actions.write_code:run:141 - Writing score.py..
2025-01-20 02:41:34.727 | INFO     | metagpt.utils.cost_manager:update_cost:57 - Total running cost: $0.005 | Max budget: $3.000 | Current cost: $0.000, prompt_tokens: 2370, completion_tokens: 218
2025-01-20 02:41:34.734 | INFO     | metagpt.actions.write_code_review:run:185 - Code review and rewrite score.py: 1/2 | len(iterative_code)=871, len(self.i_context.code_doc.content)=871
2025-01-20 02:41:35.653 | INFO     | metagpt.utils.cost_manager:update_cost:57 - Total running cost: $0.005 | Max budget: $3.000 | Current cost: $0.000, prompt_tokens: 2932, completion_tokens: 43
2025-01-20 02:41:35.663 | INFO     | metagpt.utils.file_repository:save:57 - save to: /app/metagpt/workspace/snake_game/snake_game/score.py
2025-01-20 02:41:35.666 | INFO     | metagpt.utils.file_repository:save:62 - update dependency: /app/metagpt/workspace/snake_game/snake_game/score.py:['docs/task/20250120024047.json', 'docs/system_design/20250120024047.json']
2025-01-20 02:41:35.673 | INFO     | metagpt.actions.write_code:run:141 - Writing level.py..
2025-01-20 02:41:37.742 | INFO     | metagpt.utils.cost_manager:update_cost:57 - Total running cost: $0.005 | Max budget: $3.000 | Current cost: $0.001, prompt_tokens: 2585, completion_tokens: 205
2025-01-20 02:41:37.750 | INFO     | metagpt.actions.write_code_review:run:185 - Code review and rewrite level.py: 1/2 | len(iterative_code)=833, len(self.i_context.code_doc.content)=833
 self.screen: pygame.Surface = screen
        self.snake: Snake = Snake()
        self.score: Score = Score()
        self.level: Level = Level()
        self.sound: Sound = Sound()
        self.is_running: bool = True

    def start(self) -> None:
        """Start the game loop."""
        while self.is_running:
            self.handle_events()
            self.update_game_state()
            self.render()
            pygame.display.flip()

    def restart(self) -> None:
        """Restart the game."""
        self.snake = Snake()
        self.score.reset()
        self.level.reset()
        self.is_running = True
        self.start()

    def game_over(self) -> None:
        """Handle game over state."""
        self.is_running = False
        self.sound.play_effect('game_over')
        self.display_game_over_message()

    def handle_events(self) -> None:
        """Handle user input events."""
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                self.is_running = False
            elif event.type == pygame.KEYDOWN:
                self.snake.change_direction(event.key)

    def update_game_state(self) -> None:
        """Update the game state including snake movement and collision detection."""
        self.snake.move()
        if self.snake.check_collision():
            self.game_over()
        else:
            self.score.increment()
            self.level.increase()
            self.sound.play_effect('move')

    def render(self) -> None:
        """Render the game components on the screen."""
        self.screen.fill((0, 0, 0))  # Clear the screen with black
        self.snake.draw(self.screen)  # Draw the snake
        self.score.display(self.screen)  # Display the score

    def display_game_over_message(self) -> None:
        """Display the game over message on the screen."""
        font: pygame.font.Font = pygame.font.SysFont('Arial', 48)
        text_surface: pygame.Surface = font.render("Game Over", True, (255, 0, 0))
        text_rect: pygame.Rect = text_surface.get_rect(center=(self.screen.get_width() // 2, self.screen.get_height() // 2))
        self.screen.blit(text_surface, text_rect)
        pygame.display.flip()
        pygame.time.delay(2000)  # Delay to show the message before quitting
\`\`\`

## Code Review: game.py
1. Yes, the code is implemented as per the requirements. The `Game` class manages the game state, handles events, updates the game state, and renders the graphics as expected.
2. Yes, the code logic is completely correct. The game loop handles events, updates the game state, and renders the components appropriately. Collision detection and game over handling are also implemented correctly.
3. Yes, the existing code follows the "Data structures and interfaces" specified in the context. The `Game` class interacts correctly with the `Snake`, `Score`, `Level`, and `Sound` classes.
4. Yes, all functions are implemented. Each method in the `Game` class serves a specific purpose and is fully defined.
5. Yes, all necessary pre-dependencies have been imported. The required classes from other files (`Snake`, `Score`, `Level`, `Sound`) are imported correctly.
6. Yes, methods from other files are being reused correctly. The `Game` class appropriately utilizes the methods from the `Snake`, `Score`, `Level`, and `Sound` classes.

## Actions
pass

## Code Review Result
LGTM
## Code: snake.py
\`\`\`python
## snake.py
import pygame
from typing import List

class Snake:
    """Class to manage the snake's position, movement, and collision detection."""

    def __init__(self) -> None:
        """Initialize the Snake class with default values."""
        self.position: List[int] = [100, 50]  # Starting position of the snake
        self.direction: str = 'RIGHT'  # Default direction of the snake
        self.body: List[List[int]] = [[100, 50], [90, 50], [80, 50]]  # Initial body segments

    def move(self) -> None:
        """Move the snake in the current direction."""
        if self.direction == 'UP':
            self.position[1] -= 10
        elif self.direction == 'DOWN':
            self.position[1] += 10
        elif self.direction == 'LEFT':
            self.position[0] -= 10
        elif self.direction == 'RIGHT':
            self.position[0] += 10

        # Insert new position at the front of the body
        self.body.insert(0, list(self.position))
        # Remove the last segment of the body
        self.body.pop()

    def change_direction(self, new_direction: str) -> None:
        """Change the direction of the snake if it is not opposite to current direction."""
        opposite_directions: dict = {'UP': 'DOWN', 'DOWN': 'UP', 'LEFT': 'RIGHT', 'RIGHT': 'LEFT'}
        if new_direction in opposite_directions and opposite_directions[new_direction] != self.direction:
            self.direction = new_direction

    def check_collision(self) -> bool:
        """Check for collisions with the walls or itself."""
        # Check for collision with walls
        if (self.position[0] < 0 or self.position[0] >= 800 or
                self.position[1] < 0 or self.position[1] >= 600):
            return True
        
        # Check for collision with itself
        if self.position in self.body[1:]:
            return True
        
        return False

    def draw(self, screen: pygame.Surface) -> None:
        """Draw the snake on the screen."""
        for segment in self.body:
            pygame.draw.rect(screen, (0, 255, 0), pygame.Rect(segment[0], segment[1], 10, 10))
\`\`\`

## Code Review: snake.py
1. Yes.
2. Yes.
3. Yes.
4. Yes.
5. Yes.
6. Yes.

## Actions
pass

## Code Review Result
LGTM
## Code: score.py
\`\`\`python
## score.py
import pygame

class Score:
    """Class to manage the current score and display it."""

    def __init__(self) -> None:
        """Initialize the Score class with a default score."""
        self.current_score: int = 0  # Default score is set to 0

    def increment(self) -> None:
        """Increment the current score by 1."""
        self.current_score += 1

    def reset(self) -> None:
        """Reset the score to the default value."""
        self.current_score = 0

    def display(self, screen: pygame.Surface) -> None:
        """Display the current score on the screen."""
        font: pygame.font.Font = pygame.font.SysFont('Arial', 24)
        score_surface: pygame.Surface = font.render(f"Score: {self.current_score}", True, (255, 255, 255))
        screen.blit(score_surface, (10, 10))  # Display score at the top-left corner of the screen
\`\`\`
## Code Review: score.py
1. Yes.
2. Yes.
3. Yes.
4. Yes.
5. Yes.
6. Yes.

## Actions
pass

## Code Review Result
LGTM
## Code: level.py
\`\`\`python
## level.py
from typing import Optional

class Level:
    """Class to manage the game speed and level progression."""

    def __init__(self) -> None:
        """Initialize the Level class with default values."""
        self.speed: float = 5.0  # Default speed of the game
        self.level_number: int = 1  # Default starting level

    def increase(self) -> None:
        """Increase the level and speed as the game progresses."""
        self.level_number += 1
        self.speed += 1.0  # Increase speed by 1 for each level

    def get_speed(self) -> float:
        """Return the current speed of the game."""
        return self.speed

    def reset(self) -> None:
        """Reset the level to the default values."""
        self.speed = 5.0  # Reset speed to default
        self.level_number = 1  # Reset level to default
\`\`\`
## Code Review: level.py
1. Yes, the code is implemented as per the requirements. It effectively manages the game speed and level progression as intended.
2. Yes, the code logic is completely correct. The methods for increasing the level and resetting the level are functioning as expected.
3. Yes, the existing code follows the "Data structures and interfaces" as specified in the context. The class design aligns with the defined structure.
4. Yes, all functions are implemented. Each method serves its purpose within the class.
5. Yes, all necessary pre-dependencies have been imported. The `Optional` import is not used and can be removed2025-01-20 02:41:39.950 | INFO     | metagpt.utils.cost_manager:update_cost:57 - Total running cost: $0.006 | Max budget: $3.000 | Current cost: $0.001, prompt_tokens: 3134, completion_tokens: 193
2025-01-20 02:41:39.959 | INFO     | metagpt.utils.file_repository:save:57 - save to: /app/metagpt/workspace/snake_game/snake_game/level.py
2025-01-20 02:41:39.962 | INFO     | metagpt.utils.file_repository:save:62 - update dependency: /app/metagpt/workspace/snake_game/snake_game/level.py:['docs/task/20250120024047.json', 'docs/system_design/20250120024047.json']
2025-01-20 02:41:39.971 | INFO     | metagpt.actions.write_code:run:141 - Writing sounds.py..
2025-01-20 02:41:41.764 | INFO     | metagpt.utils.cost_manager:update_cost:57 - Total running cost: $0.007 | Max budget: $3.000 | Current cost: $0.001, prompt_tokens: 2787, completion_tokens: 203
2025-01-20 02:41:41.774 | INFO     | metagpt.actions.write_code_review:run:185 - Code review and rewrite sounds.py: 1/2 | len(iterative_code)=853, len(self.i_context.code_doc.content)=853
2025-01-20 02:41:43.593 | INFO     | metagpt.utils.cost_manager:update_cost:57 - Total running cost: $0.007 | Max budget: $3.000 | Current cost: $0.001, prompt_tokens: 3333, completion_tokens: 182
2025-01-20 02:41:43.602 | INFO     | metagpt.utils.file_repository:save:57 - save to: /app/metagpt/workspace/snake_game/snake_game/sounds.py
2025-01-20 02:41:43.605 | INFO     | metagpt.utils.file_repository:save:62 - update dependency: /app/metagpt/workspace/snake_game/snake_game/sounds.py:['docs/task/20250120024047.json', 'docs/system_design/20250120024047.json']
2025-01-20 02:41:43.664 | INFO     | metagpt.roles.engineer:_act_summarize:190 - --max-auto-summarize-code=0
2025-01-20 02:41:43.665 | WARNING  | metagpt.environment.base_env:publish_message:192 - Message no recipients: {"id":"ff5d01b5beef41288dbc62fdadf876d5","content":"","role":"Engineer","cause_by":"metagpt.actions.summarize_code.SummarizeCode","sent_from":"metagpt.roles.engineer.Engineer","send_to":["Edward"]}
2025-01-20 02:41:43.720 | INFO     | metagpt.utils.git_repository:archive:168 - Archive: ['.dependencies.json', 'docs/prd/20250120024047.json', 'docs/requirement.txt', 'docs/system_design/20250120024047.json', 'docs/task/20250120024047.json', 'requirements.txt', 'resources/competitive_analysis/20250120024047.mmd', 'resources/competitive_analysis/20250120024047.pdf', 'resources/competitive_analysis/20250120024047.png', 'resources/competitive_analysis/20250120024047.svg', 'resources/data_api_design/20250120024047.mmd', 'resources/data_api_design/20250120024047.pdf', 'resources/data_api_design/20250120024047.png', 'resources/data_api_design/20250120024047.svg', 'resources/prd/20250120024047.md', 'resources/seq_flow/20250120024047.mmd', 'resources/seq_flow/20250120024047.pdf', 'resources/seq_flow/20250120024047.png', 'resources/seq_flow/20250120024047.svg', 'resources/system_design/20250120024047.md', 'snake_game/game.py', 'snake_game/level.py', 'snake_game/main.py', 'snake_game/score.py', 'snake_game/snake.py', 'snake_game/sounds.py']
 for clarity.
6. Yes, methods from other files are being reused correctly. The `Level` class is designed to be used in conjunction with other classes like `Game`.

## Actions
1. Remove the unused import of `Optional` from the code to improve clarity.

## Code Review Result
LGTM
## Code: sounds.py
\`\`\`python
## sounds.py
import pygame

class Sound:
    """Class to manage sound effects during the game."""

    def __init__(self) -> None:
        """Initialize the Sound class and load sound effects."""
        pygame.mixer.init()  # Initialize the mixer for sound playback
        self.effects: dict[str, pygame.mixer.Sound] = {
            'move': pygame.mixer.Sound('sounds/move.wav'),  # Load move sound effect
            'game_over': pygame.mixer.Sound('sounds/game_over.wav')  # Load game over sound effect
        }

    def play_effect(self, effect_name: str) -> None:
        """Play the specified sound effect if it exists."""
        if effect_name in self.effects:
            self.effects[effect_name].play()  # Play the sound effect
        else:
            print(f"Sound effect '{effect_name}' not found.")  # Log if sound effect is not found
\`\`\`

## Code Review: sounds.py
1. Yes, the code is implemented as per the requirements. It correctly initializes the sound effects and plays them as needed.
2. Yes, the logic is completely correct. The sound effects are loaded and played appropriately without any errors.
3. Yes, the existing code follows the "Data structures and interfaces" as defined in the context. The `Sound` class is structured to manage sound effects effectively.
4. Yes, all functions are implemented. The class has methods for playing sound effects and initializing them.
5. Yes, all necessary pre-dependencies have been imported. The `pygame` module is imported, which is required for sound management.
6. Yes, methods from other files are being reused correctly. The `Sound` class is instantiated and used in the `Game` class to play sound effects.

## Actions
pass

## Code Review Result
LGTM

@IshpreetSingh8264
Copy link
Author

IshpreetSingh8264 commented Jan 20, 2025

C:\Users\acer>docker run --rm -v D:\metagpt\config\config2.yaml:/app/metagpt/config/config2.yaml -v D:\metagpt\workspace:/app/metagpt/workspace metagpt/metagpt:latest metagpt "Write a cli snake game"
2025-01-20 07:05:29.623 | INFO     | metagpt.const:get_metagpt_package_root:21 - Package root set to /app/metagpt
2025-01-20 07:05:32.154 | INFO     | metagpt.team:invest:93 - Investment: $3.0.
2025-01-20 07:05:32.155 | INFO     | metagpt.roles.role:_act:403 - Alice(Product Manager): to do PrepareDocuments(PrepareDocuments)
2025-01-20 07:05:32.629 | INFO     | metagpt.utils.file_repository:save:57 - save to: /app/metagpt/workspace/20250120070532/docs/requirement.txt
2025-01-20 07:05:32.629 | INFO     | metagpt.roles.role:_act:403 - Alice(Product Manager): to do WritePRD(WritePRD)
2025-01-20 07:05:32.635 | INFO     | metagpt.actions.write_prd:run:86 - New requirement detected: Write a cli snake game
2025-01-20 07:06:23.197 | INFO     | metagpt.utils.cost_manager:update_cost:57 - Total running cost: $0.001 | Max budget: $3.000 | Current cost: $0.001, prompt_tokens: 943, completion_tokens: 663
2025-01-20 07:06:23.204 | WARNING  | metagpt.utils.git_repository:rename_root:217 - Failed to move /app/metagpt/workspace/20250120070532 to /app/metagpt/workspace/cli_snake_game
2025-01-20 07:06:23.210 | INFO     | metagpt.utils.file_repository:save:57 - save to: /app/metagpt/workspace/20250120070532/docs/prd/20250120070623.json
2025-01-20 07:06:23.220 | INFO     | metagpt.utils.mermaid:mermaid_to_file:44 - Generating /app/metagpt/workspace/20250120070532/resources/competitive_analysis/20250120070623.pdf..
2025-01-20 07:06:24.480 | INFO     | metagpt.utils.mermaid:mermaid_to_file:68 - Generating single mermaid chart

2025-01-20 07:06:24.480 | INFO     | metagpt.utils.mermaid:mermaid_to_file:44 - Generating /app/metagpt/workspace/20250120070532/resources/competitive_analysis/20250120070623.svg..
2025-01-20 07:06:25.197 | INFO     | metagpt.utils.mermaid:mermaid_to_file:68 - Generating single mermaid chart

2025-01-20 07:06:25.197 | INFO     | metagpt.utils.mermaid:mermaid_to_file:44 - Generating /app/metagpt/workspace/20250120070532/resources/competitive_analysis/20250120070623.png..
2025-01-20 07:06:25.939 | INFO     | metagpt.utils.mermaid:mermaid_to_file:68 - Generating single mermaid chart

2025-01-20 07:06:25.946 | INFO     | metagpt.utils.file_repository:save:57 - save to: /app/metagpt/workspace/20250120070532/resources/prd/20250120070623.md
2025-01-20 07:06:25.948 | INFO     | metagpt.roles.role:_act:403 - Bob(Architect): to do WriteDesign(WriteDesign)
2025-01-20 07:06:26.161 | INFO     | metagpt.actions.design_api:run:67 - Nothing has changed.
2025-01-20 07:06:26.163 | INFO     | metagpt.roles.role:_act:403 - Eve(Project Manager): to do WriteTasks(WriteTasks)
2025-01-20 07:06:26.352 | INFO     | metagpt.actions.project_management:run:54 - Nothing has changed.
2025-01-20 07:06:27.055 | ERROR    | metagpt.roles.engineer:_new_coding_context:280 - Detected source code "docs/prd/20250120070623.json" from an unknown origin.
2025-01-20 07:06:27.055 | WARNING  | metagpt.utils.common:wrapper:673 - There is a exception in role's execution, in order to resume, we delete the newest role communication message in the role's memory.
2025-01-20 07:06:27.056 | ERROR    | metagpt.utils.common:wrapper:655 - Exception occurs, start to serialize the project, exp:
Traceback (most recent call last):
  File "/app/metagpt/metagpt/utils/common.py", line 664, in wrapper
    return await func(self, *args, **kwargs)
  File "/app/metagpt/metagpt/roles/role.py", line 551, in run
    rsp = await self.react()
ValueError: Detected source code "docs/prd/20250120070623.json" from an unknown origin.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/metagpt/metagpt/utils/common.py", line 650, in wrapper
    result = await func(self, *args, **kwargs)
  File "/app/metagpt/metagpt/team.py", line 134, in run
    await self.env.run()
Exception: Traceback (most recent call last):
  File "/app/metagpt/metagpt/utils/common.py", line 664, in wrapper
    return await func(self, *args, **kwargs)
  File "/app/metagpt/metagpt/roles/role.py", line 551, in run
    rsp = await self.react()
  File "/app/metagpt/metagpt/roles/role.py", line 520, in react
    rsp = await self._react()
  File "/app/metagpt/metagpt/roles/role.py", line 470, in _react
    todo = await self._think()
  File "/app/metagpt/metagpt/roles/engineer.py", line 256, in _think
    await self._new_code_actions()
  File "/app/metagpt/metagpt/roles/engineer.py", line 347, in _new_code_actions
    coding_doc = await self._new_coding_doc(filename=filename, dependency=dependency)
  File "/app/metagpt/metagpt/roles/engineer.py", line 292, in _new_coding_doc
    context = await self._new_coding_context(filename, dependency)
  File "/app/metagpt/metagpt/roles/engineer.py", line 281, in _new_coding_context
    raise ValueError(f'Detected source code "{filename}" from an unknown origin.')
ValueError: Detected source code "docs/prd/20250120070623.json" from an unknown origin.


[CONTENT]
{
    "Language": "en_us",
    "Programming Language": "Python",
    "Original Requirements": "Write a cli snake game",
    "Project Name": "cli_snake_game",
    "Product Goals": [
        "Create an engaging and fun gameplay experience",
        "Ensure smooth controls and responsiveness",
        "Implement a scoring system to track player progress"
    ],
    "User Stories": [
        "As a player, I want to start the game easily from the command line",
        "As a player, I want to control the snake using keyboard arrows",
        "As a player, I want to see my score displayed during the game",
        "As a player, I want to have the option to restart the game after losing",
        "As a player, I want to play the game in a simple and clear interface"
    ],
    "Competitive Analysis": [
        "Snake Game A: Basic controls, lacks scoring system",
        "Snake Game B: Good graphics but not CLI-based",
        "Snake Game C: Responsive controls but limited features",
        "Snake Game D: Classic snake game with no restart option",
        "Snake Game E: Offers multiplayer but complex setup"
    ],
    "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    \"Game A\": [0.2, 0.4]\n    \"Game B\": [0.6, 0.5]\n    \"Game C\": [0.4, 0.7]\n    \"Game D\": [0.3, 0.3]\n    \"Game E\": [0.5, 0.6]\n    \"Our Target Product\": [0.5, 0.5]",
    "Requirement Analysis": "The requirements focus on creating a simple yet engaging CLI-based snake game. Key features include smooth controls, a scoring system, and a user-friendly interface. The game should be easy to start and restart, ensuring a seamless user experience.",
    "Requirement Pool": [
        [
            "P0",
            "Implement the snake movement logic"
        ],
        [
            "P0",
            "Create a scoring system"
        ],
        [
            "P1",
            "Design the game over and restart functionality"
        ],
        [
            "P1",
            "Ensure responsive keyboard controls"
        ],
        [
            "P2",
            "Add sound effects for game actions"
        ]
    ],
    "UI Design draft": "The UI will be text-based, displaying the game grid in the terminal. The snake will be represented by characters, and the score will be shown at the top. The layout will be simple, focusing on functionality over aesthetics.",
    "Anything UNCLEAR": "Are there any specific features or enhancements you would like to see in the game beyond the basic requirements?"
}
[/CONTENT]

C:\Users\acer>

i used openapi's model this time and again got the same results

This is my Configuration (API KEY HIDDEN):-

llm:
  api_type: 'openai'  # Change this to 'ollama'
  # api_type: 'ollama'  # Change this to 'ollama'
  model: 'gpt-4o-mini'     # Use the name of the model you pulled
  base_url: 'https://api.openai.com/v1'  # Default URL for the Ollama API
  # base_url: 'http://192.168.1.102:11434/api'  # Default URL for the Ollama API
  repair_llm_output: true


mermaid:
  engine: "nodejs"
  path: "mmdc"
  puppeteer_config: "/app/metagpt/config/puppeteer-config.json"
  pyppeteer_path: "/usr/bin/chromium"

i again got the issue:- ValueError: Detected source code "docs/prd/20250120070850.json" from an unknown origin.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants